732G11 Linköpings universitet 2011-02-01
1 2 3
Strukturdiagram Strukturdiagram används för att visa hur ett program fungerar. Man kan se alla val och upprepningar som sker i programmet. Består av tre (!) enkla beståndsdelar: Start/stop Utför något Val
Vakna NEJ Slå väckarklockan Tyst? JA Drick kaffe JA Mer än 20 min till FÖ? Åk till uni. NEJ Håll FÖ
Val / villkor if-satsen if( villkor ) sats1 ; else sats2 ; i praktiken Är a<b? if(a < b) { Gör något ; else { Gör något annat ; JA Gör något NEJ Gör något annat
Satser och block Satser och block sats ; { sats1 ; sats2 ;... På varje ställe där man kan använda en sats kan man också ha ett block av satser. Ett block av satser omgärdas av måsvingar. Man ska alltid använda block för kroppar i if-satser, loopar och så vidare. Varför?
Bättre switch ( siffra ) { case 0: System. out. println (" Noll "); break ; case 1: System. out. println (" Ett "); break ; case 2: System. out. println (" Två "); break ; case 3: System. out. println (" Tre "); break ; default : System. out. println ("?"); Switch-satsen
Villkorsoperatorn Den enda trinära operatorn. En operator returnerar värde. Ger mer kompakt, men också svårläst kod. Bör i de flesta fall undvikas. Villkorsoperatorn villkor? uttryck_om_sant : uttryck_annars ; // ex: float promille = 0.1 f; String hur ; hur = " Jag tog " + ( promille < 0.2? " bilen " : " bussen ") + " hem.";
Upprepning / slinga / loop while-loopen while (a < b) { gör ngt ; Gör något JA Är a<b? NEJ
0-9 Skriver ut alla siffror från 0 till 9. Skriv ett program som: int siffra = 0; while ( siffra < 10){ System. out. print ( siffra + " "); siffra = siffra + 1;
Medelvärden Medelvärdet av tre tal int [] integers = new int [ 4]; System. out. println (" Mata in ett heltal :"); integers [0] = in. nextint (); System. out. println ("... ett till heltal :"); integers [1] = in. nextint (); System. out. println ("... ett till heltal :"); integers [2] = in. nextint (); System. out. println ("... ett till heltal :"); integers [3] = in. nextint ();... Häftigt, men inte mycket bättre för 5000 värden.
Anonym utvärdering av pågående kurser. Sammanställs av mig, sammanställningen redovisas, tillsammans med eventuella förändringar. Vad är bra/dåligt. Föreläsningar, laborationer, examination. Uppgifter, exempel, övningar, personal. Var specifik, annars vet vi inte vad vi ska ändra/fortsätta med. Ex. Vilken laboration är svår, vilken assistent mumlar, vilken föreläsning var bra osv.
Medelvärde av 5000 tal while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while ( pos < nrofints ) { System. out. println (" Mata in ett heltal :"); integers [i] = in. nextint (); pos = pos + 1;
Så? Generaliserat inläsningen (samma princip för uträkningen). Fungerar, men det är lite krångligt att hålla reda på alla delarna. Lätt att man dribblar bort sig själv med pos-variabeln om man använder flera loopar efter varandra.
Fler slingor / loopar För att råda bot på detta ska vi titta på fler slingor. Alla varianterna på slingor fungerar på liknande sätt, men de små skillnaderna gör dem lämpade för olika saker. Om det känns som att man får krångla för mycket i sin slinga så bör man fundera på om det inte vore bättre med en annan.
Synlighet och livslängd En variabel är bara synlig inom den omgivning där den definierats. När den omgivningen inte längre finns glöms variabeln bort. Variabler deklarerade i en slinga är bara åtkomlig inifrån den slingan.
for-loopen for ( initiering ; villkor ; uppdatering ){ gör ngt ; initiering villkor JA NEJ Gör något uppdatering
Används väldigt ofta tillsammans med arrayer. Försöker minimera risken att börja/sluta för tidiget/sent eller att glömma uppdatera räknarvariabeln. for-loopen int [] arr = new int [ nrofelements ]; long sum = 0; for ( int i = 0; i < nrofelements ; i ++) { sum = sum + arr [i];
do/while-loopen do { gör ngt ; while ( villkor ); Gör något JA Är a<b? NEJ
Exakt som while-loopen från förra föreläsningen, men den kör alltid minst ett varv (kontrollerar villkoret efter varje varv). Kan vara bra för saker som behöver repeteras om det inte går så bra första gången, exempelvis inläsning av data från användaren. do/while-loopen int tal = 0; do { System. out. print (" Ange ett tal mellan " + "3 och 26: "); tal = in. nextint (); while (( tal < 3) ( tal > 26));
break Avbryter en slinga (eller switchsats). Programmet fortsätter köra efter slingan. breaksatsen for ( int a = 0; a < 5; a ++){ if (q > 12) { break ;
Avbryter ett varvi i en slinga. continue Programmet fortsätter köra slingan från början igen (med variabeln uppdaterad om det är en for-slinga). breaksatsen for ( int a = 0; a < 5; a ++){ if (q > 12) { continue ;
Skriv ett program som skriver ut alla jämana heltal mellan 0 (inklusive) och 1000 (exklusive), genom att använda continue för att hoppa över de udda talen. breaksatsen for ( int a = 0; a < 1000; a ++){ if (a % 2 == 1) { continue ; System. out. print (a + " ");
Det går att lägga en slinga i en annan. Den inre slingan utförs då x gånger för varje varv i den yttre loopen. for ( int a = 0; a < 5; a ++){ for ( int b = 0; b <= a; b ++){ System. out. print ("*"); System. out. print (" ");
Skriv ett program som skriver ut multiplikationstabeller för de angivna talen enligt nedan. Interaktion med multiplikationstabellen Vilken tabell önskas? 8 8*0 = 0 8*1 = 8 8*2 = 16 8*3 = 24... 8*7 = 56 8*8 = 64 8*9 = 72 Vilken tabell önskas?
Pseudokod Låt table vara önskad tabell Låt row vara aktuell rad Tilldela row värdet 0 Skriv " Vilken tabell önskas? " Tilldela table värdet av önskad tabell medan row < 10 gör { skriv table + "*" + row + " = " + ( table * row ) öka row med 1 Den startar inte om.
Bättre pseudokod Låt table vara önskad tabell Låt row vara aktuell rad gör { Tilldela row värdet 0 Skriv " Vilken tabell önskas? " Läs in önskad tabell i table medan row < 10 gör { skriv table + "*" + row + " = " + ( table * row ) öka row med 1 medan table!= 0
Riktig javakod Scanner in = new Scanner ( System. in ); int table ; do { int row = 0; System. out. print (" Vilken tabell önskas?"); table = in. nextint (); while ( row < 10) { System. out. println ( table + "*" + row + " = " + ( table * row )); row = row + 1; while ( table!= 0);
Skriv ett program som skriver ut den riktiga multiplikationstabellen (10x10).
Baklänges Skriv ett program som skriver ut en sträng baklänges! Tips: använd slingor och metoden String.charAt(). Programkörning Ange text : 123456789 987654321 Ange text : Maria Edvardsson nossdravde airam Ange text :
Rövarspråket Skriv ett program som gör om svenska till rövarspråket. Rövarspråket Ange ord : hare hoharore Ange text : luftballong lolufoftotbobalollolonongog Ange text :
Pseudokod Rövarspråket Låt word vara en sträng gör { Skriv " Ange ord : " Läs in ord i word för varje bokstav letter i word gör { om letter är en vokal skriv letter annars skriv letter + " o" + letter medan word inte är " quit "
Javakod Rövarspråket String word ; do { word = in. nextline (); for ( int i =0; i< word. length (); i ++){ char letter = word. charat ( i); if ( letter == a letter == e letter == i letter == o letter == u letter == y letter == å letter == ä letter == ö ) { print ( letter ); else { print ( letter + "o" + letter ); while (! word. equals (" quit " ));