Программирование на языке высокого уровня
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
.4 Pobedit - вывод фамилии победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ
Заголовок функции:
void Pobedit(struct el_tab tab[], int d, float sum[], int mesto[])
Входные данные:[] - таблица данных из файла - количество участников [] - массив содержащий суммы баллов всех участников
mesto[] - массив содержащий места всех участников
Рис.5. Блок-схема функции вывода фамилии победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ
Литература:
функция данные программа
1. Основы программирования на языке С: Учебное пособие.- Казань: Изд-во Казан. техн. ун-та. 2009. -215 с. Шершуков К.В. Бикмурзина .А.Р.
. Программирование на языке Си К. Поляков 2009.г 4 главы.
Приложение 1. Текст программы
#include
#include
#include
#include
#define dl_num 3 /* длина поля номера участника */
#define dl_fam 25 /* длина поля фамилии участника */
#define dl_num_school 6 /* длина поля номера школы участника */
#define dl_zad 3 /* длина поля балла за одну задачу */
#define dl_sum 4 /* длина поля суммы баллов */
#define dl_tab 50 /* максимальная длина таблицы */el_tab /* стрктура элемента таблицы */
{
char num [dl_num]; /* номер участника */
char fam [dl_fam]; /* фамилия участника */
char school_num [dl_num_school]; /* номер школы участника */
char zad_1 [dl_zad]; /* баллы за первую задачу */
char zad_2 [dl_zad]; /* баллы за вторую задачу */
char zad_3 [dl_zad]; /* баллы за третью задачу */
char zad_4 [dl_zad]; /* баллы за четвертую задачу */
char zad_5 [dl_zad+1];/* баллы за пятую задучу + /n */
};
/*_______________________________________________________________*/
/* ПРОТОТИПЫ ФУНКЦИЙ */
/*---------------------------------------------------------------*/form_tab(FILE *f,struct el_tab tab[], float sum[],int d,int mesto[]);pobedit(struct el_tab tab[dl_tab],int d,float sum[dl_tab],int mesto[]);uch_school(struct el_tab tab[dl_tab],float sum[],int d,int mesto[]);
/*________________________________________________________________*/
/* ГЛАВНАЯ ФУНКЦИЯ */
/*----------------------------------------------------------------*/main()
{
FILE *f; /* ссылка на входной файл */
int d; /* количесво участников олипиады */
char n; /* номер пункта меню */
float sum[dl_tab]; /*массив содержащий суммы баллов всех участников*/
int mesto[dl_tab]; /*массив содержащий места всех участников */
struct el_tab tablisa[dl_tab]; /*таблица в которую данные из файла
будут копироваться*/
f=fopen("school.txt","r");
if(f==NULL)
{
clrscr();
puts("\nФайл School.txt не найден");
getch();
return 1;
}
d=form_tab(f,tablisa,sum,d,mesto);
do
{
clrscr();
puts("\n==============================================");
puts("ВВЕДИТЕ НОМЕР ПУНКТА МЕНЮ\n 1 - Вывод фамилий победителей");
puts(" 2 - Вывод сведений об участниках данной школы\n 3 - Выход");
puts("==============================================\n");
n=getche();
switch(n)
{
case 1 : pobedit(tablisa,d,sum,mesto); break;
case 2 : printf("\nВведите номер школы\n ");
uch_school(tablisa,sum,d,mesto); break;
case 3 : break;
default : puts("\nВведен неверный номер пункта меню");
getchar();
}
}
while(n!=3);
fclose(f);
return 0;
}
/*________________________________________________________*/
/* ФУНКЦИЯ ФОРМИРОВАНИЯ ТАБЛИЦЫ */
/*--------------------------------------------------------*/form_tab(FILE *f,struct el_tab tab[],float sum [],int d,
int mesto[])
/* входные данные: *f - ссылка на входной файла
выходные данные: tab[] - таблица данных из файла- количесво участников олимпиады[] - массив содержащий места всех участников[]-массив содержащий суммы баллов всех
участников*/
{
float x; /* промежуточная переменная */
struct el_tab s ; /* промежуточная переменная */
int i, /* индекс очередного элемента таблицы */
k, /* длинна поля zad_5 */
n, /* промежуточная переменая для условия продолжительности цикла */
g; /* индекс очередного элемента массива school_num */
for(i=0;fgets((char*)&tab[i],sizeof(struct el_tab),f)!=NULL;i++)
{
k=strlen(tab[i].zad_5);
tab[i].zad_5[k-1]= ;
tab[i].school_num[dl_num_school-1]=\0;
tab[i].fam[dl_fam-1]=\0;
tab[i].num[dl_num-1]=\0;
sum[i]=atof(tab[i].zad_1)+atof(tab[i].zad_2)+atof(tab[i].zad_3)+
atof(tab[i].zad_4)+atof(tab[i].zad_5);
}
d=i;
k=i;
for(n=k-1;n>0;n--)
for(i=0;i<k;i++)
{
if(sum[i]<sum[i+1])
{
s=tab[i];
x=sum[i];
tab[i]=tab[i+1];
tab[i+1]=s;
sum[i]=sum[i+1];
sum[i+1]=x;
}
}
n=1;
for(i=0;i!=d;i++)
if(i==0)
mesto[i]=n;
else
if (sum[i]==sum[i-1])
mesto[i]=n;
else
{
n++;
mesto[i]=n;
}
return d;
/*__________________________________________________________________*/
/* ФУНКЦИЯ ВЫВОДА УЧАСТНИКОВ ИЗ ДАННОЙ ШКОЛЫ */
/*------------------------------------------------------------------*/UCH_SCHOOL(struct el_tab tab[],float sum[],int d,int mesto[])
/* входные данные: tab[]-таблица данных из файла
d-количество участников олимпиады
sum[]-массив содержащий сумму баллов всех участников
mesto[]-массив соднржащий места всех участников*/
{
char n=0; /* номер школы */
int i, /* индекс очередного элемента таблицы */
k=0, /* промежуточная переменая */
x=0, /* промежуточная переменная */
v=1, /* промежуточная переменная */
g=0; /* индекс очередного элемента массива school_num */
for(i=0;i!=d;i++)
{ for(g=dl_num_school-2;tab[i].school_num[g]== ;g--);
tab[i].school_num[g+1]=\0;
}
do
gets(n);
while (strcmp(n,"")==0);
for(i=0;i!=d;i++)
if(strcmp(tab[i].school_num,n)==0)
{
if(x==0)
{
printf("\n№п.п Фамилия 1з 2з 3з 4з 5з Сумма баллов Место\n");
printf("---------------------------------------------------\n");
x=1;
}
printf(" %s %s %s %.1f%d\n",
tab[i].num,tab[i].fam,tab[i].zad_1,sum[i],mesto[i]);
k++;
}
if(k==0 && v==1) printf("Участников из данной школы нет");
for(i=0;i!=d;i++)
{
k=0;
for(g=0;g!=dl_num_school;g++)
if(strcmp(tab[i].school_num[g],\0)==0 && k==0)
{
tab[i].school_num[g]=