помогите решить задачу!, Нужно решить задачу с помощью процедуры и функции. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
помогите решить задачу!, Нужно решить задачу с помощью процедуры и функции. |
natik3 |
28.03.2012 1:07
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: 0 |
В общем надо решить следующую задачу: Известно, что в следующем фрагменте программы массив матрица содержит оценки студентов группы, фамилии которых перечислены в типе фамилий
type Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего балла всей группы. Не могу понять как решать с помощью процедуры и функции.Помогите!!! |
Lapp |
28.03.2012 7:35
Сообщение
#2
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Делаешь функцию, возвращающую средний балл студента:
function AverageGrade(Student: fam): real; А потом используешь ее.. Для нахождения общего среднего: s:= 0; И для выяснения наименьшее отклонение от него, тоже в цикле по студентам: MinDeviation:= High(integer); // MaxDeviation опиши как real Вот, примерно все.. Осталось только собрать все, правильно описать переменные и сделать ввод данных. Спрашивай, что неясно. Успехов тебе. Сообщение отредактировано: Lapp - 5.04.2012 0:56 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
28.03.2012 9:22
Сообщение
#3
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> s/(Ord(High(pred))+1)
Неверно, а вдруг pred - это тип-поддиапазон? Тогда уж s/(Ord(High(pred)) - Ord(Low(pred)) +1) -------------------- |
natik3 |
3.04.2012 18:38
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: 0 |
Делаешь функцию, возвращающую средний балл студента: function AverageGrade(Student: fam): real; А потом используешь ее.. Для нахождения общего среднего: s:= 0; И для выяснения наименьшее отклонение от него, тоже в цикле по студентам: MinDeviation:= High(integer); // MaxDeviation опиши как real Вот, примерно все.. Осталось только собрать все, правильно описать переменные и сделать ввод данных. Спрашивай, что неясно. Успехов тебе. спасибо.а не подскажешь откуда в Abs(AvegrageGrade(i)-TotalAverage)<1e-8 мы берем 1e-8? |
Krjuger |
3.04.2012 19:34
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 2 человека имеют абсолютно идентичную разницу с средним балом, очень мал.Поэтому ставиться наш собственный рубеж дескать,если есть те кто в районе 0,00000001 от среднего значения,то их тоже рассматривать как ближайших.В то время,как само минимальное отклонение может быть 1е-20, например.
Сообщение отредактировано: Krjuger - 3.04.2012 19:35 |
natik3 |
3.04.2012 20:18
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: 0 |
С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 2 человека имеют абсолютно идентичную разницу с средним балом, очень мал.Поэтому ставиться наш собственный рубеж дескать,если есть те кто в районе 0,00000001 от среднего значения,то их тоже рассматривать как ближайших.В то время,как само минимальное отклонение может быть 1е-20, например. а нельзя допустим никак обойтись без abs и inc.b заменить это нимимальное отклонение на что нибудь другое? |
Krjuger |
3.04.2012 20:38
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Хах у тебя задание
Цитата Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего балла всей группы. Это и есть наименшее значение отклонения.Абсолютное значение означает,что средний балл студента может быть и меньше и больше на эту величину.Вообще, когда говорят абсолютное подразумевается модуль.Именно поэтому и модуль числа,а в паскале abs- функция реализующая модуль числа.Так что без нее никак, только если самому писать.Но зачем создавать свой велосипед,когда уже есть спортивный байк. inc(b),эт всего лишь встроенная функция, означает она увеличить число b на единицу.По сути это равносильно написанию b:=b+1; |
natik3 |
3.04.2012 20:45
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: 0 |
Хах у тебя задание Это и есть наименшее значение отклонения.Абсолютное значение означает,что средний балл студента может быть и меньше и больше на эту величину.Вообще, когда говорят абсолютное подразумевается модуль.Именно поэтому и модуль числа,а в паскале abs- функция реализующая модуль числа.Так что без нее никак, только если самому писать.Но зачем создавать свой велосипед,когда уже есть спортивный байк. inc(b),эт всего лишь встроенная функция, означает она увеличить число b на единицу.По сути это равносильно написанию b:=b+1; [Error] str45n34c67g.dpr(26): Incompatible types: 'Integer' and 'pred' он мне выдает эту ошибку.как её исправить. P.S. я знаю я туплю...но что поделать,я только учусь( |
IUnknown |
3.04.2012 20:53
Сообщение
#9
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Может, мы все-таки увидим, как все эти фрагменты были собраны в одну программу? Или нам надо собрать самим, убедиться что ошибки нет (при правильной последовательности ее не будет) и опять затеять обсуждение на полсотни постов по методу "испорченный телефон"?
P. S. Стоп. У тебя тип называется Pred? Напрасно. Уже есть функция с тем же именем, и вполне возможно, что у тебя просто конфликт между именами типа и функции. Сообщение отредактировано: IUnknown - 3.04.2012 20:56 |
natik3 |
3.04.2012 21:02
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 34 Пол: Женский Репутация: 0 |
Может, мы все-таки увидим, как все эти фрагменты были собраны в одну программу? Или нам надо собрать самим, убедиться что ошибки нет (при правильной последовательности ее не будет) и опять затеять обсуждение на полсотни постов по методу "испорченный телефон"? P. S. Стоп. У тебя тип называется Pred? Напрасно. Уже есть функция с тем же именем, и вполне возможно, что у тебя просто конфликт между именами типа и функции. type я знаю,что скорее всего тут миллион ошибок.помогите пожалуйста(( |
Krjuger |
4.04.2012 0:41
Сообщение
#11
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Госпади,что вы наворотили,ладно щас разберемся.
Ну для начала, переименовывать то ,что было- было плохой идеей.Затем вы ооочень невнимательно пишите, ваш sred периодически становится sped, у вашей функции Total,есть передаваемый параметр,но когда вы ее вызываете вы его не передаете,затем, ваша функция Total должна вычислить общее среднее значение,так зачем же в цикле его каждый раз вычислять??Вычислили, запомнили и используем. В общем исправив все недочеты вышло следующее.
|
TarasBer |
4.04.2012 9:22
Сообщение
#12
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
С точки зрения здравого смысла.Потому что минимальное отклонение число физически может быть только у одного человека,шанс того, что 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 оказалось почти равно среднему, но чуть меньше, попадает в случай "меньше", а не "равно", это тоже неверно, тоже надо исправить. То есть код должен быть такой:
Кстати, Krjuger, куда ты похерил форматирование кода в своём последнем коде. -------------------- |
kiss |
4.04.2012 13:07
Сообщение
#13
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: 0 |
Помогите, пожалуйста!!!
1. Написать программу, определяющую вид треугольника со сторонами a,b,c. Входные данные: a, b, c Выходные данные: остроугольный/прямоугольный/тупоугольный/равнобедренный/равносторонний/ 2. Написать программу, которая находит сумму n, n+3 и n+7 членов геометрической прогрессии с точностью до шести знаков после запятой, если известны ее первый член b1 и частное q. Входные данные: b1, q, n Выходные данные: sum 3. Написать программу, которая находит сумму n, n+3 и n+7 членов геометрической прогрессии с точностью до шести знаков после запятой, если известны ее первый член b1 и частное q. Входные данные: b1, q, n Выходные данные: sum 4. Дано число n, не превышающее 20. Заполнить двумерный массив (матрицу) mass размерностью n х n числами {0,1} так, чтобы элементы на главной диагонали и выше нее были равны 1, элементы под главной диагональю — были равны 0. Вывести массив на экран в виде таблицы. Входные данные: n Выходные данные: mass 5. Даны числа m и n, не превосходящие 100. Заполнить двумерный массив mass размерностью т х n случайными целыми числами из диапазана (-50;50). Вывести массив на экран в виде таблицы. Найти и вывести на экран минимальные элементы в каждой строке. Найти максимумы в каждом столбце и вывести на экран их сумму. Входные данные: m, n Выходные данные: массив, минимумы, сумма максимумов 6. Заполнить двумерный массив mass размерностью 5х5 случайными символами. Вывести массив на экран в виде таблицы. Выписать слово, получающееся из символов, расположенных на побочной диагонали1 матрицы. Входные данные: - Выходные данные: mass, summ |
Krjuger |
4.04.2012 14:42
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Цитата Ты дезой не занимайся. Шанс, что у двоих будет одинаковый сдрений балл? Да как нафиг. Знаешь, что такое 1Е-8, и что означает запись abs(a-b)<1e-8? Это так сравнивают вещественные числа. Из-за погрешности вычислений (которым такие числа подвержены) их нельзя сравнивать в лоб, поэтому их сравнивают так. Если тебе ленно вникнуть в то,что я написал,то это не моя вина,я и сказал,что это погрешность вычислений.Или,если правильней сказать, то область, которую мы считаем погрешностью. Real 11-12 значащих цифр, так что ничто нам не помешает сделать 1e-10,а если погрешность не важна, то и 1e-4.Никаких четких правил и инструкций, почему 1e-8 я не видел,возможно они и есть.Тогда просветите. Ошибки,приведенные тобой,тут каюсь,я доверился Lapp'у и не смотрел даже,просто привел программу в вид,который компилируется и считает.Форматирование я потерял,когда копировал с форума. |
TarasBer |
4.04.2012 15:05
Сообщение
#15
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Если тебе ленно вникнуть в то,что я написал,то это не моя вина,я и сказал,что это погрешность вычислений.
Ну знаешь, я только с 3 раза догадался, что "только один человек может иметь именно такой-то средний балл" означает погрешность вещественных чисел. -------------------- |
Lapp |
5.04.2012 1:06
Сообщение
#16
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Ну знаешь, я только с 3 раза догадался, что "только один человек может иметь именно такой-то средний балл" означает погрешность вещественных чисел. Крюгер работает над ясностью изложения и четкостью объяснений, и у него есть успехи, но не все сразу.. Прошу прощения за ошибку, TarasBer'у +1 Крюгеру тоже, как пострадавшему через меня )) и за помощь на Форуме. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 24.09.2024 20:39 |