сформировать вектор, содержащий столбец матрицы с наименьшим количеством положительных элементов
program creat1; uses crt; const n=3; type matr=array[1..n,1..n]of integer; vect=array[1..n]of integer; procedure input(var a:matr); var i,j:1..n; begin writeln ('vvedite elementi'); for i:=1 to n do for j:=1 to n do read (a[i,j]); end; procedure creat (a:matr; var s:vect); var i,j:1..n; l,k:integer; begin for j:=1 to n do begin s[j]:=0; k:=0; for i:=1 to n do begin if a[i]>0 then k:=k+1; s[j]:=s[j]+k; end; end; min:=s[1]; l:=1; for j:=2 to n do if s[j]<min then l:=j; for i:=1 to n do writeln (s[i,l],' '); end; var a;matr; s:vect; begin clrscr; input(a); creat(a,s); readkey; end.
volvo
19.11.2006 23:56
Программа и процедура не могут называться одинаково... Меняй чье-то имя...
18192123
19.11.2006 23:57
Цитата(volvo @ 19.11.2006 19:56)
Программа и процедура не могут называться одинаково... Меняй чье-то имя...
ой, спасибо! даже не подумала об этом!
18192123
20.11.2006 0:11
Цитата(18192123 @ 19.11.2006 19:57)
ой, спасибо! даже не подумала об этом!
компилирую дальше, в итоге - несоответствие типов ???? наверно здесь намудрила:
s[j]:=s[j]+k;
klem4
20.11.2006 0:22
Марина, если честно твоя программа очень отдаленно напоминает то на что она должна быть похожа. Вот смотри, разбирай, будут вопросы задавай:
uses crt;
const n = 3;
type TVector = array [1..n] of Integer; TMatrix = array [1..n] of TVector;
procedure Input(var mx: TMatrix); // заполняем матрицу var i, j: Integer; begin for i := 1 to n do for j := 1 to n do begin write('mx[', i, ',', j, ']='); readln(mx[i, j]); end; end;
procedure PrintMatrix(const mx: TMatrix); // печатаем матрицу var i, j: Integer; begin writeln; for i := 1 to n do begin writeln; for j := 1 to n do write(mx[i, j]:3); end; writeln; end;
procedure PrintVector(const v: Tvector); // печатаем вектор var i: Integer; begin writeln; for i := 1 to n do write(v[i]:3); end;
// ф-я возвращает кол-во отрицательных элментов в столбце с номером Col function CountInCol(const mx: TMatrix; col: Integer): Integer; var i, count: Integer; begin count := 0; for i := 1 to n do if (mx[i, col] < 0) then inc(count); CountInCol := count; end;
// ф-я возвращает номер столбца матрицы, количство отрицательных элементов в котором максимально function GetMaxCol(const mx: TMatrix): Integer; var maxCol, i, max, T: Integer; begin maxCol := 0; for i := 1 to n do begin T := CountInCol(mx, i); if (maxCol = 0) or (T > max) then begin max := T; maxCol := i; end; end; GetMaxCol := maxCol; end;
// заполняем вектор по заданию procedure CreateVector(const mx: TMatrix; var v: TVector); var i, Col: Integer; begin Col := GetMaxCol(mx); for i := 1 to n do v[i] := mx[i, Col]; end;
зы Только я сделал поиск столбца с максимальным содержанием отр. элементов, так что надо просто знак поменять
or (T < max) then begin
18192123
27.11.2006 23:27
Цитата(klem4 @ 19.11.2006 20:22)
Марина, если честно твоя программа очень отдаленно напоминает то на что она должна быть похожа. Вот смотри, разбирай, будут вопросы задавай:
в своем варианте я попыталась посчитать в каждом столбце количество положительных, которые потом записываю в вектор размером в количество столбцов, после - найти в этом векторе минимальный элемент(его номер) и вывести столбец.
вроде, размышляю разумно, кажется напутала с записью в массив количества положительных из каждого столбца.
можно как-нибудь исправить мой вариант решения?
volvo
27.11.2006 23:43
Вот твоя ошибка:
procedure creat (a:matr; var s:vect); var i,j:1..n; min, l,k:integer; { MIN не был определен } begin for j:=1 to n do begin s[j]:=0; k:=0; for i:=1 to n do begin { *** if a[i]>0 then k:=k+1; s[j]:=s[j]+k; *** } if a[i, j] > 0 then s[j] := s[j] + 1; end; end;
min:=s[1]; l:=1; for j:=2 to n do if s[j]<min then l:=j; for i:=1 to n do writeln (a[i,l],' '); { <--- Нужно А вместо S } end;
18192123
28.11.2006 0:17
Цитата(volvo @ 27.11.2006 19:43)
Вот твоя ошибка:
Большое спасибо! Теперь программа работает просто отлично!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.