Arraymotion Skriv ett program som fyller en array med talen 1,3,5,7,9,...,99 och därefter skriver ut dem början på 99. Antal lika Skriv ett program som fyller två vektorer (arrayer) a och b med 100 slumptal i intervallet 100...200. och därefter tar reda på hur många tal som är lika på samma platser i de två vektorerna. Största gapet Skriv ett program som... fyller en array deklarerad int v[1000] med slumptal i intervallet[0... 499]. sorterar talen i arrayen i stigande ordning och därefter tar reda på den största luckan i den sorterade sekvensen. Till exempel i sekvensen...,345,347,350,352... är största luckan 350 347 = 3 Multiplikationstabell Skriv ett program som genererar en multiplikationstabell med följande utseende 2 3 4 5 6 7 8 9 10 2 4 6 8 10... 20 3 6 9 12... 30... 10 20 30... 100 För att få träning på matriser ska först alla multiplikationer utföras och lagras i en tvådimensionell matris. Därefter sker utskriften Håkan Strömberg 1 STH KTH
Över hundra Vid upprepade kast med en tärning summeras antalet ögon successivt. Så småningom når summan över 100. Skriv ett program som simulerar 30 000 sådana kastserier och bestämmer den procentuella fördelningen mellan olika slutsummor. Ett körningsexempel klarar ut begreppen: 101 Avslutade i 27.9% 102 Avslutade i 24.2% 103 Avslutade i 19.2% 104 Avslutade i 14.3% 105 Avslutade i 9.5% 106 Avslutade i 4.9% Programmet ska kunna ge olika resultat vid olika körningar. Tennisturnering I tennisklubben finns 10 spelare, rangordnade från Adam, nummer 1, som är bäst till Bertil, nummer 10, som är sämst. Adam utmanar nu Bertil och ber honom sätta ihop ett lag av spelare, bestående av Bertil och ytterligare två spelare. Varje spelare i det ena laget ska sedan möta varje spelare i det andra laget. Bertil väljer de två bästa, lediga spelarna och får ihop laget [10,2,3]. Adam, som känner sig överlägsen, väljer laget [1, 8, 9]. Hur går matchen, om varje högre rankad spelare alltid vinner över lägre rankad? Skriv ett program med följande dialog: Antal spelare i varje lag? 3 Spelare i Bertils lag? 10 2 3 Spelare i Adams lag? 1 8 9 Matchen slutar 4-5 Kör sedan programmet med utökade lag. Först Bertils[10,2,3,5] mot Adams[1,8,9,4] och sedan Bertils [10, 2, 3, 5, 7] mot Adams [1, 8, 9, 4, 6]. Resultatet är överraskande eftersom man får en känsla av att Adams lag blir starkare. Detta kallas för en paradox! Håkan Strömberg 2 STH KTH
Bästa tärningen Figur 1: De tre tärningarna Skriv ett program matchar tärningarna mot varandra. I var och en av de tre matcherna kastas varje tärning 100000 gånger. Högst talet vinner. Efter de 100000 kasten presenteras den vinstprocenten för varje tärning. Tärning 1 vinner i 44.53% Tärning 2 vinner i 55.47% Tärning 1 vinner i 55.75% Tärning 3 vinner i 44.25% Tärning 2 vinner i 44.33% Tärning 3 vinner i 55.67% Här har man alltså en idé till ett barspel där man alltid kommer att vinna i långa loppet om man låter motståndaren välja tärning först. Darttavlan 20 40 60 25 50 Figur 2: I figur 2 ser du en darttavla och hur många poäng man får då man träffar ett visst fält. Totalt finns det 62 fält. Adam har tre pilar, en blå, en röd och en gul, som han kastar mot tavlan. Antag att han träffar tavlan med alla tre pilarna. Skriv ett program som gör upp en frekvenstabell över de olika totalpoäng som är möjliga och hur många gånger dessa kan erhållas. Håkan Strömberg 3 STH KTH
Skiftregister Figur 3: Här visas första skiftningen I figuren ser Du ett skiftregister med sex bitar. En skiftning innebär att bitarna på platserna 1 och 2 adderas modulo 2 samtliga bitar i registret skiftas sedan ett steg till vänster (till lägre index) resultatet från additionen läggs på plats 6. Skriv ett program som frågar efter antalet skiftningar och som skriver ut innehållet i hela skiftregistret efter skiftningarna. Skiftregistrets startvärden lagras i programmets kod (hårdkodas), men ska enkelt kunna ändras för olika tester. Ett körningsexempel med startkonfigurationen enligt figuren: Antalet skiftningar: 5 Skiftregistret slutar i detta läge 011001 Håkan Strömberg 4 STH KTH
Lösningsförslag Arraymotion int a[50],i; for(i=0;i<50;i++) a[i]=2*i+1; for(i=49;i>=0;i--) printf("%d ",a[i]); Antal lika #include <stdlib.h> #include <time.h> int a[100],b[100],i,n=0; srand(time(0)); for(i=0;i<100;i++){ a[i]=rand()%101+100; b[i]=rand()%101+100; for(i=0;i<100;i++) if(a[i]==b[i]) n++; printf("antal lika %d\n",n); Håkan Strömberg 5 STH KTH
Största gapet int v[1000],i,j,max=0,tmp; srand(time(0)); for(i=0;i<1000;i++) v[i]=rand()%500; for(i=0;i<999;i++) for(j=i+1;j<1000;j++) if(v[i]>v[j]){ tmp=v[i]; v[i]=v[j]; v[j]=tmp; for(i=0;i<999;i++) if(v[i+1]-v[i]>max) max=v[i+1]-v[i]; printf("största gapet %d\n",max); Multiplikationstabell int i,j,m[10][10]; for(i=0;i<10;i++) for(j=0;j<10;j++) m[i][j]=(i+1)*(j+1); for(i=0;i<10;i++){ for(j=0;j<10;j++) printf("%4d",m[i][j]); printf("\n"); Håkan Strömberg 6 STH KTH
Över hundra #include <stdlib.h> #include <time.h> int serie,summa,frekvens[6]={0,0,0,0,0,0,k; srand(time(0)); for(serie=1;serie<=30000;serie++){ summa=0; while(summa<=100) summa+=rand()%6+1; frekvens[summa-101]++; for(k=0;k<6;k++) printf("%d avslutade i %4.1f %%\n",k+101,frekvens[k]/300.0); Tennisturnering int lag1[5],lag2[5],vlag1=0,vlag2=0,i,j,n; lag1[0]=10; lag2[0]=1; printf("antal spelare i lagen (<=5)? "); scanf("%d",&n); printf("lag 1 : [10 "); for(i=1;i<n;i++) scanf("%d",&lag1[i]); printf("lag 2 : [1 "); for(i=1;i<n;i++) scanf("%d",&lag2[i]); for(i=0;i<n;i++) for(j=0;j<n;j++) if(lag1[i]<lag2[j]) vlag1++; else vlag2++; printf("lag 1 vann %d matcher\n",vlag1); printf("lag 2 vann %d matcher\n",vlag2); Håkan Strömberg 7 STH KTH
Bästa tärningen int t1[6]={2,9,2,9,4,4, t2[6]={3,7,3,7,5,5, t3[6]={1,8,1,8,6,6; int i,vt=0,vs=0,rt,rs; for(i=1;i<=100000;i++){ rt=t1[rand()%6]; rs=t2[rand()%6]; if(rt>rs) vt++; else vs++; printf("tärning 1 vinner i %.2f%%\n",vt/1000.0); printf("tärning 2 vinner i %.2f%%\n",vs/1000.0); vt=0; vs=0; for(i=1;i<=100000;i++){ rt=t1[rand()%6]; rs=t3[rand()%6]; if(rt>rs) vt++; else vs++; printf("tärning 1 vinner i %.2f%%\n",vt/1000.0); printf("tärning 3 vinner i %.2f%%\n",vs/1000.0); vt=0; vs=0; for(i=1;i<=100000;i++){ rt=t2[rand()%6]; rs=t3[rand()%6]; if(rt>rs) vt++; else vs++; printf("tärning 2 vinner i %.2f%%\n",vt/1000.0); printf("tärning 3 vinner i %.2f%%\n",vs/1000.0); Håkan Strömberg 8 STH KTH
Darttavlan int p[63],n=1,i,f[181],pil1,pil2,pil3,frekvens[181]={0; for(i=1;i<=20;i++){ p[n++]=i; p[n++]=2*i; p[n++]=3*i; p[n++]=25; p[n]=50; for(pil1=1;pil1<=n;pil1++) for(pil2=1;pil2<=n;pil2++) for(pil3=1;pil3<=n;pil3++) frekvens[p[pil1]+p[pil2]+p[pil3]]++; for(i=3;i<=180;i++) printf("resultat %3d har uppnåtts %4d gånger\n",i,frekvens[i]); Skiftregister int n,reg[6]={1,0,1,1,1,0,k,siffra,i; printf("antalet skiftningar: "); scanf("%d",&n); for(k=1;k<=n;k++){ siffra=(reg[0]+reg[1])%2; for(i=0;i<5;i++) reg[i]=reg[i+1]; reg[5]=siffra; printf("skiftregistret slutar i detta läge: "); for(i=0;i<=5;i++) printf("%d",reg[i]); printf("\n"); Håkan Strömberg 9 STH KTH