Uppgifter att lösa 1,1,2,3,5,8,13,21...

Relevanta dokument
Belopp Belopp > procent

Enkla uppgifter. Uppgift 1. Uppgift 2

Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori.

Fråga 11. Vad skrivs ut? Fråga 12. Vad skrivs ut? Fråga 13. Vad skrivs ut? x=x+y; y=x-y; x=x-y;

1,3,5,7,9,...,99. Skriv ett program som genererar en multiplikationstabell med följande utseende

a = a a a a a a ± ± ± ±500

STYRANDE SATSER. 1) Skriv ett program som räknar ut hur många år du har till pensionen. Vi räknar här med att man pensioneras det år man fyller 65 år.

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Inledande programmering med C# (1DV402) Summera med while"-satsen

Sidor i boken f(x) = a x 2 +b x+c

UPPGIFT 1 V75 FIGUR 1.

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Funktioner. Räta linjen

kvoten mellan två på varandra följande tal i en talföljd är konstant alltid lika stor.

f (a) sin

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Pseudokod. Arbetets gång

3, 6, 9, 12, 15, 18. 1, 2, 4, 8, 16, 32 Nu är stunden inne, då vill vill summera talen i en talföljd

Sammanfattningar Matematikboken X

Loopar och datatyper. Föreläsning 3

Programmering i C, 7,5 hp

9 Skissa grafer. 9.1 Dagens Teori

6 Derivata och grafer

Data, typ, selektion, iteration

Den räta linjens ekvation

Den räta linjens ekvation

4. Bestäm alla trippler n 2, n, n + 2 av heltal som samtliga är primtal. 5. Skriv upp additions- och multiplikationstabellen för räkning modulo 4.

1, 2, 3, 4, 5, 6,...

Lösningar och kommentarer till uppgifter i 3.1

Matematisk kommunikation för Π Problemsamling

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Tisdagen 26 april Tentamen består av 8 sidor

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

Komposanter, koordinater och vektorlängd Ja, den här teorin gick vi igenom igår. Istället koncentrerar vi oss på träning inför KS3 och tentamen.

f(x) = x 2 g(x) = x3 100

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Tisdagen 26 april Tentamen består av 8 sidor

Matematisk kommunikation för Π Problemsamling

TENTAMEN. HF1002, 6H3120, 6H3117 Diskret Matematik. Skrivtid 8:15-13:15. Måndag 8 juni Tentamen består av 4 sidor.

Programmering Grundkurs (HI1900) Teoridel

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

Lennart Rolandsson, Uppsala universitet, Ulrica Dahlberg och Ola Helenius, NCM

KOKBOKEN. Håkan Strömberg KTH STH

MATEMATIKPROV, LÅNG LÄROKURS BESKRIVNING AV GODA SVAR

Gamla tentemensuppgifter

a) A = 3 B = 4 C = 9 D = b) A = 250 B = 500 C = a) Tvåhundrasjuttiotre b) Ettusenfemhundranittio

Matematik CD för TB = 5 +

Föreläsning 9. Repetition och exempelproblem

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

2-5 Decimaltal Namn: Inledning. Vad är ett decimaltal, och varför skall jag arbeta med dem?

Problemlösning Lösningar

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

5B1134 Matematik och modeller Lösningsförslag till tentamen den 13 januari T = 1 ab sin γ. b sin β = , 956 0, 695 0, 891

Loopar och datatyper. Föreläsning 3

En sammansatt sats eller block är en sekvens av satser, sammanslagna till en enhet med hjälp av ett matchande par av klamrar, { }.

Uppgift 1 ( Betyg 3 uppgift )

f(x) = x 2 g(x) = x3 100 h(x) = x 4 x x 2 x 3 100

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Fråga 15. Följande deklarationer är givna

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Programmering Grundkurs Laboration 1

Bisektionsalgoritmen. Kapitel Kvadratroten ur 2

BaraTrav fliken Poäng Version 2.2

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Moment Viktiga exempel Övningsuppgifter Ö , Ö1.25, Ö1.55, Ö1.59

Problemlösning Lösningar

