program vector;
uses crt;
var a: array [1..50] of integer;
i,x,n,l, m, j, k, y: integer;
begin
clrscr;
write ('vvedite razmernost vectora, n=');
readln (n);
writeln ('vvedite koordinaty vectora:');
i:=0;
while i<n do
begin
read(x); a:=x; i:=i+1;
end;
readln;
i:=0; l:=1; m:=0; k:=0; j:=-1;
while i<n do
begin
if a<a[i+1] then
begin
l:=l+1;
if j=-1 then j:=i;
end
else begin l:=1; j:=-1; end;
if l>m then
begin
m:=l; k:=j;
end;
i:=i+1;
end;
if k=-1 then k:=0;
writeln;
for j:=k to m+k-1 do
write(a[j],' ');
readln;
end.
Паскаль, работа с векторами и со строками
Помогите, пожалуйста, решить задачи. Заранее всех благодарю за отклики!
1. Составить главную программу и процедуру. В процедуре для данного вектора А(М) найти наибольшую по длине возрастающую последовательность элементов вектора.
Monika, читай пожалуйста правила форума Студентам. [COLOR=red]Одна тема - один вопрос[/COLOR]
Код:
l - считает, какая длина у этой возраст последовательности, m - максимум этой длины, k- номер позиции, начиная с которой идет эта макс. последовательность.
Код корявый, но вроде работает, выводит максимальную последовательность, только в конце ставит какие-то закорючки, рожицы, ромбики и т.д (один из этих символов). с чем это связано и как с этим бороться?
"только в конце ставит какие-то закорючки, рожицы, ромбики и т.д"
значит это неопределенный элемент массива. Т.е. выводишь больше символов чем надо.
Как вариант можно очищать массив (for i:=1 to 50 do a:='';), тогда этого не будет... или смотри где у тебя вылазит вывод за пределы полезной инф. массива.
l - считает, какая длина у этой возраст последовательности, m - максимум этой длины, k- номер позиции, начиная с которой идет эта макс. последовательность.
Код:
program vector;
uses crt;
var a: array [1..50] of integer;
i,x,n,l, m, j, k: integer;
begin
clrscr;
write ('vvedite razmernost vectora, n=');
readln (n);
writeln ('vvedite koordinaty vectora and press Enter:');
for i:=0 to n-1 do
begin
read(x); a:=x;
end;
readln;
l:=1; m:=0; k:=0; j:=-1;
for i:=1 to n-1 do
begin
if a[i-1]<a then
begin
l:=l+1;
if j=-1 then j:=i-1;
end
else begin l:=1; j:=-1; end;
if l>m then
begin
m:=l; k:=j;
end;
end;
if k=-1 then k:=0;
writeln;
i:=k;
for j:=0 to m-1 do
write(a[i+j],' ');
readln;
end.
uses crt;
var a: array [1..50] of integer;
i,x,n,l, m, j, k: integer;
begin
clrscr;
write ('vvedite razmernost vectora, n=');
readln (n);
writeln ('vvedite koordinaty vectora and press Enter:');
for i:=0 to n-1 do
begin
read(x); a:=x;
end;
readln;
l:=1; m:=0; k:=0; j:=-1;
for i:=1 to n-1 do
begin
if a[i-1]<a then
begin
l:=l+1;
if j=-1 then j:=i-1;
end
else begin l:=1; j:=-1; end;
if l>m then
begin
m:=l; k:=j;
end;
end;
if k=-1 then k:=0;
writeln;
i:=k;
for j:=0 to m-1 do
write(a[i+j],' ');
readln;
end.
Код:
program vector;
uses crt;
var a: array [1..50] of integer;
i,x,n,l, m, j, k: integer;
begin
clrscr;
write ('vvedite razmernost vectora, n=');
readln (n);
writeln ('vvedite koordinaty vectora and press Enter:');
for i:=1 to n-1 do
begin
read(x); a:=x;
end;
readln;
l:=1; m:=0; k:=0; j:=-1;
for i:=1 to n-1 do
begin
if a<a[i+1] then
begin
l:=l+1;
if j=-1 then j:=i-1;
end
else begin l:=1; j:=-1; end;
if l>m then
begin
m:=l; k:=j;
end;
end;
if k=-1 then k:=0;
writeln;
i:=k;
for j:=1 to m do
write(a[i+j],' ');
readln;
end.
uses crt;
var a: array [1..50] of integer;
i,x,n,l, m, j, k: integer;
begin
clrscr;
write ('vvedite razmernost vectora, n=');
readln (n);
writeln ('vvedite koordinaty vectora and press Enter:');
for i:=1 to n-1 do
begin
read(x); a:=x;
end;
readln;
l:=1; m:=0; k:=0; j:=-1;
for i:=1 to n-1 do
begin
if a<a[i+1] then
begin
l:=l+1;
if j=-1 then j:=i-1;
end
else begin l:=1; j:=-1; end;
if l>m then
begin
m:=l; k:=j;
end;
end;
if k=-1 then k:=0;
writeln;
i:=k;
for j:=1 to m do
write(a[i+j],' ');
readln;
end.
Уфф!! У меня она вообще изначально не работала. Ты обращалась к эл a[0], которого нет в принципе.
Тестил под 7.0
А вообще молодец, почти все правильно написала! :)
Franky, спасибо тебе большое! :) :)
можно цветами и конфетами... в большой таре... не крепче 20% :)