Enkla uppgifter Dessa 10 ganska enkla uppgifter är till för dig som känner att du ännu inte kommit igång med kursen. I samtliga uppgifter behövs en enkel loop, for eller while. Beräkningarna är i allmänhet enkla. I vissa uppgifter erhålles data genom slumptal. Uppgift 1 Skriv ett program som följer följande dialog Hur mycket pengar har du nu? 1000 Hur mycket vill du handla för? 326 Hur mycket vill du handla för? 410 Hur mycket vill du handla för? 350 *** Så mycket har du inte Hur mycket vill du handla för? 200 Hur mycket vill du handla för? 0 Du har 64 kronor kvar. Handlandet avslutas med 0. Uppgift 2 Skriv ett program som följer följande dialog: Från antal? 10 Till Antal? 13 Pris? 7 Antal Pris ----- ---- 10 70 11 77 12 84 13 91 Programmet tar emot indata och producerar en tabell Håkan Strömberg 1 KTH STH
Uppgift 3 Adam spelar följande hasardspel 100. Han satsar 1 kr och kastar två tärningar. Vid vinst får an tillbaka satsad krona plus följande: Summa Vinst 2 eller 12 5 kr 3 eller 11 3 kr Simulera detta spel och uppskatta Adams resultat. Adams resultat blev -41 kr Uppgift 4 Vi har en blå vanlig tärning och en röd. Simulera följande spel 1000 gånger och bestäm medelresultatet per spel med en decimal med hjälp av följande tabell Blå visar Röd visar Resultat > 3 < 2 +2 > 5 = 3 1 4 5 1 2 = 4 +2 I medeltal får spelaren 0.2 poäng/spel Uppgift 5 Skriv ett program som beräknar den totala lönen för att antal dagar. Där antalet timmar över 8, under en dag, ger 50% övertidsersättning. Lön kr/tim? 156 Antal dagar? 3 Timmar dag 1? 10 Timmar dag 2? 5 Timmar dag 3? 8 Den totala lönen blir 3744 kr Håkan Strömberg 2 KTH STH
Uppgift 6 Adam (1), Bertil (2) och Curt (3) startar en pokerkväll, alla med 1000 kr. De vinner och förlorar enligt följande: Vem vann? 1 Vem förlorade? 3 Belopp? 150 Vem vann? 2 Vem förlorade? 1 Belopp? 85 Vem vann? 3 Vem förlorade? 1 Belopp? 40 Vem van? 0 Adam 1025 kr Bertil 1085 kr Curt 890 kr Skriv ett program som ger denna dialog, som normalt blir mycket längre. Uppgift 7 Skriv ett program som frågar efter ett tal n och som sedan summerar talen s = 1+2+3+4+5+6+... tills dess summa s n. Programmet ska då skriva ut s och det sista talet som adderades. Vilken summa ska uppnås? 10000 Summan är 10011 Sista termen är 141 Håkan Strömberg 3 KTH STH
Uppgift 8 k 1 x 3 +k 2 x 2 +k 3 x+k 4 = 0 Att lösa en tredjegradsekvation är i allmänt en svår uppgift. En tredjegradsekvation har tre rötter. I denna uppgift är alla rötter heltal i intervallet [ 10, 10]. Vetskapen om detta gör det enkelt att finna rötterna med hjälp av en for-loop. Skriv ett program som tar emot de fyra koefficienterna k 1,k 2,k 3,k 4 (alla är heltal) som bestämmer ekvationen om som sedan söker reda på och skriver ut de tre rötterna. k1? 1 k2? 0 k3? -13 k4? -12 x=-3 x=-1 x=4 Här några ekvationer att testa programmet med k 1 k 2 k 3 k 4 x 1 x 2 x 3 1-3 -40 0-5 0 8 1-6 11-6 1 2 3 1-5 -100 500-10 5 10 Uppgift 9 I brädspelet Monopol finns det 40 rutor runt brädet. Den som hamnar på ruta nummer 31 får Gå direkt till fängelse, som finns på ruta 11. En spelare startar från ruta 1 och gör under spelets gång 100 varv. Varje gång han hamnar på ruta 31 får han alltså flytta till fängelset, ruta 11. Ett kast innebär att spelaren kastar två vanliga tärningar och flyttar det antal rutor som dessa tärningar visar tillsammans. Simulera spelet och ta reda på, ungefär, hur många kast han kommer att behöva för att göra för de 100 varven. Meddela dessutom hur många gånger han hamnade på ruta 31. Antal kast? 619 Antal gånger på ruta 31? 16 Håkan Strömberg 4 KTH STH
Uppgift 10 2 1 2 3 4 3 4 5 6 5 6 7 8 7 8 9... Ser du mönstret i följden av produkter ovan? Skriv ett program som frågar efter antalet faktorer och beräknar produkten för detta antal. Håkan Strömberg 5 KTH STH
Lösningar Uppgift 1 3 int belopp,handlafor; 4 5 printf("hur mycket pengar har du nu? "); 6 scanf("%d",&belopp); 7 do{ 8 printf("hur mycket vill du handla för? "); 9 scanf("%d",&handlafor); 10 if (belopp-handlafor>=0) 11 belopp=belopp-handlafor; 12 else 13 printf("*** Så mycket har du inte\n"); 14 }while (handlafor!=0); 15 printf("du har %d kronor kvar\n",belopp); 16 } Uppgift 2 2 3 int main(void){ 4 int fran,till,pris,antal; 5 printf("från antal? "); 6 scanf("%d",&fran); 7 printf("till antal? "); 8 scanf("%d",&till); 9 printf("pris/styck? "); 10 scanf("%d",&pris); 11 printf("antal Pris\n"); 12 printf("----- ----\n"); 13 for(antal=fran;antal<=till;antal++) 14 printf("%5d %4d\n",antal,antal*pris); 15 } Håkan Strömberg 6 KTH STH
Uppgift 3 2 #include <stdlib.h> 3 #include <time.h> 4 5 int main(void){ 6 int spel,belopp=0,kast; 7 srand(time(0)); 8 for (spel=1;spel<=100;spel++){ 9 belopp--; 10 kast=rand()%6+1+rand()%6+1; 11 if (kast==2 kast==12) 12 belopp=belopp+5; 13 if (kast==3 kast==11) 14 belopp=belopp+3; 15 } 16 printf("adams resultat blev %d kr\n",belopp); 17 } Uppgift 4 2 #include <stdlib.h> 3 #include <time.h> 4 5 int main(void){ 6 int spel,rod,bla,resultat=0; 7 srand(time(0)); 8 for (spel=1;spel<=1000;spel++){ 9 bla=rand()%6+1; 10 rod=rand()%6+1; 11 if (bla>3 && rod<2) resultat+=2; 12 if (bla>5 && rod==3) resultat-=1; 13 if (bla<=4 && rod>=5) resultat-=1; 14 if (bla!=2 && rod==4) resultat+=2; 15 } 16 printf("i medeltal får spelaren %.1f poäng/spel\n",resultat/1000.0); 17 } Håkan Strömberg 7 KTH STH
Uppgift 5 3 int timlon,antaldagar,dag,timmar; 4 float totlon=0; 5 printf("lön kr/tim? "); 6 scanf("%d",&timlon); 7 printf("antal dagar? "); 8 scanf("%d",&antaldagar); 9 for (dag=1;dag<=antaldagar;dag++){ 10 printf("timmar dag %d? ",dag); 11 scanf("%d",&timmar); 12 totlon=totlon+timmar*timlon; 13 if (timmar>8) 14 totlon=(float)totlon+(timmar-8)*timlon/2; 15 } 16 printf("den totala lönen blir %.2f kr\n",totlon); 17 } Uppgift 6 3 int adam=1000,bertil=1000,curt=1000; 4 int vinnare=1,forlorare,belopp; 5 while (vinnare!=0){ 6 printf("vem vann? "); 7 scanf("%d",&vinnare); 8 if (vinnare>0){ 9 printf("vem förlorade? "); 10 scanf("%d",&forlorare); 11 printf("belopp? "); 12 scanf("%d",&belopp); 13 if (vinnare==1) adam=adam+belopp; 14 if (vinnare==2) bertil=bertil+belopp; 15 if (vinnare==3) curt=curt+belopp; 16 if (forlorare==1) adam=adam-belopp; 17 if (forlorare==2) bertil=bertil-belopp; 18 if (forlorare==3) curt=curt-belopp; 19 } 20 } 21 printf("adam %d\n",adam); 22 printf("bertil %d\n",bertil); 23 printf("curt %d\n",curt); 24 } Håkan Strömberg 8 KTH STH
Uppgift 7 3 int summa=0,tal=0,onskadsumma; 4 printf("vilken summa ska uppnås? "); 5 scanf("%d",&onskadsumma); 6 while (summa<onskadsumma){ 7 tal++; 8 summa=summa+tal; 9 } 10 printf("summan är %d\n",summa); 11 printf("sista termen är %d\n",tal); 12 } Uppgift 8 3 int k1,k2,k3,k4,x,y; 4 printf("k1? "); 5 scanf("%d",&k1); 6 printf("k2? "); 7 scanf("%d",&k2); 8 printf("k3? "); 9 scanf("%d",&k3); 10 printf("k4? "); 11 scanf("%d",&k4); 12 for (x=-10;x<=10;x++){ 13 y=k1*x*x*x+k2*x*x+k3*x+k4; 14 if (y==0) 15 printf("x=%d\n",x); 16 } 17 } Håkan Strömberg 9 KTH STH
Uppgift 9 2 #include <stdlib.h> 3 #include <time.h> 4 5 int main(void){ 6 int plats=1,kast,varv=0,ruta31=0; 7 int antalkast=0; 8 9 srand(time(0)); 10 while (varv<100){ 11 kast=rand()%6+1+rand()%6+1; 12 antalkast++; 13 plats=plats+kast; 14 if (plats>40){ 15 plats=plats-40; 16 varv++; 17 } 18 if (plats==31){ 19 ruta31++; 20 plats=11; 21 } 22 } 23 printf("antal kast: %d\n",antalkast); 24 printf("antal gånger på ruta 31: %d\n",ruta31); 25 } Uppgift 10 3 int t=0,n=1,antalfakt,faktor; 4 double p=1.0; 5 printf("antal faktorer? "); 6 scanf("%d",&antalfakt); 7 for (faktor=1;faktor<=antalfakt;faktor++){ 8 if (faktor%2==1) 9 t=t+2; 10 else 11 n=n+2; 12 p=p*(double)t/n; 13 } 14 printf("produkten blir %.3f\n",p); 15 } Håkan Strömberg 10 KTH STH