Pomoc przy napisaniu programu. Turbo Pascal

0

Witam!
Postanowiłem napisać program który będzie odejmował wpisaną przez użytkownika sumę zdobytych punktów, od początkowo posiadanej. Ogólnie mówiąc, program pomocny do gry w darta.
Pisałem i w pewnym momencie się zatrzymałem, ponieważ stwierdziłem, że zaczynam źle robić.
Nie wiedziałem jakiej pętli użyć, ponieważ gdybym użył fora, to by mi nie działało, bo nie jest znana liczba powtórzeń. Wiadome jest, że wynik końcowy jaki musi uzyskać gracz to 0.
Może ktoś mi w tym pomóc? Wrzucam plik *.PAS abyście zobaczyli jak to zrobiłem (a raczej co zrobiłem, bo nie dokończyłem).
Proszę o pomoc.
http://tnij.com/dart192

0

Co za plik "pas", ja tam widzę "jar" :P

0
  1. lepiej wkleić kod na forum
  2. co to jest ?? for (y1 and y2) downto 0 do
    to nie jest pętla for, musisz utworzyć zmienną lokalną i po niej iterować
0

Nie mogę skopiować z pascala kodu programu :|
Nie doszliśmy w szkole jeszcze do zmiennej lokalnej chyba, albo nie wiem o co chodzi.
Myślałem, że dobrze to zrobiłem.

0

hmmm,
albo ja nie rozumiem albo ...

  1. *.pas otwierasz dowolnym edytorem tekstów
  2. pętlę for trza po zmiennej iterować

radzę najpierw poczytać o konstrukcji Pascal'a

0

'USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p:integer;
BEGIN;
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(500);
writeln('Jak juz skonczycie, nacisnij enter');
readkey;
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem prostytutka ze 2 albo 3 graczy!!');
readkey;
HALT;
end;
IF g=2 THEN
BEGIN
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
end;
IF g=3 THEN
BEGIN
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
halt;
end;
clrscr;
y1:=y1+p;
y2:=y2+p;
y3:=y3+p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(100);
Writeln('Nacisnij ENTER aby zaczac gre');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2000);
clrscr;
IF g=2 THEN
BEGIN
for (y1 and y2) downto 0 do
BEGIN
Writeln('Ile punktow zdobyl gracz ',imie1,'?');
readkey(i1);
y1:=y1-i1;
writeln;
Writeln('Ile punktow zdobyl gracz ',imie2,'?');
readkey(i2);
y2:=y2-i2;

             end.

'
Bardzo proszę :)
Jeśli ktoś chciałby mi pomóc, to proszę o poprawienie mnie w tym, co do tej pory źle zrobiłem :) Z góry dziękuję :)

1

Po tym kodzie :

Writeln('Pierwszy rzuca ',imie1,'!!');
                 delay(2000);
                 clrscr;
                 IF g=2 THEN

Moim zdaniem powinno byc cos takiego :

if g=2 then
begin
 repeat
  writeln("Rzuca 1 gracz");
  writeln("Podaj sume rzuconych punktow:");
  readln(i1);
 if (y1-i1=0) then
  begin
   writeln("Wygral gracz 1 Gratulacje");
  readkey;
 hald;
  end
else
  begin
   if(y1-i1>0) then
    begin
    y1:=y1-i1;
     writeln("Gracz 1 posiada teraz tyle punktow",y1);
    end
  else
   begin
    writeln('Gracz 1 zdobyl za duzo punktow w tej rundzie dlatego nadal posiada tyle punktoe:,y1');
  end
 end
 writeln("Rzuca 2 gracz");
  writeln("Podaj sume rzuconych punktow:");
  readln(i2);
 if (y2-i2=0) then
  begin
   writeln("Wygral gracz 2 Gratulacje");
  readkey;
 hald;
  end
else
  begin
   if(y2-i2>0) then
    begin
    y2:=y2-i2;
     writeln("Gracz 2 posiada teraz tyle punktow",y2);
    end
  else
   begin
    writeln('Gracz 2 zdobyl za duzo punktow w tej rundzie dlatego nadal posiada tyle punktoe:,y2');
  end
 end
 until ( y2=0) or(y1=0);
end

