Ukeoppgaver til øvelse 3. september 2009 (Oppgave 2, 4 og 5 er de viktigste å få med seg.) Oppgave 1 --------- Dette RusC-programmet int a, b; int main () { putchar('?'); a = getint(); b = 2*a; putint(a); putchar(' '); putint(b); putchar(10); } gir følgende feilmelding: RusC error in line 1: A semicolonToken expected, but found a commaToken! Hva er galt? Oppgave 2 --------- Dette RusC-programmet int main () { int v; v = getint()-1; putint(v); putchar(10); } gir denne feilmeldingen: RusC error in line 6: A semicolonToken expected, but found a numberToken! Hva er galt? Hva må gjøres for å få et riktig program? Oppgave 3 --------- Oversett den merkede linjen til Raskas-kode: int main () { int v; v = -5; v = 3*v + 7; /* Denne linjen! */ putint(v); putchar(10); } Oppgave 4 --------- Anta at vi har dette lille RusC-programmet: # Et lite testprogram int main () { int LF; LF = 10; /* LF = Line Feed */ putchar('#'); putchar(LF); } Når vi kompilerer det med «rusc -testscanner p.rusc» vil loggfilen se slik ut: 1: # Et lite testprogram 2: 3: int main () Scanner: intToken Scanner: nameToken main Scanner: leftParToken Scanner: rightParToken 4: { Scanner: leftCurlToken 5: int LF; LF = 10; /* LF = Line Feed */ Scanner: intToken Scanner: nameToken int Scanner: semicolonToken Scanner: nameToken LF Scanner: assignToken Scanner: numberToken 10 Scanner: semicolonToken Scanner: commentToken 6: putchar('#'); putchar(LF); Scanner: nameToken putchar Scanner: leftParToken Scanner: numberToken 35 Scanner: rightParToken Scanner: semicolonToken Scanner: nameToken putchar Scanner: nameToken LF Scanner: rightParToken Scanner: semicolonToken 7: } Scanner: rightCurlToken Scanner: eofToken Scanner: eofToken Det vil si, jeg har lagt inn tre feil; hvilke? Oppgave 5 --------- Metoden Scanner.readNext inneholder while (nextNextToken == Token.noToken) { //-- Må endres i del 0: } Legg inn koden som oppdager assignToken (=) og equalToken (==). Oppgave 6 --------- Her er et lite Java-program som stokker og deler ut spillkort, for eksempel til bridge. Resultatet av en kjøring kan se slik ut: > java DelUt Spiller 1: Kl-2 Kl-8 Kl-Q Ru-3 Ru-6 Ru-7 Ru-K Hj-2 Hj-10 Hj-Q Sp-3 Sp-5 Sp-J Spiller 2: Kl-5 Kl-7 Kl-10 Ru-2 Ru-4 Ru-5 Ru-J Ru-Q Hj-3 Hj-4 Hj-9 Hj-J Sp-10 Spiller 3: Kl-9 Kl-K Kl-A Ru-9 Ru-10 Ru-A Hj-5 Hj-7 Sp-7 Sp-8 Sp-9 Sp-K Sp-A Spiller 4: Kl-3 Kl-4 Kl-6 Kl-J Ru-8 Hj-6 Hj-8 Hj-K Hj-A Sp-2 Sp-4 Sp-6 Sp-Q Fyll ut det som mangler av programmet. import java.util.*; enum Farge { // Fyll ut: } class Spillkort implements Comparable { Farge f; int v; Spillkort (Farge f, int v) { this.f = f; this.v = v; } public String toString () { // Fyll ut: } public int compareTo (Spillkort x) { // Fyll ut: } public boolean equals (Spillkort x) { // Fyll ut: } } class DelUt { public static void main (String arg[]) { // Lag en full kortstokk: List kortstokk = new ArrayList(); for (Farge fx: Farge.values()) { for (int vx = 1; vx <= 13; ++vx) { kortstokk.add(new Spillkort(fx,vx)); } } // Stokk den: java.util.Collections.shuffle(kortstokk); // Del ut kortene: for (int spiller = 1; spiller <= 4; ++spiller) { List bunke = new ArrayList(); for (int i = 1; i <= 13; ++i) { bunke.add(kortstokk.remove(0)); } // Sorter spillerens bunke: java.util.Collections.sort(bunke); // Skriv ut bunken: System.out.print("Spiller " + spiller + ":"); for (Spillkort k: bunke) { System.out.print(" "+k); } System.out.println(); System.out.println(); } } }