Differences

This shows you the differences between two versions of the page.

Link to this comparison view

extrauppgifter_4 [2017-09-01 14:54]
extrauppgifter_4 [2022-07-18 13:20] (current)
Line 1: Line 1:
 +====== Extrauppgifter i Programmering A kap 4 ======
 +**OBS! \\
 +Spara uppgifterna som e1.cpp, e2.cpp, ... i en mapp som du döper till e4.
 +**
 +
 +1.
 +Skriv en funktion
 +**bool isprime(int tal)**
 +som tar emot ett tal och undersöker om det är ett primtal. Om det är ett 
 +primtal skall funktionen returnera true annars false.
 +Utgå från att det endast kommer godkända värden till funktionen.
 +Du skall använda funktionen i följande program.
 +
 +<code cpp>
 +  int main(int argc, char *argv[])
 +  {
 +    int antal = 100;
 +    cout << "Detta är alla primtal mellan 2 och " << antal << endl;
 +    for(int i = 2 ; i < antal ; i++)
 +    {
 +      if(isprime(i))
 +        cout << i << endl;
 +    }
 +    system("Pause");
 +    return EXIT_SUCCESS;
 +  }
 +</code>
 +
 +2.
 +I ett samboförhållnade hade det i många år varit prat om att man skulle gifta sig. 
 +När ämnet än en gång togs upp (2002-12-03) sade mannen i huset att han hade som 
 +enda villkor att han skulle gifta sig ett datum och klockslag där alla tal var primtal.
 +a. Skriv ett program som listar alla rimliga datum som är primtal. 
 +Utgå från att mannen var 36 år. Obs! år, månad och dag skall vara primtal. 
 +b. Skriv ett tillägg som listar alla klockslag som är primtal.
 +
 +Du skall använda dig av din funktion isprime()
 +
 +I exemplet ovan så skrev mannen ett program som listade alla godkända datum och den blivande frun fick välja. 
 +De gifte sig i Arnäs kyrka 2003-07-05 kl 13.59 och är idag mycket lyckligt gifta. Inte undra på...
 +
 +3.
 +Skriv en funktion 
 +**double my_sqrt(double tal)** 
 +som beräknar ett närmevärde till roten ur ett tal, du skall använda följande enkla algoritm:
 +
 +  IN A
 +  X = A/2
 +  upprepa 10 ggr
 +      X = (A/X + X)/2
 +  UT X
 +
 +Funktionen skall användas av ett program.
 +
 +4.
 +Du skall göra om funktionen så att man skickar med hur många gånger man skall upprepa
 +**double my_sqrt(double tal, int n)** 
 +Pröva med lite oilka tal för att se hur många gånger som är lämpligt för att få att värde som kan anses som ok.
 +
 +5.
 +Skriv ett program som läser in ett tal och faktorisera det i primtal.
 +
 +6.
 +Skriv ett program som hittar alla perfekta tal under 10 000 (4 st).\\
 +Ett perfekt tal är ett heltal som är större än 1 och som är summan av sina delare. \\
 +Som delare räknas talet 1 in, men naturligtvis inte talet självt (då hade de perfekta talen definierats bort).\\ Exempel: 6 är ett perfekt tal eftersom det är delbart med 1, 2 och 3 och summan av dessa är just 6.
 +
 +
 +Det finns flera olösta gåtor angående de perfekta talen:\\
 +- Man vet inte om det finns ändligt eller oändligt många perfekta tal. \\
 +- Hittills har alla perfekta tal man hittat slutat på 6 eller 28. Men ingen har lyckats visa om alla perfekta tal gör det. \\
 +- Hittills har man inte lyckats hitta något udda perfekt tal. Men det är inte bevisat att det inte finns några sådana.\\
 +- 2005 känner man till 42 perfekta tal.
 +
 +7.
 +Vad kommer följade program att skriva ut?
 +<code cpp>
 +  int printname(string name, int n) {
 +    if(n<1) {
 +      return 0;
 +    }
 +    printname(name,n-1);
 +    cout << name << " n = " << n << endl;
 +  }
 +
 +  int main(int argc, char *argv[])
 +  {
 +    printname("Joakim",3);
 +    system("PAUSE");
 +    return EXIT_SUCCESS;
 +  }
 +
 +</code>
 +
 +
 +8.
 +Ett program ska "rita" en diamant vars storlek bestäms av ett inmatat positivt heltal.
 +  Programkörnings exempel:
 +  Diamantens storlek: 5
 +         ¤
 +        ¤ ¤
 +       ¤ ¤ ¤
 +      ¤ ¤ ¤ ¤
 +     ¤ ¤ ¤ ¤ ¤
 +      ¤ ¤ ¤ ¤
 +       ¤ ¤ ¤
 +        ¤ ¤
 +         ¤
 +
 +9.
 +Gör ett program som läser in ett tal (max 5000) och skriver ut talet med romerska siffror. Kan ju vara klokt att googla lite om hur det egentligen funkar...
 +  Skriv in ett tal: 9
 +  Blir med romerska siffror: IX
 +  Skriv in ett tal: 49
 +  Blir med romerska siffror: XLIX (Ej IL)
 +  Skriv in ett tal: 1999
 +  Blir med romerska siffror: MCMXCIX (Ej MIM)
 +  Skriv in ett tal: 445
 +  Blir med romerska siffror: CDXLV (Ej CDVL)
 +
 +10.
 +UPPGIFT 1 – KANINER (uppgift nr1 ur kval till PO 2003)\\
 +Kaniner är bra på att föröka sig. I den här uppgiften tänker vi oss att det finns obegränsat med hannar
 +och att inga kaniner dör. Vi ska försöka simulera hur många kaninhonor det finns efter varje månad om
 +det vid tiden 0 finns en enda nyfödd kaninhona. Vi antar att det tar x månader innan varje kaninhona är
 +könsmogen och att hon från och med denna ålder (x månader) varje månad föder en kull innehållande
 +y kaninungar av honkön. \\
 +Indata: Programmet ska fråga efter honornas könsmognadsålder x; <m>1 <= x <= 5</m>, samt antal honor per
 +kull y; <m>1 <= y <= 5</m>. \\
 +Utdata: Programmet ska skriva en rad för varje månad under totalt 10 månader \\
 +Exempel:
 +  Könsmognadsålder ? 2
 +  Honor per kull ? 1
 +  Efter 1 m: 1
 +  Efter 2 m: 2
 +  Efter 3 m: 3
 +  Efter 4 m: 5
 +  Efter 5 m: 8
 +  Efter 6 m: 13
 +  Efter 7 m: 21
 +  Efter 8 m: 34
 +  Efter 9 m: 55
 +  Efter 10 m: 89
 +Förklaring: Från början finns 1 nyfödd hona, låt oss kalla henne Lisa. Efter 1 månad är Lisa fortfarande
 +ensam. Efter 2 månader har Lisa fått en kull. Efter 3 månader finns 3 honor eftersom Lisa fått ytterligare
 +en kull. Efter 4 månader finns 5 honor eftersom både Lisa och hennes första unge har fått varsin kull
 +med en hona i varje.
 +