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

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

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

 
 Ответить  Открыть новую тему 
> Удаление СТОЛБЦА матррицы..., модули, процедуры, функции ....
punkska
сообщение 28.02.2006 21:59
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


Задача
Цитата
Из матрицы С[1..4,1..5] удалить столбец , в котором наибольшее кол-во отрицательных элементов.


Для начала пара теор. вопросов по алгоритму
Необходимо
1. Ввод матрицы
2. Подсчёт кол-ва ОТРИЦАТЕЛЬНЫХ элементов в столбце
3. Составить массив, состоящий из подсчитаного количества отрицательных элементов по каждому столбцу
4. нахождение столбца для удаления....
5. удалить столбец с наибольшим кол. отрицательных элементов , получить новую матрицу...
6. вывод матрицы
вроде не забыл ни чего...

не хочу писать много процедур wacko.gif
хотел спросить - можно первые 3 пункта объединить??? yes2.gif
вот мой выриант этого объединения

program lab2;
uses crt;

Const
N=4;
M=5;

type
Matrix = array[1..N,1..M] of integer;

procedure EnterMatr(Var A,B:Matrix; N,M:integer);
var
i,j,k:integer;
Begin
k:=0;
For i:=1 to N do
begin
For j:=1 to M do
begin
write('A[',i,j,']= ');
readln(A[i,j]);
if A[i,j]<0 then
Begin k:=k+1; B[1,i]:=k;
end;
end;
end;
end


как думаете, будут работать? B[1,i]:=k так надо?

Сообщение отредактировано: volvo - 2.11.2006 15:06


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 28.02.2006 22:21
Сообщение #2


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

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

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


FAQ : Массивы, матрицы, типичные задачи
+ поиск по форуму, или для тебя отдельно в тысяча первый раз решать ?

Вот например : http://forum.pascalnet.ru/index.php?s=&sh...indpost&p=50590

Сообщение отредактировано: klem4 - 28.02.2006 22:34


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
punkska
сообщение 1.03.2006 0:21
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


klem4 , извини!
Я читал ФаК и пойск юзал...
Я не спрашивал как удалить...я нашёл это в факе
Я наверно просто зря создал новый топик, надо было в подобный лезть rolleyes.gif

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


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
punkska
сообщение 2.03.2006 20:21
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


 program lab2;
uses crt;

Const
N=4;
M=5;

type
Matrix = array[1..N,1..M] of integer;

procedure EnterMatr(Var A,B:Matrix; N,M:integer);
var
i,j,k:integer;
Begin
k:=0;
For i:=1 to N do
begin
For j:=1 to M do
begin
write('A[',i,',',j,']= ');
readln(A[i,j]);
if A[i,j]<0 then
Begin k:=k+1; B[1,i]:=k;
end;
end;
end;
end;


Procedure PrintMatr(A:Matrix; N,M:integer);
Var
i,j:integer;
begin
For i:=1 to N do
begin
For j:=1 to M do write(A[i,j],' ');
writeln;
end;
end;

Var
A,B:Matrix;
Begin
EnterMatr(A,B,N,M);
PrintMatr(A,N,M);
PrintMatr(B,1,N);
readln
end.


как обнулять счётчик подсчёта отрицательных элементов для каждого столбца?

и что-то мне кажеться что я не в стобцах а в строках ищу.... nea.gif


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.03.2006 20:39
Сообщение #5


Гость






procedure EnterMatr(Var A,B:Matrix; N,M:integer);
var
i, j: integer;
begin
for i := 1 to M do B[1, i] := 0;

for i := 1 to N do
for j := 1 to M do begin
write('A[',i,',',j,']= '); readln(A[i,j]);
if A[i, j] < 0 then Inc(B[1, j]);
end;
end;
...
Var
A, B: Matrix;
Begin
EnterMatr(A,B,N,M);
PrintMatr(A,N,M);
PrintMatr(B,1,M); { !!! }
readln
end.
 К началу страницы 
+ Ответить 
punkska
сообщение 5.03.2006 19:11
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


