1 Прикачен файл(ове)
Моля за помощ за една задача на Pascal
Здравейте!Нуждая се от помощ за една задача на Pascal.Нямам много опит с програмирането на Pascal и затова моля за помощ.Та задачата е следната:
Направете програма на Pascal,която извърщва четенето от клавиатурата на едно цяло число N, което определя размера на
квадратна матрица A[N x N].Изчислете нова матрица B=|| Bij ||със същия размер,където* Bij е минимума на елементите ,които се намират в защрихованата зона (под диагоналите, които* минаватат през* Aij)
На прикачения file е картинката със защрихованата част,за по-голяма нагледност
Моля,ако някой измисли нещо да ми го прати на e-mail: realdh@abv.bg ili ICQ:230-528-965.Благодаря предварително!!! :punk:
Re: Моля за помощ за една задача на Pascal
Първо: картинката не се вижда.
Освен това, моля те, опитай да напишеш нещо по задачата, и чак тогава да помагаме по конкретни въпроси. Няма никаква полза някой да ти я даде готова.
Поне направи опит, става ли?
1 Прикачен файл(ове)
Re: Моля за помощ за една задача на Pascal
Цитат:
Първоначално публикувано от Bibi
Първо: картинката не се вижда.
Освен това, моля те, опитай да напишеш нещо по задачата, и чак тогава да помагаме по конкретни въпроси. Няма никаква полза някой да ти я даде готова.
Поне направи опит, става ли?
Първо съжалявам за картинката!Сложил съм друга картинка.Относно задачата.Днес цял ден се мъча, но нищо не излиза.Проблемът е че не мога да отсея елементите под тези произволни диагонали. Ето какво съм направил,но ме е малко срам,защото всичко е объркано и не работи:
Program Zad15;
* * * * * * * * type
* * * * * * * * * * Masiv2= array[1..20,1..20] of real;
* * * * * * * * var
* * * * * * * * * *n:integer;
* * * * * * * * * *A:Masiv2;
* * * * * * * * procedure ReadM (m:integer; var X:Masiv2);
* * * * * * * * * *var
* * * * * * * * * * * i,j:integer;
* * * * * * * * * *begin
* * * * * * * * * * * for i:=1 to n do
* * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * *for j:=1 to n do read(X[i,j]);
* * * * * * * * * * * * * * * *readln;
* * * * * * * * * * * * * end;
* * * * * * * * * *end;
* * * * * * * * function Min(m:integer; var X:Masiv2):real;
* * * * * * * * * * * * *var
* * * * * * * * * * * * * * p,i,j:integer;
* * * * * * * * * * * * * * S:array[1..20] of real;
* * * * * * * * * * * * * * y:real;
* * * * * * * * * * * * *begin
* * * * * * * * * * * * * * * write('i=');read(i); (Тук искам да въведа елемента,който съм си избрал и да излезе на екрана, примерно А34
* * * * * * * * * * * * * * * write('j=');read(j);
* * * * * * * * * * * * * * * *read(X[i,j];
p:=i;
* * * * * * * * * * * * * * * for i:=p to m do
* * * * * * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * * * * * *for j:=1 to m do
* * * * * * * * * * * * * * * * * * * * * *if(i-j=2)and(m<>i) then write('Erreur')
* * * * * * * * * * * * * * * * * * * * * *else
* * * * * * * * * * * * * * * * * * * * * *if X[i,j]<S[i] then S[i]:=X[i,j];
* * * * * * * * * * * * * * * * * *end;
* * * * * * * * * * * * * * * * * *y:=S[1];
* * * * * * * * * * * * * * * * * *for i:=2 to n do
* * * * * * * * * * * * * * * * * * * *if S[i]<y then y:=S[i];
* * * * * * * * * * * * * * * * * *Min:=y;
* * * * * * * * * * * * * *end;
* * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * *write('n=');readln(n);
* * * * * * * * * * * * * * * *ReadM(n,A);
* * * * * * * * * * * * * * * *writeln(Min(n,A));
* * * * * * * * * * * * * readln;
* * * * * * * * * * * * * end.
Това е общо взето.Сега съм качил правилната картинка.
Re: Моля за помощ за една задача на Pascal
Добре :-)
Първо виж процедурата ReadM.
Там двата цикъла трябва да ги въртиш до m, а не до n.
Нали това ти е вътрешната променлива за размера на масива.
Честно казано позабравила съм в Паскала как стои въпроса с глобалните променливи, но доколкото n е глобална, можеш изобщо да не я предаваш на процедурата.
Ако искаш, пробвай.
Имам предвид процедурата ти да си остане както е в момента, само да й махнеш първия параметър.
Нещо такова:
Код:
function MinElement(var mi, mj: integer; var X: Masiv2): real;
var
i, j, lo, hi: integer;
y: real;
begin
if mi < n then
begin
y := X[mi + 1,mj];
for i := mi + 2 to n do
begin
if (mi + mj - i + 1 > 1)
then lo := mi + mj - i + 1
else lo := 1;
if (mj - mi + i - 1 < n)
then hi := mj - mi + i - 1
else hi := n;
for j := lo to hi do
if (X[i,j] < y) then y := X[i,j];
end;
MinElement := y;
end
else MinElement := X[mi,mj];
end;
И в главната:
Код:
begin
write('n = '); readln(n);
ReadM(A);
for i:=1 to n do
for j:=1 to n do
B[i,j] = MinElement(i,j,A);
WriteM(B);
end.
Re: Моля за помощ за една задача на Pascal
Ето какво се получи след няколкочасови мъки,благодарение на Bibi:
* * * * Program Zad15;
* * * * * * * * type
* * * * * * * * * * Masiv2= array[1..20,1..20] of real;
* * * * * * * * var
* * * * * * * * * *i,j,n:integer;
* * * * * * * * * *A,B:Masiv2;
* * * * * * * * procedure ReadM (m:integer; var X:Masiv2);
* * * * * * * * * *var
* * * * * * * * * * * i,j:integer;
* * * * * * * * * *begin
* * * * * * * * * * * for i:=1 to n do
* * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * *for j:=1 to n do read(X[i,j]);
* * * * * * * * * * * * * * * *readln;
* * * * * * * * * * * * * end;
* * * * * * * * * *end;
* * * * * * * * procedure WriteM(var X:Masiv2);
* * * * * * * * * * var
* * * * * * * * * * * *i,j:integer;
* * * * * * * * * * begin
* * * * * * * * * * * *for i:=1 to n do
* * * * * * * * * * * *begin
* * * * * * * * * * * *for j:=1 to n do write (X[i,j]:2);
* * * * * * * * * * * *writeln;
* * * * * * * * * * * *end;
* * * * * * * * * * end;
* * * * * * * * function MinElement(var mi,mj:integer;var X:Masiv2):real;
* * * * * * * * * * * * *var
* * * * * * * * * * * * * * i,j,lo,hi:integer;
* * * * * * * * * * * * * * y:real;
* * * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * * *if mj<n then
* * * * * * * * * * * * * * * * *begin
* * * * * * * * * * * * * * * * * y:=X[mi,mj+1];
* * * * * * * * * * * * * * * * * for j:=j+2 to n do
* * * * * * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * * * *if (mi+mj>j)then lo:=mi+mj-j+1 else lo:=1;
* * * * * * * * * * * * * * * * * *if (mi-mj<n-j +1) then hi:=mi - mj +j-1 else hi:=n;
* * * * * * * * * * * * * * * * * *for i:=lo to hi do
* * * * * * * * * * * * * * * * * * * *if(X[i,j]<y) then y:=X[i,j];
* * * * * * * * * * * * * * * * * end;
* * * * * * * * * * * * * * * * * MinElement:=y;
* * * * * * * * * * * * * * end
* * * * * * * * * * * * * * else MinElement:=X[mi,mj];
* * * * * * * * * * * * * end;
* * * * * * * * * * * * * begin
* * * * * * * * * * * * * * * *write('n=');readln(n);
* * * * * * * * * * * * * * * *ReadM(n,A);
* * * * * * * * * * * * * * * *for i:=1 to n do
* * * * * * * * * * * * * * * * * *begin
* * * * * * * * * * * * * * * * * * * * for j:=1 to n do B[i,j]:=MinElement(i,j,A);
* * * * * * * * * * * * * * * * * * * *end;
WriteM(B);
* * * * * * * * * * * * * readln;
* * * * * * * * * * * * * end.
Ако някой има какво да каже и да сподели опит да заповяда!!!Благодаря