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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2014, 21:38   #1
kolyasha
 
Регистрация: 25.12.2011
Сообщений: 7
По умолчанию Программа на Turbo C: Описать структуру с именем STUDENT

Добрый вечер. Прощу помощи с задачей, нужно сделать её на Turbo C:

Описать структуру с именем STUDENT, содержащую следующие поля:
-фамилия и инициалы;
-номер группы;
-успеваемость (массив из пяти элементов).

Написать программу, выполняющую следующие действия:
1. Сортировка по алфавиту.
2. Вывод на экран фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0. Если таких студентов нет, вывести соответствующее сообщение.
kolyasha вне форума Ответить с цитированием
Старый 08.06.2014, 22:00   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Что именно не получается?
rrrFer вне форума Ответить с цитированием
Старый 08.06.2014, 22:21   #3
kolyasha
 
Регистрация: 25.12.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Что именно не получается?
Не знаю как написать вот это:
"Вывод на экран фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0. Если таких студентов нет, вывести соответствующее сообщение."
kolyasha вне форума Ответить с цитированием
Старый 08.06.2014, 22:27   #4
kolyasha
 
Регистрация: 25.12.2011
Сообщений: 7
По умолчанию Программа

Вот пока что получается
Цитата:
1. Создание нового файла.
2. Добавление типа STUDENT в файл.
3. Удаление указанной записи.
4. Корректировку указанной записи.
5. Просмотр файла.
6. Сортировка по алфавиту.
7. Вывод на экран фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0. Если таких студентов нет, вывести соответствующее сообщение.
Код:
#include <stdio.h> 
#include <conio.h>
#include <stdlib.h>
void menu(struct STUDENT*); 
void vvod(struct STUDENT**, FILE *f, int id);
void vivod(struct STUDENT**, FILE *f);
void sort(struct STUDENT**, FILE *f);
void swp(FILE *f, int id1, int id2, struct STUDENT **stud);
void info(struct STUDENT**, FILE *f);
void udal(int id, FILE *f);
FILE *f; 
struct STUDENT
{
char name[20]; 
int  group; 
int  ses[5];
};
void main() 
{
struct STUDENT *stud; 
stud=malloc(sizeof(struct STUDENT)); 
menu(stud); 
free(stud); 
}
void menu(struct STUDENT* stud) 
{
int
m=0, 
id=0; 
clrscr(); 
printf ("1 - Vvod\n"); 
printf ("2 - Vivid spiska\n");
printf ("3 - Pravka\n");
printf ("4 - Sortirovka failapo gruppam\n");
printf ("5 - Sozdanie ili ochistka faila\n");
printf ("6 - Vivod informacii\n");
printf ("7 - Udalenie zapisi\n");
printf ("0 - Vihod\n");
printf ("Vash vibor: ");
scanf("%d",&m); 
switch(m) 
{
case 1:
id=0;
vvod(&stud,f,id); 
break;
case 2:
vivod(&stud,f); 
break;
case 3:
vivod(&stud,f); 
printf ("Vvedite nomer zapisi: ");
scanf("%d",&id);
vvod(&stud,f,id); 
break;
case 4:
sort(&stud,f); 
break;
case 5:
f=fopen("base.bd","wb"); 
fclose(f);
break;
case 6:
info(&stud,f);
break;
case 7:
vivod(&stud,f); 
printf ("Vvedite nomer zapisi: ");
scanf("%d",&id);
udal(id,f); 
break;
case 0:
return; 
default: 
menu(stud); 
}
menu(stud); 
}
void vvod(struct STUDENT **stud, FILE *f, int id) 
{
printf("FIO: "); 
scanf("%s",&(*stud)->name);
printf("№ gruppy: ");
scanf("%d",&(*stud)->group); 
printf("Ocenki:\n");
printf("Matematika:\n");
scanf("%d",&(*stud)->ses[0]);
printf("Fizika:\n");
scanf("%d",&(*stud)->ses[1]);
printf("Russkiy:\n");
scanf("%d",&(*stud)->ses[2]);
printf("English:\n");
scanf("%d",&(*stud)->ses[3]);
printf("Fizra:\n");
scanf("%d",&(*stud)->ses[4]);
f=fopen("base.bd","r+b"); 
if (id) 
{
fseek(f,(id-1)*sizeof(struct STUDENT),SEEK_SET);
}
else 
fseek(f,0,SEEK_END);
fwrite((*stud), sizeof(struct STUDENT), 1, f);
fclose(f); 
}
void vivod(struct STUDENT **stud, FILE *f) 
{
int
kol_z, 
c; 
f=fopen("base.bd","rb"); 
fseek(f,0,SEEK_END); 
kol_z=ftell(f)/sizeof(struct STUDENT); 
fseek(f,0,SEEK_SET); 
for (c=0;c<kol_z;c++) 
{
fread((*stud), sizeof(struct STUDENT), 1, f); 
printf("№%d ",c+1); 
printf("Familiya: %s ",(*stud)->name);
printf("№ gruppy: %d ",(*stud)->group);
printf("Mat: %d Fiz: %d Rus: %d Engl: %d Fizra: %d\n",(*stud)->ses[0],(*stud)->ses[1],(*stud)->ses[2],(*stud)->ses[3],(*stud)->ses[4]);
}
fclose(f); 
printf("Konec spiska. Press any key...\n");
getch(); 
}
void sort(struct STUDENT **stud, FILE *f) 
{
struct STUDENT *st2; 
int
id1, 
id2, 
kol_z, 
poz1, 
poz2; 
st2=malloc(sizeof(struct STUDENT)); 
f=fopen("base.bd","r+b"); 
fseek(f,0,SEEK_END); 
kol_z=ftell(f)/sizeof(struct STUDENT); 
fseek(f,0,SEEK_SET); 
for(id1=0;id1<kol_z;id1++) 
{
fread((*stud), sizeof(struct STUDENT), 1, f);
poz1=ftell(f);
for(id2=id1+1;id2<kol_z;id2++) 
{
fread((st2), sizeof(struct STUDENT), 1, f); 
if ( ((*stud)->group)<((st2)->group) ) 
{
poz2=ftell(f); 
swp (f, id1, id2, stud); 
fseek(f, poz2, SEEK_SET); 
}
}
fseek(f, poz1, SEEK_SET); 
}
}
void swp(FILE *f,int id1, int id2, struct STUDENT **stud) 
{
struct STUDENT *stud2;
stud2=malloc(sizeof(struct STUDENT)); 
fseek(f,(id1)*sizeof(struct STUDENT),SEEK_SET);
fread((stud2), sizeof(struct STUDENT), 1, f);
fseek(f,(id2)*sizeof(struct STUDENT),SEEK_SET);
fread((*stud), sizeof(struct STUDENT), 1, f);
fseek(f,(id1)*sizeof(struct STUDENT),SEEK_SET);
fwrite((*stud), sizeof(struct STUDENT), 1, f);
fseek(f,(id2)*sizeof(struct STUDENT),SEEK_SET); 
fwrite((stud2), sizeof(struct STUDENT), 1, f);
free(stud2); 
}
[B]void info(struct STUDENT **stud, FILE *f) 
?