Laba2.pas
 Program Laba2;
uses Crt, Global, InOut, DelST;
begin
CLRSCR;
EnterMatr(A,B,N,M);
CLRSCR;
PrintMatr(A,N,M);
readln;
clrscr;
PrintMatr(B,1,M);
readln;
CLRSCR;
end.


Global.pas
unit Global;
interface

Const
N=4;
M=5;

type
Matrix = array[1..N,1..M] of integer;
ftype = function (Var A:Matrix; N,M:integer): integer;

implementation
end.


InOut.pas
unit InOut;
interface

procedure EnterMatr(Var A,B:Matrix; N,M:integer);
Procedure PrintMatr(A:Matrix; N,M:integer);

implementation

procedure EnterMatr(Var A,B:Matrix; N,M:integer);
var
i, j: integer;
begin
for i := 1 to M do B[1, i] := 0;

for i := 1 to N do
for j := 1 to M do begin
write('A[',i,',',j,']= '); readln(A[i,j]);
if A[i, j] < 0 then Inc(B[1, j]);
end;
end;

Procedure PrintMatr(A:Matrix; N,M:integer);
Var
i,j:integer;
begin
For i:=1 to N do
begin
For j:=1 to M do write(A[i,j],' ');
writeln;
end;
end;

end.


DelST.pas
unit DelST;
interface

Function Min(Var B:Matrix; N,M:integer):integer;
Procedure Del(var A,B:Matrix; k:ftype);

implementation

Function Min(Var B:Matrix; N,M:integer):integer;
var
i,j,mi:integer;
Begin
mi:=B[N,j];
for j:=1 to M do
Begin
if B[N,j]<mi then mi:=B[N,j];
end;
min:=mi
end;

Procedure Del(var A,B:Matrix; k:ftype);
var
i,j:integer;
begin
for i:=1 to N do
begin
for j:=k(B,N,M) to M-1 do
begin
A[i,j]:=A[i,j+1];
end;
end;
end;

end.


Помогите разобраться с моими ошибками rolleyes.gif

