Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Задача по Паскалю

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
andero



Зарегистрирован: 01.08.2007
Сообщения: 3

СообщениеДобавлено: Ср Авг 01 2007 07:37    Заголовок сообщения: Задача по Паскалю Ответить с цитатой

Здравствуйте! Я новичок по программированию. Помогите решить вот такую задачу по Паскалю:
Вычислить среднее арифметическое значение тех элементов одномерного массива, которое расположены за первым по порядку максимальным элементом.
Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Ср Авг 01 2007 08:25    Заголовок сообщения: Ответить с цитатой

Стыдно, товарищь (именно с мягким знаком!), стыдно. Учебники издаются, что бы их читали, а не тараканов разводить.


Фараонов "Основы турбо Паскаля" или что-то аналогичное. Прочти и парься!

Алгоритм:
1. находишь максимальный элемент
2. проверяешь, что за ним есть еще (иначе даешь пинок пользователю)
3. Находишь среднее арифметическое.


Wink
_________________
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]; первый элемент массива. Из-за этого у меня не выходила. Сейчас исправил ошибку. И все решилось, с помощью вашего варианта. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Ср Авг 01 2007 13:17    Заголовок сообщения: Ответить с цитатой

друг, пораскинь мозгами, хоть для себя:

1. Ты делал правильно, на первом шаге мах=a[1] Если массив у тебя начинался с 1 элемента, хотя обычно с 0 и мах=a[0], ищи ошибку в другом
2. Что ты будешь делать, если все элементы массива будут меньше -10000
3. Что ты будешь делать, если максимальный элемент будет последним, в этом случае следует не выдавать ахинею, а сообщить пользователю, что посчитать среднее арифметическое элементов, следующих за максимальным невозможно, т.к. он последний элемент в массиве.

Wink
_________________
Errare humanum est
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grf



Зарегистрирован: 05.04.2005
Сообщения: 1242
Откуда: Москва

СообщениеДобавлено: Ср Авг 01 2007 14:42    Заголовок сообщения: Ответить с цитатой

научись правильно тестить проги, пригодится очень сильно.

Wink
_________________
Errare humanum est
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
andero



Зарегистрирован: 01.08.2007
Сообщения: 3

СообщениеДобавлено: Ср Авг 01 2007 14:45    Заголовок сообщения: Ответить с цитатой

Ты прав насчет max=-10000. Я не подумал о таких вещах. Embarassed Первоначально я понял эту задачу по-другому. Т.е. Сначала находишь первый максимальный элемент, потом второй максимальный элемент, который меньше первого максимального элемента, но больше тех элементов, которые стоят за первым максимальным элементом. Потом вычисляешь сред. арифметическое значение элементов, которые находятся между интервалом. max<сред. значение a(n)<max1. Но, так у меня сначала не получался и потом попробовал решить таким образом. А сейчас даже такой вариант смог решить. Где я мог упустить ошибку не помню, вроде бы алгоритм понимал. Вот значит новички Wink Мне кажется я не правильно открывал и закрывал блоки. Вот этот вариант:
В любом случае большое спасибо!

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);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...