Страница 1 из 2

Структуры с С++

Добавлено: 30 янв 2008, 20:39
patrick87
В конкурсе учавствуют N человек. Информация об одном участнике: ФИО, год рождения, название ВУЗа, количество баллов, набранных в конкурсе. По текущей дате определить призеров конкурса в фиксированных возрастных группах (возраст из [k,l]), занявших 1,2,3 - места. Участники с равным числом баллов делят соседние места.

Помогите плз определиться с алгоритмом...не понять задание само =(

Re: Структуры с С++

Добавлено: 30 янв 2008, 21:20
Uchenic
Создаешь массив участников - каждый участник, структура с соотв полями. Заполняешь. Потом в цикле проходишь массив, сравниваешь возраст (текущая дата - дата рождения) с пределами возрастных групп (придумать самому). В той группе, в которую попадает текущий участник, сравниваешь его результат с тремя лучшими, если попадает, оставляешь. И так для всего массива. 1 проход цикла (можно прямо при заполнении).

Re: Структуры с С++

Добавлено: 30 янв 2008, 21:25
PaaQ
Наверное нужно создать тип структура полями которого будут :ФИО, год рождения, название ВУЗа, количество баллов, набранных в конкурсе.
struct Elem
{ int FIO;
.......
Elem *Next;
};

Cоздать список
Elem *Create(int d)
{ Elem *pl = New Elem;
pl -> FIO = d;
.......
pl -> Next =0 ;
return pl; }
НО Это возможно не тривиально и не уверен что вообше следует этим пользоваться так как сортировка линейного списка мне не встречалась и вообше не уверен что это можно делать .
возраст из [k,l] вот это не понятно что такое ,тебе надо было у преподавателя спросить ,что такое k и l .

Re: Структуры с С++

Добавлено: 31 янв 2008, 10:30
patrick87
У к примеру есть файл students.txt в котором содержатся данные о студентах.
Создаю структуру
struct students
{
char FIO [50];
char VUZ [50];
double kol_bal;
int god;
unsigned int vozrast;
}
Как теперь прочесть данные из файла этого?

Re: Структуры с С++

Добавлено: 31 янв 2008, 11:04
BBB
patrick87 писал(а):У к примеру есть файл students.txt в котором содержатся данные о студентах.
Создаю структуру

Код: Выделить всё

struct students
{
char FIO [50];
char VUZ [50];
double kol_bal;
int god;
unsigned int vozrast;
}
vozrast, думается, тут лишний. Так как год рождения имеется, а возраст с течением времени меняется.
А если требуется "По текущей дате определить" возраст, то хорошо бы иметь данные не только о годе, но и дате рождения.

Re: Структуры с С++

Добавлено: 31 янв 2008, 11:15
patrick87
а как это все из файла прочитать?
данные в файле будут так расположены ФИО МГУ 1987 50

Re: Структуры с С++

Добавлено: 31 янв 2008, 12:01
BBB
Вообще, в C несколько групп функций работы с файлами.

Например,
open
read
write
close

При чтении указываешь буфер, куда читать и размер (в байтах) этого буфера


Т.е. прмерно так:

Код: Выделить всё

 #include <io.h>
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <errno.h>

students one_student;
handle f_students;
int iRead;

f_students = open ("students.dat", _O_RDWR | O_BINARY, S_IREAD | S_IWRITE);
if (f_students != 0) {
  iRead = read (f_students, &one_student, sizeof (one_student));
  if (iRead != sizeof (one_student)) {
    // error 
  };
  close (f_students);
};

Re: Структуры с С++

Добавлено: 31 янв 2008, 12:42
patrick87
я конечно извиняюсь, т.к. мои знания пока ограничиваются 1 семестром 1 курса) можно дополнить код комментами...
handle f_students;
int iRead;
мне не понятно это, а дальше я так понимаю проверка открытия файла?

Re: Структуры с С++

Добавлено: 31 янв 2008, 12:52
BBB
patrick87,

Код: Выделить всё

 #include <io.h>
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <errno.h>

 //-- Объявление переменных:
students one_student;   // экземпляр структуры  students
handle f_students;      // переменная - описатель файла
int iRead;              // переменная типа int

  // открытие файла с именем "students.dat", на чтение и запись (_O_RDWR),
  // бинарного  (O_BINARY)
f_students = open ("students.dat", _O_RDWR | O_BINARY, S_IREAD | S_IWRITE);

 // проверка на успешность открытия, если (f_students != 0), то успешно
if (f_students != 0) {

  // вообще, здесь моджет быть понадобиться встать на нужную запись:
   lseek (f_students, <offset>, <origin >);

 // чтение из файла в количестве (sizeof (one_student)) байт
  iRead = read (f_students, &one_student, sizeof (one_student));

 // Проверка, что прочитано столько сколько заказывали
  if (iRead != sizeof (one_student)) {
    // error 
  };

 // Закрытие файла
  close (f_students);

Re: Структуры с С++

Добавлено: 31 янв 2008, 15:06
WinMain
BBB, автор написал, что у него текстовый файл students.txt, поэтому бинарное чтение из файла здесь не подходит. Нужно текст читать построчно и каждую строку делить на составляющие, а потом ими уже заполнять структуру. Автору темы нужно придумать символ разделителя столбцов в строке. Этим символом может быть, например точка с запятой ( ;) . Тогда каждая строка в тексте будет иметь вид примерно такой:

Василий Иванович Пупкин; Сельхозакадемия им. Тимирязева; 1988; 33

Числа (год рождения и количество баллов) нужно будет преобразовать из строковых в числовые значения.