Помощь в написании студенческих работ
Антистрессовый сервис

Программирование на языке высокого уровня

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Mesto — массив содержащий места всех участников Рис. 2. Блок-схема функции формирования таблицы данных из файла. Каждая подзадача решается методом линейного поиска (последовательного просмотра элементов таблицы). По запросу программы с клавиатуры необходимо ввести номер пункта меню (см. раздел 2.3), номер школы. Дан файл содержащий информацию о результатах городской олимпиады по математике… Читать ещё >

Программирование на языке высокого уровня (реферат, курсовая, диплом, контрольная)

1. Задание

Дан файл содержащий информацию о результатах городской олимпиады по математике.

Структура записи файла:

— номер участника;

— фамилия;

— количество баллов по каждой из пяти задач;

Написать программу выдающую:

— фамилии победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ;

— сведения о результатах участников заданной школы;

2. Описание применения

2.1 Запуск программы

Запуск программы (файл Olimpiad. c) можно выполнить из среды Turbo C 2.0 (или Borland C++ 3.1), либо из командной строки MS DOS, введя Olimpiad.exe.

2.2 Входные данные

Входные данные программы находятся в файле «School.txt». Число строк в файле — 50. Каждая строка содержит номер участника (3 символа), фамилию (25 символов), номер школы (6 символов), баллы за каждую из пяти задач (3 символа — баллы за одну задачу). Пример строки файла:

1 Ivanov 3 4 5 4 5 4

|3 | 25 | 6 | 3 | 3 | 3 | 3 | 3 |

Пример входного файла приведен в приложении 2.

По запросу программы с клавиатуры необходимо ввести номер пункта меню (см. раздел 2.3), номер школы.

2.3 Выходные данные

Программа выводит на экран меню:

При выборе пункта 1 на экран выводиться результат в виде:

Примеры выходных данных для остальных пунктов меню см. в приложении 3.

2.4 Сообщения программы

Ниже приводится перечень возможных сообщений программы:

