1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
помогите решить задачу!, Нужно решить задачу с помощью процедуры и функции.
В общем надо решить следующую задачу: Известно, что в следующем фрагменте программы массив матрица содержит оценки студентов группы, фамилии которых перечислены в типе фамилий
type fam=(Ivanov,Petrov,Sidorov); pred=(Algebra,Russkii,Informatika); var matr:array[fam,pred] of integer
Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего балла всей группы. Не могу понять как решать с помощью процедуры и функции.Помогите!!!
С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 2 человека имеют абсолютно идентичную разницу с средним балом, очень мал.Поэтому ставиться наш собственный рубеж дескать,если есть те кто в районе 0,00000001 от среднего значения,то их тоже рассматривать как ближайших.В то время,как само минимальное отклонение может быть 1е-20, например.
С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 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, куда ты похерил форматирование кода в своём последнем коде.