5B1134 Matematik och modeller Lösningsförslag till tentamen den 29 augusti 2005

Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till f(x) = 1 x.

Prov 1 2. Ellips 12 Numeriska och algebraiska metoder lösningar till övningsproven uppdaterad a) i) Nollställen för polynomet 2x 2 3x 1:

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Fredagen 14 januari Tentamen består av 8 sidor

13.1 Matematisk statistik

Malmö högskola 2012/2013 Teknik och samhälle

Malmö högskola 2007/2008 Teknik och samhälle

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

17.1 Kontinuerliga fördelningar

Bonusmaterial till Lära och undervisa matematik från förskoleklass till åk 6. Ledning för att lösa problemen i Övningar för kapitel 5, sid

Sidor i boken Figur 1:

Kompletterande lösningsförslag och ledningar, Matematik 3000 kurs A, kapitel 4. b) = 3 1 = 2

KOKBOKEN 1. Håkan Strömberg KTH STH

Föreläsning 3-4 Innehåll

5 Om f (r) = 0 kan andraderivatan inte avgöra vilken typ av extrempunkt det handlar om. Återstår att avgöra punktens typ med teckenstudium.

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Talmängder. Målet med första föreläsningen:

Lokala mål i matematik

Moment Viktiga exempel Övningsuppgifter

TDIU01 - Programmering i C++, grundkurs

Sidor i boken 8-9, 90-93

Funktioner och programstruktur. Föreläsning 5

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Tentamen i Envariabelanalys 2

Fortsättningskurs i programmering F 3. Algoritmer i programutveckling II Hugo Quisbert Flödesplaner med selektion

20 Gamla tentamensuppgifter

Fler uppgifter på andragradsfunktioner

Sidor i boken KB 6, 66

Enkla datatyper minne

Transkript:

Detta arbetspass innehåller loopar, for, while och do. Du kan läsa mer om det på sidorna 61 69 och 102 105 Läs också avsnitt 4.7 på sidan 106 och 4.10 på sidan 109 Uppgifter att lösa Uppgift 1. Fibonacci I matematiken har du lärt dig om fibonaccitalföljden, den som börjar 1,1,2,3,5,8,13,21... Nu har turen kommit till att bestämma dessa tal med hjälp av ett C-program. Man kan bestämma ett fibonaccital med hjälp av de två föregångarna enligt f n = f n 1 +f n 2 Skriv ett program som beräknar ett efterfrågat fibonaccital. Här följer ett körningsexempel Ordningsnumret på på fibonaccitalet: 7 Talet är: 13 Programmet ska klara av upp till och med det 46:e talet. Uppgift 2. Det naturliga talet e e = 1+ 1 1! + 1 2! + 1 3! + 1 4! + 1 5! +... Med hjälp av den oändliga serien ovan kan den matematiska konstanten e bestämmas. Ju fler termer som tas med i beräkningen, desto noggrannare värde. Skriv ett program som först frågar efter antalet termer 15 och därefter beräknar summan som ett närmevärde till e. Antal termer: 10 Ett närmevärde till e: 2.71828180115 Håkan Strömberg 1 KTH STH

Uppgift 3. Collatz sekvens Du ska skriva ett program som följer denna kända algoritm, kallad Collatz sekvens. 1 Läs in ett heltal n 2 Om n är jämnt dela det med 2 3 Om n är udda multiplicera det först med 3 och addera sedan 1 till produkten 4 Om n 1 starta om från punkt 2 5 Skriv till slut ut hur många steg som krävdes för att nå n = 1 och dessutom det största värde n haft under beräkningens gång. Ett par tester Vilket tal: 531 Antal steg 123 Maxvärdet 9232 Vilket tal: 37 Antal steg 21 Maxvärdet 112 Matematikerna vet inte, men de tror, att med vilket positivt heltal man än startar, så kommer man förr eller senare till 1. Håkan Strömberg 2 KTH STH

