Lektion 4
if-else-if
if(uttryck_1){ satser_1 } else if(uttryck_2){ satser_2 } else if(uttryck_3){ satser_3 } . . else{ satser }Relativa operatorer
Relations
operator Symbol Exempel Värde
lika med == 1 == 4 false
skilt från != 1 != 4 true
större än > 1 > 4 false
större än eller
lika med >= 1>=4 false
mindre än < 1 < 4 true
mindre än eller
Logiska operatorer
Logisk
operator Symbol Exempel Värde
OCH && uttryck_1 && uttryck_2 true om båda är sanna, annars false
ELLER || uttryck_1 || uttryck_2 true om minst ett är sant, annars false
ICKE ! ! uttryck false om uttrycket är
Tilldelande aritmetiska operatorer
Operator Symbol Exempel Resultat
addera och tilldela += tal1 += tal2 tal1 = tal1 + tal2
subtrahera och tilldela -= tal1 -= tal2 tal1 = tal1 - tal2
multiplicera och tilldela *= tal1 *= tal2 tal1 = tal1 * tal2
dividera och tilldela /= tal1 /= tal2 tal1 = tal1 / tal2
modulus och tilldela %= tal1 %= tal2 tal1 = tal1 % tal2
Ex. int tal = 2; tal = tal + 8; kan skrivas: int tal = 2; tal +=8;
Förändringsoperatorer
Öka en variabel n1 med 1:
n1 = n1 + 1; n1 +=1;
n1++;
Operator Symbol Exempel Resultat
tillväxt ++ tal++ eller ++tal tal = tal + 1 minskning -- tal-- eller --tal tal = tal -1
Algoritm och pseudokod
algoritm =
ett begränsat antal instruktioner
för att lösa ett problem
pseudokod = den programmeringskod,
beskriven i ord, som löser
algoritmen
Från källkod till pseudokod
int
n1 = sc.nextInt();
int
n2 = sc.nextInt();
int
sum = n1 + n2;
System.out.print(
”Summan blir ”
+sum);
Läs in två heltal.
Beräkna summan av talen. Skriv ut summan.
Algoritm skriven på programmeringsspråk
Från pseudokod till källkod
Skriv ett program som kollar om två inlästa heltal är jämnt
delbara med varandra.
Läs in två heltal.
Kolla om talen är jämnt delbara genom att undersöka
resten.
Skriv lämplig utskrift beroende på vilket fall.
int
n1 = sc.nextInt();
int
n2 = sc.nextInt();
if
(n1%n2 == 0 || n2%n1 == 0)
System.out.println(
”Ja!”
);
else
System.out.println(
”Nej!”
);
Strukturdiagram
För att kunna få en struktur på ett program eller en algoritm kan det
vara bra att gör s.k. strukturdiagram
Från pseodokod till strukturdiagram
Läs in två heltal.
Kolla om talen är jämnt delbara genom att undersöka resten. Skriv lämplig utskrift beroende på vilket fall.
Iteration
Start Start Deklarera i och ge den startvärdet 0 Deklarera i och ge den startvärdet 0 i < 10 i < 10 Skriv ut namnSkriv ut namn AvslutaAvsluta
Läs in namn
Läs in namn
Öka i med 1
Öka i med 1 Iteration är någonting som
upprepar sig ett visst antal gånger.
Ex:
Skriv in ett namn och skriv ut namnet 10 gånger.
Lösning:
Använd en räknare som ”håller koll på” hur många gånger som iterationen har kört.
false true
while-sats
while(uttryck)
{
//satser
}
while-satsen är en s.k. repetitionssats.
Den utför den programmeringskod som finns innanför
klammrarna så länge dess vilkor är uppfyllt.
while-satsen while(uttryck) { sats_1; sats_2; . . . } Följande sker:
• Uttrycket innanför parentesen testas först – är detta true (sant) görs satserna i while-satsen.
• Efter varje ”runda” testas uttrycket och om uttrycket är false (falskt) bryts while- loopen.
• Programmet fortsätter att köra där while-loopen slutar.
OBS! Ska mer än en sats köras i while-loopen måste klamrar användas för att visa var loopen börjar och slutar!
while-sats
System.out.print(
”Skriv in ditt namn: ”
);
String namn = Keyboard.readInt();
int
i = 0;
while
(i < 10)
{
System.out.println(namn);
i++;
}
Iteration
Skriv ett program som summerar alla tal som användaren skriver in till dess att användaren skriver in siffran 0.
Iteration
System.out.print(”Skriv in ett tal: ”);
int n1 = sc.nextInt();
int sum = 0;
while(n1!=0) { sum+=n1;
System.out.print(”Skriv in ett tal: ”); n1 = sc.nextInt();
}
System.out.print(”Summan blir ” +sum);
Ge sum startvärde Så länge n1 ej är 0
Öka sum
Läs in nytt tal till n1
Uppgifter
1. Gör övning Loopen på s. 18 (vårt exempel) i Kapitel 1 2. Gör uppgifterna 5-7 på s. 24-25 i Kapitel 1
3. Skriv ett program som läser in ett heltal och därefter räknar ner heltalet.
4. Skriv ett program som frågar efter en räntesats och startkapital och som därefter beräknar och skriver ut hur kapitalet växer år för år under 5 år (eller antal år som man själv får ange).
Exempel på körresultat: Ange ett heltal: 5
nedräknat: 5 4 3 2 1
Hur stor är räntesatsen? 4.25
Hur stort är startkapitalet? 10000 år Kapital 1 10425 2 10868 3 11329 4 11811 5 12313
Inläsning och utskrifter i dialogfönster
Använd paketet javax.swing:JOptionPane.* String name, hälsning;
name = showInputDialog(”Vad heter du?”);
Visar ett fönster på skärmen, det användaren skriver in hamnar i variablen name
hälsning = ”Välkommen” +name;
showMessageDialog(null, hälsning);
Skriver ut texten ”Välkommen” +variablens innehåll i ett fönster
System.exit(0);
Skriv ett program som
multiplicerar alla tal från 1 till
ett tal som användaren
anger.
Därefter ska resultatet
skrivas ut och programmet
avslutas.
(Programmet räknar alltså ut
n! (läs n-fakultet), d.v.s.
1*2*3*…*n, där n är ett
inläst positivt heltal)
Start Start Deklarera i och ge den startvärdet 1 Deklarera i och ge den startvärdet 1 i <= tal i <= tal prod = prod * i
prod = prod * i AvslutaAvsluta Läs in tal Läs in tal Öka i med 1 Öka i med 1 false true
Deklarera prod och ge
den startvärdet 1
Deklarera prod och ge
Iteration
System.out.print(”Skriv in ett positiv heltal: ”);
int tal = sc.nextInt();
int prod = 1; int i = 1; while(i <= tal) { prod = prod * i; i++; } System.out.print(tal+”! = ” +prod); Ge prod startvärde Ge i startvärde
Multiplicera prod med i Öka i med 1
int quant = 100, month = 0;
while(quant < Math.pow(10,6)) { quant *= 2;
month++; }
System.out.print("Passerar 1 000 000 efter ");
System.out.println(month/12 +" år "+month%12+” måndader");
Antal råttor i en stad är vid ett tillfälle 100 st. Råttfångaren blir långtidssjukskriven vilket gör att råttpopulationen fördubblas för varje månad. Hur lång tid tar det innan råttantalet har passerat en miljon. Svara i hela år och måndader.
Om man vill definiera och tilldela flera variabler av samma datatyp i samma sats
Beräknar 106, returnerar en double!
Tänk er följande högst orealistiska anställningsvillkor. Du har fått ett väldigt farligt och riskfyllt arbete. Lönesättningen är direkt ovanlig. Första dagen får du 1 öre i lön, dag två får du 2 öre, dag tre 4 öre, fjärde 8 öre osv. Lönen fördubblas varje dag. Du är rädd om din hälsa men vill samtidigt bli rik.
Skriv ett program som frågor efter önskat belopp (d v s hur rik du vill bli) och som sedan räknar ut hur många dagar det tar för att bli rik.
import static javax.swing.JOptionPane.*;
public class Rik {
public static void main(String [] arg) {
String input = showInputDialog(”Belopp?”);
double rich = Double.parseDouble(input);
int days = 1;
double dayPay = 0.01;
double totAmount = 0.01;
while(totAmount < rich) { days++;
dayPay *=2;
totAmount += dayPay; }
showMessageDialog(null, ”Det tar ”+days+” dagar”); System.exit(0); } } Gör om till double! Initiera variablerna! Öka days Fördubbla dagslönen Räkna ut ny totallön
int pop = (int)Math.pow(10,6);
int y = 0;
while(pop < 2*Math.pow(10,6)) { pop *=1.05;
y++; }
System.out.print(”Det tar ”+y+” år.”);
Samma stad har en befolkningsökning på 5 % varje år. Hur många år tar det att för att dubbla folkökningen. Säg att nuvarande folkmängd är 1 000 000.
Användaren styr avbrott i while-loopen
Repetitionssatser kan användas då man vill att användaren ska ”styra” programmet!
char ans = ’j’;
while(ans == ’j’ || ans == ’J’) { System.out.print(”Tal 1: ”);
double n1 = sc.nextDouble(); System.out.print(”Tal 2: ”);
double n2 = sc.nextDouble(); System.out.println(n1*n2);
System.out.print(”En beräkning till? ”); ans = sc.next().charAt(0);