Сгенерировать числа и разделить на четные и нечетные - Turbo Pascal
Формулировка задачи:
Здравствуйте.
Надо создать программу, где будет выводить определенное количество рандомных чисел. Потом эти рандомные числа делятся на четные и нечетные. Четные сортируются по возрастанию, нечетные по убыванию. Пытался сделать, психанул от того, что было не правильно и все стер. Нужна помощь.
Решение задачи: «Сгенерировать числа и разделить на четные и нечетные»
textual
Листинг программы
var
arAll, arOdd, arEven: Array[Byte] Of ShortInt;
i, j, nAll, nOdd, nEven: Byte;
swap: ShortInt;
isSorted: Boolean;
begin
Randomize;
repeat
Write('Input n(1..255)=');
ReadLn(nAll);
until (nAll > 0);
nOdd := 0; nEven := 0;
Write(' All:');
for i := 0 to nAll - 1 do
begin
arAll[i] := Random(199) - 99;
Write(arAll[i]:4);
if (Odd(arAll[i]))
then
begin
arOdd[nOdd] := arAll[i];
Inc(nOdd); //не хватает в паскале инкремента
end
else
begin
arEven[nEven] := arAll[i];
Inc(nEven);
end;
end;
WriteLn; Write(' Odd:');
if (nOdd > 0)
then
begin
for i := 0 to nOdd - 1 do
Write(arOdd[i]:4);
isSorted := (nOdd = 1);
while (Not isSorted) do
begin
isSorted := True;
for i := 0 to nOdd - 2 do
if (arOdd[i] < arOdd[i + 1])
then
begin
swap := arOdd[i];
arOdd[i] := arOdd[i + 1];
arOdd[i + 1] := swap;
isSorted := False;
end;
end;
WriteLn; Write('s Odd:');
for i := 0 to nOdd - 1 do
Write(arOdd[i]:4);
end
else
Write('EMPTY!');
WriteLn; Write(' Even:');
if (nEven > 0)
then
begin
for i := 0 to nEven - 1 do
Write(arEven[i]:4);
isSorted := (nEven = 1);
while (Not isSorted) do
begin
isSorted := True;
for i := 0 to nEven - 2 do
if (arEven[i] > arEven[i + 1])
then
begin
swap := arEven[i];
arEven[i] := arEven[i + 1];
arEven[i + 1] := swap;
isSorted := False;
end;
end;
WriteLn; Write('sEven:');
for i := 0 to nEven - 1 do
Write(arEven[i]:4);
end
else
Write('EMPTY!');
end.
Объяснение кода листинга программы
- Переменная
arAllинициализируется как массив коротких целых чисел размеромnAll. - Переменная
arOddинициализируется как массив коротких целых чисел размеромnOdd, который будет использоваться для хранения нечетных чисел. - Переменная
arEvenинициализируется как массив коротких целых чисел размеромnEven, который будет использоваться для хранения четных чисел. - Цикл
repeatиспользуется для повторного запроса числа от пользователя до тех пор, пока число больше нуля. - Внутри цикла
repeatпеременнаяnAllинициализируется как результат чтения числа с консоли. - Переменные
nOddиnEvenинициализируются как 0. - В каждой итерации цикла
forпеременнаяarAll[i]инициализируется случайным числом от 0 до 99. - Если число
arAll[i]является нечетным, то оно записывается вarOdd[nOdd]. - Переменная
nOddувеличивается на 1. - Если число
arAll[i]является четным, то оно записывается вarEven[nEven]. - Переменная
nEvenувеличивается на 1. - После завершения цикла
forвыводится сообщение о том, сколько чисел было введено. - Затем выводится сообщение о том, сколько нечетных чисел было введено.
- Выводится сообщение о том, сколько четных чисел было введено.
- Если
nOddилиnEvenравны 0, то выводится сообщениеEMPTY!. - В конце кода выводится сообщение с числами из
arOddиarEven.