Vladimir_S |
25.05.2018 15:43 |
Попытаюсь Вам помочь.
К сожалению, на СИ не пишу, поэтому пришлось сначала перегнать Вашу программу в Паскаль. получилось так:
Код:
Const
Nmax=20;
Var
i,j,n,ip,i1,in,i2,k:integer;
a:array[0..Nmax] of real;
Begin
write('Razmer massiva = ');
readln(n);
for i:=0 to n do
begin
write('Vvedite element massiva: a[',i:2,'] = ');
readln(a[i]);
end;
ip:=0;
i:=n;
while (i>0) and (ip=0) do
if (a[i]<0) and (a[i-1]<0) then ip:=i else i:=i-1;
if (ip=0)
then writeln('V massive net bolee odnogo otricattel`nogo elementa podryad')
else
begin
k:=0;
i:=ip;
i1:=ip;
while (i>=1) and (i1=ip) do
if (a[i]<=0) or (i=1) then i1:=i+1
else
begin
k:=k+1;
i:=i-1;
end;
end;
in:=0;
i:=n;
while (i>0) and (in=0) do
if (a[i]<0) and (a[i-1]<0) then in:=i;
if (in=0)
then writeln('V massive net bolee odnogo otricattel`nogo elementa podryad')
else
begin
k:=0;
i:=in;
i2:=in;
while (i>=1) and (i2=in) do
if (a[i]<=0) or (i=1) then i2:=i+1
else
begin
k:=k+1;
i:=i-1;
end;
end;
writeln('Nachalo predposlednei gruppy = ',in,' Konec = ',i2);
writeln('Predposlednyaya gruppa otricatel`nyh elementov:');
for i:=in to i2 do writeln(a[i]:0:5);
Readln;
End.
После отладки и устранения кучи ошибок получилось вот что:
Код:
Const
Nmax=20;
Var
i,j,n,ip,i1,i2,k:integer;
a:array[0..Nmax] of real;
Begin
write('Razmer massiva = ');
readln(n);
for i:=0 to n do
begin
write('Vvedite element massiva: a[',i:2,'] = ');
readln(a[i]);
end;
ip:=0;
i:=n;
while (i>0) and (ip=0) do
if (a[i]<0) and (a[i-1]<0) then ip:=i else i:=i-1;
if (ip=0)
then writeln('V massive net bolee odnogo otricatel`nogo elementa podryad')
else
begin
k:=0;
i:=ip;
ip:=0;
while (i>=1) and (ip=0) do
if (a[i]>=0) or (i=0) then
begin
i1:=i+1;
ip:=i;
end
else
begin
k:=k+1;
i:=i-1;
end;
ip:=0;
i:=i1;
while (i>0) and (ip=0) do
if (a[i]<0) and (a[i-1]<0) then ip:=i else i:=i-1;
if (ip=0)
then writeln('V massive net vtoroy gruppi otricatel`nih elementov')
else
begin
i1:=ip;
k:=0;
i:=ip;
i2:=ip;
ip:=0;
while (i>=0) and (ip=0) do
if (a[i]>=0) then
begin
i2:=i+1;
ip:=1;
end
else
if (i=0) and (a[i]<0) then
begin
i2:=i;
ip:=1;
end
else
begin
k:=k+1;
i:=i-1;
end;
writeln('Nachalo predposlednei gruppy = ',i2,' Konec = ',i1);
writeln('Predposlednyaya gruppa otricatel`nyh elementov:');
for i:=i2 to i1 do writeln(a[i]:0:5);
end;
end;
Readln;
End.
Надеюсь, сможете сами разобрать и внести поправки в СИ-программу. Если нет — напишите, попробуем вместе.
P.S. Не понял, зачем Вы вычисляете длины фрагментов массивов (k): они нигде не используются и даже не выводятся. Но, впрочем, оставил.
|