Algoritmer och loopar Algoritmer, beräkningsbarhet Algoritmer och problemlösning med loopar (eller iterationer)
Beräkningsbarhet Vad är beräkningbarhet? Vad krävs av en anordning för att den ska kunna utföra beräkningar? Vad kan beräknas?
Algoritm Det är en ändlig uppsättning regler som bestämmer en följd av operationer som löser en specifik typ av uppgift som har följande kännetecken: Ändlighet Bestämdhet Indata Utdata Effektivitet (Donald Knuth)
Euklides algoritm Problem: Hitta den största gemensamma delare för två tal. smd(8,12)=4 Algoritm i 4 steg. r= m mod n (heltalsresten då man delar m med n). Gå till 2. Om r=0 så är sgd=n annars gå till 3. Sätt m=n. Gå till 4. Sätt n=r Gå till 1.
Turing maskiner Remsa Centralenhet (läsa, framåt,bakåt) Alfabete {a,b} Tillstånd { start, stopp,q1} Church Turings tes Allt som kan beräknas kan beräknas av en Turing maskin.
Stopp problemet Det finns inte någon algoritm som kan avgöra om en annan given algoritm med ett visst indata stannar eller går i evig loop.
Matematiskt väldef. problem Beräkningsbara Inte beräkningsbara Hanterliga Ohanterliga
Problem 1 En klass bestående av 10 studenter gjorde ett test bestående av flervals frågor och fick betyg från 0-100. Givet studenternas betyg kan du räkna ut deras medelbetyg.
Algoritm 1 Sätt summa=0 Sätt betygsräknare=0 Så länge som betygsräknare är mindre än 10 läs in nästa betyg lägg till betyget till summan Sätt klassmedlet till summa/10 Skriv ut klassmedlet
En java implementation public void medel1(){ int summa, betyg; double medelbetyg; summa=0; for (int betygsräknare=0;betygsräknare<10;betygsräknare++){ betyg= Input.readInt("Vilket är betyget?"); summa=summa+betyg; } medelbetyg=(double)summa/10; Output.meddelande("Medelbetyget är "+medelbetyg);
Problem 2 Gör ett klassmedels program som hanterar medel för ett okänt antal studenter varje gång det körs.
Algoritm 2 summa=0 räknare=0 Läs in det första betyget (kan vara -1) Så länge som användaren inte har angivigt -1 Lägg till betyget till summan Öka räknaren med ett Läs in det nästa betyget (kan vara -1) Om räknaren inte är lika med 0 Sätt medel=summa delat med räknare Skriv ut medel Annars skriv ut ” Inga betyg har skrivits in”
En java implementation public void medel2(){ int summa, betyg, räknare; double medelbetyg; summa=0; räknare=0; betyg= Input.readInt("Vilket är betyget? Du kan ange -1 om du vill avsluta"); while (betyg != -1){ summa=summa+betyg; räknare++; } if (räknare != 0){ medelbetyg=(double)summa/räknare; Output.meddelande("Medelbetyget är "+Output.format(medelbetyg,0,2)); else Output.meddelande("Inga betyg har skrivits in");
Java implementation av sgd public int sgd(int m,int n) { int r; r=m%n; while (r != 0){ m=n; n=r; } return n;