foxu Napisano Maj 9, 2010 Zgłoś Share Napisano Maj 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 do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Maj 9, 2010 Zgłoś Share Napisano Maj 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 do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.