Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
andero
Зарегистрирован: 01.08.2007 Сообщения: 3
|
Добавлено: Ср Авг 01 2007 07:37 Заголовок сообщения: Задача по Паскалю |
|
|
Здравствуйте! Я новичок по программированию. Помогите решить вот такую задачу по Паскалю:
Вычислить среднее арифметическое значение тех элементов одномерного массива, которое расположены за первым по порядку максимальным элементом.
Спасибо! |
|
Вернуться к началу |
|
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Ср Авг 01 2007 08:25 Заголовок сообщения: |
|
|
Стыдно, товарищь (именно с мягким знаком!), стыдно. Учебники издаются, что бы их читали, а не тараканов разводить.
Фараонов "Основы турбо Паскаля" или что-то аналогичное. Прочти и парься!
Алгоритм:
1. находишь максимальный элемент
2. проверяешь, что за ним есть еще (иначе даешь пинок пользователю)
3. Находишь среднее арифметическое.
_________________ Errare humanum est
Последний раз редактировалось: grf (Ср Авг 01 2007 08:56), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Bjorndalen
Зарегистрирован: 18.07.2007 Сообщения: 29
|
Добавлено: Ср Авг 01 2007 08:50 Заголовок сообщения: |
|
|
Что то типа этого:
Код: |
var a = array[1..100] of real;
q, maxNumber:integer;
max, average:real;
begin
//заполняешь массив значениями
.....
//находишь первое максимальное и средннее из всех начиная от него
max:=-10000;
maxNumber:=1;
average:=0;
for q:=1 to 100 do
if a[q]>max then begin
max:=a[q];
maxNumber:=q
end;
for q:=maxNumber to 100 do
average:=average+a[q]/(q-maxNumber+1);
writeln("УРА! Среднеее=",average:8:4)
end.
|
|
|
Вернуться к началу |
|
|
andero
Зарегистрирован: 01.08.2007 Сообщения: 3
|
Добавлено: Ср Авг 01 2007 13:11 Заголовок сообщения: |
|
|
Во-первых я хочу сказать большое спасибо вам за ответ.
Дело в том, я пытался решить эту задачу. Моя ошибка была в том, что я присвоил max:=a[1]; первый элемент массива. Из-за этого у меня не выходила. Сейчас исправил ошибку. И все решилось, с помощью вашего варианта. |
|
Вернуться к началу |
|
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Ср Авг 01 2007 13:17 Заголовок сообщения: |
|
|
друг, пораскинь мозгами, хоть для себя:
1. Ты делал правильно, на первом шаге мах=a[1] Если массив у тебя начинался с 1 элемента, хотя обычно с 0 и мах=a[0], ищи ошибку в другом
2. Что ты будешь делать, если все элементы массива будут меньше -10000
3. Что ты будешь делать, если максимальный элемент будет последним, в этом случае следует не выдавать ахинею, а сообщить пользователю, что посчитать среднее арифметическое элементов, следующих за максимальным невозможно, т.к. он последний элемент в массиве.
_________________ Errare humanum est |
|
Вернуться к началу |
|
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Ср Авг 01 2007 14:42 Заголовок сообщения: |
|
|
научись правильно тестить проги, пригодится очень сильно.
_________________ Errare humanum est |
|
Вернуться к началу |
|
|
andero
Зарегистрирован: 01.08.2007 Сообщения: 3
|
Добавлено: Ср Авг 01 2007 14:45 Заголовок сообщения: |
|
|
Ты прав насчет max=-10000. Я не подумал о таких вещах. Первоначально я понял эту задачу по-другому. Т.е. Сначала находишь первый максимальный элемент, потом второй максимальный элемент, который меньше первого максимального элемента, но больше тех элементов, которые стоят за первым максимальным элементом. Потом вычисляешь сред. арифметическое значение элементов, которые находятся между интервалом. max<сред. значение a(n)<max1. Но, так у меня сначала не получался и потом попробовал решить таким образом. А сейчас даже такой вариант смог решить. Где я мог упустить ошибку не помню, вроде бы алгоритм понимал. Вот значит новички Мне кажется я не правильно открывал и закрывал блоки. Вот этот вариант:
В любом случае большое спасибо!
max:=a[1];
num:=1;
s:=0;
k:=0;
for i:=1 to 10
if a[i]>max then
begin
max:=a[i];
num:=i;
end;
max2:=a[num1+1];
for i:=10 downto num+1 do
begin
if a[i]>max2 then begin
max2:=a[i];
num2:=i;
end;
end;
for i:=num+1 to num2-1 do
begin
k:=k+1;
s:=s+a[i];
sred:=s/k;
end;
writeln(sred);
2-ой вариант
max:=a[1];
num:=1;
s:=0;
k:=0;
for i:=1 to 10
if a[i]>max then
begin
max:=a[i];
num:=i;
end;
for i:=10 downto num+1 do
begin
s:=s+a[i];
k:=k+1;
sred:=s/k;
end;
writeln(sred); |
|
Вернуться к началу |
|
|
|