Oczywiście dla 3 graczy kod trzeba troche zmodyfikowac. Zaznaczam ze dawno nie pisalem w pascalu wiec z gory przepraszam za liczbe bledy.

1

Za takie konstrukcje:

                 IF g=2 THEN
                 BEGIN
                 writeln('Podaj imie pierwszego gracza: ');
                 readln(imie1);
                 writeln('Podaj imie drugiego gracza: ');
                 readln(imie2);
                 end;
                 IF g=3 THEN
                 BEGIN
                 writeln('Podaj imie pierwszego gracza: ');
                 readln(imie1);
                 writeln('Podaj imie drugiego gracza: ');
                 readln(imie2);
                 writeln('Podaj imie trzeciego gracza');
                 readln(imie3);
                 End;

Powinien być ostrzegawczy strzał w tył głowy ;] Nie dało się tak:

writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
  writeln('Podaj imie trzeciego gracza');
  readln(imie3);
End;

Nie mówiąc już o użyciu tablic i pętli, bo da się tą gre napisać dla n-graczy, bez ograniczania ich ilości, ale do tego trzeba myśleć a nie bezmyślnie klepac.

0

Dziękuje za pomoc!! :) Jesteście super ;)
Na ostatniej lekcji programowania mieliśmy właśnie wprowadzone tablice, ale jeszcze nie ćwiczyłem ich, więc nie bardzo myślę nad tym, gdzie je zastosować :).
Proszę jeszcze nie zamykać tematu. Napiszę tak jak mi powiedzieliście i zobaczymy czy działa :)

0

Witam ponownie :)
Wprowadziłem wasze poprawki, oraz parę moich.
Jednak kiedy wybiorę grę na trzech graczy, to źle wyświetla mi się kolejność graczy.
Wyświetla chyba w takiej kolejności:
gracz1
gracz2
gracz2
wynik gracza 3
gracz1
gracz2
gracz2
wynik gracza 3
... i tak w kółko. Nie wiem co z tym zrobić. Próbowałem zmieniać różne rzeczy, ale było tylko gorzej. Proszę o pomoc!

'USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p:integer;
BEGIN;
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(2000);
writeln('Jak juz skonczycie, nacisnij enter');
readkey;
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem prostytutka ze 2 albo 3 graczy!!');
readkey;
HALT;
end;
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
halt;
end;
clrscr;
y1:=y1+p;
y2:=y2+p;
y3:=y3+p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(1000);
clrscr;
gotoxy(25,15);
Writeln('Nacisnij ENTER aby zaczac gre');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2000);
clrscr;
if g=2 then
begin
repeat
writeln('Rzuca ',imie1);
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
end;
end;
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
end
end
until ( y2=0) or(y1=0);
end
else
begin
repeat
writeln('Rzuca ',imie1);
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
end;
end;
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
end;
end;
writeln('Rzuca ',imie2);
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie3,'. Gratulacje!!!');
readkey;
halt;
end
else
begin
if(y3-i3>0) then
begin
y3:=y3-i3;
writeln(imie3,' posiada teraz: ',y3,' punktow.');
end
else
begin
writeln('Gracz ',imie3,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y3);
end
end
until ( y2=0) or (y1=0) or (y3=0);
end
end.
'

0

Po 1 wydaje mi się ze zamiast:

 clrscr;
 y1:=y1+p;
 y2:=y2+p;
 y3:=y3+p;
 gotoxy(25,15);

Powinno być coś takiego:

clrscr;
y1:=p;
y2:=p;
if g=3 then y3:=p;
gotoxy(25,15);

Po 2 kod:

 writeln('Rzuca ',imie2);
  writeln('Podaj sume rzuconych punktow:');
  readln(i2);
 if (y2-i2=0) then

powtarza się dwukrotnie, za drugim razem powinien wyglądać tak:

 writeln('Rzuca ',imie3);
  writeln('Podaj sume rzuconych punktow:');
  readln(i3);
 if (y3-i3=0) then

Jeżeli kopiujesz kod musisz pamiętać,że należy dokładnie go sprawdzić i zmodyfikować tak jak należy.
A po 3 Gdybyś troszeczkę więcej pomyślał mógłbyś napisać ten program dla n-graczy.

1

