Помогите! Прога по двумерным массивам!

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Ronaldu
Сообщения: 5
Зарегистрирован: 14 фев 2008, 18:18

ВСЕМ привет! помогите с решением задачи! двумерные массивы не очень понимаю. В общем, звучит так: Дан массив a[1..3,1..4]. Найти сумму элементов каждой строки массива, кратных К (К вводится с клавиатуры).

program asd2;
const
m=3;
n=4 ;
var k,i,j,s:integer;
a:array[1..m,1..n] of integer;
begin
for i:=1 to n do
begin
s:=0;
for j:=1 to m do
readln (a[i,j]);
writeln (k);
for j:=1 to m do
begin
if a[i,j]mod K=0 then
s:=s+a[i,j];
end;
writeln (s,' Fuck');
end;
end.


что тут не так?? заранее спасибо!
Кату
Сообщения: 3
Зарегистрирован: 14 фев 2008, 19:05

Строкой
writeln (k);
выводится на экран число k. А оно по заданию должно вводится с клавиатуры. Правильно будет
readln (k);

Обычно при записи a(i,j) имеют в виду элемент матрицы i-ой строки j-ого столбца. Тогда по заданию есть 3 строки из 4 элементов, и в программе m и n надо поменять местами.

Кстати, в программе есть цикл
for j:=1 to m do readln (a[i,j]);
т.е. каждая строка матрицы тоже должна вводиться с экрана.
Ronaldu
Сообщения: 5
Зарегистрирован: 14 фев 2008, 18:18

а как по-вашему должна выглядеть? я попробовал исправить, при вводе массива вводится 1 строка и, в общем, скорее я ошибся
Ronaldu
Сообщения: 5
Зарегистрирован: 14 фев 2008, 18:18

все, я разобрался!!!
в итоге так получилось!!

program asd2;
const
n=3;
m=4;
var k,i,j,s:integer;
a:array[1..n,1..m] of integer;
begin
for i:=1 to n do
for j:=1 to m do
readln (a[i,j]);
s:=0;
writeln ('BBEgu K');
readln (k);
for i:=1 to n do
for j:=1 to m do
begin
if a[i,j]mod k=0 then
s:=s+a[i,j];
end;
writeln (s,' Fuck');
end.
Кату
Сообщения: 3
Зарегистрирован: 14 фев 2008, 19:05

Наверно, примерно так.

program asd2;
const
m=3;
n=4 ;
var k,i,j,s:integer;
a:array[1..m,1..n] of integer;
begin
Writeln('Enter k'); //Пользователь должен указать число к, нажать Enter
Readln(k);
for i:=1 to m do
begin
Writeln('Enter ',i,' string'); //Пользователь указывает 4 числа, после набора каждого числа нажимая Enter
for j := 1 to n do Readln(a[i,j]);
Writeln('You enter: ');
for j := 1 to n do Write(a[i,j],' '); //Здесь пользователь проверяет указанные числа
Writeln;
s = 0;
for j := 1 to n do
if ( a[i,j] mod k = 0 ) then s := s + a[i,j];
Writeln('Sum ',s);
end;
End.
Ronaldu
Сообщения: 5
Зарегистрирован: 14 фев 2008, 18:18

СПАСИБО, Katy!!!!!!!!!!!!!
Кату
Сообщения: 3
Зарегистрирован: 14 фев 2008, 19:05

Сам же и разобрался ) а я еще и задание не так поняла. Рада, что все получилось.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Можно немного оптимизировать
вместо
for i:=1 to M do
if i mod K=0 then <вывести строку i>
сделать
i:=0;
while i*K<=M do
begin
<вывести строку i*K>
i:=i+1;
end;

работает более оптимально, если строк много, а К большое
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить