Föreläsning 1 & 2 INTRODUKTION
Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga klasser Läs själv i läroboken: 1 3.2
Vad ska du lära dig? I EDA011 & EDA017: Lösa problem med hjälp av dator Grundläggande programmering Grundläggande objektorientering och programspråket Java I EDA017 även: Matlab som verktyg för numeriska problem (v. 6 8)
Java finns överallt
En solid bas: Java och andra språk C / C++ (inbyggda system, hårdvarunära programmering) Python (script, textbehandling, ) Java Matlab (numeriska beräkningar) Haskell / Scala (funktionell programmering) JavaScript (webapplikationer)
Hur lär man sig programmera? Ingen åskådarsport! Lyssna och diskutera Läs Öva övningar, laborationer, inlämningsuppgifter Öva bokens övningar Fråga! Olika förkunskaper Laborationer, övningar och projektet hjälper dig att klara tentamen i slutet av maj
Kursmoment Föreläsningar Övningar Laborationer (10 st) och ett projekt Obligatoriska (ger 4,5 hp) Använd egen dator om du vill Anmäl dig, gå till rätt grupp och var förberedd! Resurstider Gör övningar, få svar på frågor, få hjälp med inlämningsuppgifter Delmålskontroll (3/3) Tentamen (3 hp) godkända laborationer/inlämningsuppgifter krävs!
Laborationer: regler Laborationerna är individuella och obligatoriska! Gör förberedelserna noga ofta helt nödvändigt för att hinna med! Är du sjuk? Anmäl det till mig, få hjälp på resurstillfällena och redovisa på resurstid eller uppsamlingstid (nästa labbtillfälle är OK om handledaren har tid) Hinner du inte med hela? Se till att handledaren noterar din närvaro, och fortsätt på resurstid och uppsamlingstid. Laborationerna (och inlämningsuppgifterna) är helt centrala när du lär dig programmera!
Kursveckorna under VT1 måndag tisdag onsdag torsdag fredag 8 10 Föreläsning Lab 10 12 Resurstid 13 15 Föreläsning Resurstid Lab Lab 15 17 Resurstid Lab BME F N små variationer vissa veckor
Matlab vecka 6 8 (endast F) måndag tisdag onsdag torsdag fredag 8 10 Föreläsning 10 12 13 15 Lab 15 17 Lab
Nyheter sedan förra året Fler labbgrupper samtidigt (jämna ut belastningen) Två nya laborationer (3 och 8) Projekt och parlaboration ersätter inlämningsuppgifter Nya Matlab-laborationer (F) Använd era kursombud!
Kursens websida cs.lth.se/eda011-017 Visar vad som händer i kursen, vecka för vecka Läsanvisningar Föreläsningsbilder (och vissa exempel) Laborationsanmälan Tips för Eclipse på din egen dator Frågeforum
Läsvecka 1 Anmäl dig till en labbgrupp Senast på fredag 20/1! Gruppindelningen (F1.01-12, N1.01-08) gäller hela vårterminen Labbanmälan används för registrering Skaffa kursbok+kompendium (KFS) Fyll i förkunskapsenkäten Gör övning 1 Installera Eclipse (om du vill) Börja titta på laboration 1
EDA011/EDA017 Programmeringsteknik Färdighet och förmåga För godkänd kurs skall studenten kunna konstruera och implementera algoritmer för att lösa enkla uppgifter kunna implementera Javaklasser utgående från givna specifikationer kunna strukturera program, både med hjälp av underprogram och med hjälp av klasser och metoder kunna använda enkla verktyg för att skriva in, testa och felsöka program
Programmering
Vad är ett datorprogram? En följd av instruktioner som beskriver hur datorn ska lösa ett problem. Instruktionerna skrivs i ett programspråk, t ex Java.
Algoritm En algoritm är en följd av klara och tydliga instruktioner som beskriver hur man ska göra för att lösa ett problem. Ex: matrecept
Exempel på en algoritm Uppgift: Beräkna summan av talen 12.5 och 0.7 och skriv ut summan på datorns skärm. Algoritm: 1. Tal nr 1 är 12.5. 2. Tal nr 2 är 0.7. 3. Summan = tal nr 1 + tal nr 2. 4. Skriv ut summan.
Exempel på programkod Uppgift: Beräkna summan av talen 12.5 och 0.7 och skriv ut summan på datorns skärm. Programkod: double nbr1 = 12.5; double nbr2 = 0.7; double sum = nbr1 + nbr2; System.out.println("Summan av talen är " + sum);
Exempel på Javaprogram public class Calculator { Satser som utförs då programmet exekveras } public static void main(string[] args) { } double nbr1 = 12.5; double nbr2 = 0.7; double sum = nbr1 + nbr2; Programmets namn System.out.println("Summan av talen är " + sum); Detta är ett litet men fullständigt program. Det beräknar summan av två tal och skriver ut den på skärmen.
Editera kompilera exekvera Editera Skriv in programkoden och spara i en fil vars namn har tillägget.java. Kompilera Programkoden kontrolleras. Om den är korrekt översätts den till bytekod. Bytekoden lagras i en fil vars namn har tillägget.class. Kompileringen görs automatiskt av Eclipse när.java-filen sparas. Eventuella felmeddelanden visas direkt i Eclipse. Exekvera Programmet körs, dvs. bytekodsinstruktionerna i programmet utförs.
Datorns delar Processor eller CPU (central processing unit) den enhet i datorn som utför instruktioner. Primärminne används för att lagra program och dess data när programmen körs. Sekundärminne, t ex hårddisk / SSD där program och data lagras när de inte används. In- och utenheter, t ex skärm, tangentbord, mus för att vi ska kunna kommunicera med maskinen. Kommunikationskanaler för att kommunicera med andra datorer eller apparater.
Variabler Variabler används för att lagra värden som programmet måste komma ihåg. Variabler har ett namn och en datatyp. Variablerna måste deklareras. Typ namn Exempel: double nbr1; nbr1?
Tilldelningssats I en tilldelningssats ger man en variabel ett nytt värde. Ex: double nbr1, nbr2, sum; nbr1 = 12.5; nbr2 = 0.7; sum = nbr1 + nbr2; nbr1 nbr2 sum 12.5 0.7 13.2
Variabler i datorns minne Variablernas värden lagras i datorns primärminne. Vid deklarationen av en variabel reserveras plats för variabeln i minnet. double nbr1; double nbr2; double sum; 5200 12.5 nbr1 Vid tilldelning läggs variabelns värde i motsvarande minnescell/er. 5208 5216 0.7 13.2 nbr2 sum nbr1 = 12.5; nbr2 = 0.7; sum = nbr1 + nbr2; Minnet är uppdelat i minnesceller. Variabelns namn hänvisar alltså till en minnescell.
Tilldelningssats - övning Variabler av typ int används för heltalsvärden. Vilka värden har variablerna när följande satser exekverats? int u, x, y, z; x = 10; y = 2 * x + 1; z = (y + x) + (y - x); x = x + 1; u x y z
Utskrift (på datorns skärm) Utskrift av en teckensträng (text; omges av citationstecken): System.out.println("Skriv två tal"); Utskrift av en variabels värde (OBS! inga citationstecken): System.out.println(sum); Flera saker kan skrivas ut i samma println-sats (med + mellan). System.out.println("Summan av talen är " + sum);
Inläsning från tangentbordet Exempel: Två tal läses in från tangentbordet. Det första värdet lagras i variabeln nbr1. Det andra värdet lagras i variabeln nbr2. Skapa först ett Scanner-objekt som kan användas för att läsa från tangentbordet: Scanner scan = new Scanner(System.in); Med scan.nextdouble() läser man nästa tal (av typen double) som skrivs på tangentbordet: double nbr1 = scan.nextdouble(); double nbr2 = scan.nextdouble();
Calculator, bättre program import java.util.scanner; public class Calculator { public static void main(string[] args) { System.out.println("Skriv två tal"); Scanner scan = new Scanner(System.in); double nbr1 = scan.nextdouble(); double nbr2 = scan.nextdouble(); double sum = nbr1 + nbr2; System.out.println("Summan av talen är " + sum); } }
Import-sats Genom att skriva en import-sats först i filen talar vi om att vi kommer att använda en klass från ett klasspaket (en samling redan färdiga klasser). import java.util.scanner; I det här fallet importeras klassen Scanner som används för inläsning från tangentbordet. (Vissa saker är alltid tillgängliga, även utan import, t.ex. System.out)
Exempel med alternativ Exempel: Scanner scan = new Scanner(System.in); double nbr1 = scan.nextdouble(); int nbr2 = scan.nextint(); if (nbr2!= 0) { System.out.println("Kvoten mellan talen är " + (nbr1 / nbr2)); } else { System.out.println("Du försökte dividera med 0."); }
Logiska uttryck I if-satsen väljs alternativ beroende på ett logiskt uttryck (nbr2!= 0 i exemplet). Logiska uttryck får, då programmet körs, ett av två möjliga värden: true eller false. Logiska uttryck används bland annat som villkor i if- och whilesatser. Exempel: if (x < 5) // väljs om x är mindre än 5 if (x == 100) // väljs om x är 100 if (x!= 100) // väljs om x inte är 100
Alternativ if (villkor) { satser; } else { satser; } // utförs om villkoret är uppfyllt // utförs annars if (villkor) { } satser; // utförs om villkoret är uppfyllt
Repetition: for- och while-satser ett bestämt antal ggr: for (int i = start; i <= slut; i++) { satser; } Satserna utförs för i-värdena start, start+1, start+2,..., slut. i++ betyder samma sak som i = i + 1 så länge ett villkor är uppfyllt: while (villkor) { satser; }
Exempel med repetition ett bestämt antal gånger Scanner scan = new Scanner(System.in); int sum = 0; for (int i = 1; i <= 5; i++) { sum = sum + scan.nextint(); } System.out.println(sum);
Exempel med repetition ett okänt antal gånger Exempel: Scanner scan = new Scanner(System.in); int sum = 0; while (scan.hasnextint()) { sum = sum + scan.nextint(); } System.out.println(sum);
Repetition med for Första ledet körs precis i början. Andra ledet testas före varje varv, även det första. Villkoret avgör om for-satsen ska fortsätta. Tredje ledet körs efter varje varv. Alltid enligt följande mönster: for (int i = start; i <= slut; i++) { satser; } // utförs för i-värdena start, start+1, // start+2,..., slut.
for och while for (int i = 1; i <= 5; i++) { } System.out.println(i); int i = 1; while (i <= 5) { } System.out.println(i); i++; Ekvivalenta för maskinen men berättar olika saker för programmeraren! (När antalet upprepningar är känt använder man ofta en for-sats.)
Övning på repetition Skriv satser för att beräkna och skriva ut summan av 2 + 4 + 6 + 8 +... + 50.
Variabler, uttryck och typer Typ Används till Exempel double Reella tal double r = 3.72; double c = r * 2 * Math.PI; int Heltal int a = 5; int b = a + 3; boolean Villkor, logiska värden (true eller false) boolean isadult = (a >= 18); if (isadult) { }
Konstanter för största och minsta tal Dessa konstanter kan användas när man behöver ett mycket litet eller stort tal. int i1 = Integer.MIN_VALUE; // -2147483648 int i2 = Integer.MAX_VALUE; // 2147483647 double d1 = Double.MIN_VALUE; // 4.9E-324 (OBS! >0) double d2 = Double.MAX_VALUE; // 1.8E308 Med E menas gånger 10 upphöjt till
Övning Beräkna det största talet av ett antal heltal som läses in från tangentbordet. Fyll i den kod som saknas. Scanner scan = new Scanner(System.in); Fyll i while (scan.hasnextint()) { int nbr = scan.nextint(); } Fyll i System.out.println("Det största talet är " + max);
Algoritm beräkning av min/max (pseudokod, dvs inte riktig Java-kod) Beräkning av minsta värde: min = "stort värde"; för alla värden { value = "nästa värde"; if (value < min) { min = value; } } Att beräkna maximum går till på liknande sätt: max = "litet värde"; för alla värden { } value = "nästa värde"; if (value > max) { } max = value;
Vad händer här? Scanner scan = new Scanner(System.in); System.out.println("Skriv 7 tal:"); int result = Integer.MAX_VALUE; for (int i = 0; i < 7; i++) { int nbr = scan.nextint(); if (nbr < result) { result = nbr; } } System.out.println(result); Indata: 23 19 18 19 21 17 20 Vilket värde skrivs ut?
Värden i datorn har begränsad precision Allt i datorn (int, double, objekt och annat) representeras i minnet som binära tal Variabler av typ int representeras av 32 binära siffror (bit=binary digit; en av bitarna representerar talets tecken) Integer.MAX_VALUE = Variabler av typ double representeras av 64 binära siffror (uppdelade på exponent, signifikand och tecken) (Det finns sätt i Java att representera större tal vid behov.)
Läsvecka 1 Gör övning 1 Börja titta på laboration 1 Om du inte redan gjort det: Anmäl dig till en labbgrupp Skaffa kursbok+kompendium (KFS) Fyll i förkunskapsenkäten Installera Eclipse (om du vill)