Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 14:35   #1
nuklon712
 
Регистрация: 18.12.2012
Сообщений: 6
По умолчанию в массиве содержится информация о зимней сессии третьего курса....

помогите пожалуйста с решением этой задачи, вообще ума не дам даже с чего начать

в массиве содержится информация о зимней сессии третьего курса. сведения о каждом студенте (максимальное число студентов - 150) содержат следующие данные:
-фамилию (до 12 символов),
-номер группы (от1 до 7),
-оценки по трём предметам (предметы: функциональный анализ, численные методы и экономика)
написать программу которая вводит эту информацию и печатает следующие данные: номера групп в порядке убывания средней успеваемости их студентов.
nuklon712 вне форума Ответить с цитированием
Старый 19.12.2012, 15:06   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Создать структуру, хранящую сведения о студенте. Создать массивы суммарных оценок и численностей групп. Считать информацию о студентах, соответствующим образом меняя суммарные оценки и численности групп. Создать массив пар "номер группы-средняя оценка". Упорядочить его по убыванию средних оценок. Вывести номера групп.
Abstraction вне форума Ответить с цитированием
Старый 19.12.2012, 15:41   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

nuklon712

Код:
#include <iostream>
#include <locale>
#include <string>

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/sequenced_index.hpp>
#include <boost/multi_index/ordered_index.hpp>

using namespace boost::multi_index;
 
struct GradeTag {};

struct Studen
{
	std::string fam;
	unsigned group;

	struct Grade
	{
		unsigned fun, num, ek;
	} grade;
};

struct GradeAvgGreter
{
	bool operator()(Studen::Grade g1, Studen::Grade g2) const
	{
		return (g1.fun + g1.num + g1.ek) / 3.0 > (g2.fun + g2.num + g2.ek) / 3.0;
	}
};

typedef multi_index_container<
	Studen,
	indexed_by<
		sequenced<>,
		ordered_non_unique<tag<GradeTag>, BOOST_MULTI_INDEX_MEMBER(Studen, Studen::Grade, grade), GradeAvgGreter>
	> > Catalog;

int main()
{
	std::locale::global(std::locale(""));

	Catalog cat;
	
	Studen раздолбай;
	раздолбай.group = 1;
	раздолбай.grade.fun = 2;
	раздолбай.grade.num = 2;
	раздолбай.grade.ek = 2;
	cat.push_back(раздолбай);

	Studen баклан;
	баклан.group = 2;
	баклан.grade.fun = 3;
	баклан.grade.num = 3;
	баклан.grade.ek = 3;
	cat.push_back(баклан);

	const auto& list(cat.get<GradeTag>());
	for (auto it = list.cbegin(); it != list.cend(); ++it)
	{
		std::cout << it->group << std::endl;
	}

	return 0;
}
Вывод:
2
1

У раздолбая одни пары, поэтому он в скором времени пополняет ряды защитников отчества. o_O А баклан вытянул на троечки, поэтому его группа печатается первой.

Сдаёшь эту прогу, и наступает твой звездный час, бро! :D
Rififi вне форума Ответить с цитированием
Старый 20.12.2012, 12:37   #4
nuklon712
 
Регистрация: 18.12.2012
Сообщений: 6
По умолчанию

а в каком это коде? мне нужно в паскале

от нашёл что-то подобное, с похожим условием, но не знаю как это довести до ума

условие

1) В массиве содержится информация о зимней сессии 3-го курса. Сведения о каждом студенте (Макс.число студентов - 150) содержат следующие данные : фамилию (до 12 символов), номер группы (от 1 до 7), оценка по 3 предметам (функциональный анализ, численные методы и экономика). Напишите прогу, которая вводит эту информацию и печатает фамилии студентов, имеющих задолжность хотя бы по одному предмету.

PHP код:
uses
CRT
;
 
const
MAX_STUDENTS 150;
 