@mto9 nie masz racji. Jeśli kopiujesz kod to znaczy że czas strzelić sobie w głowę. Kodu sie nie kopiuje, tylko wydziala się z niego pewne wzorce, funkcje, klasy etc (zależnie od języka).

0

Ojj czepiasz się ;D Chodziło mi o to ,że dyzio1414 skopiował(no ok wydzielił) kod z wcześniejszego fragmentu i nawet nie zamienił odpowiednio zmiennych.

0

Nie, on ten kod skopiował, więc zrobił źle ;] Mógł to wszystko wrzucić do drugiej pętli...

0

witam ponownie,
wywiązała się tak zażarta dyskusja, że ściągnąłem z netu moduł CRT pod D5, sfromatowałem i skompilowałem :)
i prawie działa - a prawie robi wielką różnicę :)
zgadzam się ze wszystkimi uwagami, program nie jest uniwersalny (n graczy) no i parę rzeczy można zrobić "bardziej" zgodnie ze sztuką

proponuję jeszcze dorzucić sprawdzanie czy tam gdzie jest to konieczne sprawdzać czy wprowadzono wartość liczbową

pozdro

0

Dziękuję za waszą pomoc :) każdego jednego :)
Ale prosiłbym o jeszcze jedno. Chciałem zrobić, żeby program pytał się na końcu czy użytkownik chce zagrać jeszcze raz i mi się nie udało. Dodałem pętlę ale nie działa. W ogóle program nie dochodzi do momentu kiedy pyta się o to, czy użytkownik chce zagrać jeszcze raz. Przesuwałem endy, ale to nie pomogło. Proszę, pomóżcie :)
Możecie przetestować sobie program :) Wprowadziłem jeszcze parę małych poprawek. Fajnie działa. Dzisiaj z kolegą i dziewczyną wypróbowaliśmy go i nie ma żadnych zastrzeżeń.
Jeszcze chcę dodać tylko kolory nicków i kolor wyświetlanych punktów.
Oto kod programu:
'USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p,j:integer;
BEGIN;
REPEAT
clrscr;
writeln('Witajcie!');
delay(1000);
writeln;
writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
writeln;
delay(3000);
gotoxy(25,15);
writeln('Jak juz skonczycie, nacisnij enter.');
readkey;
repeat
clrscr;
Writeln('Ilu jest graczy? Minimum 2 maximum 3');
readln(g);
CLRSCR;
IF (g<>2) and (g<>3) THEN
BEGIN
gotoxy(25,15);
writeln('Mowilem prostytutka ze 2 albo 3 graczy!!');
readkey;
end;
until (g=2) or (g=3);
writeln('Podaj imie pierwszego gracza: ');
readln(imie1);
writeln('Podaj imie drugiego gracza: ');
readln(imie2);
IF g=3 THEN
BEGIN
writeln('Podaj imie trzeciego gracza');
readln(imie3);
End;
REPEAT
clrscr;
writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
readln(p);
IF (p<>301) and (p<>501) THEN
BEGIN
gotoxy(25,15);
writeln('Czy Ty jestes glupi czy nienormalny?!');
readkey;
end;
UNTIL (p=301) or (p=501);
clrscr;
y1:=p;
y2:=p;
IF g=3 then y3:=p;
gotoxy(25,15);
writeln('Wpisujcie sume wyrzuconych punktow!');
delay(2000);
clrscr;
gotoxy(25,15);
Writeln('Nacisnij ENTER aby zaczac gre.');
readkey;
clrscr;
gotoxy(25,15);
Writeln('Pierwszy rzuca ',imie1,'!!');
delay(2500);
clrscr;
if g=2 then
begin
repeat
writeln('Rzuca ',imie1,'! (',y1,')');
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie2,': ',y2);
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
writeln;
end;
end;
writeln('Rzuca ',imie2,'! (',y2,')');
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1);
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
writeln;
end
end
until ( y2=0) or(y1=0);
end
else
begin
repeat
writeln('Rzuca ',imie1,'! (',y1,')');
writeln('Podaj sume rzuconych punktow:');
readln(i1);
if (y1-i1=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie2,': ',y2,' ',imie3,': ',y3);
readkey;
halt;
end
else
begin
if(y1-i1>0) then
begin
y1:=y1-i1;
writeln(imie1,' posiada teraz: ',y1,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
writeln;
end;
end;
writeln('Rzuca ',imie2,' (',y2,')!');
writeln('Podaj sume rzuconych punktow:');
readln(i2);
if (y2-i2=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1,' ',imie3,': ',y3);
readkey;
halt;
end
else
begin
if(y2-i2>0) then
begin
y2:=y2-i2;
writeln(imie2,' posiada teraz: ',y2,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
writeln;
end;
end;
writeln('Rzuca ',imie3,'! (',y3,')');
writeln('Podaj sume rzuconych punktow:');
readln(i3);
if (y3-i3=0) then
begin
clrscr;
gotoxy(25,15);
writeln('Wygral gracz ',imie3,'. Gratulacje!!!');
writeln;
writeln('Pozostali uczestnicy maja punktow:');
writeln(imie1,': ',y1,' ',imie2,': ',y2);
readkey;
halt;
end
else
begin
if(y3-i3>0) then
begin
y3:=y3-i3;
writeln(imie3,' posiada teraz: ',y3,' punktow.');
writeln;
end
else
begin
writeln('Gracz ',imie3,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y3);
writeln;
end
end
until ( y2=0) or (y1=0) or (y3=0);
end;
clrscr;
gotoxy(25,15);
writeln('Program wykonal Marcin D.');
writeln;
gotoxy(25,15);
writeln('Zapraszam do nastepnej gry!');
readkey;
clrscr;
gotoxy(25,15);
writeln('Zagrac jeszcze raz?');
gotoxy(25,15);
writeln('Wpisz 1 jesli chcecie zagrac jeszcze raz.');
writeln('Wpisz 2 jesli chcecie zakonczyc gre.');
readln(j);
until j=2;
end.

0

Chwile usiadłem przy tym kodzie i mogę tylko powiedzieć,że jest strasznie nie czytelny... bo błędu się nie doszukałem. Następnym razem używaj wcięć..

Przypuszczam,że może coś nie tak z "begin-end".

0

Okej, będę się starał pisać czytelniej.
A jakich wcięć mam używać?
Może ktoś jeszcze by mi pomógł? Proszę :)

1

Np. takich:

USES CRT;
VAR
imie1,imie2,imie3:string;
y1,y2,y3,i1,i2,i3,g,p,j:integer;
BEGIN
     REPEAT
      BEGIN
           clrscr;
           writeln('Witajcie!');
           delay(1000);
           writeln;
           writeln('Zagrajcie najpierw kto rzuci najblizej srodka, aby wiedziec kto zacznie gre jako pierwszy.');
           writeln;
           delay(3000);
           gotoxy(25,15);
           writeln('Jak juz skonczycie, nacisnij enter.');
           readkey;
      REPEAT
       BEGIN
             clrscr;
             Writeln('Ilu jest graczy? Minimum 2 maximum 3');
             readln(g);
             CLRSCR;
             IF (g<>2) and (g<>3) THEN
              BEGIN
                   gotoxy(25,15);
                   writeln('Mowilem kur*** ze 2 albo 3 graczy!!');
                   readkey;
              END;
       END;
      UNTIL (g=2) or (g=3);
      writeln('Podaj imie pierwszego gracza: ');
      readln(imie1);
      writeln('Podaj imie drugiego gracza: ');
      readln(imie2);
      IF g=3 THEN
       BEGIN
            writeln('Podaj imie trzeciego gracza');
            readln(imie3);
       END;
       REPEAT
        BEGIN
             clrscr;
             writeln('Od ilu punktow chcecie grac? Od 501 czy 301?');
             readln(p);
             IF (p<>301) and (p<>501) THEN
             BEGIN
                 gotoxy(25,15);
                 writeln('Czy Ty jestes glupi czy nienormalny?!');
                 readkey;
             END;
        END;
       UNTIL (p=301) or (p=501);
       clrscr;
       y1:=p;
       y2:=p;
       IF g=3 then y3:=p;
       gotoxy(25,15);
       writeln('Wpisujcie sume wyrzuconych punktow!');
       delay(2000);
       clrscr;
       gotoxy(25,15);
       Writeln('Nacisnij ENTER aby zaczac gre.');
       readkey;
       clrscr;
       gotoxy(25,15);
       Writeln('Pierwszy rzuca ',imie1,'!!');
       delay(2500);
       clrscr;
       IF g=2 then
        BEGIN
             REPEAT
              BEGIN
                   writeln('Rzuca ',imie1,'! (',y1,')');
                   writeln('Podaj sume rzuconych punktow:');
                   readln(i1);
                   IF (y1-i1=0) then
                    BEGIN
                         clrscr;
                         gotoxy(25,15);
                         writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
                         writeln;
                         writeln('Pozostali uczestnicy maja punktow:');
                         writeln(imie2,': ',y2);
                         readkey;
                         halt;
                    END
                   ELSE
                    BEGIN
                         IF (y1-i1>0) then
                          BEGIN
                               y1:=y1-i1;
                               writeln(imie1,' posiada teraz: ',y1,' punktow.');
                               writeln;
                          END
                         ELSE
                          BEGIN
                          writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
                               writeln;
                          END;
                    END;
                   writeln('Rzuca ',imie2,'! (',y2,')');
                   writeln('Podaj sume rzuconych punktow:');
                   readln(i2);
                   IF (y2-i2=0) then
                    BEGIN
                         clrscr;
                         gotoxy(25,15);
                         writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
                         writeln;
                         writeln('Pozostali uczestnicy maja punktow:');
                         writeln(imie1,': ',y1);
                         readkey;
                         halt;
                    END
                   ELSE
                    BEGIN
                         IF(y2-i2>0) then
                          BEGIN
                               y2:=y2-i2;
                               writeln(imie2,' posiada teraz: ',y2,' punktow.');
                               writeln;
                          END
                         ELSE
                          BEGIN
                          writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
                               writeln;
                          END;
                    END;
              END;
             UNTIL ( y2=0) or(y1=0);
       END
      ELSE
       BEGIN
            REPEAT
             BEGIN
                  writeln('Rzuca ',imie1,'! (',y1,')');
                  writeln('Podaj sume rzuconych punktow:');
                  readln(i1);
                  IF (y1-i1=0) then
                   BEGIN
                        clrscr;
                        gotoxy(25,15);
                        writeln('Wygral gracz ',imie1,'. Gratulacje!!!');
                        writeln;
                        writeln('Pozostali uczestnicy maja punktow:');
                        writeln(imie2,': ',y2,'  ',imie3,': ',y3);
                        readkey;
                        halt;
                   END
                  ELSE
                   BEGIN
                        IF(y1-i1>0) then
                         BEGIN
                              y1:=y1-i1;
                              writeln(imie1,' posiada teraz: ',y1,' punktow.');
                              writeln;
                         END
                        ELSE
                         BEGIN
                         writeln('Gracz ',imie1,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y1);
                              writeln;
                         END;
                   END;
                  writeln('Rzuca ',imie2,' (',y2,')!');
                  writeln('Podaj sume rzuconych punktow:');
                  readln(i2);
                  IF (y2-i2=0) then
                   BEGIN
                        clrscr;
                        gotoxy(25,15);
                        writeln('Wygral gracz ',imie2,'. Gratulacje!!!');
                        writeln;
                        writeln('Pozostali uczestnicy maja punktow:');
                        writeln(imie1,': ',y1,'  ',imie3,': ',y3);
                        readkey;
                        halt;
                   END
                  ELSE
                   BEGIN
                        IF(y2-i2>0) then
                         BEGIN
                              y2:=y2-i2;
                              writeln(imie2,' posiada teraz: ',y2,' punktow.');
                              writeln;
                         END
                        ELSE
                         BEGIN
                         writeln('Gracz ',imie2,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y2);
                              writeln;
                         END;
                   END;
                  writeln('Rzuca ',imie3,'! (',y3,')');
                  writeln('Podaj sume rzuconych punktow:');
                  readln(i3);
                  IF (y3-i3=0) then
                   BEGIN
                        clrscr;
                        gotoxy(25,15);
                        writeln('Wygral gracz ',imie3,'. Gratulacje!!!');
                        writeln;
                        writeln('Pozostali uczestnicy maja punktow:');
                        writeln(imie1,': ',y1,'  ',imie2,': ',y2);
                        readkey;
                        halt;
                   END
                  ELSE
                   BEGIN
                        IF(y3-i3>0) then
                         BEGIN
                              y3:=y3-i3;
                              writeln(imie3,' posiada teraz: ',y3,' punktow.');
                              writeln;
                         END
                        ELSE
                         BEGIN
                         writeln('Gracz ',imie3,' zdobyl za duzo punktow w tej rundzie dlatego nadal posiada punktow:',y3);
                              writeln;
                         END;
                   END;
             END;
            UNTIL ( y2=0) or (y1=0) or (y3=0);
       END;
       clrscr;
       gotoxy(25,15);
       writeln('Program wykonal Marcin D.');
       writeln;
       gotoxy(25,15);
       writeln('Zapraszam do nastepnej gry!');
       readkey;
       clrscr;
       gotoxy(25,15);
       writeln('Zagrac jeszcze raz?');
       gotoxy(25,15);
       writeln('Wpisz 1 jesli chcecie zagrac jeszcze raz.');
       writeln('Wpisz 2 jesli chcecie zakonczyc gre.');
       readln(j);
     END;
    UNTIL (j=2);
END.
1

No teraz jak użyłem wcięć od razu widzę, że wystarczy w każdym miejscu występowania instrukcji halt; zamienić ją na instrukcję break; i powinno być ok;)

