Страница 1 из 6

Задача по Turbo Pascal

Добавлено: 04 ноя 2007, 20:11
assis2007
Задача выглядит так: найти в матрице строку с минимальным числом ненулевых элементов. Кол-во строк и столбцов от 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.
Мне нужна основная часть матрицы, если конешно правильно то что я написал.

Re: Задача по Turbo Pascal

Добавлено: 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.

Re: Задача по Turbo Pascal

Добавлено: 04 ноя 2007, 21:54
assis2007
Да нужна именно первая строка спасибо. А можно целиком задачу, а то я немножко болван в паскале, но стараюсь освоить. Чтобы можно было сразу в паскаль переписать. (если не сложно)

Re: Задача по Turbo Pascal

Добавлено: 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.
Без отображения массива элементов. Если хочешь, можешь добавить это, для того, чтобы убедиться в работоспособности программы.

Re: Задача по Turbo Pascal

Добавлено: 05 ноя 2007, 16:17
assis2007
Тут маленькая неувязочка которую я вспомнил. Я должен ещё и сам вводить матрицу т.е. мне выводиться введите элемент матрицы например a11 это нужно добавлять вроде сразу после ввода количества строк и столбцов?

Re: Задача по Turbo Pascal

Добавлено: 05 ноя 2007, 20:10
Serge_Bliznykov

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

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;

Re: Задача по Turbo Pascal

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

Re: Задача по Turbo Pascal

Добавлено: 11 ноя 2007, 17:03
assis2007
Что нужно поменять?

Re: Задача по Turbo Pascal

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

Re: Задача по Turbo Pascal

Добавлено: 12 ноя 2007, 19:12
assis2007
Нет всё равно ответ первая строка