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;