pascal - problem

Forum Komputery
Odpowiedz
05.06.2011 21:53
1
odpowiedz
Sanshin_NPC
44
Generał

pascal - problem

wiec tak tutaj jest moja gra kółko i krzyżyk
Kod:

uses crt;
var
tab: array[1..3,1..3] of char;
i,n,k:integer;
v:char;

procedure krzyzyk;
begin
randomize;
for n:=1 to 3 do
begin
for i:=1 to 3 do
tab[i,n]:=' ';
writeln;
end;
repeat
write('Wpisz x albo o: ');
readln(v);
if (v='x')or(v='o')
then
clrscr;
begin
write('Podaj kolumne: ');
readln(n);
write('Podaj wiersz: ');
readln(i);
if tab[i,n]=' ' then
tab[i,n]:=v
else
write('Miejsce zajete');

for i:=1 to 3 do
begin
writeln;
if i<>1 then
writeln('------');
for n:=1 to 3 do
if n<>3 then
write(tab[i,n], '|')
else
write(tab[i,n]);
end;

end;

until v=' ';

end;

begin
clrscr;
krzyzyk;
readkey;
end.

__________________________________________________

a tutaj jest kod do sprawdzenia czy wygrało kółko czy krzyżyk

Kod:

if(tab[1,1]='O')and(tab[2,1]='O')and(tab[3,1]='O')then
wynik:='O';
if(tab[1,2]='O')and(tab[2,2]='O')and(tab[3,2]='O')then
wynik:='O';
if(tab[1,3]='O')and(tab[2,3]='O')and(tab[3,3]='O')then
wynik:='O';

if(tab[1,1]='O')and(tab[1,2]='O')and(tab[1,3]='O')then
wynik:='O';
if(tab[2,1]='O')and(tab[2,2]='O')and(tab[2,3]='O')then
wynik:='O';
if(tab[3,1]='O')and(tab[3,2]='O')and(tab[3,3]='O')then
wynik:='O';

if(tab[1,1]='O')and(tab[2,2]='O')and(tab[3,3]='O')then
wynik:='O';
if(tab[1,3]='O')and(tab[2,2]='O')and(tab[3,1]='O')then
wynik:='O';

wstawiałem to w różne miejsca w grze lecz bez powodzenia może mi ktoś powiedzieć gdzie mam to wstawić by pokazywało mi, któa strona wygrała?

05.06.2011 23:22
2
odpowiedz
Sanshin_NPC
44
Generał

up

06.06.2011 00:40
3
odpowiedz
Sanshin_NPC
44
Generał

up

06.06.2011 07:38
4
odpowiedz
Mark24
12
Legend

stary dobry pascal... jeszcze tego uczą?

Tak na pierwszy rzut oka - to na dole sprawdza TYLKO czy wygrało kółko. Po drugie jest z całkiem innej bajki, nawet zmiennej "wynik" nie masz zadeklarowanej u siebie.
Więc masz rację - nie będzie działać bez względu na miejsce wstawienia.

06.06.2011 12:50
5
odpowiedz
Sanshin_NPC
44
Generał

jak widać uczą :)

to sprawdzenia do krzyżyka

if(tab[1,1]='X')and(tab[2,1]='X')and(tab[3,1]='X')then
wynik:='X';
if(tab[1,2]='X')and(tab[2,2]='X')and(tab[3,2]='X')then
wynik:='X';
if(tab[1,3]='X')and(tab[2,3]='X')and(tab[3,3]='X')then
wynik:='X';

if(tab[1,1]='X')and(tab[1,2]='X')and(tab[1,3]='X')then
wynik:='X';
if(tab[2,1]='X')and(tab[2,2]='X')and(tab[2,3]='X')then
wynik:='X';
if(tab[3,1]='X')and(tab[3,2]='X')and(tab[3,3]='X')then
wynik:='X';

if(tab[1,1]='X')and(tab[2,2]='X')and(tab[3,3]='X')then
wynik:='X';
if(tab[1,3]='X')and(tab[2,2]='X')and(tab[3,1]='X')then
wynik:='X';

_______________________________________________

co do zmiennej "wynik" to tutaj ją można wstawić? ----> i,n,k,wynik:integer;

06.06.2011 12:58
6
odpowiedz
ElNinho
159
STROH 80

nie, wynik nie jest zmienną typu integer

06.06.2011 13:51
7
odpowiedz
DEXiu
151
Senator

