Föreläsning1 • • • • • • • • • Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö (shell eller CODEBLOCKS) Hello World! Att programmera och ett enkelt program Variabler printf scanf • 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. 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 (objektkod) som processorn kan förstå. Filen som vi då får kallas för exekverbar eller körbar. • 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) • För att kunna programmera behöver vi ett eller flera program på vår dator. Dessa kallas vår programmeringsmiljö. • Till att börja med är det bäst att använda enklast tänkbara miljö för att verkligen förstå vad man gör. Vi ska använda en miljö som heter gcc . Denna innehåller kompilator (och en del andra program såsom länkare) men ingen editor. För att skriva in kod kan man använda vilken texteditor som helst (kod är vanlig text tills den kompileras). Vi rekommenderar att ni använder emacs eller Codeblocks. gcc körs i ett terminalfönster så det blir också en del av vår programmeringsmiljö. • Senare, kanske redan under denna kurs, när man börjar förstå hur saker hänger ihop kan det vara smidigare att använda Codeblocks också för att skapa och exekvera program eller kanske väljer ni en annan miljö såsom Eclipse. • För att ni ska ha exakt samma och en väl fungerande programmeringsmiljö använder vi virtual box för att köra en färdigkonfigurerad linuxmiljö. • Senare bör ni också sätta upp en egen programmeringsmiljö på era datorer. • Ä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. me@newtinydebian:~$ mkdir program me@newtinydebian:~$ cd program me@newtinydebian:~/program$ emacs hello.c & [3] 1949 me@newtinydebian:~/program$ ls hello.c me@newtinydebian:~/program$ gcc hello.c -o hello me@newtinydebian:~/program$ ls hello hello.c me@newtinydebian:~/program$ ./hello Hello World! me@newtinydebian:~/program$ cd .. -gå upp cd -gå hem cd / -gå till root http://dl.dropbox.com/u/397277/bash_shell_cheat_sheetV2.pdf Man skriver i editorn efter att ha gjort punkt 2 nedan. 1.Man kompilerar och kör med knappen F9 (efter att ha markerat editor) 2. Meny: Öppnar filer med FILE->open, eller FILE-new-empty 3. Meny: Sparar filer med FILE->SAVE as 4. Tar bort körningsfönstret med godtyckligt knapptryck Mer än så behöver man inte använda i Codeblocks med denna minirepertoar. Man får alltid ett nytt körningsfönster efter F9. /* Beräkning av sträckan om man färdas med hastigheten 25 m/s */ #include <stdio.h> int main(void) { int stracka,hastighet,tid; hastighet = 25; printf("Hur lång tid? "); scanf("%d", &tid); stracka = hastighet * tid; •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! printf("Med 25 m/s kommer du att färdas %d m.\n",stracka); printf("Lycka till på färden\n"); return 0; } •Observera indentering! -tabbningen /* Beräkning av sträckan om man färdas med hastigheten 25 m/s */ #include <stdio.h> Terminal(shell): me@newtinydebian:~$ emacs enkeltP.c & int main(void) [1] 1921 { me@newtinydebian:~$ gcc enkeltP.c -o enkeltP int stracka,hastighet,tid; me@newtinydebian:~$ ./enkeltP hastighet = 25; Hur lang tid fardas du? 10 Med 25 m/s kommer du att fardas 250 m. printf("Hur lång tid? "); Lycka till pa farden scanf("%d", &tid); me@newtinydebian:~$ stracka = hastighet * tid; printf("Med 25 m/s kommer du att färdas %d m.\n", stracka); printf("Lycka till på färden\n"); return 0; } • Måste deklareras innan de används: int i, j, k; //heltal float x,y,z; //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 Ex: antal, vikt1, vikt2, antalBollar, antal_bollar Får ej börja med siffra! Reserverade ord får ej användas! #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 beräknas till %6.3f ohm\n",r3); return 0; } Ex:printf(”antal: %d, vikt %f”,antal,vikt); Omvandlingsspecifikationer: %m.pX (alt %-m.pX) m – minsta antalet platser utskriften blir (större vid behov) -valfri p – antalet decimaler -valfri X– d – heltal e – decimaltal i grundpotensform f – decimaltal Escape sequences: \n – ny rad \t – tabb \” #include <stdio.h> int main(void) { int antal=6; float vikt=3.2f; //använd gärna f när du skriver en float printf("Antal: %d, väger: %f\n", antal, vikt); float vinkel = 12.3456f; printf("Vinkeln:%8.2f radianer\n",vinkel); return 0; } utskrift: Antal: 6, väger: 3.200000 Vinkeln: 12.35 radianer Ex: scanf("%d%f", &antal, &vikt); -låter oss läsa in ett heltal till variabeln antal och ett decimaltal till variabeln vikt 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! #include <stdio.h> int main(void) { int t,n; printf("Bråk:"); scanf("%d / %d",&t,&n); printf("%d/%d\n",t,n); return 0; } utskrift: Bråk:2/3 2/3 • Kompilera och kör ett helloworld-program (K2 E1,s33) • Kompilera och kör enkelt program och resistorer från föreläsningen. Pröva att modifiera och experimentera med koden – LEK! • Frivilligt: Skumma snabbt igenom kapitel 1. • Läs igenom kapitel 2 Speciellt 2.6 som vi inte pratat om men ni ska kunna! • Gör K2 P1, P2, P3 (sid 33-34) • Läs igenom kapitel 3, fastna inte på detaljer, har du sett dem nu hittar du tillbaka när du behöver dem • Gör K3 E1, P1, P6 (sid 49-51) • Gör gärna fler uppgifter om du hinner! E-excercises, P-programming projects