Последний раз редактировалось Stilet; 09.06.2014 в 00:13. Причина: Добавил её полностью
kolyasha вне форума Ответить с цитированием
Старый 08.06.2014, 22:29   #5
kolyasha
 
Регистрация: 25.12.2011
Сообщений: 7
По умолчанию Пргорамма

Продолжение

Код:
void info(struct STUDENT **stud, FILE *f)
?
void udal(int id, FILE *f)  
?

Последний раз редактировалось Stilet; 09.06.2014 в 00:14.
kolyasha вне форума Ответить с цитированием
Старый 08.06.2014, 23:28   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,760
По умолчанию

Цитата:
Не знаю как написать вот это:
"Вывод на экран фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0. Если таких студентов нет, вывести соответствующее сообщение."
Вы не знаете, что такое средний бал?
Вы не знаете оператора if?
Вы не знаете, как организовать счетчик сколько студентов вы вывели?
p51x вне форума Ответить с цитированием
Старый 09.06.2014, 19:42   #7
kolyasha
 
Регистрация: 25.12.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы не знаете, что такое средний бал?
Вы не знаете оператора if?
Вы не знаете, как организовать счетчик сколько студентов вы вывели?
Нет, я не знаю
kolyasha вне форума Ответить с цитированием
Старый 10.06.2014, 08:02   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,760
По умолчанию

Что именно вы не знаете?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать Структуру с именем STUDENT DzirT34669 Помощь студентам 6 08.01.2015 14:21
Описать запись с именем STUDENT (Delphi) Tuns Помощь студентам 1 27.05.2014 05:58
Описать структуру с именем TRAIN, C++ alucard115 Помощь студентам 2 18.02.2014 16:59
Описать структуру с именем AEROFLOT lolwto Общие вопросы Delphi 4 06.05.2013 14:16
Описать структуру с именем TRAIN Destox Паскаль, Turbo Pascal, PascalABC.NET 1 29.03.2013 07:54