Uppgift 4. Försäljarprovision Lönen för en försäljare är helt grundad på provision, direkt kopplad till den omsättning han lyckas skapa under en månad. Tabellen nedan anger procentsatser för olika intervall av omsättningens belopp Belopp Belopp > procent 100 000 10 100 000 150 000 12 150 000 200 000 15 200 000 20 För delen av omsättningen som är 100000 erhåller han 10% kr i lön. För delen som hamnar mellan 100000 kr och 150000 kr får han 12% i lön och så vidare. Skriv ett program som tar emot uppgift om, för hur många månader ( 5) beräkningen ska utföras, och därefter lika många månadsbelopp för omsättningen. Programmet ska skriva ut den totala lönen under perioden med två decimaler och i övrig fungera som i exemplen nedan: Antal månader: 2 Antal månader: 3 Månad 1: 150000 Månad 1: 31250 Månad 2: 175000 Månad 2: 130100 Lön under perioden: 35750.00 Månad 3: 250785 Lön under perioden: 50394.00 Uppgift 5. Siffersumma Skriv ett program som tar reda på hur många sexsiffriga tal i ett givet intervall (inklusive gränser) det finns, där summan av de tre första siffrorna är lika med summan av de tre sista. Från och med talet: 123456 Till och med talet: 654321 Det finns 31607 sådana tal Det första talet innehåller alltså alltid sex siffror och är mindre än eller lika med det andra talet som också innehåller sex siffror. Håkan Strömberg 3 KTH STH

Uppgift 6. Produkten av det största och det minsta Här ska du skriva ett program som tar emot ett givet antal ( 2) (godkända) heltal och som avslutar med att skriva ut produkten av det största och det minsta av de inmatade och godkända talen. För att ett inmatat tal x ska godkännas ska 0 < x < 100. Dessutom ska x vara jämnt. Ditt program ska meddela när inmatningsfel görs, allt enligt exemplet nedan. Observera också numreringen av talen på inmatningsraden. Antal tal? 4 Tal 1? 8 Tal 2? 9 9 är inte jämnt Tal 2? 0 0 ligger utanför intervallet Tal 2? 6 Tal 3? 103 103 är inte jämnt 103 ligger utanför intervallet Tal 3? 10 Tal 4? 98 Den sökta produkten är 588 Du kan anta att de inmatade talen är heltal. Uppgift 7. Siffersumma och sifferprodukt Talet 327 har siffersumman 12 eftersom 3+2+7 = 12 och och sifferprodukten 42 eftersom 3 2 7 = 42. Skriv ett program som tar emot uppgift om önskad siffersumma och sifferprodukt och som tar reda på det minsta positiva heltalet med just den siffersumman och sifferprodukten. Siffersumma : 12 Sifferprodukt : 42 Det eftersökta talet är 237 Uppgift 8. Stigande siffror I talen 3689 och 1348 är siffrorna stigande från vänster till höger. Något man inte kan säga om talen 6781 och 4788. Skriv ett program som tar reda på hur många fyrsiffriga heltal det finns i ett givet intervall (inklusive gränserna) där siffrorna är stigande från vänster till höger. Ett körningsexempel: Från: 1394 Till: 2672 Det finns 51 sådana tal Intervallets undre gräns är 1000 och dess övre är förstås 9999. Håkan Strömberg 4 KTH STH

Uppgift 9. Åldersfixering Om man byter plats på de två siffrorna i Adams ålder får man Bertils. Caesars ålder är lika med produkten av de två siffror vi just bytt plats på. Adam är äldst. Skriv ett program, som bestämmer Adams, Bertils och Caesars ålder, då programmet får reda på den sammanlagda åldern. En testkörning: Den sammanlagda åldern : 202 Adam 86 Bertil 68 Caesar 48 Uppgift 10. Julklapparna Figur 2.1: Det lackar mot jul! Tomten har mycket att stå i. Just nu funderar han på hur kartongerna till julklapparna ska se ut. Han har fått för sig att det går att konstruera kartonger där mätetalet för en kartongs totala area är lika med mätetalet för dess volym. Han har tänkt sig att kartongens alla sidor ska vara i hela cm (heltal). Han har faktiskt lyckats hitta en där, sidorna är 4 cm, 5 cm respektive 20 cm. Kartongen har ju arean 400 cm 2 och volymen 400 cm 3. Skriv nu ett program som listar sidorna för samtliga kartonger med denna egenskap. Observera att om en rad i tabellen har innehållet 4 5 20, så får det inte finnas någon fler rader med dessa tre tal i tabellen, oavsett ordning. Det är ju i så fall samma kartong! Den längsta sidan för en kartong av den här typen understiger med råge 100 cm. I tomtens kartonger är alla vinklar räta (rätblock). Håkan Strömberg 5 KTH STH