0

:O Jak to zrobiłeś!? Ale ładnie! :D
Zaraz zamienię te halty i zobaczę czy działa :D


Działa!!! Dziękuję!!! Jestem bardzo wdzięczny!!!
Powiedz, czym różni się "break" od "halt" ?

0

Kod programu na forum umieszczasz w ten sposób:
<code=nazwa jezyka(np.pascal))>
kod programu
<
/code>
tyle,że bez tych ***
i o wiele lepiej widać ,ale już nie chcę mówić, że trochę czasu przeznaczyłem na formatowanie tego kodu ;D

0

Działa!!! Dziękuję!!! Jestem bardzo wdzięczny!!!
Powiedz, czym różni się "break" od "halt" ?

1

program Darts;

uses Crt;

const Maks = 10; { Maksymalnie 10 graczy }

var
Gracze: array[1..Maks] of string;
Punkty: array[1..Maks] of Integer;
IluGraczy, PktStart, Zwyciezca, Tmp, i: Integer;
Koniec: Boolean;
Znak: Char;

begin
repeat
ClrScr;
repeat
Write('Ilu jest graczy? Wybierz 2..10: ');
Readln(IluGraczy);
if (IluGraczy < 2) or (IluGraczy > 10) then begin
GotoXY(1, WhereY - 1);
ClrEol;
end;
until (IluGraczy >= 2) and (IluGraczy <= 10);
for i:= 1 to IluGraczy do begin
Write('Podaj imie ', i, '. gracza: ');
Readln(Gracze[i]);
end;
repeat
Write('Od ilu punktow zaczynac gre? (301 lub 501): ');
Readln(PktStart);
if (PktStart <> 301) and (PktStart <> 501) then begin
GotoXY(1, WhereY - 1);
ClrEol;
end;
until (PktStart = 301) or (PktStart = 501);
for i:= 1 to IluGraczy do Punkty[i]:= PktStart;

