Страница 1 из 1
Помогите! через 2 дня зачет!
Добавлено: 28 ноя 2007, 13:09
hexx
Ребята, реально выручайте, до зачета осталось 2 дня, помогите пожалуйста решить задачу по программированию. Если Вам не сложно, то еще пожалуйста сделайте к ней блок-схему.
Заранее Благодарю!
"Дано масив дійсних чисел. Знайти суму двох найменших по абсолютній величині елементів масиву."
Re: Помогите! через 2 дня зачет!
Добавлено: 28 ноя 2007, 13:47
Игорь Акопян
" писал(а):дійсних
хоть это и не сильно важно, но я лично не понял что это за слово.
переношу в "РМЗ"
Re: Помогите! через 2 дня зачет!
Добавлено: 28 ноя 2007, 14:59
Хыиуду
Раздел алгоритмы, тема "нахождение минимума" или максимума. Нашли - убрали число из массива, поискали следующее по величине. Сложили.
Либо: раздел алгоритмы, тема "Сортировка массива". Отсортировали по возрастанию, сложили 1 и 2 элементы
Re: Помогите! через 2 дня зачет!
Добавлено: 28 ноя 2007, 17:22
annihilator
hexx, есть два варианта. Вариант первый:
Код: Выделить всё
var arr:array [1..количество_элементов] of чевототам;
a,b,s:чевототам;i:integer;
begin
for i:=1 to количество_элементов do
begin
writeln('введите элемент номер',i);
readln(arr[i]);
end; {только что были введены все элементы массива}
a:=abs(arr[1]);{чтобы было с чем сравнивать}
for i:=2 to количество_элементов do
if abs(arr[i])<a then a:=abs(arr[i]);{цикл будет сравнивать модуль элемента массива с значением переменной а, таким образом в переменной а будет записан модуль наименьшего элемента массива}
b:=abs(arr[1]);{по аналогии с переменной а}
for i:=2 to количество_элементов do
if (abs(arr[i])<b) and (abs(arr[i])<>a) then b:=abs(arr[i]);
{этот цикл делает то же, что и предыдущий, но загоняет в переменную b наименьший элемент исключая значение, уже записанное в а}
s:=a+b;{а вот и наша сумма модулей наименьших элементов, которая выводится через writeln или write}
второй метод - сортировка методом пузырька. Если интересно - тоже напишу. Хочешь сказать спасибо - поставь мне плюсег в репутацию=)
Единственный глюк этой методики - если самый первый элемент массива будет наименьшим. Однако от этого можно избавиться, если заменить строчку
на
Код: Выделить всё
for i:=1 to количество_элементов do
if abs(arr[i])<>a then begin b:=abs(arr[i]);break;end;
тогда даже если массив будет {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2} то переменная b получит значение 2 потому что 1 уже зарезервировано за переменной а.
Хыиуду, ну зачем же портить массив? а если препод скажет ещё что-то туда добавить, с чем работать?
Re: Помогите! через 2 дня зачет!
Добавлено: 30 ноя 2007, 11:42
Хыиуду
annihilator писал(а):Хыиуду, ну зачем же портить массив? а если препод скажет ещё что-то туда добавить, с чем работать?
Надо сказать преподу: "Техзадание надо ставить сразу и конкретно, а не менять по ходу разработки!".
А если не хочется портить отношения - создать еще один такой же массив и с ним работать
Re: Помогите! через 2 дня зачет!
Добавлено: 30 ноя 2007, 14:26
annihilator
Хыиуду писал(а):Надо сказать преподу: "Техзадание надо ставить сразу и конкретно, а не менять по ходу разработки!".
А если не хочется портить отношения - создать еще один такой же массив и с ним работать
тоже правда, но всё таки лучше не менять исходные данные - пусть себе лежат, думаю что лишний кб никому не навредит. К слову, хоть и оффтоп, у меня в универе препод по информатике никогда от меня ничего не хотел, ибо он ещё больший ламак чем я =)