foxu Posted May 9, 2010 Report Share Posted May 9, 2010 Witam! mam pewien problem z programem poniżej pracuje na Turbo Pascal 7 lecz przy kompilacji wyskakuje mi "Cannot run a unit", kiedy wstawiam zamiast "unit" - "program" widnieje Error: begin excepted Jest ktoś wstanie pomóc? Z góry dziekuję! unit Gra; interface uses crt, dos; type _gracz = record nazwa: string[10]; slowo: string[20]; ilePkt: Integer; end; procedure GraSlowka; procedure clrscr; function dopiszWynikDoPliku (g1, g2: _gracz): String; function czyPoprawne(slowo: string): Boolean; function gramy: String; implementation (* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *) procedure clrscr; var i: integer; begin for i:=0 to 50 do writeln; end; (* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *) function dopiszWynikDoPliku (g1, g2: _gracz): string; var plik: Text; Err: integer; tekst, pk1, pk2: string; begin tekst := ''; Assign(plik, 'wynik.txt'); {$I- } Reset(plik); Err := IOResult; {$I+ } if {plik istnieje} Err = 0 then Append(plik) else Rewrite(plik); str (g1.ilepkt, pk1); str (g2.ilepkt, pk2); tekst := g1.nazwa+ ' ('+ pk1 + ') - '+ g2.nazwa+ ' (' + pk2 + ')'; writeln(plik, tekst); close(plik); dopiszWynikDoPliku := tekst; end; (* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *) function czyPoprawne(slowo: string): Boolean; var ok: Boolean; i: integer; begin i := 1; ok := length(slowo)>2; while ok and (i<=length(slowo)) do begin ok := (slowo[i] in ['a'..'z']) or (slowo[i] in ['A'..'Z']); inc(i); end; czyPoprawne := ok; end; (* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *) function gramy: String; var g: array [0..1] of _gracz; nazwa: string[10]; znak, lit1, lit2, litakt: char; kontyn, pierwsze, slowoOk: Boolean; nrg: integer; {numer aktywnego gracza} begin znak := 't'; nrg := 0; write('Podaj nazwe pierwszego gracza: '); readln(nazwa); if nazwa = '' then nazwa := 'Gracz 1'; g[0].nazwa := nazwa; g[0].slowo := ''; g[0].ilePkt := 0; write('Podaj nazwe drugiego gracza: '); readln(nazwa); if nazwa = '' then nazwa := 'Gracz 2'; g[1].nazwa := nazwa; g[1].slowo := ''; g[1].ilePkt := 0; writeln; lit1 := '0'; lit2 := '0'; litakt := '0'; kontyn := true; pierwsze := true; while kontyn do begin repeat begin slowoOk := false; while not slowoOk do begin write('* ', g[nrg].nazwa, ': '); readln(g[nrg].slowo); slowoOk := czypoprawne(g[nrg].slowo); if not slowoOk then writeln('Blad. Podane slowo jest niepoprawne.'); end; litakt := g[nrg].slowo[1]; if not ((litakt = lit1) or (litakt = lit2) or pierwsze) then writeln('Blad. Slowo powinno zaczynac sie na litere: ', lit1, ' lub ', lit2, '.'); end until ((litakt = lit1) or (litakt = lit2)) or pierwsze; {spytanie drugiego gracza o akceptacje } writeln; writeln(g[nrg].nazwa, ' podal slowo: ', g[nrg].slowo); write('Zaakceptowac? [Tak/Nie/Koniec]: '); readln(znak); while not (znak in ['t', 'T', 'n', 'N', 'k', 'K']) do begin writeln; writeln('Nieprawidlowa opcja; wpisz t/T jesli akceptujesz slowo, wpisz n/N jesli nie akceptujesz;'); write('Jesli chcesz zakonczyc gre wpisz k/K: '); readln(znak); end; if (znak = 't') or (znak = 'T') then {slowo zaakceptowane} begin if pierwsze then pierwsze := false; {aby nie sprawdzac poprawnosci pierwszego slowa} inc(g[nrg].ilePkt); {dodanie pktu pierwszemu} {zmiana pierwszej i ostatniej litery} lit1 := g[nrg].slowo[1]; lit2 := g[nrg].slowo[length(g[nrg].slowo)]; dec(nrg); nrg := abs(nrg); end else if (znak = 'n') or (znak = 'N') then {slowo odrzucone} begin inc(g[abs(nrg-1)].ilePkt); {dodanie pktu drugiemu} end else if (znak = 'k') or (znak = 'K') then begin kontyn := false; end; writeln; end; {koniec rozgrywki} gramy := dopiszWynikDoPliku(g[0], g[1]); end; (* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *) procedure GraSlowka; var kontyn: Boolean; opcja: char; wynik: String; begin wynik := ''; kontyn := true; while kontyn do begin writeln('*** Wybierz akcje: ***'); writeln('1 - Nowa gra'); writeln('2 - Wyswietl ostatni wynik'); writeln('3 - Zakoncz'); write('wybor: '); readln(opcja); writeln; if opcja = '1' then begin clrscr; wynik := gramy; end else if opcja = '2' then begin if wynik = '' then writeln('Brak wynikow - jeszcze nie odbyla sie zadna rozgrywka.') else begin writeln('*** Wynik ostatniej rozgrywki: ***'); writeln(wynik); end; readln; end else if opcja = '3' then kontyn := false else begin writeln('Blad! Nieznana opcja!'); readln; end; clrscr; end; end; end. Link to comment Share on other sites More sharing options...
Adam27 Posted May 9, 2010 Report Share Posted May 9, 2010 Wejdź sobie na pierwszy lepszy kurs Pascala i poczytaj podstawy, bo Pascal to nie Delphi, a z tego, co tu widzę, to skopiowałeś kod z Delphi. Najważniejsze błędy: * unitów się nie kompiluje, tylko programy * nie używaj słówek "interface" i "implementation", zamiast "implementation" wpisz "begin" * procedury i funkcje definiuje się przed słówkiem "begin" bezpośrednio przy ich deklaracji Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.