Перейти к содержанию

помогите исправить ошибку в ТП


Рекомендуемые сообщения

uses crt;

const n=10;

var a:array [1..n] of integer;

kr,summa,summa1,s1,max,min,minim,i,s,x,t,j,i_max,i_min,i_i:integer;

sr,sred:real;

flag:byte;

procedure vvod;

begin

writeln ('vvedite cifri');

for i:=1 to n do

readln (a);

end;

procedure srednii;

begin

vvod;

s:=0;

for i:=1 to n do

s:=s+a;

sr:=s/n;

for i:=1 to n do

a:=a-sr; тута

for i:=1 to n do

write (a);

end;

procedure ravno;

begin

vvod;

s:=0;

for i:=1 to n do

s:=s+a;

sr:=s/n;

for i:=1 to n do

a:=a-sr; еще тута

t:=abs(a[1]);

i_i:=1;

for i:=2 to n do

if abs(a)

begin

t:=abs(a);

i_i:=i;

end;

write ('indeks elementa raven: ',i,'-e');

end;

procedure minimalnii;

begin

vvod;

for i:=1 to n do

if a[j]>a[j+1] then

begin

x:=a[j];

a[j]:=a[j+1];

a[j+1]:=x;

end;

for i:=1 to n do

if a>0 then

min:=a;

break;

write ('minimalnii polozhitelnii element raven', min);

end;

procedure summaa;

begin

vvod;

s1:=0;

if a<0 then s1:=0

else for i:=1 to n do

repeat

s1:=s1+a;

until a<0;

writeln ('summa ravna: ', s1);

end;

procedure swap;

begin

vvod;

max:=a[1];

i_max:=1;

for i:=2 to n do

if max

begin

max:=a;

i_max:=i;

end;;

for i:=1 to n do

if a<0 then

begin

minim:=a;

i_min:=i;

break;

end;

a[i_max]:=minim;

a[i_min]:=max;

for i:=1 to n do

write (a);

end;

procedure last;

begin

vvod;

summa1:=0;

for i:=1 to n-1 do

for j:=1 to n-i do

if a[j]>a[j+1] then

begin

x:=a[j];

a[j]:=a[j+1];

a[j+1]:=x;

end;

for i:=2 to n-1 do

summa:=summa+a;

sred:=summa/(n-2);

write ('summa ravna: ', sred);

end;

begin

clrscr;

flag:=0;

repeat

writeln('1.vichet srednego');

writeln('2.znachenie blizkoe k srednemu');

writeln('3.minimum sredi polozhitelnih');

writeln('4.summa do pervogo otricatelnogo');

writeln('5.swap max and first otricatelnii');

writeln('6.srednee bez max and min');

writeln('0.exit');

write ('vvedite nomer: ');

readln (kr);

case kr of

{ 1:srednii;

2:ravno;

3:minimalnii;}

4:summaa;

5:swap;

6:last;

0:exit

end;

flag:=1

until flag=0;

end.

Добавлено спустя 1 минуту 2 секунды:

Блин помогите плииз, еси это не сдам зачета нее видать=(

задано целое n>0 и массив элементов х1,х2,х3, ... ,хn

а) преоброзавать исходный массив, вычитая из каждого элемента среднее значение

б)определить индекс элемента, значение которого наиболее близко к среднему значению элементов массива

в)найти минимальный элемент среди положительных элементов заданного массива

г)вычислить сумму элементов массива, расположенных до первого отрицательного элемента массива

д)поменять местами максимальныи и первый отрицательный элементы массива

е)вычислить среднее значение элементов массива, отбросив минимальный и максимальный элементы

вот задание

Ссылка на комментарий
a:=a-sr; тута

а чудес не бывает, смотрим

a:array [1..n] of integer;
sr,sred:real;

вот и определитесь вам шашечки или ехать ?

кто помешал в этих процедурах ввести temp : array [1..n] of real и с ним работать.

и в procedure ravno; добавить t : real , а то опять спросите =)

удачи.

Ссылка на комментарий

аа я получается реал приравнял к интеджер.

