Grundläggande programmering
Problem Problem1 : Omvandla sekunder till timmar, minuter och sekunder Problem 2: Beräkna fakulteter (10! = 10*9*8.. ) Problem 3: Hitta det största talet
För att lösa problem 1 Vad är en variabel? Olika variabeltyper Heltalsoperationer
Talar om för kompilatorn att instruktionen slutar här Variabler Int x = 5; Variabelns värde Variabelns namn Variabelns typ. Int : heltal Talar om för kompilatorn att instruktionen slutar här Vi säger att variabeln x som är av typen heltal har tilldelats värdet 5
Variabeltyper Vi tar upp tre stycken olika typer: Heltal Flyttal Booleans
Variabelnamn Varje variabel måste ha ett (unikt) namn Namnet måste börja med en bokstav Namnet får endast innehålla bokstäver ,siffror och _ Å,Ä,Ö bör undvikas Bra namn beskriver variabeln
Variabelns värde Variabelns värde beror av dess typ Exempel: Int x = 5.2; EJ kompatibelt , 5.2 är inget heltal Int x = 5; Kompatibelt, x har tilldelats värdet 5
Variabelns värde Ett till exempel: double x = 5; Kompatibelt , x har tilldelats värdet 5. Talet 5 kan ses som både ett heltal och ett flyttal. Men vi måste vara försiktiga! Mer strax.
Räkneoperationer för heltal Det finns 5 stycken olika: + - * / %
Räkneoperationer för heltal Exempel på addition: Int x = 5; Hur skriver vi för att x ska ha tilldelats värdet 7 (vi måste addera till 2)? Så här? x + 2; NEJ För att x ska ha tilldelats värdet 7. måste vi använda tilldelningstecknet =
Räkneoperationer för heltal Fortsättning på exempel Så här? x = 2; Nästan Nu tilldelade vi x värdet 2. Men hur gör vi då? x = x + 2; Rätt Vi hämtar x sedan tidigare och lägger till 2 och sparar resultatet i x.
Räkneoperationer för heltal Slutsats? Här skiljer sig matematik och programmering! Från föregående exempel x = x + 2; Om vi läser det som en ekvation får vi att 0 = 2 ! Tilldelningstecknet är inte samma sak som matematikens likhetstecken
Räkneoperationer för heltal Testa din förståelse! Int x = 4; Int y = 3; x = y; y = y + x; Vad blev x? x = 3 Vad blev y? y = 6
Räkneoperationer för heltal Division Exempel Int x = 7/2; Vad blir det? 3.5 3 Det går inte därför 7/2 är inget heltal
Räkneoperationer för heltal Division Rättsvar : 3 3.5 är inget heltal. Dividerar vi heltal med heltal sparas bara heltalsdelen Divisionen retunerar ett heltal
Räkneoperationer för heltal Modulo % Modulo ger resten vid heltalsdivision Exempel: x = 8%4; Vad blev x? x = 0; Ett till exempel: x = 4%8;
Problem 1 Vi kan nu tillräckligt med programmering för att lösa första problemet! Vi har 36540 s , vi vill skriva det på formen: hh : min : sek
Lösningsförslag till Problem 1 int allaSekunder = 36540; int timmar = allaSekunder/3600; int minuter = (allaSekunder%3600)/60; int sekunder = (allaSekunder%3600)%60;
Räkneoperationer för flyttal Division Exempel: double x = 1/3; Vilket värde har x tilldelats? Divisionsoperatorn tror att vi är intresserade av heltalsdivsion.
Räkneoperationer för flyttal Division Hur gör vi en flyttalsdivision? double x = 1.0/3; 0.33333333…. Eller: double x1 = 1; double x2 = x1/3; x2 = 0.33333333….
Flyttal 1/3 = 0.33333… fortsätter med 3:or i all oändlighet. Innehåller vår variabel ett oändligt antal 3:or? Nej! För att lagra ett oändligt antal 3:or behöver vi ett oändligt stort minne att lagra de i.
Villkorssatser Om vi vill utföra instruktioner efter att ett villkor är uppfyllt använder vi oss av en villkorssats. Villkoren bygger på jämförelser mellan två värden
Villkorssatser Exempel: Vi vill ta ut pengar från banken men bara om vi har tillräckligt på kontot Låt uttag vara beloppet vi vill ta ut Låt saldo vara hur mycket vi har på kontot
Villkorssatser Int uttag = 100; Int saldo = 2000; If(uttag < saldo){ //Ta ut pengar }
Villkorssatser Uttag < saldo : Jämförelsen som sker Allting mellan { } är ett block. Här lägger vi in vad som ska ske om villkoret är uppfyllt
Villkorssatser Hur gör vi om vi vill tillåta uttag som även är lika stora som saldot? If(uttag <= saldo){ //Ta ut pengar } { } , är onödigt om vi bara har en rad kod
Jämförelser a >b a är större än b a < b a är mindre än b a >= b a är större än eller samma som b a <= b a är mindre än eller samma som b a == b a är samma som b a != b a är inte samma som b
Jämförelser Ett väldigt vanligt programmeringsmisstag: If ( a = b){ } Ser du något konstigt?
Jämförelser = Ett likhetstecken betyder tilldelning, alltså var satsen alltid sann! == Två likhetstecken används för att se om två variabler har samma värde
Jämförelser Ett till vanligt misstag: If (a == b); a = 2; Här avslutas villkorssatsen Det här ligger utanför villkorssatsen och sker oavsett om a == b
Flera jämförelser Vi kan ha flera villkor samtidigt. Exempel : Barn över sju år får gå på bio, och barn under sju år får gå på bio med vuxen Hur kan en villkorssats se ut?
Flera jämförelser If(barnAlder > 7 || barn_har_vuxen == true) //Får gå på bio
Flera jämförelser Vi kan kräva att två villkor, eller flera villkor ska vara uppfyllda Om maten är god och dyr så äter jag den Hur kan en villkorssats se ut?
Flera jämförelser If(isGod == true && isDyr == true) //ät
Else if, else Om vi vill göra något när if-satsen inte är uppfylld. Kan vi använda else if, eller else Else if Påbörjar en ny if-sats om föregående sats inte var sann Else inträffar när ingen if-sats är uppfylld.
Else if, else Exempel: If ( a == b){ //a och b är samma }else if( a > b){ //a är större än b }else{ //Inget av ovanstående (a < b) }
Nästlade if-satser Vi kan ha flera if-satser i varandra If( …. ){ } Tabba alltid koden!
Upprepningar Upprepar ett block kod så länge ett villkor är uppfyllt Olika sätt att upprepa: for while do while
For for(initiera variabel; villkor;stegning){ //kod som ska upprepas } Exempel: vi vill beräkna summan 1+2+3+4+5+6+7+8+9+10
For int summa = 0; for(int i = 1; i <= 10; i++){ summa += i; } i++;? samma som: i = i +1; summa += i; ? samma som: summa = summa + i;
While Satshuvudet består endast av ett villkor while (villkor){ //gör det här så länge villkoret är uppfyllt //Se till så att variablerna i villkoret ändras } While används när vi vill ha större kontroll över stegningen.
Problem 2 Beräkna fakulteter 10! = 10*9*8*7*6*5*4*3*2*1 0! = 1 Vi vill kunna beräkna en godtycklig fakultet
Lösningsförslag till Problem 2 int fakultet = 1; for(int i = 0; i < 0; i++){ fakultet *= i; }
Fältvariabler int[] a = new int[10]; Reservera plats för 10st värden En fältvariabel av typen heltal
Tilldelning av värden i fältvariabler För tal tilldelas värdet noll om inget annat har angivits Vi tilldelar värden genom att tala om vid vilket index värdet ska lagras Index börjar på 0 a[0] =3; Index
Tilldelning av värden i fältvariabler Ett exempel: int[] a = new int[10]; skapar en ny fältvariabel med 10 element, alla får värdet 0 a[0] =2; a[9] = 7; 2 7
Problem 3 Hitta det största talet i mängden: {2,9,8,11,6}
Lösningsförslag till problem 3 int[] a = new int[5]; a[0] = 2; a[1] = 9; a[2] = 8; a[3] = 11; a[4] = 6; int max = a[0]; for(int i=1;i<5;i++){ if(a[i]>max){ max = a[i]; }
Metoder Metoder kan ses som små mindre program designade för att lösa en specifik uppgift
Metoder Exempel: En metod talar om Dagens datum En annan metod ger dig Pi (3.1415..)
Metoder Kan vi göra egna metoder? JA!
Metoder Ex. Vi konstruerar en metod som ger oss arean av en cirkel. Men först måste vi förstå hur en metod använder sig av in- och utparametrar
Metoder inparametrar (frivilligt): variabler metoden kan använda sig av från ”utsidan” Utparametrar (frivilligt): det metoden returnerar när den är klar En metod kan bara använda sig av variabler definierade i sig själv, sina in-parametrar och andra metoder. *med frivilligt menas att det är tillåtet för metoder att vara utan inparametrar och eller även utparametrar.
Metoder public double cirkelArea(int radie){ return 3.141*radie*radie; } Returtyp Namn inparameter utparameter
Metoder Hur använder vi areametoden vi just gjorde? double r = 2; double area = cirkelArea( r );