Laboration 5

Alla uppgifter löser man genom att skriva klart metoder i kodskelettet, Lab5_skel, se kommentarer i detta. Ni behöver aldrig kontrollera indata, användaren skriver alltid rätt.

Tips: Uppgifterna 3 tom 6 kan använda färdiga metoder från String.

Uppgift1

Den här uppgiften handlar om Collatz conjecturen. Länken beskriver en talsekvens som alltid slutar på 1. Se http://en.wikipedia.org/wiki/Collatz_conjecture

Skriv ett program som läser in två tal n > 2 och m > n och skriver ut alla sekvenser som genereras av talen i intervallet [n, m).

Exempel

Input n > 23
Input m > 34
23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1
24, 12, 6, 3, 10, 5, 16, 8, 4, 2, 1
25, 76, 38, 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1
28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
30, 15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1
31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1
32, 16, 8, 4, 2, 1
33, 100, 50, 25, 76, 38, 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

Uppgift 2

Skapa en kommandoradsmeny med valen p, r och q (q avslutar menyn (metoden)). Vid valen r och p görs en inläsning och en utskift av den inlästa strängen. Kommandoraden skall byggas med while- och switch-satser.

Exempel

> r
Input text > qwerty
qwerty
> p
Input text > asdfgh
asdfgh
> q

(program avslutat)

Uppgfit 3

Skriv en metod som givet en sträng (en svensk mening) översätter denna till rövarspråket.

Uppgift 4

Skriv en metod som givet en sträng (en svensk mening) översätter denna till Pig latin. Metoden skall använda en boolesk hjälpmetod som avgör om ett tecken är en vokal eller inte.

Uppgift 5

Modifiera kommandoradsmenyn så att metoderna från uppgifter 3 och 4 anropas då man väljer r respektive p. Vid valen läser man in en mening på svenska som skrivs ut översatt till röverspråket eller Pig latin.

Uppgift 6

Vi startar med strängen “MI”. Kan man genom att upprepade gånger, i valfri ordning, applicera reglerna nedan transformera strängen till “MU”? T.ex. “MI”, (applicera reglerna) 1,2,2,3,1,4,2,3,4,4,2,3 … ger detta “MU”?

Regler:

  1. Lägg till U till en sträng som slutar på I. Exempel: MI blir MIU.
  2. Fördubbla strängen efter M (ändra Mx till Mxx). Exempel: MIU blirMIUIU.
  3. Ersätt III med ett U. Exampel: MUIIIU blir MUUU.
  4. Ta bort UU. Exempel: MUUU blir MU.

Skriv en metod som “provar allt” genom att testa alla kombinationer av reglerna. Spara resultaten i ett fält av strängar (max = 256 + 1). Bryt ner metoden i undermetoder, en metod för varje regel. Programmet genererar alla strängar och går därefter igenom alla och söker efter MU. Om MU hittas skriver programmet ut “FOUND!” (ni kan skriva ut de genererade strängarna också, som nedan). Fundera på om vi kan hitta MU över huvudtaget. Om inte förklara i några meningar varför inte.

Exempel

0 : MI
1 : MIU
2 : MII
3 : MI
4 : MI
5 : MIU
6 : MIUIU
7 : MIU
8 : MIU
9 : MIIU
10 : MIIII
11 : MII
12 : MII
13 : MIU
14 : MII
15 : MI
16 : MI
17 : MIU
18 : MII
19 : MI
20 : MI
21 : MIU
22 : MIUIU
23 : MIU
24 : MIU
25 : MIUIU
26 : MIUIUIUIU
27 : MIUIU
28 : MIUIU
29 : MIU
30 : MIUIU
31 : MIU
...
... inget MU än .....
Menu