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

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

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

 
 Ответить  Открыть новую тему 
> Удаление СТОЛБЦА матррицы..., модули, процедуры, функции ....
сообщение
Сообщение #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 -


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


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

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

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


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

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

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


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


Пионер
**

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

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


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

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


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


Гость






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


Пионер
**

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

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


исправил...

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


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


Пионер
**

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

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


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

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


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


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


Пионер
**

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

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


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


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


Гость






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

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

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


Пионер
**

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

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


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

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

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


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


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

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

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


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


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


Пионер
**

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

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


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


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


Гость






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

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


Гость






P.S. Стоп... Есть более корректное решение... Надо искать НЕ с начала массива B, а с его окончания (соответственно, не ближайший справа, а ближайший СЛЕВА)... Так решаем проблему смещения всех столбцов СПРАВА от удаляемого на один (а пусть смещаются, мы же идем в противоположную сторону, это нам не мешает...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






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


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


Пионер
**

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

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


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

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


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

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

 





- Текстовая версия 29.03.2024 0:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name