Koniec:= false;
ClrScr;
Writeln('Podawaj liczbe punktow rzuconych przez gracza');
repeat
  for i:= 1 to IluGraczy do begin
    GotoXY(1, i + 2);
    Write('Gracz ', Gracze[i], ' (', Punkty[i], ' pkt.) rzucil: ');
    Readln(Tmp);
    if Punkty[i] >= Tmp then Dec(Punkty[i], Tmp);
    if Punkty[i] = 0 then begin
      Zwyciezca:= i;
      Koniec:= true;
      Break;
    end;
    GotoXY(1, WhereY - 1);
    ClrEol;
    Writeln('Gracz ', Gracze[i], ' ma teraz ', Punkty[i], ' pkt.');
  end;
until Koniec;
ClrScr;
Writeln('Koncowa punktacja:');
Writeln('   Zwyciezca: ', Gracze[Zwyciezca]);
Writeln('Pozostali gracze:');
for i:= 1 to IluGraczy do
 if i <> Zwyciezca then Writeln('   ', Gracze[i], ': ', Punkty[i], 'pkt.');
Write('Jeszcze raz? (t/n): ');
Znak:= Readkey;

until UpCase(Znak) = 'N';
end.

0

O widzisz program dla 10 graczy max a zajmuje mniej miejsca niż ten twój;D Ja też bym go tak napisał, ale tobie wybaczam bo nie znasz jeszcze tablic ;)