1. Файл `School.txt' не найден

2. Введите номер пункта меню

3. Введен неверный номер пункта меню

4. Введите номер школы

5. Участников из данной школы нет

6. №п/п Фамилия 1з 2з 3з 4з 5з Сумма баллов Место

7. №п/п Фамилия №школы Сумма баллов Место

3. Описание программы

3.1 Метод решения задачи

Задачу можно разбить на две отдельные подзадачи:

1. Последовательный просмотр таблицы. Если номер школы данного участника совпадает с заданным, то вывод сведений о данном участнике с указанием баллов за каждую из пяти задач, суммы баллов и места.

2. Последовательный просмотр массива, содержащего места всех участников и вывод на экран фамилий победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ.

Каждая подзадача решается методом линейного поиска (последовательного просмотра элементов таблицы).

Чтобы пользователь мог выбирать, какую из подзадач решать и в каком порядке, программа выводит на экран меню (см. раздел 2.3).

3.2 Структура программы

Рис. 1. Функциональная структура программы Программа состоит из четырех функций: главной функции main и трех подпрограмм.

Form_tab — Чтение файла и формирование таблицы из данных, содержащихся в файле. Используя поля баллов за каждую из пяти задач полученной таблицы создание массива, который будет содержать суммы баллов всех участников. Затем сортировка таблицы и полученного массива по убыванию сумм баллов. Затем на основании массива, в котором содержатся суммы баллов всех участников создание другого массива, в котором будут храниться места всех участников.

Uch_school — вывод сведений об участнике заданной школы, с указанием баллов за каждую из пяти задач, суммы баллов и места.

Pobidit — вывод фамилий победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ

3.3 Описание функций

3.3.1 main — главная функция

Заголовок функции:

int main ()

Значение функции:

0 — в случае успешного завершения;

1 — если входной файл не найден.

Рабочие данные:

f — указатель на структуру с информацией о входном файле;

n — номер пункта меню.

d — количество участников

sum[dl_tab] - массив содержащий суммы баллов всех участников

mesto[dl_tab] - массив содержащий места всех участников

tablica[dl_tab] - таблица из данных, содержащихся в файле Структура записи файла:

num — номер участника

fam — фамилия участника

school_num — номер участника

1_zad — баллы за первую задачу

2_zad — баллы за второю задачу

3_zad — баллы за третью задачу

4_zad — баллы за четвертую задачу

5_zad — баллы за пятую задачу

3.3.2 Form_tab — формирование таблицы данных из файла

Заголовок функции:

int form_tab (FILE *f, struct el_tab tab[], float sum [], int mesto[], int d)

Значения функции:

d — количество участников

Входные данные:

*f — ссылка на входной файл

Выходные данные:

tab[] - таблица данных из файла

d — количество участников

sum[] - массив содержащий суммы баллов всех участников

mesto[] - массив содержащий места всех участников Рис. 2. Блок-схема функции формирования таблицы данных из файла

3.3.3 Uch_school — вывод сведений об учащихся заданной школы

Заголовок функции:

void Uch_school (struct el_tab tab[], float sum[], int d, int mesto[])

Входные данные:

tab[] - таблица данных из файла

d — количество участников

sum[] - массив содержащий суммы баллов всех участников

mesto[] - массив содержащий места всех участников Рис. 3. Блок-схема функции вывода сведений об учащихся заданной школы

3.3.4 Pobedit — вывод фамилии победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ

Заголовок функции:

void Pobedit (struct el_tab tab[], int d, float sum[], int mesto[])

Входные данные:

tab[] - таблица данных из файла

d — количество участников

sum[] - массив содержащий суммы баллов всех участников

mesto[] - массив содержащий места всех участников Рис. 5. Блок-схема функции вывода фамилии победителей, занявших первые три призовых места, с указанием суммарного количества баллов и номеров школ

Литература:

функция данные программа

1. Основы программирования на языке С: Учебное пособие.- Казань: Изд-во Казан. техн. ун-та. 2009. -215 с. Шершуков К. В. Бикмурзина .А.Р.

2. Программирование на языке Си К. Поляков 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 /* максимальная длина таблицы */

struct el_tab /* стрктура элемента таблицы */

{

char num [dl_num]; /* номер участника */

char fam [dl_fam]; /* фамилия участника */

char school_num [dl_num_school]; /* номер школы участника */

char zad1 [dl_zad]; /* баллы за первую задачу */

char zad2 [dl_zad]; /* баллы за вторую задачу */

char zad3 [dl_zad]; /* баллы за третью задачу */

char zad4 [dl_zad]; /* баллы за четвертую задачу */

char zad5 [dl_zad+1]; /* баллы за пятую задучу + /n */

};

/*_______________________________________________________________*/

/* ПРОТОТИПЫ ФУНКЦИЙ */

/*———————————————————————————————-*/

int form_tab (FILE *f, struct el_tab tab[], float sum[], int d, int mesto[]);

void pobedit (struct el_tab tab[dl_tab], int d, float sum[dl_tab], int mesto[]);

void uch_school (struct el_tab tab[dl_tab], float sum[], int d, int mesto[]);

/*________________________________________________________________*/

/* ГЛАВНАЯ ФУНКЦИЯ */

/*————————————————————————————————*/

int 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;

}

/*________________________________________________________*/

/* ФУНКЦИЯ ФОРМИРОВАНИЯ ТАБЛИЦЫ */

/*————————————————————————————*/

int form_tab (FILE *f, struct el_tab tab[], float sum [], int d,

int mesto[])

/* входные данные: *f — ссылка на входной файла

выходные данные: tab[] - таблица данных из файла

d — количесво участников олимпиады

mesto[] - массив содержащий места всех участников

sum[]-массив содержащий суммы баллов всех

участников*/

{

float x; /* промежуточная переменная */

struct el_tab s; /* промежуточная переменная */

int i, /* индекс очередного элемента таблицы */

k, /* длинна поля zad5 */

n, /* промежуточная переменая для условия продолжительности цикла */

g; /* индекс очередного элемента массива school_num */

for (i=0;fgets ((char*)&tab[i], sizeof (struct el_tab), f)≠NULL;i++)

{

k=strlen (tab[i]. zad5);

tab[i]. zad5[k-1]=' ';

tab[i]. school_num[dl_num_school-1]='';

tab[i]. fam[dl_fam-1]='';

tab[i]. num[dl_num-1]='';

sum[i]=atof (tab[i]. zad1)+atof (tab[i].zad2)+atof (tab[i].zad3)+

atof (tab[i]. zad4)+atof (tab[i].zad5);

}

d=i;

k=i;

for (n=k-1;n>0;n—)

for (i=0;i

{

if (sum[i]

{

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;

/*__________________________________________________________________*/

/* ФУНКЦИЯ ВЫВОДА УЧАСТНИКОВ ИЗ ДАННОЙ ШКОЛЫ */

/*—————————————————————————————————*/

void 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]='';

}

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%dn» ,

tab[i]. num, tab[i].fam, tab[i].zad1, 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 && k==0)

{

tab[i]. school_num[g]=' ';

k=1;

}

}

getchar ();

}

/*__________________________________________________________________*/

/* ФУНКЦИЯ ВЫВОДА ПОБЕДИТЕЛЕЙ ОЛИМПИАДЫ */

/*—————————————————————————————————*/

void POBEDIT (struct el_tab tab[], int d, float sum[], int mesto[])

/* входные данные: tab[]-таблица данных из файла

sum[]-массив содержащий суммы баллов всех участников

mesto[]-массив соднржащий места всех участников*/

{

int i, n=1,k=1,q=0;

printf («nn№п/п Фамилия №школы Сумма баллов Место n»);

printf («————————————————————————————n»);

for (i=0;i≠d;i++)

{

tab[i]. num[dl_num-1]='';

tab[i]. school_num[dl_num_school-1]='';

}

for (i=0;i≠d;i++)

if (mesto[i]==1 || mesto[i]==2 || mesto[i]==3)

printf («n %s %s%s %.1f%d» ,

tab[i]. num, tab[i].fam, tab[i].school_num, sum[i], mesto[i]);

printf («n»);

getchar ();

}

Приложение 2. Пример входного файла School.txt

1 Ivanov 3 4 5 4 5 4

2 Sidorov 5 4 5 4 5 4

3 Kurochkin 5 4 5 4 5 4

4 Petuxov 5 7 7 7 7 7

5 Petrov 4 7 7 7 7 7

6 Suzdalcev 1 7 7 7 7 7

7 Gatin 10 6 6 6 2 3

8 Galimzhanov 7 5 3 7 3 2

9 Zuzin 3 4 7 2 3 5

10 Molodsov 6 7 7 7 7 7

11 Huzin 1 3 4 5 6 3

12 Malcev 2 3 4 5 6 1

13 Pankratov 9 2 3 4 4 4

14 Kruger 8 3 3 3 7 4

15 Salimov 4 4 4 4 4 4

16 Bochkov 3 5 5 5 5 5

17 Balbesov 6 3 4 5 6 7

18 Vanushin 8 4 3 3 5 7

19 Sakibaev 3 6 6 5 3 1

20 Limonov 6 6 6 6 6 6

Приложение 3. Результаты тестирования программы

Тест 1. Входного файла нет в текущем каталоге.

Результат:

Файл School.txt не найден

В следующих тестах используется файл из приложения 2.

Тест 2.

Тест 3

Тест 4

Тест 5

Показать весь текст
Заполнить форму текущей работой