Задача
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
http://forum.pascal.net.ru/index.php?showtopic=2694
+ поиск по форуму, или для тебя отдельно в тысяча первый раз решать ?
Вот например : http://forum.pascal.net.ru/index.php?s=&showtopic=6966&view=findpost&p=50590
klem4 , извини!
Я читал ФаК и пойск юзал...
Я не спрашивал как удалить...я нашёл это в факе
Я наверно просто зря создал новый топик, надо было в подобный лезть
просто в процессе написания программы бывают ошибки в которых тут так удачно помогают разобраться)
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.
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.
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.
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.
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.
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.
Ну, для начала, имя процедуры НЕ МОЖЕТ совпадать с именем модуля... Меняй или одно, или другое, иначе будешь получать ошибку "повторное определение идентификатора"
исправил...
мммм
Var
A,B:Matrix;
надо вписать.. а куда вписать в каую часть! ...пойду искать фак по модульному програмированию!!! он должен быть
помогите куда вписать
Var
A,B:Matrix;
чтоб всё заработало...
Прикрепленные файлы
Laba2.rar ( 1.02 килобайт )
Кол-во скачиваний: 244
я в тупике! как быть с этим варом! что-то ничего не выходит((( всё равно в первой же процедуре выдаёт ошибку, что А это не известный индификатор (
Ну, допустим, у тебя НЕ везде, где нужно, подключен модуль GLOBAL. Это во-первых. Во-вторых, я вообще не вижу, где этот твой Del вызывается, и КАК ты в него передаешь параметры...
Ну, и наконец в-третьих: эту же программу можно написать совершенно по-другому, гораздо проще и не делая лишних движений... НО!!! Ты же не сказал, ЧТО именно должно быть в программе, а что - нет. Может тебе обязательно использовать процедурный тип, а может - только желательно...
Телепат в отпуске...
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;
volvo
Спасибо!! как всегда помог!!!
пойду по репе получать от преподавателя)
я допустил жуткую ошибку! я не внимательно прочёл задание! нужно удолить столбцЫ, а не столбец!
значит метод *подтягивания хвостика тут не прокатит*
и возможно мне и функция-то не нужна!...будем думать...может в пойске что найду....
P.S. Стоп... Есть более корректное решение... Надо искать НЕ с начала массива B, а с его окончания (соответственно, не ближайший справа, а ближайший СЛЕВА)... Так решаем проблему смещения всех столбцов СПРАВА от удаляемого на один (а пусть смещаются, мы же идем в противоположную сторону, это нам не мешает...)
пока немного непонял твоих слов...но будем пробывать)
как думал сделать я ( может это в корне не верно и не возможно реализовать)
есть массив В [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);
пока такие мысли в метро летали в голове....
надо ещё подумать
Ну, если честно, я бы вообще по-другому эту задачу делал... Например, так:
Прикрепленные файлы
__PUNS.PAS ( 1.67 килобайт )
Кол-во скачиваний: 272
примусь за изучение
агааааа ! массив с конца рассматривал....круто! и как коротко!!
Спасибо! сейчас так же сделаю) Спасиб!