0

O kurde :O!!!! Przecież on używa jakichś poleceń których ja na oczy nie widziałem!! :O
Zarąbisty ten program! A ja tyle czasu robiłem ten swój, a Ty mi w jednej chwili pokazałeś, że tak naprawdę g**no umiem... W sumie minęło dopiero pierwsze półrocze w szkole, a jestem w pierwszej klasie technikum :D Programowanie mamy 2godziny w tygodniu :D To chyba tłumaczy mój niski poziom wiedzy :D

0

Tak się składa,że jestem w twoim wieku;D i również mam 2 lekcje PSIO w tygodniu, tylko,że ja uwielbiam PSIO i Pascala już przerobiłem prawie całego (80%) sam i teraz już uczę się c++ i Ci powiem,że po 1 półroczu potrafię już klasy ;D

0

Dlaczego pod IF jest GotoXY i co znaczy w tym przypadku "Wherey"?
Do czego służy ClrEol?

if (IluGraczy < 2) or (IluGraczy > 10) then begin
GotoXY(1, WhereY - 1);
ClrEol;

0

ClrEol jeśli dobrze pamiętam służy do czyszczenia linii, coś podobnego do clrscr tylko ,że clreol czyści tylko linę w której znajduję się kursor.
GotoxY to wiadomo,że ustawia kursor w wybranym miejscu a co do "whereY-1" nie jestem pewien ale myślę ,że oznacza to położenie kursora w miejscu w ktorym się znajduje -1 oczywiście w współrzędnej Y ;d

