Консультация № 174490
23.11.2009, 18:01
0.00 руб.
0 6 1
Помогите начинающему программисту решить 3задачи.
1)В одном массиве состоящем из N вещественных элементов вычислить: а)количество элементов меньших С б)сумму целых частей элементов массива , расположенных после последнего отрицательного элемента. Преобразовать массив таким образом , чтобы сначало распологались все элементы, отличающихся от максимального .не более чем на 20%, а потом все остальные.

Обсуждение

Неизвестный
23.11.2009, 19:11
общий
это ответ
Здравствуйте, roman22.

Решение - в приложении.
Единственный нюанс: при нахождении элементов,
отличающихся от максимального .не более чем на 20%
, я прибавлял 20% процентов к элементам массива, а не вычитал 20% из максимального. Если я неправильно понял это условие, то его не трудно подправить.

Приложение:
uses crt;

const N=13; {Если больше, то не влезут в экран в одну строку}

var a: array[1..n] of real;
i,j,max: byte;
sum,c :real;

begin
clrscr;
randomize;
for i:=1 to N do
begin
a[i]:=(random-0.5)*100;{Вводим элементы массива "случайным образом"}
write(a[i]:6:1) {И выводим на печать}
end;
{1}
writeln;
write('Введите C: ');
readln(c);
j:=0;
for i:=1 to N do
if a[i]<c then {Если очередной элемент массива больше С,}
inc(j); {увеличиваем j на единицу}
writeln(j,' элементов больше ', c:3:1);
{2}
sum:=0.0;
for i:=1 to N do
if a[i]<0 then {если встретился отрицательный элемент, то мы не дошли до неотрицательного "хвоста" массива}
sum:=0.0 {тогда обнуляем сумму}
else
sum:=sum+a[i];
writeln('Summa=',sum:3:1);
{3}
max:=1;
for i:=2 to N do
if a[i]>a[max] then
max:=i;
writeln('max=',a[max]:3:1,' a[i] d.b. >',a[max]/1.2:3:1);
for i:=1 to N-1 do
if a[i]*1.2<a[max] then
for j:=i+1 to N do
if a[j]*1.2>=a[max] then
begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
break
end;
for i:=1 to N do
write(a[i]:6:1);
readkey
end.
Неизвестный
25.11.2009, 11:02
общий
Максим Юрьевич:
Доброе утро!
1. Пусть МАКС = 100%, тогда элемент, отличающийся от него на 20%, есть ЭЛЕМ=100%-20%=80%. К=МАКС/ЭЛЕМ=100%/80%=1.25 (а не 1.2, как у Вас).
2. Требуется найти
сумму [b]целых частей [/b]элементов массива , расположенных после последнего отрицательного элемента.

Вы находите сумму элементов. К тому же выгодней идти справа, до первого отрицательного элемента, используя цикл WHILE
Неизвестный
25.11.2009, 11:15
общий
leonid59:
Да, я предупредил об этом. Надеюсь, что нетрудно будет при необходимости в коде
Код:

for i:=1 to N-1 do
if a[i]*1.2<a[max] then
for j:=i+1 to N do
if a[j]*1.2>=a[max] then

заменить все "*1.2" на "/0.8"
Неизвестный
26.11.2009, 05:49
общий
Максим Юрьевич:
А вам не кажется что
отличающихся от максимального .не более чем на 20%,
подразумевает под собой как в большую так и в меньшую сторону?
Неизвестный
26.11.2009, 17:20
общий
Тимошенко Дмитрий:
В большую сторону от максимального? Маловероятно:)
Неизвестный
27.11.2009, 06:51
общий
Форма ответа