02.05.2007, 20:01
общий
это ответ
<i>Здравствуйте, <b>Peeny</b>!</i>
Задачу №1 (Листинг 1 приложения) решил по такому алгоритму (я решил попроще, чем в предыдущем ответе):
<b>1.</b> Принимаем, что количество разных чисел = количеству элементов массива.
<b>2.</b> Выбираем один элемент массива
<b>3.</b> Ищем такой же один элемент массива, но стоящий после выбранного
<b>4.</b> Если элемент найден, то уменьшаем количество разных чисел на 1. Поиск прекращаем.
<b>5.</b> Выбираем следующий элемент массива
<b>6.</b> Если элемент массива не последний, переходим к п.3
<b>7.</b> Вывод результатов.
Задачу №2 (Листинг 2 приложения) решил по такому алгоритму:
<b>1.</b> Принимаем, что минимальная разность равна 1000 (т.е. больше, чем любое значение в массиве)
<b>2.</b> Выбираем первый элемент массива
<b>3.</b> Ищем модуль разности этого элемента массива с каждым последующим элементом, сравниваем с минимальным и, если меньше, то принимаем значение минимальной разности равным найденному.
<b>4.</b> Выбираем следующий элемент массива
<b>5.</b> Если массив не закончился, переходим к п.3.
Ввод массива можно взять и из примера, приведенного в предыдущем ответе.
Решение постарался максимально упростить. Использовал минимальное число дополнительных переменных.
<i>Удачи!</i>
Приложение:
Листинг 1:program q85124_1;uses crt; const {Размер массива} mxSize = 100; {№ последнего элемента массива} ms = mxSize - 1; var mass: array[0..ms] of Integer; i, j: Integer; {Собственно, результат} difCnt: Integer; begin {очистка экрана} ClrScr; {Заполнение массива} for i:= 0 to ms do mass[i]:= Random(100) - 50; {вычитаем половину, чтобы были как положительные, так и отрицательные числа в массиве} {Инициализация} difCnt:= mxSize; {Количества разных элементов массива} for i:= 0 to (ms - 1) do begin for j:= (i + 1) to ms do begin if (mass[i] = mass[j]) then begin dec(difCnt); Break; end; end; end; {Вывод массива} for i:= 0 to (ms - 1) do write(mass[i], ‘, ‘); writeln(mass[ms]); writeln; {Вывод результата} writeln(‘Different elements count = ‘, difCnt); write(‘Press any key...‘); readln;end.---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Листинг 2:program q85124_2;uses crt; const {Размер массива} mxSize = 10; {№ последнего элемента массива} ms = mxSize - 1; var mass: array[0..ms] of Integer; i, j: Integer; {Предыдущее минимальное значение} lastMin: Integer; {Следующая разница} nextSub: Integer; begin {очистка экрана} ClrScr; {Заполнение массива} for i:= 0 to ms do mass[i]:= Random(ms * 10) - (ms * 5); {вычитаем половину, чтобы были как положительные, так и отрицательные числа в массиве} {Инициализация} lastMin:= 1000; {Нахождение минимальной разности элементов} for i:= 0 to (ms - 1) do begin for j:= (i + 1) to (ms) do begin nextSub:= abs(mass[i] - mass[j]); if (lastMin > nextSub) then lastMin:= nextSub; end; end; {Вывод массива} for i:= 0 to (ms - 1) do write(mass[i], ‘, ‘); writeln(mass[ms]); writeln; {Вывод результата} writeln(‘Minimal substraction = ‘, lastMin); write(‘Press any key...‘); readln;end.