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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 28.03.2012 7:35
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Делаешь функцию, возвращающую средний балл студента:

function AverageGrade(Student: fam): real;
var
i: pred;
s: real;
begin
s:= 0;
for i:= Low(pred) to High(pred) do s:= s + matr[Student,i];
AverageGrade:= s/(Ord(High(pred))+1)
end;


А потом используешь ее..
Для нахождения общего среднего:
  s:= 0;
for i:= Low(fam) to High(fam) do s:= s + AvegrageGrade(i); // i is ot type fam here
TotalAverage:= s/(Ord(High(fam))+1);


И для выяснения наименьшее отклонение от него, тоже в цикле по студентам:
  MinDeviation:= High(integer);    // MaxDeviation опиши как real
for i:= Low(fam) to High(fam) do
if Abs(AvegrageGrade(i)-TotalAverage)<MinDeviation then begin
MinDeviation:= Abs(AvegrageGrade(i)-TotalAverage);
Count:= 1
end
else if Abs(Abs(AvegrageGrade(i)-TotalAverage)-MinDiviation)<1e-8 then Inc(Count) //corrected, see post from TarasBer below
WriteLn(Count,' студентов имеют минимальное отклонение от среднего балла группы');


Вот, примерно все.. Осталось только собрать все, правильно описать переменные и сделать ввод данных.
Спрашивай, что неясно. Успехов тебе.

Сообщение отредактировано: Lapp - 5.04.2012 0:56


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
natik3
сообщение 3.04.2012 18:38
Сообщение #3


Новичок
*

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

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


Цитата(Lapp @ 28.03.2012 8:35) *

Делаешь функцию, возвращающую средний балл студента:

function AverageGrade(Student: fam): real;
var
i: pred;
s: real;
begin
s:= 0;
for i:= Low(pred) to High(pred) do s:= s + matr[Student,i];
AverageGrade:= s/(Ord(High(pred))+1)
end;


А потом используешь ее..
Для нахождения общего среднего:
  s:= 0;
for i:= Low(fam) to High(fam) do s:= s + AvegrageGrade(i); // i is ot type fam here
TotalAverage:= s/(Ord(High(fam))+1);


И для выяснения наименьшее отклонение от него, тоже в цикле по студентам:
  MinDeviation:= High(integer);    // MaxDeviation опиши как real
for i:= Low(fam) to High(fam) do
if Abs(AvegrageGrade(i)-TotalAverage)<MinDeviation then begin
MinDeviation:= Abs(AvegrageGrade(i)-TotalAverage);
Count:= 1
end
else if Abs(AvegrageGrade(i)-TotalAverage)<1e-8 then Inc(Count)
WriteLn(Count,' студентов имеют минимальное отклонение от среднего балла группы');


Вот, примерно все.. Осталось только собрать все, правильно описать переменные и сделать ввод данных.
Спрашивай, что неясно. Успехов тебе.



спасибо.а не подскажешь откуда в Abs(AvegrageGrade(i)-TotalAverage)<1e-8 мы берем 1e-8?
 Оффлайн  Профиль  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:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"