![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
сформировать вектор, содержащий столбец матрицы с наименьшим количеством положительных элементов
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.
Сообщение отредактировано: 18192123 - 27.11.2006 19:20 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Программа и процедура не могут называться одинаково... Меняй чье-то имя...
|
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
18192123 |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Марина, если честно твоя программа очень отдаленно напоминает то на что она должна быть похожа. Вот смотри, разбирай, будут вопросы задавай:
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;
var
M: TMatrix;
V: TVector;
begin
clrscr;
Input(M);
PrintMatrix(M);
CreateVector(M, V);
PrintVector(V);
readln;
end.
зы Только я сделал поиск столбца с максимальным содержанием отр. элементов, так что надо просто знак поменять or (T < max) then begin
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
18192123 |
![]()
Сообщение
#6
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Марина, если честно твоя программа очень отдаленно напоминает то на что она должна быть похожа. Вот смотри, разбирай, будут вопросы задавай: в своем варианте я попыталась посчитать в каждом столбце количество положительных, которые потом записываю в вектор размером в количество столбцов, после - найти в этом векторе минимальный элемент(его номер) и вывести столбец. вроде, размышляю разумно, кажется напутала с записью в массив количества положительных из каждого столбца. можно как-нибудь исправить мой вариант решения? |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Вот твоя ошибка:
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 |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 13:12 |