Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите исправить программу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
qwerty)
Условие
Дано:Массивы 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
Во-первых,
Procedure edinica(var z:vect;VAR x:real); { <--- Возвращать параметр надо... }
(с двойкой - то же самое), но есть еще 2 вопроса:

1) почему счетчик - Real?
2) ты затираешь первый результат вторым, а второй - соответственно третьим... Надо печатать результаты СРАЗУ после каждого вызова Edinica (и Dvoika)...
qwerty)
Цитата(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
Вот это я имел в виду:
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)
 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
Размерность тоже надо передавать... Не написал сразу...

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)
вольво спасибо большое,все получилось
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.