Pseudokod Uppgift 1 De två första talen f 1 och f 2 är givna och är båda 1. Nästa tal i följden f 3 får man genom f 3 = 1+1 = 2. Just nu har man tre tal i följden för att ta fram f 4 behöver man bara f 2 och f 3, f 4 = f 2 +f 3 = 1+2 = 3. Detta visar att man klarar sig med tre variabler. Så fort ett nytt tal är bestämt, f3 = f1+f2 kopierar man värdet från f2 till f1 och värdet från f3 till f2. Nu kan ett nytt f3 bestämmas med hjälp av f1 och f2. Deklarera f1=1 och f2=1 Läs in numret på det tal som ska bestämmas, nr En for-loop från 3 till nr { Bestäm f3=f1+f2 Sätt f1=f2 Sätt f2=f3 } Skriv ut f3 Uppgift 2 Vad n! betyder känner du säkert till, att till exempel 4! = 1 2 3 4 = 24. Deklarera e = 1.0, den första termen redan tilldelad Ta emot uppgift om antalet termer, n En for-loop där k går från n ned till 1 { Sätt n=1 En for-loop som beräknar k! Öka på e med 1 k! } Skriv ut e Uppgift 3 Pseudokoden är given i problemtexten. Det är Bara att sätta igång och koda. Uppgift 4 Om beloppet för en månad är, till exempel 170000, får vi det önskade beloppet genom 10% 100000+12% 50000+15% 20000 = 19000 En lopp med ett varv per månad Ta emot uppgift om beloppet denna månad Ta reda på hur stor del av de fyra intervallen som beloppen täcker Om beloppet täcks helt och hållet får man aktuell procentsats för hela intervallet Om beloppet ej täcker hela intervallet får man aktuell procentsats för överskjutande del Summan av dessa upp till fyra delbelopp utgör lönen för aktuell månad Skriv ut den totala lönen Håkan Strömberg 6 KTH STH

Uppgift 5 Viktigast här är den konstruktion, som summerar siffrorna i ett heltal. Här summeras de tre sista siffrorna i ett heltal. 1 sum=0 2 for(j=1;j<=3;j++){ 3 sum=sum+tal%10; 4 tal=tal/10; 5 } Observera att den sista siffran i den den återstående delen av talet försvinner i varje varv och summeras samtidigt till sum Läs in undre och övre gräns Loopa från undre till övre gräns Bestäm summan av de tre sista siffrorna i talet Bestäm summan av de tre första siffrorna i talet Om de två summorna är lika öka då en räknare antal med 1 Skriv ut värdet hos räknaren antal Uppgift 6 Ta emot uppgift om antalet tal som ska matas in En loop snurrar lika många varv som antalet tal som ska matas in En loop som snurrar till ett godkänt tal matats in Testar om talet är udda, skriver då ut text om detta Testar om talet ligger utanför intervallet [1...100], skriver då ut text om detta Vi har ett godkänt tal som testas mot det hittills största inmatade och eventuellt uppdaterar max Vi har ett godkänt tal som testas mot det hittills minsta inmatade och eventuellt uppdaterar min Programmet skriver ut produkten max min Uppgift 7 Ta emot den siffersumma och den sifferprodukt som är målet En loop som startar med tal= 1 och ökar med 1 i varje varv Sätt p1, som står för produkt till 1 Sätt s1, som står för summa till 0 Kopiera tal till tal1 En loop där vi tar ut en siffra i taget tills inga fler siffror finns kvar i tal1 Ta ut siffran Addera siffran till s1 Multiplicera siffran till p1 Förkorta talet genom att dividera med 10 Om inte s1 och p1 överensstämmer med önskade värden görs ett nytt varv i loopen Resultatet skrivs ut Håkan Strömberg 7 KTH STH

