Задача по Turbo Pascal
Задача выглядит так: найти в матрице строку с минимальным числом ненулевых элементов. Кол-во строк и столбцов от 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.
Мне нужна основная часть матрицы, если конешно правильно то что я написал.
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.
Мне нужна основная часть матрицы, если конешно правильно то что я написал.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
А если таких строк несколько? Я предлагаю вариант: таковых больше 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.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Да нужна именно первая строка спасибо. А можно целиком задачу, а то я немножко болван в паскале, но стараюсь освоить. Чтобы можно было сразу в паскаль переписать. (если не сложно)
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
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.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Тут маленькая неувязочка которую я вспомнил. Я должен ещё и сам вводить матрицу т.е. мне выводиться введите элемент матрицы например a11 это нужно добавлять вроде сразу после ввода количества строк и столбцов?
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
Код: Выделить всё
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;
Странно но какую бы матрицу не вводил она выводит не правильно. Вот например при вводе матрицы
5 6 0
7 0 0
правильный ответ будет строка 2
он же выводит строку номер 1
5 6 0
7 0 0
правильный ответ будет строка 2
он же выводит строку номер 1
Скорее всего, здесь читается транспонированная матрица. Т.е. фактически введена матрица
5 7
6 0
0 0
И 1 строка - совершенно правильный ответ.
Чтобы ликвидировать когнитивный диссонанс, предлагаю изменить код Serge Bliznykov
Readln(a[i,j]); => Readln(a[j,i]);
5 7
6 0
0 0
И 1 строка - совершенно правильный ответ.
Чтобы ликвидировать когнитивный диссонанс, предлагаю изменить код Serge Bliznykov
Readln(a[i,j]); => Readln(a[j,i]);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Нет всё равно ответ первая строка