Опять меня мучает передача функции в виде параметра..что-то мне подсказывает что что-то я намудрил тут..и всё гораздо проще....
Procedure Del беда((( хелп
(а был же ФАК по Модулям??? или я просто не внимательный! мне казалось я его даже читал в прошлом году)

Сообщение отредактировано: volvo - 2.11.2006 15:07


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.03.2006 19:13
Сообщение #7


Гость






Ну, для начала, имя процедуры НЕ МОЖЕТ совпадать с именем модуля... Меняй или одно, или другое, иначе будешь получать ошибку "повторное определение идентификатора"
 К началу страницы 
+ Ответить 
punkska
сообщение 5.03.2006 19:26
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


исправил...

мммм
Var
A,B:Matrix;
надо вписать.. а куда вписать в каую часть! ...пойду искать фак по модульному програмированию!!! он должен быть yes2.gif


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
punkska
сообщение 5.03.2006 21:03
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


помогите куда вписать
Var
A,B:Matrix;

чтоб всё заработало... unsure.gif


Прикрепленные файлы
Прикрепленный файл  Laba2.rar ( 1.02 килобайт ) Кол-во скачиваний: 143


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
punkska
сообщение 6.03.2006 10:01
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


я в тупике! как быть с этим варом! что-то ничего не выходит((( всё равно в первой же процедуре выдаёт ошибку, что А это не известный индификатор (


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.03.2006 10:11
Сообщение #11


Гость






Ну, допустим, у тебя НЕ везде, где нужно, подключен модуль GLOBAL. Это во-первых. Во-вторых, я вообще не вижу, где этот твой Del вызывается, и КАК ты в него передаешь параметры...

Ну, и наконец в-третьих: эту же программу можно написать совершенно по-другому, гораздо проще и не делая лишних движений... НО!!! Ты же не сказал, ЧТО именно должно быть в программе, а что - нет. Может тебе обязательно использовать процедурный тип, а может - только желательно... unsure.gif

Телепат в отпуске...
 К началу страницы 
+ Ответить 
punkska
сообщение 6.03.2006 10:31
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


Цитата
Может тебе обязательно использовать процедурный тип, а может - только желательно...

обязательно yes2.gif
Процедурный тип, Модули, Передача функции в виде параметра....

я-то думал не надо подключать Глобал к каждому модулю...исправил)
странно.. работает )))
... тока вывод какой-то странный=) в строку


Прикрепленные файлы
Прикрепленный файл  Laba2.rar ( 1.06 килобайт ) Кол-во скачиваний: 135


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.03.2006 10:39
Сообщение #13


Гость






smile.gif
Function Min(Var B:Matrix; N,M:integer):integer;
var
i,j,mi:integer;
Begin
mi:=B[N,j]; { <--- J не инициализирован: Segmentation Fault }
for j:=1 to M do
Begin
if B[N,j]<mi then mi:=B[N,j];
end;
min:=mi
end;
Внимательнее с этим...

Исправь J на 1...
 К началу страницы 
+ Ответить 
punkska
сообщение 6.03.2006 10:45
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


volvo give_rose.gif
Спасибо!! как всегда помог!!! wub.gif
пойду по репе получать от преподавателя)


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
punkska
сообщение 6.03.2006 20:51
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


я допустил жуткую ошибку! я не внимательно прочёл задание! нужно удолить столбцЫ, а не столбец!
значит метод *подтягивания хвостика тут не прокатит*
и возможно мне и функция-то не нужна!...будем думать...может в пойске что найду....


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.03.2006 20:59
Сообщение #16


Гость






Цитата
метод *подтягивания хвостика тут не прокатит*
... Нет, все-таки придется этот метод использовать. Здесь имеется в виду, что если массив B имеет вид: <1, 2, 3, 2, 3>, то придется удалять КАК 3-й, так и 5-ый столбец, но после 3-го идет 4-ый, который НЕ надо удалять!!!

Просто находишь максимум, как и находил, НО добавляешь еще одну функцию, индекс ближайшего максимального элемента (возвращающую индекс ближайшего справа макс. элемента), и производишь удаление (как и делал его) пока в массиве СПРАВА от текущего значения индекса еще есть максимальные значения... Это, кстати, еще удобнее для реализации через функциональные типы...
 К началу страницы 
+ Ответить 
volvo
сообщение 6.03.2006 21:11
Сообщение #17


Гость






P.S. Стоп... Есть более корректное решение... Надо искать НЕ с начала массива B, а с его окончания (соответственно, не ближайший справа, а ближайший СЛЕВА)... Так решаем проблему смещения всех столбцов СПРАВА от удаляемого на один (а пусть смещаются, мы же идем в противоположную сторону, это нам не мешает...)
 К началу страницы 
+ Ответить 
punkska
сообщение 6.03.2006 21:38
Сообщение #18


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


пока немного непонял твоих слов...но будем пробывать)

как думал сделать я ( может это в корне не верно и не возможно реализовать)
есть массив В [2 3 3 2 3 ]
U:=0;
делаем цикл
for i:=1 to N do
если B[1,j] =min
то делаем

пока ещё точно не придумал но что то типа
идём от j:=1 до ( B[1,j] как-то надо j вытащить)
присваем все элементам A[N,j+U];
endы
inc(U);
пока такие мысли в метро летали в голове.... wacko.gif
надо ещё подумать


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.03.2006 21:48
Сообщение #19


Гость






Ну, если честно, я бы вообще по-другому эту задачу делал... Например, так:


Прикрепленные файлы
Прикрепленный файл  __PUNS.PAS ( 1.67 килобайт ) Кол-во скачиваний: 180
 К началу страницы 
+ Ответить 
punkska
сообщение 6.03.2006 21:55
Сообщение #20


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


примусь за изучение give_rose.gif
агааааа ! массив с конца рассматривал....круто! и как коротко!!

Спасибо! сейчас так же сделаю) Спасиб!


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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