29.01.2015 Views

Opgave 4. CPR-nummer.

Opgave 4. CPR-nummer.

Opgave 4. CPR-nummer.

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2<br />

Forsøg med faktiske personnumre har vist at denne beskrivelse sikkert ikke er helt<br />

korrekt. I skal imidlertid blot implementere den beskrivelse der gives i Wikipedia.<br />

Dette er faktisk en lidt kompliceret opgave og I skal derfor benytte jer af del-oghersk<br />

problemløsningsstrategien (Divide et Impera efter den romerske militærtaktik.<br />

Et andet navn er stepwise refinement). Den går ud på at inddele et problem i enklere<br />

delproblemer der igen inddeles i enklere delproblemer indtil man når frem til delproblemer<br />

man relativt let kan takle. Hvert delproblem implementeres som en separat<br />

funktion.<br />

Hvis vi vil afgøre om et cpr-<strong>nummer</strong> er korrekt, kan vi søge at løse følgende delproblemer:<br />

1. Er længden lig med 10 (når vi har fjernet ’-’). Brug funktionen len()<br />

2. Er alle karaktererne cifre Brug funktionen isdigit()<br />

3. Er alle månedsangivelser mellem 01 og 12 Lav månedsdelen om til et heltal<br />

ved hjælp af int() og check om den ligger mellem 0 og 12.<br />

<strong>4.</strong> Er alle årsangivelserne mellem 00 og 99<br />

5. Passer den angivne dag med måneden (dvs. at 310269 er forbudt) Hint: lav<br />

lister over måneder med 31, 30 og 28 dage; find den liste hvori cpr’s måned<br />

ligger, læg månedens højeste dato i en variabel (hvis måneden er 10 er en højeste<br />

dato 31), og check at cpr-datoen ikke er større end denne højeste dato. I<br />

kan også bruge en dictionary: {01 : 31, 02 : 28, 03 : 31,…}.<br />

6. Giver ovenstående Kontrol af person<strong>nummer</strong> det rigtige resultat Undersøg<br />

om den pågældende checksum giver resten 0 når man dividerer med 11, dvs.<br />

at checksum % 11 == 0<br />

Nedenstående figur viser hvordan man kan dekomponere en kompleks handling som<br />

’check cpr’ i mindre handlinger som er nemme at gå til. Hver handling implementeres<br />

som en separat funktion.<br />

Man skal kunne taste flere cpr-numre ind. Hvis cpr-<strong>nummer</strong>et er korrekt skal programmet<br />

skrive ’true’ ellers ’false’. Kommandoen ’end’ skal slutte programmet.<br />

type cpr or "end":3112450091<br />

True<br />

type cpr or "end":end<br />

>>><br />

Aflevering: der afleveres et korrekt pyton program.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!