Задача по Turbo Pascal

assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

04 ноя 2007, 20:11

Задача выглядит так: найти в матрице строку с минимальным числом ненулевых элементов. Кол-во строк и столбцов от 1 до 100. Я тут набросал кое что
cur_row: Integer;
cur_zero_num: Integer;

begin

rows И cols - РЯДЫ И СТОЛБЦЫ В МАТРИЦЕ

cur_row:= 0;
cur_zero_num:= 0;

for i := 1 to rows do
begin
x:=0;
for j := 1 to cols do begin
if a[i, j] = 0 then x:= x+1;
end;
if cur_zero_num < x then begin
cur_zero_num := x;
cur_row := i;
end;
end;
end.
Мне нужна основная часть матрицы, если конешно правильно то что я написал.
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

04 ноя 2007, 20:50

найти в матрице строку с минимальным числом ненулевых элементов.
А если таких строк несколько? Я предлагаю вариант: таковых больше 1, тогда в ответ выводим перую попавшуюся.
Вот код:

Код: Выделить всё

var a: array [1..100,1..100] of integer;
min,zero,max_zero: integer;
i,j: integer;
begin
max_zero:=101; {max zeros +1}
{здесь наполняем массив элементами}
for i:= 1 to 100 do begin
zero:=0;
for j:= 1 to 100 do if a[i,j]=0 then inc(zero);
if zero<max_zero then begin
   min:=i;
   max_zero:=zero;
   end;
end;
Writeln('Меньше нулей в столбце N',min,');
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

04 ноя 2007, 21:54

Да нужна именно первая строка спасибо. А можно целиком задачу, а то я немножко болван в паскале, но стараюсь освоить. Чтобы можно было сразу в паскаль переписать. (если не сложно)
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

04 ноя 2007, 23:39

assis2007, а тут и дописывать, можно сказать, нечего :-) Здесь остается только заполнить массив элементами и сделать ввод данных.

Код: Выделить всё

var a: array [1..100,1..100] of integer;
mi,mj: integer; {кол-во строк и столбцов}
min,zero,max_zero: integer;
i,j: integer;
begin
write('Kol-vo strok: '); read(mi);
write('Kol-vo stolcov: '); read(mj);
max_zero:=mi+1;
randomize;
for i:= 1 to mi do
for j:= 1 to mj do a[i,j]:=random(3); {к примеру}
for i:= 1 to mi do begin
zero:=0;
for j:= 1 to mj do if a[i,j]=0 then inc(zero);
if zero<max_zero then begin
   min:=i;
   max_zero:=zero;
   end;
end;
Writeln('Minimalno nenulevih elementov v stroke №',min);
readln; 
end.
Без отображения массива элементов. Если хочешь, можешь добавить это, для того, чтобы убедиться в работоспособности программы.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

05 ноя 2007, 16:17

Тут маленькая неувязочка которую я вспомнил. Я должен ещё и сам вводить матрицу т.е. мне выводиться введите элемент матрицы например a11 это нужно добавлять вроде сразу после ввода количества строк и столбцов?
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

05 ноя 2007, 20:10

Код: Выделить всё

write('Kol-vo strok: '); read(mi);
write('Kol-vo stolcov: '); read(mj);
max_zero:=mi+1;
for i:= 1 to mi do 
  for j:= 1 to mj do begin
   Write('Vvedite a[',i:1,',',j:1,']');
   Readln(a[i,j]);
  end;
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

11 ноя 2007, 17:03

Странно но какую бы матрицу не вводил она выводит не правильно. Вот например при вводе матрицы
5 6 0
7 0 0
правильный ответ будет строка 2
он же выводит строку номер 1
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

11 ноя 2007, 17:03

Что нужно поменять?
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

12 ноя 2007, 11:47

Скорее всего, здесь читается транспонированная матрица. Т.е. фактически введена матрица
5 7
6 0
0 0
И 1 строка - совершенно правильный ответ.
Чтобы ликвидировать когнитивный диссонанс, предлагаю изменить код Serge Bliznykov
Readln(a[i,j]); => Readln(a[j,i]);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

12 ноя 2007, 19:12

Нет всё равно ответ первая строка
Ответить