Uppgift 8 I programmet ingår samma teknik som i uppgift 5 och 7. Tänk på att vi plockar ut siffran från slutet av talet, startar med entalssiffran. Ta emot gränserna för underökningen En loop som testar alla tal i det efterfrågade intervallet Kopiera aktuellt tal till en variabel, nytt, vars värde kan förstöras Eftersom alla entalssiffror är godkända kan vi sätta s=10 från start När vi nu ska testa aktuellt tal behöver vi en while-loop som snurrar så länge nytt> 0 och den just framtagna siffran är större än den föregående, s Ta fram nästa siffra s Dividera nytt med 10 Om nytt är 0, när loopen ovan avbryts har vi hittat ett godkänt tal och ökar en räknare Vi kan skriva ut räknarens värde Uppgift 9 Med en dubbelloop kan man generera de siffror som ingår i Adams och Bertils åldrar. Säg att Adams ålder är 10x+y, då är Bertils 10y+x och Caesars x y. Uppgift 10 Paketet har tre dimensioner l,b och h, alla, ett heltal, i intervallet [1...100]. Genom en trippelloop kan vi bilda alla kombinationer av tre tal, 100 3 och testa om lbh = 2(lb+lh+bh) Men eftersom man (4,5,20) kan betraktas som samma paket som till exempel (5,20,4) kan man begränsa genereringen av de tre talen så att det (5,20,4) inte kommer med. Håkan Strömberg 8 KTH STH

Lösningsförslag Uppgift 1 3 int nr,k,f1=1,f2=1,f3=1; 4 printf("vilket tal i ordningen? "); 5 scanf("%d",&nr); 6 for(k=3;k<=nr;k++){ 7 f3=f1+f2; 8 f1=f2; 9 f2=f3; 10 } 11 printf("det sökta talet är %d\n",f3); 12 } 7-9 Om det finns några svårigheter i detta problem, så är den teknik som visas i dessa rader Uppgift 2 3 int n,k,i; 4 double e=1.0,t; 5 printf("antalet termer: "); 6 scanf("%d",&n); 7 for(k=n;k>=1;k--){ 8 t=1.0; 9 for(i=1;i<=k;i++) 10 t=t*i; 11 e=e+1.0/t; 12 } 13 printf("e=%13.11f\n",e); 14 } 4 Resultatet blir antagligen bättre om man använder double här. 5-6 Tar emot antalet termer 7-12 Ett varv i denna loop ökar på summan med en term. Det finns en numerisk anledning att starta med den t sista termen, men det är inte nödvändigt för att bli godkänd på denna uppgift. for(k=1;k<=n;k++) fungerar nästan lika bra. 9-10 Beräknar k! 11 Lägger till en term till summan Håkan Strömberg 9 KTH STH

Uppgift 3 3 int antal=0,max,tal; 4 printf("startvärde: "); 5 scanf("%d",&tal); 6 max=tal; 7 while(tal>1){ 8 if(tal%2==0) 9 tal=tal/2; 10 else 11 tal=3*tal+1; 12 antal++; 13 if(tal>max) 14 max=tal; 15 } 16 printf("antal steg %d\n",antal); 17 printf("maxvärdet %d\n",max); 18 } H Här vet vi inte från början hur många varv loopen ska göra. Därför tar vi till en while-loop. 6 Från början är det största talet tal 8 Så tar man reda på om ett tal är jämnt 9 Eftersom talet är jämnt får vi ett heltal då vi delar det med 2 12 antal är en varvräknare, ökar med 1 i varje varv 13-14 Om aktuellt tal är större än max, uppdaterar vi max Håkan Strömberg 10 KTH STH