0

Przeróbka dla n graczy:

program Darts;
uses Crt;
var
    Gracze: array of string; { Tablica dynamiczna }
    Punkty: array of Integer; { j/w }
    IluGraczy, PktStart, Zwyciezca, Tmp, i: Integer;
    Koniec: Boolean;
    Znak: Char;
begin
  repeat
    ClrScr;
    Write('Ilu jest graczy ? ');
    Readln(IluGraczy);
    SetLenGth(Gracze, IluGraczy+1); 
    SetLenGth(Punkty, IluGraczy+1); 
    for i:= 1 to IluGraczy do begin
      Write('Podaj imie ', i, '. gracza: ');
      Readln(Gracze[i]);
    end;
    repeat
      Write('Od ilu punktow zaczynac gre? (301 lub 501): ');
      Readln(PktStart);
     if (PktStart <> 301) and (PktStart <> 501) then begin
        GotoXY(1, WhereY - 1);
        ClrEol;
      end;
    until (PktStart = 301) or (PktStart = 501);
    for i:= 1 to IluGraczy do Punkty[i]:= PktStart;

    Koniec:= false;
    ClrScr;
    Writeln('Podawaj liczbe punktow rzuconych przez gracza');
    repeat
      for i:= 1 to IluGraczy do begin
        GotoXY(1, i + 2);
        Write('Gracz ', Gracze[i], ' (', Punkty[i], ' pkt.) rzucil: ');
        Readln(Tmp);
        if Punkty[i] >= Tmp then Dec(Punkty[i], Tmp);
        if Punkty[i] = 0 then begin
          Zwyciezca:= i;
          Koniec:= true;
          Break;
        end;
        GotoXY(1, WhereY - 1);
        ClrEol;
        Writeln('Gracz ', Gracze[i], ' ma teraz ', Punkty[i], ' pkt.');
      end;
    until Koniec;
    ClrScr;
    Writeln('Koncowa punktacja:');
    Writeln('   Zwyciezca: ', Gracze[Zwyciezca]);
    Writeln('Pozostali gracze:');
    for i:= 1 to IluGraczy do
     if i <> Zwyciezca then Writeln('   ', Gracze[i], ': ', Punkty[i], 'pkt.');
    Write('Jeszcze raz? (t/n): ');
    Znak:= Readkey;
  until UpCase(Znak) = 'N';
end.

Tak będzie (powinno) działać dla N graczy (oczywiście, wszystko zależy od pamięci RAM) :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1