спасибо coder

uses crt;

const n=10;

var a:array [1..n] of integer;

kr,summa,summa1,s1,max,min,minim,i,s,x,t,j,i_max,i_min,i_i:integer;

sr,sred:real;

flag:byte;

procedure vvod;

begin

writeln ('vvedite cifri');

for i:=1 to n do

readln (a);

end;

procedure srednii;

begin

vvod;

s:=0;

for i:=1 to n do

s:=s+a;

sr:=s/n;

for i:=1 to n do

b:=a-sr;

for i:=1 to n do

write (a);

end;

procedure ravno;

begin

vvod;

s:=0;

for i:=1 to n do

s:=s+a;

sr:=s/n;

for i:=1 to n do

b:=a-sr;

t:=abs(a[1]);

i_i:=1;

for i:=2 to n do

if abs(a)

begin

t:=abs(a);

i_i:=i;

end;

write ('indeks elementa raven: ',i,'-e');

end;

procedure minimalnii;

begin

vvod;

for i:=1 to n do

if a[j]>a[j+1] then

begin

x:=a[j];

a[j]:=a[j+1];

a[j+1]:=x;

end;

for i:=1 to n do

if a>0 then

min:=a;

break;

write ('minimalnii polozhitelnii element raven', min);

end;

procedure summaa;

begin

vvod;

s1:=0;

if a<0 then s1:=0

else for i:=1 to n do

repeat

s1:=s1+a;

until a<0;

writeln ('summa ravna: ', s1);

end;

procedure swap;

begin

vvod;

max:=a[1];

i_max:=1;

for i:=2 to n do

if max

begin

max:=a;

i_max:=i;

end;;

for i:=1 to n do

if a<0 then

begin как сделать чтобы он брал токо первый отрицательный член

minim:=a;

i_min:=i;

break; это лишнее пхду

end;

a[i_max]:=minim;

a[i_min]:=max;

for i:=1 to n do

write (a);

end;

procedure last;

begin

vvod;

summa1:=0;

for i:=1 to n-1 do

for j:=1 to n-i do

if a[j]>a[j+1] then

begin

x:=a[j];

a[j]:=a[j+1];

a[j+1]:=x;

end;

for i:=2 to n-1 do

summa:=summa+a;

sred:=summa/(n-2);

write ('summa ravna: ', sred);

end;

begin

clrscr;

flag:=0;

repeat

writeln('1.vichet srednego');

writeln('2.znachenie blizkoe k srednemu');

writeln('3.minimum sredi polozhitelnih');

writeln('4.summa do pervogo otricatelnogo');

writeln('5.swap max and first otricatelnii');

writeln('6.srednee bez max and min');

writeln('0.exit');

write ('vvedite nomer: ');

readln (kr);

case kr of

{ 1:srednii;

2:ravno;

3:minimalnii;}

4:summaa;

5:swap;

6:last;

0:exit

end;

flag:=1

until flag=0;

end.

посморите еще вот ето

Ссылка на комментарий
break; это лишнее пхду
exit используется для выхода из цикла. бряк для завершения проги (если не ошибаюсь). давно им не пользовался. а вообще есть хелп, гугл и книги =)
Ссылка на комментарий

наоборот, break- выход из цикла а exit из программы.

uses crt;

const n=10;

var a:array [1..n] of integer;

b:array [1..n] of real;

kr,summa,summa1,s1,max,min,minim,i,s,x,t,j,i_max,i_min,i_i:integer;

sr,sred:real;

flag:byte;

procedure vvod;

begin

writeln ('vvedite cifri');

for i:=1 to n do

readln (a);

end;

procedure srednii;

begin

vvod;

s:=0;

for i:=1 to n do

s:=s+a;

sr:=s/n;

for i:=1 to n do

begin

b:=a-sr;

write (b:0:3);

end;

end;

procedure ravno;

var ind:integer;

begin

vvod;

s:=0;

for i:=1 to n do

s:=s+a;

sr:=s/n;

ind=1;

for i:=2 to n do

if abs(a[ind]-sr)

