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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2014, 18:41   #1
EasyMak
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 27
По умолчанию Файлы (СИ).

Результаты сдачи студентами экзаменационной сессии хранятся в файле, содержащем следующие данные: фамилия студента и оценки по физике, математике и информатике. Вывести количество двоек по каждому из предметов и вывести список студентов, имеющих двойки хотя бы по одному предмету.

На СИ пожалуйста
EasyMak вне форума Ответить с цитированием
Старый 01.01.2015, 08:35   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,603
По умолчанию

Примерно так
Код:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <locale.h>

// Структура данных - студент
struct student
{
char name[16];
int physics;
int informatics;
int mathematics;
struct student* next;
};

// Записать в файл данные студентов
void write_file(char* fn)
{
struct student a;
FILE* f = fopen(fn, "wb");
strcpy(a.name, "Петров\0"); a.physics = 4; a.informatics = 3; a.mathematics = 4; a.next = 0; fwrite(&a, sizeof(struct student), 1, f);
strcpy(a.name, "Иванов\0"); a.physics = 2; a.informatics = 2; a.mathematics = 2; a.next = 0; fwrite(&a, sizeof(struct student), 1, f);
strcpy(a.name, "Дмитриев\0"); a.physics = 2; a.informatics = 3; a.mathematics = 3; a.next = 0; fwrite(&a, sizeof(struct student), 1, f);
fclose(f);
}

// Прочесть из файла данные студентов
struct student* read_file(char* fn)
{
struct student* j = 0;
struct student* k;
struct student* l;
FILE* f = fopen(fn, "rb");
while(!feof(f))
{
if (j == 0) { j = (struct student*) malloc(sizeof(struct student)); j->next = 0; k = j; }
if ( fread(j, sizeof(struct student), 1, f) ) 
{ 
while(j->next) j = j->next; j->next = (struct student*) malloc(sizeof(struct student)); j = j->next;  j->next = 0; 
}
else {  j = k; while(j->next) { l = j; j = j->next; } free (l->next); l->next = 0; }
}
fclose(f);
return k;
}

// Вывести на консоль информацию о студенте
void print_element(struct student* j) 
{ 
printf("Фамилия: %s\n", j->name); 
printf("Оценка по физике: %d\n", j->physics); 
printf("Оценка по информатике: %d\n", j->informatics); 
printf("Оценка по математике: %d\n", j->mathematics); 
printf("\n"); 
}

// Вывести список студентов на консоль
void write_list(struct student* k) 
{ 
struct student* j=k; 
while (j->next) { print_element(j); j = j->next; } 
print_element(j); 
}

// Определить количество двоек
void get_twos_count(struct student* k) 
{ 
int ph_count = 0;
int in_count = 0;
int ma_count = 0;
struct student* j=k; 
while (j->next) 
{ 
if (j->physics == 2) ph_count++;
if (j->informatics == 2) in_count++;
if (j->mathematics == 2) ma_count++;
j = j->next; 
} 


if (j->physics == 2) ph_count++;
if (j->informatics == 2) in_count++;
if (j->mathematics == 2) ma_count++;

printf("Количество двоек по физике: %d\n", ph_count);
printf("Количество двоек по информатике %d\n", in_count);
printf("Количество двоек по математике %d\n", ma_count);
}

// Узнать, какие студенты имеют двойки
void get_twos_student(struct student* k) 
{ 
struct student* j=k; 
while (j->next) 
{ 
if (j->physics == 2 ||  j->informatics == 2 || j->mathematics == 2) printf("Имеет двойку студент %s\n", j->name);
j = j->next; 
} 

if (j->physics == 2 || j->informatics == 2 || j->mathematics == 2) printf("Имеет двойку студент %s\n", j->name);
}

// Точка входа
void main()
{
struct student* ext;
struct student* j;
char* fname = "stlist\0";
setlocale(LC_ALL, "Russian");
write_file(fname);
ext = read_file(fname);
write_list(ext);
get_twos_count(ext);
get_twos_student(ext);
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 01.01.2015, 12:20   #3
EasyMak
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 27
По умолчанию

СПАСИБО ОГРОМНОЕ!!!

С Новым Годом вас!!!)
EasyMak вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы: Составить программу, которая перепишет фамилии в отдельные файлы в соответствии с названием группы Гульвира Помощь студентам 1 23.05.2013 10:04
Очень нужно сделать задачу в Delphi(Типизированные файлы. файлы записи) Vitalik1 Помощь студентам 1 16.12.2011 10:38
Не сохраняет файлы (Создает файлы пустышки) Rock231 Помощь студентам 2 25.12.2010 12:31
Файлы данных.Типизированные файлы. вылка Помощь студентам 6 17.05.2010 15:42
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53