Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите исправить программу

Автор: qwerty) 19.05.2007 18:36

Условие
Дано:Массивы A1(n1,m1),A2(n2,m2),A3(n3,m3).Dsxbckbnm x=x1+x2+x3 u y=y1+y2+y3,где х1,х2,х3-кол-во единиц в четных столбцах массивов А1,А2,А3 соответственно,а Y1,Y2,Y3-коли-во двоек в нечетных столбцах этих массивов.Определение кол-ва единиц и двое оформить в виде подпрограмм.

Суть вопроса,программа не считает.Ниже код программы



program abs;
type vect=array [1..100,1..100] of integer;
var A1,A2,A3:vect;x,y:real;n,m,n1,m1,m2,n2,n3,m3:integer;
procedure wwod(n,m:integer;var z:vect;q:string);
var i,j:integer;
begin
For i:=1 to n do begin
For j:=1 to m do begin
write (q,'[',i,',',j,']=') ;readln (z[i,j]);
end;end;end;

Procedure edinica(var z:vect;x:real);
var i,j:integer;
begin
x:=0;
for i:=1 to n do
For j:=1 to m do
if (z[j,m] mod 2= 0) and (z[j,m] =1) then
x:=x+1;
end;

procedure dvoika (var z:vect;y:real);
var i,j:integer;
begin
y:=0;
for i:=1 to n do begin
for j:=1 to m do begin
if (z[j,m] mod 2=1) and (z[j,m]=2) then
y:=y+1;
end;end;end;
begin
Write('n1=');
readln(n1);
Write('m1=');
readln(m1);
Write('n2=');
readln(n2);
Write('m2=');
readln(m2);
Write('n3=');
readln(n3);
Write('m3=');
readln(m3);

wwod (n1,m1,A1,'A1');
wwod (n2,m2,A2,'A2');
wwod (n3,m3,A3,'A3');
edinica(A1,x);
edinica(A2,x);
edinica(A3,x);
dvoika(A1,y);
dvoika(A2,y);
dvoika(A3,y);
writeln('x=',x);
writeln('y=',y);readln;
end.



Автор: volvo 19.05.2007 19:23

Во-первых,

Procedure edinica(var z:vect;VAR x:real); { <--- Возвращать параметр надо... }
(с двойкой - то же самое), но есть еще 2 вопроса:

1) почему счетчик - Real?
2) ты затираешь первый результат вторым, а второй - соответственно третьим... Надо печатать результаты СРАЗУ после каждого вызова Edinica (и Dvoika)...

Автор: qwerty) 19.05.2007 19:26

Цитата(volvo @ 19.05.2007 16:23) *

Во-первых,
Procedure edinica(var z:vect;VAR x:real); { <--- Возвращать параметр надо... }
(с двойкой - то же самое), но есть еще 2 вопроса:

1) почему счетчик - Real?
2) ты затираешь первый результат вторым, а второй - соответственно третьим... Надо печатать результаты СРАЗУ после каждого вызова Edinica (и Dvoika)...

НЕ мог бы написать
Цитата
Надо печатать результаты СРАЗУ после каждого вызова Edinica (и Dvoika)...

не совсем понял unsure.gif

Автор: volvo 19.05.2007 19:32

Вот это я имел в виду:

edinica(A1,x); dvoika(A1,y);
writeln('x=',x);
writeln('y=',y);

edinica(A2,x);
dvoika(A2,y);
writeln('x=',x); writeln('y=',y);

edinica(A3,x);
dvoika(A3,y);
writeln('x=',x); writeln('y=',y);




Добавлено через 3 мин.
Да у тебя совсем неправильно реализованы процедуры... Вот так надо:

Procedure edinica(var z:vect; var x: integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if (j mod 2= 0) and (z[i, j] =1) then x:=x+1;
end;

procedure dvoika (var z:vect; var y: integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if (j mod 2=1) and (z[i, j]=2) then y:=y+1;
end;


и сам вызов:
x := 0; y := 0;
edinica(A1,x);
edinica(A2,x);
edinica(A3,x);
dvoika(A1,y);
dvoika(A2,y);
dvoika(A3,y);

writeln('x=',x);
writeln('y=',y);
readln;

Автор: qwerty) 19.05.2007 19:52

 program abs;
type vect=array [1..100,1..100] of integer;
var A1,A2,A3:vect;x,y,n,m,n1,m1,m2,n2,n3,m3:integer;
procedure wwod(n,m:integer;var z:vect;q:string);
var i,j:integer;
begin
For i:=1 to n do begin
For j:=1 to m do begin
write (q,'[',i,',',j,']=') ;readln (z[i,j]);
end;end;end;

Procedure edinica(var z:vect; var x: integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if (j mod 2= 0) and (z[i, j] =1) then x:=x+1;
end;

procedure dvoika (var z:vect; var y: integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if (j mod 2=1) and (z[i, j]=2) then y:=y+1;
end;
begin
Write('n1=');
readln(n1);
Write('m1=');
readln(m1);
Write('n2=');
readln(n2);
Write('m2=');
readln(m2);
Write('n3=');
readln(n3);
Write('m3=');
readln(m3);

wwod (n1,m1,A1,'A1');
wwod (n2,m2,A2,'A2');
wwod (n3,m3,A3,'A3');

x := 0; y := 0;
edinica(A1,x);
edinica(A2,x);
edinica(A3,x);
dvoika(A1,y);
dvoika(A2,y);
dvoika(A3,y);

writeln('x=',x);
writeln('y=',y);
readln;

end.

Программа опять не считает ,ввожу
a1[1,1]=2
a2[1,2]=1
и т.д... до конца,выводит нули вместо x и y

Автор: volvo 19.05.2007 20:31

Размерность тоже надо передавать... Не написал сразу...

Procedure edinica(var z:vect; const n, m: integer;
var x: integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if (j mod 2= 0) and (z[i, j] =1) then x:=x+1;
end;

procedure dvoika (var z:vect; const n, m: integer;
var y: integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
if (j mod 2=1) and (z[i, j]=2) then y:=y+1;
end;

...
x := 0; y := 0;
edinica(A1, n1, m1, x);
edinica(A2, n2, m2, x);
edinica(A3, n3, m3, x);
dvoika(A1, n1, m1, y);
dvoika(A2, n2, m2, y);
dvoika(A3, n3, m3, y);
...


Автор: qwerty) 19.05.2007 20:41

вольво спасибо большое,все получилось