2005-06-09.kl.08-13 Uppgift 1 ( Betyg 3 uppgift ) Ett plustecken kan se ut på många sätt. En variant är den som ses nedan. Skriv ett program som låter användaren mata in storleken på plusset enligt exemplen nedan. Programkörning 1: Mata in storlek: 1 +--+ +-+ +-+ +-+ +-+ +--+ Programkörning 2: Mata in storlek: 2 +----+ +--+ +--+ +--+ +--+ +----+ Programkörning 3: Mata in storlek: 4 +--------+ +----+ +----+ +----+ +----+ +--------+
2005-06-09.kl.08-13 Uppgift 2 Inom fonetiken klassificerar man konsonantljud efter på vilket sätt de bildas och var någonstans de bildas. En klass av konsonantljud är de retroflexa ljuden, vilka bildas genom att tungspetsen böjs bakåt och förs mot tandvallens bortre del eller mot främre gommen. I många svenska dialekter kan ett antal konsonantljud förändras och uttalas retroflext om de föregås av ett r. Dessa konsonanter är n, s, t, d och l. Om flera av dessa bokstäver står efter varandra uttalas samtliga ljud retroflext om de föregås av ett r. Bokstav Exempel Representation ---------------------------------- n torn ton s fors fos t fort fot d bord bod l porla pola flera barnstol bordsben banstol bodsben En fonetikprofessor behöver hjälp att skriva ett program som kan hitta alla ljud i en text som skulle kunna uttalas retroflext. Skriv ett program som markerar alla retroflexa ljud i en text (som ligger i textfilen REN_TEXT.TXT) med motsvarande stor bokstav, se exemplet ovan. De ljud som kan bli retroflexa är alltså: n, s, t, d, l när de föregås av r (dessutom försvinner r -ljudet) och när de föregås av något annat retroflext ljud. Resultatet skall lagras i filen RETROFLEX.TXT. Det finns inga begränsningar på filens storlek (mer än att den ryms på hårddisken) och inte heller någon begränsning på radernas längder i filen.
2005-06-09.kl.08-13 Uppgift 3 En användare vill kunna rita ut snygga figurer enligt exemplen nedan på skärmen. Kravet är att ditt program skall anropa ett underprogram som heter Draw_Picture som endast får ha maximalt två heltalsparametrar (inga andra parametrar är tillåtna). Detta underprogram skall se till att utskriften på skärmen görs. Utskriften skall dessutom ske rekursivt (d.v.s. proceduren Draw_Picture skall vara rekursiv). Du får skriva ut en hel rad utan rekursion, men du får inte skriva flera rader utan rekursion. Programkörning 1: Mata in storlek: 7 XXXXXXX XXXXX XXX X XXX XXXXX XXXXXXX Programkörning 2: Mata in storlek: 6 XXXXXX XXXX XX XX XXXX XXXXXX Programkörning 3: Mata in storlek: 2 XX XX Programkörning 4: Mata in storlek: 1 X
2005-06-09.kl.08-13 Uppgift 4 I ett program som hanterar bilder vill man kunna förskjuta bilden både i x- och y-led (samtidigt om så önskas av användaren). En bild representeras av en matris innehållande ett antal heltal. Varje heltal (i intervallet [0, 255]) motsvarar en färg. Vi kan för enkelhets skull anta att bilden alltid är 4x4 bildpunkter stor, men ditt program skall ha dessa maxvärden som globala konstanter som används i programmet (detta för att enkelt kunna omdimensionera senare). Din uppgift blir att skriva ett program som skjuter bilden i x- och y-led efter användarens önskemål. En förkjutning innebär att bilden flyttas och det som trillar över kanten kommer in på andra sidan igen (man kan tänka sig att bilden sitter fast på en pappersrulle och det bilden glider runt rullen och in på papperet igen). Det finns givet ett skelett till program i filen forskjutning.adb. I detta skelett har vi tilldelat bildmatrisen de värden som skall användas av dig. Vi har däremot (som du märker) inte skapat datatypen för matrisen och vi har heller inte skrivit programmet i övrigt. Ditt program skall följa nedanstående exempel. Det är viktigt att utskrifterna exakt följer exemplen. Antag att vi har en bild med följande innehåll: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Programkörning 1: Mata in förskjutning i x-led (positivt => höger): 2 Mata in förskjutning i y-led (positivt => uppåt): 0 2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 Programkörning 2: Mata in förskjutning i x-led (positivt => höger): 0 Mata in förskjutning i y-led (positivt => uppåt): 1 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 Programkörning 3: Mata in förskjutning i x-led (positivt => höger): 1 Mata in förskjutning i y-led (positivt => uppåt): -1 15 12 13 14 3 0 1 2 7 4 5 6 11 8 9 10
2005-06-09.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program som ritar ut följande figur (i den storlek som användaren väljer) på skärmen. Figuren har storlek 5x4 i detta exempel. Det finns inga begränsningar på storleken på figuren. Det är givet att användaren alltid matar in positiva heltal till ditt program. Programkörning: Mata in antal rutor i x-led: 6 Mata in antal rutor i y-led: 3 --+ / --+ / --+ / --+
2005-06-09.kl.14-19 Uppgift 2 I svenskan finns det en verbform som heter presens particip. Det är former som springande och gående som används i meningar som Han kom springande och hon kom gående. En lingvist skulle behöva hjälp att skriva ett program som tar ut alla former i en text som skulle kunna vara presens particip, det vill säga alla ord som avslutas med (har en ände :-) som är ande eller ende. Dessa ord ska skrivas ut på en ny fil (ett ord per rad). Den text som du skall gå igenom ligger i textfilen REN_TEXT.TXT och resultatet skall skrivas till filen PRESENS_PARTICIP.TXT (också en textfil). Det är givet att inga rader i originalfilen är längre än 60 tecken. Om det skulle vara så att det finns ord som slutar på ande / ende och de ändå inte är ord av rätt sort spelar det inte någon roll i denna uppgift.
2005-06-09.kl.14-19 Uppgift 3 Skriv ett program som ritar ut nedanstående figur på skärmen. Användaren skall kunna ange vilken storlek figuren skall ha (se programkörningar nedan). Storleken anges i antal teckens bredd respektive antal teckens höjd i figuren. Ingen felhantering krävs i denna uppgift. Som du ser är figuren uppbyggd av en spegelvänd spiral som utgår från det övre vänstra hörnet i riktning åt höger. Spiralen skall alltid avslutas med ett +. Varje krök i spiralen skall markeras med ett +. För att lösa problemet kan det vara bra att ha en matris där man lagrar (ritar) figuren innan utritande på skärm. Maximal storlek på figuren är 70x20. Programkörning 1: Mata in x-dimension: 8 Mata in y-dimension: 6 -------+ +-----+ +---+ +--+ +----+ +------+ Programkörning 2: Mata in x-dimension: 10 Mata in y-dimension: 1 ---------+ Programkörning 3: Mata in x-dimension: 1 Mata in y-dimension: 3 + + Programkörning 4: Mata in x-dimension: 4 Mata in y-dimension: 7 ---+ +-+ + ++ +--+
2005-06-09.kl.14-19 Uppgift 4 I filen matte.adb finns ett litet skelett till ett huvudprogram som du kan använda. I detta finns en matristilldelning som gör att du har ett innehåll som är startvärdet i programmet. Vi har dock inte givit typdeklarationen för matrisen utan antagit att den är färdig. Det är ditt jobb att definiera typen och se till att programmet utför det som beskrivs nedan. Det är givet i uppgiften att matrisen är 4x4 stor. I ditt program skall du skriva en procedur som utför en matematisk formel på alla element i hela matrisen. Den matematiska formeln ser ut på följande sätt. Udda tal skall adderas med 1. Jämna tal skall divideras med 2. Proceduren skall vara rekursiv och den skall avslutas när minst ett av talen i matrisen blivit 1. Man skall dock inte avsluta innan alla element i matirsen genomgått sin matematiska funktion. Om inget av talen i matrisen är 1 skall samma operation utföras ytterligare minst en gång. Huvudprogrammet skall därefter skriva ut matrisens innehåll. Antag följande ursprungsmatris: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Efter en genomgång av matrisen skall den se ut på följande sätt (skall dock inte synas på skärmen utan är endast internt): 5 12 6 14 7 16 8 18 9 20 10 22 11 24 12 26 Då programmet körs skall följande matris skrivas ut (det har nu hittats en etta i matrisen): 4 4 2 4 2 2 1 5 6 6 3 6 3 3 4 7 Krav: Proceduren som utför en fullständig matematisk beräkning av hela matrisen skall vara rekursiv. Det ser man i uppgiftens formulering dessutom. Givet: Det är givet att inget av talen är 1 i ursprungsmatrisen.