IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> вектор из столбца с наименьшим количеством положительных
18192123
сообщение 19.11.2006 19:50
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


сформировать вектор, содержащий столбец матрицы с наименьшим количеством положительных элементов



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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.11.2006 19:56
Сообщение #2


Гость






Программа и процедура не могут называться одинаково... Меняй чье-то имя...
 К началу страницы 
+ Ответить 
18192123
сообщение 19.11.2006 19:57
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 19.11.2006 19:56) *

Программа и процедура не могут называться одинаково... Меняй чье-то имя...

ой, спасибо!
даже не подумала об этом!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 19.11.2006 20:11
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(18192123 @ 19.11.2006 19:57) *

ой, спасибо!
даже не подумала об этом!

компилирую дальше, в итоге - несоответствие типов
????
наверно здесь намудрила:

s[j]:=s[j]+k;



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 19.11.2006 20:22
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Марина, если честно твоя программа очень отдаленно напоминает то на что она должна быть похожа. Вот смотри, разбирай, будут вопросы задавай:

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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 27.11.2006 19:27
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(klem4 @ 19.11.2006 20:22) *

Марина, если честно твоя программа очень отдаленно напоминает то на что она должна быть похожа. Вот смотри, разбирай, будут вопросы задавай:



в своем варианте я попыталась посчитать в каждом столбце количество положительных, которые потом записываю в вектор размером в количество столбцов, после - найти в этом векторе минимальный элемент(его номер) и вывести столбец.

вроде, размышляю разумно, кажется напутала с записью в массив количества положительных из каждого столбца.

можно как-нибудь исправить мой вариант решения?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.11.2006 19:43
Сообщение #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
сообщение 27.11.2006 20:17
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 27.11.2006 19:43) *

Вот твоя ошибка:



Большое спасибо! Теперь программа работает просто отлично!!! applause.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 23.07.2025 13:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"