Требуется помощь в решении задачи на паскале

  • Автор темы Bibinur
  • Дата начала
B

Bibinur

Гость
#1
Доброй всем ночи.
Требуется помощь в решении задачи на паскале, задача состоит из 4х частей:
Часть I. ПОЛУЧЕНИЕ ЭЛЕМЕНТОВ МАССИВА
“Вычислить значения 30 элементов одномерного целочисленного массива ‹R› в интервале (-10 ,6) c использованием генератора случайных чисел”
Часть 2. ВЫЧИСЛЕНИЕ ПАРАМЕТРА МАССИВА
“Вычислить сумму четных по номеру элементов последней четверти массива”
Часть 3. ОПРЕДЕЛЕНИЕ ПАРАМЕТРА МАССИВА
“Определить наибольший элемент среди принадлежащих [a/2; b/2] элементов первой трети массива”
Часть 4. УПОРЯДОЧЕНИЕ ЭЛЕМЕНТОВ МАССИВА
“Упорядочить нечётные по номеру элементы второй четверти массива по возрастанию квадратов значений”
первые 3 части решили, 4 не могу, помогите кто чем может

Program Work_4;
const
N=30;
a=-10;
b=6;
Var
s,max,z:real;
i,k,t: integer;
R:array[1..N] of Real;
Begin
s:=0;
Randomize;
for i:=1 to n do
R:=a+Round((b-a)*Random(100)/100);
Writeln('vyvod elementov massiva:');
for i:=1 to N do Write(R:4);
Writeln;
k:=trunc(N/4);
k:=N-k;
for i:=k to N do
if (i mod 2=0) then
s:=s+R;
writeln ('s=',s);
t:=trunc(N/3);
max:=-999999;
for i:=1 to t do
if (R>=(a/2)) and (R<=(b/2)) and (R>max) then
max:=R;
if max<>-999999 then
for i:=1 to t do
if r=max then
begin
writeln ('i=',i,' max=',max);
break;
end;

end.
 

sinkopa

Well-Known Member
#2
Доброй всем ночи.
первые 3 части решили, 4 не могу, помогите кто чем может
Вот. Первые 3 я тоже подправил. Там несоответствия с условием задания. (см. комментарии)
Код:
program Work_4;

const
N = 30;
A = -10;
B = 6;
var
s,max,min, z,z2: Integer;
i,j,k,k2: integer;
R: array[1..N] of Integer; //!! В задании был ЦЕЛОЧИСЛЕННЫЙ массив !!
begin
Writeln('***** Programma obrabotki odnomernogo massiva ********');
Writeln('  *****  iz ',N,' celochislennyh elementov	 *****');
Writeln;

{ Часть I. ПОЛУЧЕНИЕ ЭЛЕМЕНТОВ МАССИВА
30 элементов одномерного целочисленного массива ‹R› в интервале (-10 ,6)
c использованием генератора случайных чисел  }

Randomize;
Writeln('Vyvod elementov massiva:');
z := B - A; // вычисляем диапазон генерации случайных чисел (длина отрезка)
// Random будет выдавать от 0 до 16

for i:=1 to N do
begin
R[i] := Random(z) + A; //Вычисляем элемент (смещение +A дает нам интервал от -10 до 6)

if (i mod 5 = 0) then  // Выводим (по 5 элементов в строку, через знак табуляции #9)
Writeln('R[',i,'] = ',R[i],';')
else
Write('R[',i,'] = ',R[i],';',#9);
end;
Writeln;

{ Часть 2. ВЫЧИСЛЕНИЕ ПАРАМЕТРА МАССИВА
Вычислить сумму четных по номеру элементов последней четверти массива }

k := N div 4; //последняя четверть массива
k := N - k;

s := 0;
for i:=k to N do
begin
if (i mod 2 = 0) then
s := s + R[i];
end;

Writeln ('Summa chetnyh elementov v diapazone R[',k,'] - R[',N,'] = ',s);
Writeln;

{ Часть 3. ОПРЕДЕЛЕНИЕ ПАРАМЕТРА МАССИВА
Определить наибольший элемент среди принадлежащих [a/2; b/2] элементов
первой трети массива }

k := N div 3; // 1-я треть массива

max := -999999;
z := 0;
for i:=1 to k do
if ((R[i] >= (A/2)) and (R[i] <= (B/2)) and (R[i] > max)) then
begin
max := R[i]; // запоминаем максимальный элемент
z := i;	  // запоминаем индекс максисмального элемента
end;

if (z = 0 ) then
Writeln ('Znacheniy udovletvoryaushih usloviyu v diapazone R[1] - R[',k,'] ne obnaruzeno')
else
Writeln ('Naibolshiy element v diapazone R[1] - R[',k,']: R[',z,'] = ',R[z]);
Writeln;

{ Часть 4. УПОРЯДОЧЕНИЕ ЭЛЕМЕНТОВ МАССИВА
Упорядочить нечётные по номеру элементы второй четверти массива
по возрастанию квадратов значений }

k := N div 4; // 2-я четверть массива
k2 := N div 2;

Writeln ('Znacheniya nechetnyh elementov v diapazone R[',k,'] - R[',k2,'] do sortirovki:');
Writeln ('*Element*',#9,'*kvadrat znacheniya*');
for i:=k to k2 do
if (i mod 2 <> 0) then
Writeln('R[',i,'] = ',R[i],#9,(R[i]*R[i]));


for i := k to k2-1 do  // !! до предпоследнего элемента. Он обработается во внутреннем цикле
begin
if (i mod 2 = 0) then // если четный элемент, переходим к следующей итерации
Continue;

z := 0;
min := 10000000;	  //ищем минимальный элемент
for j := i to k2 do
begin
if (j mod 2 = 0) then // если четный, переходим к следующей итерации
Continue;

if ((R[j]*R[j]) < min) then
begin
min := R[j]*R[j];
z := j;  //находим индекс минимального элемента
end;
end;
s := R[i];	 // временно запомнили
R[i] := R[z]; // вставляем минимальный
R[z] := s;	 // текущий на его место
end;

Writeln;
Writeln ('Znacheniya nechetnyh elementov v diapazone R[',k,'] - R[',k2,'] posle sortirovki:');
Writeln ('*Element*',#9,'*kvadrat znacheniya*');

for i:=k to k2 do
if (i mod 2 <> 0) then
Writeln('R[',i,'] = ',R[i],#9,(R[i]*R[i]));

Writeln;
Write('Zakonchili. Nazmite <ENTER> dlya vihoda iz programmy');
Readln;
end.