type
TFamilyName 
String[12];
TGroup 1..7;
TMark 1..5;
TSubjects = array[1..3of TMark;
TStudentData record
FamilyName 
TFamilyName;
Group TGroup;
Subjects TSubjects;
end;
TStudentList = array[1..MAX_STUDENTSof TStudentData;
 
var
StudentList TStudentList;
nStudents Word;
 
function 
GetStudentData(var sd TStudentData) : Boolean;
var
String;
Integer;
Integer;
Ret Boolean;
Word;
begin
Ret 
:= True;
ClrScr;
WriteLn('******* ADD NEW STUDENT *******');
WriteLn;
Write('Family Name: ');
ReadLn(sd.FamilyName);
if 
Length(sd.FamilyName) < 12 then
for := 1 to 12 Length(sd.FamilyName) do
sd.FamilyName := sd.FamilyName ' ';
Write('Group #: ');
ReadLn(S);
Val(SNC);
if (
0) and (>= 1) and (<= 7then
begin
sd
.Group := N;
Write('Functional Analyze Mark: ');
ReadLn(S);
Val(SNC);
if (
0) and (>= 1) and (<= 5then
begin
sd
.Subjects[1] := N;
Write('Numeric Methods Mark: ');
ReadLn(S);
Val(SNC);
if (
0) and (>= 1) and (<= 5then
begin
sd
.Subjects[2] := N;
Write('Economics Mark: ');
ReadLn(S);
Val(SNC);
if (
0) and (>= 1) and (<= 5then
begin
sd
.Subjects[3] := N;
end
else
Ret := False;
end
else
Ret := False;
end
else
Ret := False;
end
else
Ret := False;
if 
Ret then
WriteLn
('Input operation has been done successfully')
else
WriteLn('Input operation has been failed: Invalid data');
GetStudentData := Ret;
end;
 
function 
AddStudent(const sd TStudentData) : Boolean;
begin
if nStudents MAX_STUDENTS then
AddStudent 
:= False
else
begin
Inc
(nStudents);
StudentList[nStudents] := sd;
AddStudent := True;
end;
end;
 
procedure PrintFailedStudents(Columns Byte);
var
Word;
col Byte;
begin
ClrScr
;
WriteLn('******* FAILED STUDENTS *******' 12);
WriteLn;
col := 0;
if 
nStudents 0 then
for := 1 to nStudents do
begin
if col Columns 1 then
WriteLn
;
with StudentList[i] do
begin
if (Subjects[1] <= 2) or (Subjects[2] <= 2) or (Subjects[3] <= 2then
begin
Write
(FamilyName ' ');
col := (col 1mod Columns;
end;
end;
end;
end;
 
procedure Start;
var
Command String;
sd TStudentData;
begin
Command 
:= '';
while (
Command <> 'quit') do
begin
Write
('Command > ');
ReadLn(Command);
if 
Command 'add' then
begin
if GetStudentData(sdthen
if AddStudent(sdthen
WriteLn
('Add operation has been done successfully')
else
WriteLn('Add operations has been failed: Too many students');
WriteLn;
end
else
if 
Command 'print' then
begin
PrintFailedStudents
(6);
WriteLn;
ReadLn;
end
else
WriteLn('Command is not recognized');
end;
end;
 
begin
ClrScr
;
WriteLn('******* COMMANDS *******');
WriteLn('add - add new student');
WriteLn('print - print families of failed students');
WriteLn('quit - exit program');
ReadLn;
ClrScr;
Start;
end
nuklon712 вне форума Ответить с цитированием
Старый 20.12.2012, 12:39   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
а в каком это коде?
C++, boost.
Abstraction вне форума Ответить с цитированием
Старый 20.12.2012, 12:57   #6
nuklon712
 
Регистрация: 18.12.2012
Сообщений: 6
По умолчанию

Abstraction а как его перегнать в паскаль?
nuklon712 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по паскалю - записи, информация об итогах зимней сессии в группе. Сортировка. вычисление среднего балла karacek Паскаль, Turbo Pascal, PascalABC.NET 0 16.05.2012 13:01
Значение содержится в массиве kipish_lp Microsoft Office Excel 4 19.06.2010 11:31
Задан текстовый файл в строках которого через пробел содержится информация согласно задания. Natasha162 Помощь студентам 3 12.01.2010 18:19
Результат Зимней Сессии(Pascal) Naper214 Помощь студентам 2 29.12.2008 02:28
проверить, содержится ли строка в массиве aurora_87 Общие вопросы C/C++ 6 28.12.2008 01:25