Att komma igång Föreläsning 1
Att komma igång Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera Variabler printf scanf
Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator eller annan hårdvara (mobil, dammsugare, brödrost, miniräknare) Ett strukturerat generellt sätt att lösa problem
Hur lär man sig att programmera? Övning övning övning programmering är ett hantverk! Det är helt avgörande att ni jobbar med uppgifterna som hör till varje föreläsning direkt. Endast föreläsningen ger ingenting! Gör allt ni kan för att hålla er i fas. Ni får/bör hjälpa varandra men aldrig kopiera kod. Du måste förstå vad du programmerar vad varje rad gör! För att lära dig programmera (och för att hitta fel) måste du kunna läsa koden såsom en dator (kompilator) läser koden.
Vad har du lärt dig när kursen är klar? C Programmering Problemlösning
Syntax och semantik Definitionen av ett programspråk kan grovt delas upp i två delar: Syntaxen: definierar formen hos språket och bestämmer hur man får skriva. Ett programspråks syntax beskriver hur formellt korrekta program får formuleras. Semantiken: definierar vad som händer när man skrivit en viss sak. Ett programspråks semantik beskriver vad som krävs för att ett formellt korrekt program ska vara meningsfullt och vad som händer när det körs. Syntaxen definieras formellt och exakt medans semantiken oftast beskrivs informellt i våra naturliga språk. I programmering krävs att syntaxen följs exakt. Minsta avvikelse gör programmet okörbart.
Algoritmer En algoritm är en metod för att lösa ett problem genom att utföra ett antal elementära operationer i en av algoritmen given ordning. Metoden skall efter ett ändligt antal operationer nå lösningen. Det är en instruktion som man utan att tänka ska kunna följa steg för steg och då få fram resultatet. Man behöver alltså inte förstå varför man gör varje steg. Som exempel kan vi ta algoritmen för att multiplicera två tal. När vi ska få datorer att lösa problem är algoritmer ett måste eftersom datorn inte kan förstå vad den gör utan bara följer instruktioner.
Boken! Ni behöver läsa boken både för att lära er sånt vi inte hinner på föreläsningen och för att lära er att lära från en bok. Har ni använt boken aktivt under kursen kommer den senare vara en följeslagare genom er programmeringskarriär som ni kan gå tillbaka till igen och igen både för att repetera och för att lära er nytt. Det är dessutom boken ni får ha med er på den praktiska tentamen. Hittar ni i boken är den då ett mycket bra stöd.
Kurs - PM Genomgång
Vad är ett program? En processor kan endast utföra extremt enkla operationer såsom: flytta ett tal i minnet till en annan plats, lägga ihop ett tal med ett annat tal, dela ett tal med två osv. Ett program som processorn kör måste därför bestå av sådana enkla instruktioner. Dessutom finns hoppinstruktioner som gör att den kan köra om sekvenser av koden (oftast efter att ha bytt plats på talen i minnet). Förutom vid hoppinstruktioner utför processorn instruktionerna i ordning en efter en. - ett sådant enkelt program som processorn kan förstå sägs vara i maskinkod Oftast vill man själv inte programmera i maskinkod då det blir extremt arbetsamt att få datorn att göra något användbart. Istället programmerar vi i något högnivåspråk, t.ex C. Denna kod kallas källkod (C-kod). Denna kompileras sedan av en kompilator (ett program) till maskinkod ett program som processorn kan förstå. Filen som vi då får kallas för exekverbar eller körbar.
Kompilerande-Interpreterande Det ovan beskrivna sättet att arbeta beskriver hur man arbetar med kompilerande språk. Ex. C, C++, Fortran I interpreterande språk kompileras inte koden i förväg. Istället låter vi ett program översätta åt processorn varje gång vi kör koden. Dessa program kallas interpreterande. Ex. Basic, Lisp Samma språk kan ha båda möjligheterna. (Java är ett mellanting)
Programmeringsmiljö För att kunna programmera behöver vi editor för att skriva vår kod kompilator kompilerar vår kod till ett körbart program Kompilatorn består ofta av flera program (preprocessor, kompilator, länkare) som skapar vårt körbara program i flera steg. Alla program man använder för att programmera (oftast fler än ovan, tex debugger) utgör ens programmeringsmiljö. Det är helt avgörande för er framgång på kursen att ni redan idag får igång en sådan på er dator. Förhoppningsvis har ni gjort detta på introkursen men annars se till att ni inte går härifrån förrän ni lyckats. Gå in på introkursen HF0010 (länk finns på kth-social) och följ instruktionen i föreläsning 3.
Hello World! Är ett litet program som gör minsta möjliga för att testa att man har en fungerande programmeringsmiljö och att man förstår hur man använder den: #include <stdio.h> int main(void) { printf("hello World! \n"); return 0; } Ett litet första steg mot fantastiska program! Börja alltid med detta i en ny miljö och backa alltid hit om du har problem.
Installera CodeLite (förhoppningsvis har ni redan gjort detta) Mac användare kör och/eller installera xcode först. Gå in på https://codelite.org/ och ladda ner codelite (gratis) för ditt operativsystem. För windows får man installationsfilen zippad med 7-Zip som finns att ladda ner gratis om du inte redan har det (http://www.7-zip.org/). När du installerat programmet kör setup wizard och välj install MinGW (kompilatorn). Välj sedan scan for compiler.
Lägg till path-variabeln i windows (behövs inte på mac eller linux och ibland inte på windows10?) Windows: Högerklicka på computer (den här datorn?) och välj properties. Välj advanced system and settings. Välj Environment variables (miljövariabler). Välj path-variablen och välj edit. Var noga så att du inte tar bort något som redan finns. Vi ska bara lägga till. Lägg till ett ; sist i raden och klipp sedan in sökvägen till gcc:. I min installation: ;C:\TDM-GCC-64\bin Öppna nu kommandotolken (cmd) och prova att skriva gcc. Om den klagar över att den saknar input-fil har vi lyckats: gcc: fatal error: no input files compilation terminated.
Vårt första C-program Börja med att skapa en katalog lokalt på din dator där du ska ha dina C-program. Kom ihåg att säkerhetskopiera denna katalog ofta. I Workspace View välj Explorer-mappen och dra sedan din nya katalog till Explorer-mappen. Välj nu File->New->Empty File Välj nu File->Save As och spara filen som hello.c i katalogen du skapat lokalt. Högerklicka på din katalog i Explorer-mappen och välj refresh. Du kan nu se filen i fönstret. Skriv in Helloworldkoden i filen och spara.
Kommandotolken Vi har nu skrivit ett första C-program. Programmet är vanlig text och kan inte förstås av processorn. Vi ska nu låta kompilatorn översätta vårt program till maskinkod (kompilera). Öppna kommandotolken i widows eller ett terminalfönster på mac och linux (eller powershell windows 10). Du kan i denna se exakt var i filträdet du befinner dig. Så här ser det ut för mig: C:\Users\bfelt> Jag vill då hoppa upp två steg C:\Users\bfelt>cd.. C:\Users>cd.. C:\> Vi befinner oss i roten och jag vill nu gå ner i min katalog för C-program. Först listar jag alla kataloger med dir (eller ls i power-shell eller terminalfönster). C:\>dir Nu vill vi gå ner i katalogen Cprogram C:\>cd Cprogram C:\Cprogram> Nu kan du skriva dir och se att din fil hello.c ligger här. Vi ska nu kompilera denna C:\CProgram>gcc hello.c -o hello.exe Om vi bara skriver gcc hello.c kommer den körbarafilen att heta a.exe. Obs att körbara filer på mac har extension.out. För att köra programmet skriver vi bara namnet med eller utan exe. C:\CProgram>hello.exe Hello World! I linux och på mac måste man skriva./hello.out
Ett enkelt program /* Calculation of distance when travelling at speed 25 m/s */ #include <stdio.h> int main(void) { int distance,speed,time; speed = 25; printf("hur lang tid? "); scanf("%d", &time); Hur programmerar man? skriv en rad kompilera provkör osv Hur läser man ett program? Som en kompilator rad efter rad Vad gör varje tecken? Allt betyder något Målet är att förstå allt ibland får ni nu i början nöja er med att acceptera Kompilatorn är extremt kinkig ha tålamod kompileringsfel är enkla att fixa! distance = speed * time; } printf("med 25 m/s kommer du att fardas %d m.\n",distance); printf("lycka till pa farden\n"); return 0; Observera indentering! -tabbningen
Variabler Måste deklareras innan de används: int i; float x,z; //int blir variabelns datatyp dvs heltal //-decimaltal Ges ett värde med tilldelning = (ej lika med!) i=4; x=3.4; Kan sedan användas i uttryck: z= i*x+2; Ska normalt ges så beskrivande namn som möjligt. Får ej börja med siffra, innehålla mellanslag eller reserverade ord: numberof, weight1, weigtht2, nrofcars, nrof_cars
Resistorer #include <stdio.h> int main(void) { float r1,r2,r3; printf("resistans hos R1 (ohm) : "); scanf("%f",&r1); printf("resistans hos R2 (ohm) : "); scanf("%f",&r2); r3=r1*r2/(r1+r2); printf("r3 beraknas till %6.3f ohm\n",r3); return 0; }
Funktionen printf(string, ) Ex: printf( antal: %d, vikt %f,numberof,weight); Omvandlingsspecifikationer: %m.px (alt %-m.px för vänsterjusterat) m p minsta antalet platser utskriften blir (större vid behov) -valfri antalet decimaler -valfri X d betyder heltal e betyder decimaltal i grundpotensform f betyder decimaltal Escape sequences: \n ny rad \t tabb \
Exempel printf #include <stdio.h> int main(void) { int numberof=6; float weight=3.2f; //f förtydligar att det är float printf("antal: %d, vikt: %f\n", numberof, weight); float angle = 12.3456f; printf("vinkeln:%8.2f radianer\n",angle); } return 0; utskrift: Antal: 6, vikt: 3.200000 Vinkeln: 12.35 radianer
Funktionen scanf(string, ) Ex: scanf("%d%f", &numberof, &weight); -låter oss läsa in ett heltal till variabeln numberof och ett decimaltal till variabeln weight från användaren. Om användaren matar in: 4 3.7 <enter> får antal värdet 4 och vikten värdet 3.7 &-tecknet före variabelnamnet kallas adress-operatorn och gör att vi skickar minnesadressen istället för värdet till scanf. scanf behöver ju veta var den ska stoppa data! Viktigt!
Exempel scanf #include <stdio.h> int main(void) { int dividend,divisor; printf("kvot:"); scanf("%d / %d",÷nd,&divisor); printf("%d/%d=%d\n", dividend, divisor, dividend/divisor); } return 0; Kvot:7/3 7/3=2