Disse opgaver er tænkt som ekstra-opgaver i OOPA kurset, som hjælper nogle studerende med at få ekstra programmeringserfaring på et relativt elementært niveau.
Programmer en Mønt, som enten kan vise plat eller krone.
Denne opgaver ligner Terning-eksemplet en del, idet en mønt kan opfattes som en to-sidet terning.
Som altid, skal du beslutte dig for data repræsentation (en instansvariabel, som bestemmer om mønten viser plat eller krone). Du skal også programmere en konstruktor, samt en Flip metode der simulerer kast med mønten så den tilfældigt kan ændre tilstand. Endelig skal der programmeres en eller to properties, der aflæser om mønten viser plat eller krone.
Lad dig gerne inspirere af klassen Die hvad angår tilfældighed, brug af Random, mv.
Nu vi er igang med mønterne vælger vi i denne opgave at blive i genren. I opgave 1 var vi interesseret i tilfældighed ved møntkastning (som det bliver brugt i mange lodtrækningssituationer, f.eks. starten af en fodboldkamp). I denne opgave interesserer vi os for mønter som fysiske objekter og som betalingsmiddel.
Programmer den abstrakte klasse Mønt, som tilbyder følgende abstrakte properties:
Programmer dernæst de danske mønter, som ikke-abstrakte specialiseringer af klassen Mønt. Den første er klassen HalvtredsØre, dernæst EnKrone, osv. Disse klasser skal have instansvariable der modsvarer værdi, vægt og hul. Og klasserne skal have konstruktorer (formodentlig parameterløse).
Lav nu klassen Pung, som kan indeholde en samling af Mønt objekter. Klassen Pung skal have en instansvariabel af typen List<Mønt>. Klassen Pung skal have en Add(Mønt) metode. Endvidere skal der være følgende properties og metoder:
Programmer et interface, IFlipable, som foreskriver (annoncerer) en void, parameterløs Flip metode.
Tilpas din løsning til Opgave 1, således at Mønt klassen implementerer IFlipable.
Tilpas en version af Die klassen, således at også termingen implementerer IFlipable. En terning flippes ved at kaste den med Toss().
Lav en liste af typen List<IFlipable>, og påvis at du kan tilføje både mønter og terninger til denne liste. Gennemløb listen og kald Flip 3 gange på alle listens elementer.
Programmer en metode
public static bool IsPrime(int n){...}
som bestemmer om et heltal n er et primtal. Husk på at et tal n er et primtal, hvis n er større end 1, og hvis alle tal mellem 2 og n-1 ikke går op i n. Tallet 2 er et primtal. Husk også, at et tal x går op i y hvis og kun hvis y % x == 0.
Placer gerne metoden i Program klassen.
Brug metoden til at bestemme antallet af primtal mellem 2 og 100000. Med andre ord, skriv en løkke i Main som bestemmer og udskriver dette antal.
Der er 9592 sådanne primtal. Får I samme resultat?
Denne opgaver anvender IsPrime metoden fra Opgave 4.
Lav et Dictionary<int, bool>, kaldet primeMap, som lagrer hvorvidt et heltal er et primtal.
primeMap[2] og primeMap[3] skal begge have værdien true. primeMap[4] skal være false.
Initialiser primeMap for alle tal mellem 2 og 1000. Det betyder at du, for alle i, skal udføre primeMap[i] = en passende værdi.
Check indholdet i primeMap med følgende programfragment:
foreach (KeyValuePair<int, bool> kvp in primeMap) Console.WriteLine("{0} er {1} et primatal", kvp.Key, kvp.Value ? "" : "ikke");
Hvis ikke du forstår, hvad dette udtrykker så læs i afsnit 8.6 (som godt nok er om C, men det passer også på C#). Omkring KeyValuePair læs i afsnit 46.2 og 46.4