[Pascal] Losowanie elementów macierzy

gunia6
Użytkownik
Użytkownik
Posty: 84
Rejestracja: 29 paź 2014, o 20:02
Płeć: Kobieta
Podziękował: 41 razy

[Pascal] Losowanie elementów macierzy

Post autor: gunia6 »

Mam napisać program, który losuje elementy macierzy 10 x 10, elementy mają być liczbami całkowitymi \(\displaystyle{ \le 200}\) posegregowanymi rosnąco w wierszach i kolumnach. Następnie należy wylosować jedną liczbę z tego samego przedziału i sprawdzić czy jest ona w macierzy. Napisałam program, jednak po skompilowaniu go w fpc otrzymałam wiadomość : macierze.pas(36,12) Error: Illegal expression.
Czy ktoś wie jaki jest błąd?

Kod: Zaznacz cały

program macierze;
var M : array[1..10,1..10] of integer;
i, j, x : integer;
blad, znajdz : boolean;

begin
 	{ Losowanie elementow macierzy posortowanych wierszowo i kolumnowo }
 	randomize;
 	i := 1;
 	j := 1;
	x := 100;
 	while (i <= 10) do
 		begin
 			while (j <= 10) do
 				begin
					M[i,j] := random(200) + 1;
 					if (M[i,j] >= x then M[i,j] := M[i,j] - x;
 					blad := false;
 					if (i >= 2) then if (M[i-1,j] >= M[i,j]) then blad := true;
 					if (j >= 2) then if (M[i,j-1] >= M[i,j]) then blad := true;
					if (blad = false) then 
						begin
							j := j + 1;
							x := x - 1;
 						end;
				end;
 			i := i + 1;
 			j := 1;
 		end;
  	x := random(200);
 	i := 1;
 	j := 10;
 	znajdz := false;
 	while (znajdz = false) AND (i <= 10) AND (j >= 1) do
    		begin
      			if (M[i,j] = x) then znajdz
        			else
 				begin
 					if (M[i,j] < x) then j := j - 1
 					else i := i + 1
 				end
 		end;
 	if znajdz then writeln('TAK') else writeln('NIE');
end.
Ostatnio zmieniony 22 lis 2014, o 21:17 przez gunia6, łącznie zmieniany 1 raz.
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[Pascal] Losowanie elementów macierzy

Post autor: bartek118 »

Co niby ta linijka ma oznaczać?

Kod: Zaznacz cały

if (M[i,j] = x) then znajdz
"znajdz" to jest właśnie to illegal expression
gunia6
Użytkownik
Użytkownik
Posty: 84
Rejestracja: 29 paź 2014, o 20:02
Płeć: Kobieta
Podziękował: 41 razy

[Pascal] Losowanie elementów macierzy

Post autor: gunia6 »

Czy nie jest to równoważne z napisem if (M[i,j] = x) then znajdz := true ?
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[Pascal] Losowanie elementów macierzy

Post autor: Vardamir »

Nie, nie jest.
gunia6
Użytkownik
Użytkownik
Posty: 84
Rejestracja: 29 paź 2014, o 20:02
Płeć: Kobieta
Podziękował: 41 razy

[Pascal] Losowanie elementów macierzy

Post autor: gunia6 »

Dziękuję, już działa :)

-- 22 lis 2014, o 21:43 --
Kod poprawiony. Może komuś się przyda

Kod: Zaznacz cały

program macierze;
var M : array[1..10,1..10] of integer;
i, j, x : integer;
blad, znajdz : boolean;

begin
        { Losowanie elementow macierzy posortowanych wierszowo i kolumnowo }
        randomize;
        i := 1;
        j := 1;
        x := 100;
        while (i <= 10) do
                begin
                        while (j <= 10) do
                                begin
                                        M[i,j] := random(200) + 1;
                                        if (M[i,j] >= x) then M[i,j] :=
M[i,j] - x;
                                        blad := false;
                                        if (i >= 2) then if (M[i-1,j] >= M[i,j]) then blad := true;
                                        if (j >= 2) then if (M[i,j-1] >= M[i,j]) then blad := true;
                                        if (blad = false) then
                                                begin
                                                        j := j + 1;
                                                        x := x - 1;
                                                end;
                                end;
                        i := i + 1;
                        j := 1;
                end;
                for i := 1 to 10 do begin
                        for j:= 1 to 10 do write(M[i,j]:4);
                        writeln
                end;
        x := random(200);
        writeln('Szukamy x = ',x);
        i := 1;
        j := 10;
        znajdz := false;
        while (znajdz = false) AND (i <= 10) AND (j >= 1) do
                begin
                        if (M[i,j] = x) then znajdz := true
                                else
                                        if (M[i,j] > x) then j := j - 1
                                        else i := i + 1

                end;
        if (znajdz = true) then writeln('x jest elementem macierzy M') else
writeln('x nie jest elementem macierzy M');
end.
ODPOWIEDZ