write ('indeks elementa raven: ',i,'-e');

end;

procedure minimalnii;

var min:integer;

begin

vvod;

min=32767;

for i:=1 to n do

if (a>0)and(a

write ('minimalnii polozhitelnii element raven', min);

end;

procedure summaa;

begin

vvod;

s1:=0;

i=1;

while (a>0)and(i<=n) do

begin

s1:=s1+a;

inc(i);

end;

writeln ('summa ravna: ', s1);

end;

procedure swap;

var w:integer;

begin

vvod;

max:=1;

for i:=1 to n do

if a>a[max] then max:=i;

i=1;

while (a>0)and(i<=n) do inc(i);

if i<=n then

begin

w:=a[max];

a[max]:=a;

a:=w;

end;

for i:=1 to n do

write (a);

end;

procedure last;

begin

vvod;

summa1:=0;

for i:=1 to n-1 do

for j:=1 to n-i do

if a[j]>a[j+1] then

begin

x:=a[j];

a[j]:=a[j+1];

a[j+1]:=x;

end;

for i:=2 to n-1 do

summa:=summa+a;

sred:=summa/(n-2);

write ('summa ravna: ', sred);

end;

begin

clrscr;

flag:=0;

repeat

writeln('1.vichet srednego');

writeln('2.znachenie blizkoe k srednemu');

writeln('3.minimum sredi polozhitelnih');

writeln('4.summa do pervogo otricatelnogo');

writeln('5.swap max and first otricatelnii');

writeln('6.srednee bez max and min');

writeln('0.exit');

write ('vvedite nomer: ');

readln (kr);

case kr of

{ 1:srednii;

2:ravno;

3:minimalnii;}

4:summaa;

5:swap;

6:last;

0:exit;

end;

flag:=1

until flag=0;

end.

Ссылка на комментарий

да, чтот ошибся )) после выполнения break в цикле, программа переходит к следующему после цикла оператору, exit - завершает текущую процедуру/функцию, если вызывается в подпрограммах, или программу, если вызывается в основной части программы.

i=1;

while (a>0)and(i<=n) do inc(i);

if i<=n then

begin

w:=a[max];

a[max]:=a;

a:=w;

end;

процедура первое не положительное найдет. чтобы находило отрицательное заменить цикл на

while (a[i]>=0)and(i<=n) do inc(i);

а вообще что надо чтобы функция выполняла?

Добавлено спустя 33 секунды:

а вообще что должна у тебя делать процедура swap?

Ссылка на комментарий

for i:=1 to n do
if a[i]>a[max] then max:=i;

странная запись, делается так:

var b:boolean;
i_max, i_zero, i, max:integer;
begin
b:=true;
max:=-100;
i_max:=0;
for i:=1 to n do begin
if b and (a[i]<0) then begin
b:=false;
i_zero:=i;
end
if a[i]>max then begin
i_max:=i;
max:=a[i];
end;
end;
k:=a[i_max];
a[i_max]:=a[i_zero];
a[i_zero]:=k;

Ссылка на комментарий

coder

я основную программу не смотрел тока процедуря подправил.

var b:boolean;

i_max, i_zero, i, max:integer;

begin

b:=true;

max:=-100;

i_max:=0;

for i:=1 to n do begin

if b and (a<0) then begin

b:=false;

i_zero:=i;

end

if a>max then begin

i_max:=i;

max:=a;

end;

end;

k:=a[i_max];

a[i_max]:=a[i_zero];

a[i_zero]:=k;

TolkienDRR

зачем столько переменных то ради смены элементов местами?

Ссылка на комментарий

странная запись, делается так:

var b:boolean;
i_max, i_zero, i, max:integer;
begin
b:=true;
max:=-100;
i_max:=0;
for i:=1 to n do begin
if b and (a[i]<0) then begin
b:=false;
i_zero:=i;
end
if a[i]>max then begin
i_max:=i;
max:=a[i];
end;
end;
k:=a[i_max];
a[i_max]:=a[i_zero];
a[i_zero]:=k;

Что за max := -100?

max := a[1];

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...