Sam to pisałeś? Bo jakoś wątpię...
Przede wszystkim nie będzie działać dlatego, że w sprawdzaniu wyniku sprawdzasz wielkie litery 'X' i 'O', a w grze wprowadzasz małe. Poza tym możnaby się przyczepić paru szczegółów:
- brak sprawdzania czyja jest kolej - na dobrą sprawę może cały czas grać "kółko" i będzie ok
- pętla gry powinna się kończyć w momencie, gdy ktoś wygrał albo w momencie gdy cała plansza jest zajęta (9 poprawnych ruchów - nie takich "Miejsce zajete"), a nie gdy gracz wprowadzi spację
- we fragmencie:

if (v='x')or(v='o')
then
clrscr;
begin

clrscr chyba też miał być wewnątrz "begin - end"? Bo inaczej nie widzę sensu w ogóle wstawiać tam begina i enda. W tym momencie na dobrą sprawę można wpisać na pole dowolny znak a nie tylko 'x' lub 'o'.

06.06.2011 20:32
8
odpowiedz
Sanshin_NPC
44
Generał

no bez tego clrscr'a za kazdym podaniem miejsca w ktorym ma byc x albo o robiła się nowa tablica ten clrscr sprawia, że wszystko jest na jednej ale to wiesz. tak wiem, że program nie jest "idealny" i tak tez ma nie być. nie musi mówić kogo kolej itp. chce tylko by na końcu pokazywał kto wygrał i to wszystko. no dobra jeśli zmienie wielkość x i o, w któe miejsce wstawić te sprawdzenia? tylko o to mi chodzi niczego więcej nie chce... chce to zaliczyć i mieć z głowy. jestem Biol/Gegr a programowanie to czarna magia. pisałem to na lekcji przy pomocy kumpla.
jeśli nie integer jako wynik to?

06.06.2011 21:59
9
odpowiedz
Sanshin_NPC
44
Generał

up

06.06.2011 22:01
10
odpowiedz
DEXiu
151
Senator

Lepiej od razu się przyznaj od kogo ten programik zerżnąłeś albo kto ci go pisał... :/

Wstaw to pomiędzy until v=' '; a end; który jest zaraz poniżej. A "jeśli nie integer to..." może char? :|

06.06.2011 22:21
11
odpowiedz
Sanshin_NPC
44
Generał

uses crt;
var
tab: array[1..3,1..3] of char;
i,n,k:integer;
v,wynik:char;

procedure krzyzyk;
begin
randomize;
for n:=1 to 3 do
begin
for i:=1 to 3 do
tab[i,n]:=' ';
writeln;
end;
repeat
write('Wpisz x albo o: ');
readln(v);
if (v='x')or(v='o')
then
clrscr;
begin
write('Podaj kolumne: ');
readln(n);
write('Podaj wiersz: ');
readln(i);
if tab[i,n]=' ' then
tab[i,n]:=v
else
write('Miejsce zajete');

for i:=1 to 3 do
begin
writeln;
if i<>1 then
writeln('------');
for n:=1 to 3 do
if n<>3 then
write(tab[i,n], '|')
else
write(tab[i,n]);
end;

end;

until v=' ';

if(tab[1,1]='X')and(tab[2,1]='X')and(tab[3,1]='X')then
wynik:='X';
if(tab[1,2]='X')and(tab[2,2]='X')and(tab[3,2]='X')then
wynik:='X';
if(tab[1,3]='X')and(tab[2,3]='X')and(tab[3,3]='X')then
wynik:='X';

if(tab[1,1]='x')and(tab[1,2]='x')and(tab[1,3]='x')then
wynik:='x';
if(tab[2,1]='x')and(tab[2,2]='x')and(tab[2,3]='x')then
wynik:='x';
if(tab[3,1]='x')and(tab[3,2]='x')and(tab[3,3]='x')then
wynik:='x';

if(tab[1,1]='x')and(tab[2,2]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,3]='x')and(tab[2,2]='x')and(tab[3,1]='x')then
wynik:='x';

if(tab[1,1]='O')and(tab[2,1]='O')and(tab[3,1]='O')then
wynik:='O';
if(tab[1,2]='O')and(tab[2,2]='O')and(tab[3,2]='O')then
wynik:='O';
if(tab[1,3]='O')and(tab[2,3]='O')and(tab[3,3]='O')then
wynik:='O';