Uppgift 4 3 int belopp,n,i; 4 float tot=0.0; 5 printf("antal månader: "); 6 scanf("%d",&n); 7 for(i=1;i<=n;i++){ 8 printf("månad %d: ",i); 9 scanf("%d",&belopp); 10 if(belopp<=100000) 11 tot=tot+belopp*0.10; 12 else { 13 tot=tot+100000*0.10; 14 if(belopp<=150000) 15 tot=tot+(belopp-100000)*0.12; 16 else { 17 tot=tot+50000*0.12; 18 if(belopp<=200000) 19 tot=tot+(belopp-150000)*0.15; 20 else 21 tot=tot+50000*0.15+(belopp-200000)*0.20; 22 } 23 } 24 } 25 printf("total lön under perioden: %.2f\n",tot); 26 } 4 tot ska till slut innehålla den totala lönen. 5-6 Tar reda på, för hur många månader beräkningen ska ske 7-24 En loop som snurrar ett varv för varje månad 8-9 Vi läser in ett belopp för varje månad 10 Om beloppet är 100000 vet vi direkt, att blir lönen 10% av beloppet och vi ökar tot med detta belopp 12-13 Annars, måste beloppet vara > 100000. Man får då först öka tot med 10% av 100000. 14-15 Om beloppet är 150000 får man sedan öka på tot med12% av det som överskrider 100000. 16-17 Annars om beloppet > 150000 adderar vi först 12% av 50000 till tot 18-19 Om beloppet är 200000 ökar vi på tot med 15% av det belopp som överskrider 150000 20-21 Annars är beloppet > 200000 och då ökar vi på tot med 15% av 50000 plus 20% av det belopp som överskrider 200000. 25 Vi kan till slut skriva ut den slutliga lönen Håkan Strömberg 11 KTH STH

Uppgift 5 3 int fran,till,antal=0,sum1,sum2,tal,i,j; 4 printf("från och med tal: "); 5 scanf("%d",&fran); 6 printf("till och med tal: "); 7 scanf("%d",&till); 8 for(i=fran;i<=till;i++){ 9 sum1=0; sum2=0; tal=i; 10 for(j=1;j<=3;j++){ 11 sum1=sum1+tal%10; 12 tal=tal/10; 13 } 14 for(j=1;j<=3;j++){ 15 sum2=sum2+tal%10; 16 tal=tal/10; 17 } 18 if(sum1==sum2) 19 antal++; 20 } 21 printf("\ndet finns %d sådana tal\n",antal); 22 } 4-7 Programmet läser in undre och övre gräns 8-20 För varje tal i intervallet ska vi nu utföra testet 9 De två summorna nollställs och talet i, som ska undersökas kopieras till tal. 10-13 En loop som ska snurra tre varv 11 Med hjälp av modulo 10, %10 tar vi reda på sista siffran i tal. Detta tal adderas sedan till summan. 12 Genom heltalsdivision med 10 försvinner sista siffran i tal 14-17 tal innehåller nu tre siffror, som på samma sätt som i loopen ovan summeras. 18-19 Om de två summorna nu är lika har vi hittat ett av de tal vi söker och ökar därför på antal med 1. 21 Här skriver programmet ut hur många tal som hittades Håkan Strömberg 12 KTH STH

Uppgift 6 3 int n,max=0,min=100,i,tal; 4 printf("antal tal? "); 5 scanf("%d",&n); 6 for(i=1;i<=n;i++){ 7 do{ 8 printf("tal %d? ",i); 9 scanf("%d",&tal); 10 if(tal%2!=0) 11 printf("%d är inte jämnt\n",tal); 12 if(tal<=0 tal>=100) 13 printf("%d ligger utanför intervallet\n",tal); 14 }while(tal%2!=0 tal<=0 tal>=100); 15 if(tal>max) max=tal; 16 if(tal<min) min=tal; 17 } 18 printf("den sökta produkten är %d\n",max*min); 19 } 4-5 Programmet läser in antalet tal som ska matas in 6-17 En loop som hanterar ett tal i taget 7-14 En loop som ska snurra tills ett godkänt tal lästs in 8-9 Läser in ett heltal 10-11 Om talet inte är jämnt talar programmet om det 12-13 Om talet inte ligger i intervallet [1...100] talar programmet om det 14 Om ett av dessa villkor är sant är talet underkänt och programmet gör ett nytt varv i do-loopen 15-16 När programmet hamnar här är talet godkänt och jämförs då med aktuellt maximum och minimum, som eventuellt uppdateras. 18 Nu kan vi skriva ut produkten av det största och minsta talet som matats in Håkan Strömberg 13 KTH STH

