IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> помогите решить задачу!, Нужно решить задачу с помощью процедуры и функции.
natik3
сообщение 28.03.2012 1:07
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 34
Пол: Женский

Репутация: -  0  +


В общем надо решить следующую задачу: Известно, что в следующем фрагменте программы массив матрица содержит оценки студентов группы, фамилии которых перечислены в типе фамилий
 type 
fam=(Ivanov,Petrov,Sidorov);
pred=(Algebra,Russkii,Informatika);
var
matr:array[fam,pred] of integer

Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего балла всей группы.
Не могу понять как решать с помощью процедуры и функции.Помогите!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 3.04.2012 19:34
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 2 человека имеют абсолютно идентичную разницу с средним балом, очень мал.Поэтому ставиться наш собственный рубеж дескать,если есть те кто в районе 0,00000001 от среднего значения,то их тоже рассматривать как ближайших.В то время,как само минимальное отклонение может быть 1е-20, например.

Сообщение отредактировано: Krjuger - 3.04.2012 19:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 4.04.2012 9:22
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(Krjuger @ 3.04.2012 19:34) *

С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 2 человека имеют абсолютно идентичную разницу с средним балом, очень мал.Поэтому ставиться наш собственный рубеж дескать,если есть те кто в районе 0,00000001 от среднего значения,то их тоже рассматривать как ближайших.В то время,как само минимальное отклонение может быть 1е-20, например.

Ты дезой не занимайся.
Шанс, что у двоих будет одинаковый сдрений балл? Да как нафиг.
Знаешь, что такое 1Е-8, и что означает запись abs(a-b)<1e-8? Это так сравнивают вещественные числа. Из-за погрешности вычислений (которым такие числа подвержены) их нельзя сравнивать в лоб, поэтому их сравнивают так.
Ну и

else if Abs(AvegrageGrade(i)-TotalAverage)<1e-8 then Inc(Count)

написано с ошибкой, надо

else if Abs(MinDeviation - Abs(AvegrageGrade(i)-TotalAverage))<1e-8 then Inc(Count)

Что по смыслу похоже на

ЕСЛИ MinDeviation = CurrentDeviation ТОГДА Inc(Count);

Добавлено через 3 мин.
Кстати, случай, когда CurrentDeviation оказалось почти равно среднему, но чуть меньше, попадает в случай "меньше", а не "равно", это тоже неверно, тоже надо исправить.

То есть код должен быть такой:

const Eps = 1E-8;
...
for i:= Low(fam) to High(fam) do begin
CurrentDeviation := Abs(sred(i)-Average);
if Abs(CurrentDeviation - MinDeviation) < Eps then begin
Inc(Count);
end else if CurrentDeviation < MinDeviation then begin
MinDeviation := CurrentDeviation;
Count :=1;
end;
end;




Кстати, Krjuger, куда ты похерил форматирование кода в своём последнем коде.



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
natik3   помогите решить задачу!   28.03.2012 1:07
Lapp   Делаешь функцию, возвращающую средний балл студент...   28.03.2012 7:35
natik3   Делаешь функцию, возвращающую средний балл студен...   3.04.2012 18:38
TarasBer   > s/(Ord(High(pred))+1) Неверно, а вдруг pred ...   28.03.2012 9:22
Krjuger   С точки зрения здравого смысла.Потому что минималь...   3.04.2012 19:34
natik3   С точки зрения здравого смысла.Потому что минимал...   3.04.2012 20:18
TarasBer   С точки зрения здравого смысла.Потому что минимал...   4.04.2012 9:22
Krjuger   Хах у тебя задание Это и есть наименшее значение ...   3.04.2012 20:38
natik3   Хах у тебя задание Это и есть наименшее значение...   3.04.2012 20:45
IUnknown   Может, мы все-таки увидим, как все эти фрагменты б...   3.04.2012 20:53
natik3   Может, мы все-таки увидим, как все эти фрагменты ...   3.04.2012 21:02
Krjuger   Госпади,что вы наворотили,ладно щас разберемся. Ну...   4.04.2012 0:41
kiss   Помогите, пожалуйста!!! 1. Написать пр...   4.04.2012 13:07
Krjuger   Если тебе ленно вникнуть в то,что я написал,то эт...   4.04.2012 14:42
TarasBer   > Если тебе ленно вникнуть в то,что я написал,т...   4.04.2012 15:05
Lapp   Ну знаешь, я только с 3 раза догадался, что ...   5.04.2012 1:06


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"