2009-06-11.kl.08-13
Uppgift 1 (”Betyg 3 uppgift”)
Du skall skriva ett program som läser in 16 stycken siffror från tangentbordet. Dessa motsvarar
data som ligger i en ”matris” av storlek 4x4. Ditt program skall lagra dessa siffror i en sådan
matris. Efter inläsningen skall programmet skriva ut matrisen på skärmen.
Programmet skall därefter rotera datamängden i matrisen 90 grader medsols och därefter
skriva ut matrisen på skärmen igen. Rotationen skall ske i en separat procedur där matrisen är
det enda in- och utdatat.
Körexempel:
Mata in siffrorna (utan blanktecken): 0123456789012345
Matrisen direkt efter inmatning:
0 1 2 3
4 5 6 7
8 9 0 1
2 3 4 5
Matrisen efter rotation:
2 8 4 0
3 9 5 1
4 0 6 2
5 1 7 3
2009-06-11.kl.08-13
Uppgift 2
Du skall skriva ett program som läser in 16 stycken siffror från tangentbordet. Dessa motsvarar
data som ligger i en ”matris” av storlek 4x4. Ditt program får dock inte använda sig av annat än
en sträng med längden 16 som lagringsform för datat, d.v.s. matrisen representeras internt i
programmet som en sträng. Efter inläsningen skall programmet skriva ut matrisen på skärmen.
Programmet skall därefter rotera datamängden i matrisen 90 grader medsols och därefter
skriva ut matrisen på skärmen igen. Rotationen skall ske i en separat procedur där matrisen är
det enda in- och utdatat.
Körexempel:
Mata in siffrorna (utan blanktecken): 0123456789012345
Matrisen direkt efter inmatning:
0 1 2 3
4 5 6 7
8 9 0 1
2 3 4 5
Matrisen efter rotation:
2 8 4 0
3 9 5 1
4 0 6 2
5 1 7 3
Krav: Du får endast använda dig av en extra variabel av typen ”String” eller ”Character” samt
maximalt 2 extra heltalsvariabler för att lösa själva rotationen av matrisen. Det är tillåtet att ha
extra underprogram för att lösa delproblem vid rotationen, men även dessa har samma
begränsning som rotationsproceduren.
Krav 2: Det är inte tillåtet att använda typen ”array” överhuvudtaget i denna uppgift.
2009-06-11.kl.08-13
Uppgift 3
På en textfil som heter LONG_TEXT.TXT finns en text. Din uppgift är att skriva ett program
som går igenom hela filen och letar reda på de ord som innehåller minst tre stycken vokaler
(svenska alfabetet). Varje ord skall skrivas ut på egen rad i utskriften som skall ske på skärmen.
Det är givet att det inte finns ord som är längre än 37 tecken i filen. Ord kan dessutom inte
innehålla annat än svenska alfabetets tecken (inklusive ‘w’).
Körexempel (kanske inte med de ord som råkade finnas i den givna filen):
extrapris
hundmatspåse
lågbudgetvariant
smörgåstårta
reavaror
Om ett ord innehåller ett konstigt tecken (%, ü, ç, 2 el.dyl) räknas ordet som avslutat när
tecknet är funnet. Tecken som följer efter det konstiga tecknet räknas till nästa ord. Ett exempel
på ord som kan finnas i texten är t.ex. det tyska ordet ”Fragwürdigkeit” som då ger att ”Fragw”
inte blir med, men ”rdigkeit” kommer att stå med som ett ord med minst tre vokaler på
skärmen.
2009-06-11.kl.08-13
Uppgift 4
Euler publicerade den anmärkningsvärda kvadratiska formeln:
n 2 + n + 41
Formeln ger 40 primtal givet att man använder talen n = 0, 1, ..., 39. Dock blir det inget nytt
primtal när man ger n = 40 beroende på att 40 2 + 40 + 41 = 40 ( 40 + 1 ) + 41 är jämnt delbart
med 41och när n = 41 blir det inte bättre (man ser direkt att det är jämnt delbart med 41).
Med hjälp av datorer har man kommit fram till den fantastiska formeln:
n 2 – 79n + 1601
Denna formel producerar 80 primtal för talen n = 0, 1, ..., 79.
Antag följande form på en formel:
n 2 + an + b , där |a| < 971 och |b| < 971
Beteckningen |x| betyder absolutbeloppet av x, d.v.s. |11| = 11 och |-4| = 4.
Din uppgift är att finna den kombination av konstanterna a och b som ger flest primtal givet att
n = 0, 1, ..., P (d.v.s. den kombination av a och b som ger störst värde på P).
Körexempel (där resultatet är korrekt):
a = -59
b = 911
Här följer en funktion som kontrollerar om ett tal är ett primtal:
function Is_Prime(N : in Integer) return Boolean is
X : Integer := 3;
begin
if N = 2 then
return True;
elsif (N < 2) or else (N mod 2 = 0) then
return False;
end if;
while X ** 2 <= N loop
if N mod X = 0 then
return False;
end if;
X := X + 2;
end loop;
return True;
end Is_Prime;