Uppgift 7 3 int tal,tal1,s,p,s1,p1,siffra; 4 printf("vilken siffersumma : "); 5 scanf("%d",&s); 6 printf("vilken sifferprodukt: "); 7 scanf("%d",&p); 8 tal=0; 9 do{ 10 tal++; 11 tal1=tal; p1=1; s1=0; 12 while(tal1>0){ 13 siffra=tal1%10; 14 s1=s1+siffra; 15 p1=p1*siffra; 16 tal1=tal1/10; 17 } 18 }while(s1!=s p1!=p); 19 printf("det sökta talet är %d",tal); 20 } 9-18 En loop med ett varv för varje tal som ska testas 10 Här ökar man talet som ska testas 11 Innan vi bestämmer siffersumman och sifferprodukten nollställer vi summan s1 och ettställer produkten p1. Dessutom måste vi kopiera aktuellt tal till tal1 12-17 En loop där antalet varv är lika med antalet siffror i talet 13 Talets sista siffra tas fram 14 Siffersumman ökas på 15 Sifferprodukten ökas på 16 Sista siffran i tal1 plockas bort genom heltalsdivision med 10 17 Loopen fortsätter om inte summan och produkten är den önskade 19 Resultatet skrivs ut Håkan Strömberg 14 KTH STH

Uppgift 8 3 int s,nytt,tal,fran,till,antal=0; 4 printf("från: "); 5 scanf("%d",&fran); 6 printf("till: "); 7 scanf("%d",&till); 8 for(tal=fran;tal<=till;tal++){ 9 s=10; 10 nytt=tal; 11 while(s>nytt%10 && nytt>0){ 12 s=nytt%10; 13 nytt=nytt/10; 14 } 15 if(nytt==0) 16 antal++; 17 } 18 printf("det finns %d sådana tal\n",antal); 19 } 4-7 Vilka tal som ska undersökas bestäms 8-17 En loop med ett varv för varje tal som ska undersökas 9 s sätts till 10, ett tal större än alla siffror 10 Kopiera tal, så att kopian nytt kan styckas upp i siffror 11-14 En loop som tar ut en siffra i taget, bakifrån, från ental och uppåt. Loopen snurrar till antingen talet som ska undersökas blir 0, eller aktuell siffra är mindre än eller lika med den just föregående. Tänk på att den första siffra vi plockar ut är entalssiffran och att vi därför önskar en avtagande följd av siffror. 12 Vi kopierar sista siffran till s inför nästa varv i loopen 13 Vi tar bort sista siffran i talet inför nästa varv 15-16 Om loopen avbröts för att nytt blivit 0 har vi hittat ett av de tal vi söker och ökar därför antal. Håkan Strömberg 15 KTH STH

Uppgift 9 3 int tot,x,y; 4 printf("den sammanlagda åldern : "); 5 scanf("%d",&tot); 6 for(x=1;x<=9;x++) 7 for(y=1;y<=9;y++) 8 if(11*(x+y)+x*y==tot && x>y) 9 printf("adam %d Bertil %d Caesar %d\n", 10 10*x+y,10*y+x,x*y); 11 } 6-10 En dubbelloop som genererar alla 81 kombinationerna av de två siffrorna som ingår i Adams och Bertils ålder 8 Villkoret har förenklats från 10x+y+10y+x+xy = 11(x+y)+xy. Villkoret x > y säkerställer att Adam är äldst. 9 Då villkoret är sant kan vi skriva ut de tre herrarnas ålder Uppgift 10 3 int i,j,k; 4 for(i=1;i<=100;i++) 5 for(j=i;j<=100;j++) 6 for(k=j;k<=100;k++) 7 if(i*j*k==2*(i*j+i*k+j*k)) 8 printf("%2d %2d %2d\n",i,j,k); 9 } 5 Genom att starta den andra loopen med i 6 och den tredje med j slipper vi dubbletter 7 Då villkoret är sant har vi hittat en lösning Håkan Strömberg 16 KTH STH