if(tab[1,1]='o')and(tab[1,2]='o')and(tab[1,3]='o')then
wynik:='o';
if(tab[2,1]='o')and(tab[2,2]='o')and(tab[2,3]='o')then
wynik:='o';
if(tab[3,1]='o')and(tab[3,2]='o')and(tab[3,3]='o')then
wynik:='o';

if(tab[1,1]='o')and(tab[2,2]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,3]='o')and(tab[2,2]='o')and(tab[3,1]='o')then
wynik:='o';
end;

begin
clrscr;
krzyzyk;
readkey;
end.

czyli po zmianie x'ow i o będzie tak.

spoiler start


pisałem znajomy mi "pomagał"

spoiler stop

06.06.2011 22:49
12
odpowiedz
DEXiu
151
Senator

Nie pozmieniałeś wszystkich 'X' i 'O' na małe. Poza tym przydałoby się jeszcze wypisać ten wynik, bo cóż z tego, że program sobie go ustali.

07.06.2011 18:41
13
odpowiedz
Sanshin_NPC
44
Generał

tutaj z poprawionymi wielkościami liter

uses crt;
var
tab: array[1..3,1..3] of char;
i,n,k:integer;
v,wynik:char;

procedure krzyzyk;
begin
randomize;
for n:=1 to 3 do
begin
for i:=1 to 3 do
tab[i,n]:=' ';
writeln;
end;
repeat
write('prosze o wpisanie x lub o: ');
readln(v);
if (v='x')or(v='o')
then
clrscr;
begin
write('prosze o podanie kolumny kolumne: ');
readln(n);
write('prosze o podanie wiersz: ');
readln(i);
if tab[i,n]=' ' then
tab[i,n]:=v
else
write('przepraszam ale to miejsce jest juz zajete');

for i:=1 to 3 do
begin
writeln;
if i<>1 then
writeln('------');
for n:=1 to 3 do
if n<>3 then
write(tab[i,n], '|')
else
write(tab[i,n]);
end;

end;

until v=' ';

if(tab[1,1]='x')and(tab[2,1]='x')and(tab[3,1]='x')then
wynik:='x';
if(tab[1,2]='x')and(tab[2,2]='x')and(tab[3,2]='x')then
wynik:='x';
if(tab[1,3]='x')and(tab[2,3]='x')and(tab[3,3]='x')then
wynik:='x';

if(tab[1,1]='x')and(tab[1,2]='x')and(tab[1,3]='x')then
wynik:='x';
if(tab[2,1]='x')and(tab[2,2]='x')and(tab[2,3]='x')then
wynik:='x';
if(tab[3,1]='x')and(tab[3,2]='x')and(tab[3,3]='x')then
wynik:='x';

if(tab[1,1]='x')and(tab[2,2]='x')and(tab[3,3]='x')then
wynik:='x';
if(tab[1,3]='x')and(tab[2,2]='x')and(tab[3,1]='x')then
wynik:='x';

if(tab[1,1]='o')and(tab[2,1]='o')and(tab[3,1]='o')then
wynik:='o';
if(tab[1,2]='o')and(tab[2,2]='o')and(tab[3,2]='o')then
wynik:='o';
if(tab[1,3]='o')and(tab[2,3]='o')and(tab[3,3]='o')then
wynik:='o';

if(tab[1,1]='o')and(tab[1,2]='o')and(tab[1,3]='o')then
wynik:='o';
if(tab[2,1]='o')and(tab[2,2]='o')and(tab[2,3]='o')then
wynik:='o';
if(tab[3,1]='o')and(tab[3,2]='o')and(tab[3,3]='o')then
wynik:='o';

if(tab[1,1]='o')and(tab[2,2]='o')and(tab[3,3]='o')then
wynik:='o';
if(tab[1,3]='o')and(tab[2,2]='o')and(tab[3,1]='o')then
wynik:='o';
end;

begin
clrscr;
krzyzyk;
readkey;
end.

w sensie by wypisać wynik po każdym if'ie gdzie jest "wynik:='o';" zastąpić to writeln(wynik:='o'); ??

Forum Forum Komputery
Odpowiedz

GRYOnline.pl:

Facebook GRYOnline.pl Instagram GRYOnline.pl X GRYOnline.pl Discord GRYOnline.pl TikTok GRYOnline.pl Podcast GRYOnline.pl WhatsApp GRYOnline.pl LinkedIn GRYOnline.pl Forum GRYOnline.pl

tvgry.pl:

YouTube tvgry.pl TikTok tvgry.pl Instagram tvgry.pl Discord tvgry.pl Facebook tvgry.pl