Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 проги на си ОАИП 2 сем 2009 вмсис / отчёт УЧЕБНАЯ ПРАКТИКА.doc
Скачиваний:
17
Добавлен:
15.06.2014
Размер:
1.59 Mб
Скачать

10 Код программы

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<string.h>

#include<locale.h>

struct STEK

{

char man[30]; //имя и фамилия человека

int age; //его возрастная группа

int sex; //его пол

int n; //номер песен

int first; //номер самой любимой песни

char rang[30]; //число голосов за песню

STEK *next;

};

STEK* in(STEK* ,int ); //добавление элемента в стек

int out(STEK *, char[30][50]); //вывод

void del(STEK **); //удаление элемента стека

STEK* see(STEK* ); //просмотр стека

void sort(STEK* ); //сортировка по популярности

void list1(STEK* ); //вывод 1 списка

void list2(STEK* ); //вывод 2 списка

void list3(STEK* ); //вывод 3 списка

void list4(STEK* ); //вывод 4 списка

void main()

{

int i; //число, определющие номер одной из пяти песен

STEK *begin=NULL;

char st[30][50]=

{

"Scorpions - Wind Of Change",

"Eagles - Hotel California",

"Avril Lavigne - Nobody's Home",

"Deep Purple - Soldier Of Fortune",

"Evanescence - My Immortal",

"Metallica - Nothing Else Matters",

"Queen - Show Must Go On",

"The Beatles - Yesterday",

"Led Zeppelin - Stairway To Heaven",

"Eminem - Stan",

"Haddaway - What Is Love",

"Sex Pistols - Anarchy In The U.K.",

"Blur - Song 2",

"Bon Jovi - It's My Life",

"Bob Marley - Bad Boys",

"ДДТ - Что такое осень",

"Агата Кристи - Как на войне",

"Сплин - Моё сердце",

"Кобзон - Мгновени",

"Ария - Штиль",

"Король и Шут - Проклятый старый дом",

"Круг - Владимирский централ",

"Сектор газа - Пора домой",

"Любэ - Солдат",

"Пугачёва - Мадам Брошкина",

"Кино - Группа крови",

"Звери - Районы-кварталы",

"Ленинград - Мне бы в небо",

"Би-2 - Полковнику никто не пишет",

"Алиса - Небо славян",

};

setlocale(LC_ALL,".ACP");

do

{

do

{

system("cls");

printf("Список песен:\n");

printf(" 1) Scorpions - Wind Of Change 16) ДДТ - Что такое осень\n");

printf(" 2) Eagles - Hotel California 17) Агата Кристи - Как на войне\n");

printf(" 3) Avril Lavigne - Nobody's Home 18) Сплин - Моё сердце\n");

printf(" 4) Deep Purple - Soldier Of Fortune 19) Кобзон - Мгновения\n");

printf(" 5) Evanescence - My Immortal 20) Ария - Штиль\n");

printf(" 6) Metallica - Nothing Else Matters 21) Король и Шут - Проклятый старый дом\n");

printf(" 7) Queen - Show Must Go On 22) Круг - Владимирский централ\n");

printf(" 8) The Beatles - Yesterday 23) Сектор газа - Пора домой\n");

printf(" 9) Led Zeppelin - Stairway To Heaven 24) Любэ - Солдат\n");

printf("10) Eminem - Stan 25) Пугачёва - Мадам Брошкина\n");

printf("11) Haddaway - What Is Love 26) Кино - Группа крови\n");

printf("12) Sex Pistols - Anarchy In The U.K. 27) Звери - Районы-кварталы\n");

printf("13) Blur - Song 2 28) Ленинград - Мне бы в небо\n");

printf("14) Bon Jovi - It's My Life 29) Би-2 - Полковнику никто не пишет\n");

printf("15) Bob Marley - Bad Boys 30) Алиса - Небо славян\n");

for(i=1; i<=5; i++) //добавление выбранных песен

begin=in(begin,i);

printf("\nНажмите 'Esc', чтобы прекратить опрос");

}

while(getch()!=27);

sort(begin); //вызов функции сортировки стека

out(begin,st); //вывод хит-парада

printf("\n\nВывод людей, которые поставили на первое место одну из\nтрёх самых популярных песен (в соответствии с группами):");

printf("\nгруппа №1 - те, кто сташе 18");

printf("\nгруппа №2 - те, кто младше 18");

printf("\nгруппа №3 - мужчины");

printf("\nгруппа №4 - женщины");

do

{

printf("\n\nВведите номер группы: ");

char c=getch();

switch(c)

{

case '1': list1(begin); break;

case '2': list2(begin); break;

case '3': list3(begin); break;

case '4': list4(begin); break;

}

printf("\n\nНажмите 'Esc', чтобы не выводить списки");

}

while(getch()!=27);

del(&begin); //очиста памяти

printf("\n\nНажмите 'Esc', чтобы выйти из программы или любую клавишу, чтобы повторить опрос");

}

while(getch()!=27);

setlocale(LC_ALL,".OCP");

}

STEK* in(STEK *begin, int i) //добавление элемента в стек

{

int p; //переменная запоминающая номер песни

int g=0; //число кодирований

int z;

STEK *temp;

STEK *t=(STEK *)malloc(sizeof(STEK));

for(int j=0; j<30; j++)

t->rang[j]=0; //очистка от мусора строки голосов за песню

fflush(stdin);

if(i==1) // если это первая песня, за которую отдаётся голос

{

fflush(stdin);

printf("\nВаше имя и фамилия --> ");

gets(t->man);

do

{

fflush(stdin);

printf("Вам пол? (мужчина - введите '1', женщина - '2') --> ");

scanf("%d",&t->sex);

}

while(t->sex != 1 && t->sex != 2);

do

{

fflush(stdin);

printf("Вам больше 18 лет? (да - введите '1', нет - '2') --> ");

scanf("%d",&t->age);

}

while(t->age != 1 && t->age != 2);

}

else // если это следующие четыре песни

{

strcpy(t->man,begin->man); //поля имени и возраста те же

t->age=begin->age;

}

do

{

fflush(stdin);

printf("Введите номер %d любимой песни: ",i);

z=scanf("%d",&t->n);

}

while(z != 1 || t->n > 30);

if(i==1)

t->first=t->n;

t->rang[0]='*'; //первый голос

p=t->n; //запоминаем номер выбранной песни

temp=begin;

while(temp!=NULL) //цикл по введённым элементам стека

{

if(p == temp->n) //если за песню уже голосовали

{

for(int j=0;j<30;j++)

temp->rang[j]=0; //обнуление числа голосов

g++;

t->rang[g]='*'; //кодирование числа голосов

}

temp=see(temp); //вызов функции просмотра стека

}

t->next=begin;

return t;

}

STEK* see(STEK *begin) //просмотр стека

{

STEK *t=begin;

t=t->next;

return t;

}

void sort(STEK *begin) //сортировка по популярности

{

STEK *cur,*t;

char c[30]; //буферный массив

int d; //буферная переменная

cur=begin;

while(cur != NULL)

{

t=cur->next;

while(t)

{

if(strcmp(cur->rang,t->rang)<0) // сортирока по кол-ву голосов

{

strcpy(c,cur->rang);

strcpy(cur->rang,t->rang);

strcpy(t->rang,c);

d=cur->n;

cur->n=t->n;

t->n=d;

}

t=t->next;

}

cur=cur->next;

}

}

int out(STEK *begin, char st[30][50]) //вывод элементов

{

int k=1; //номер места в хит-параде

int kk=1;

int v,b; //число голосов за песню

STEK *t=begin;

printf("\n\nХИТ ПАРАД:\n");

printf(" _________________________________________________________________________\n");

printf("| МЕСТО | ИСПОЛНИТЕЛЬ - НАЗВАНИЕ | НОМЕР | ЧИСЛО ГОЛОСОВ |\n");

printf("|_______|_________________________________________|_______|_______________|");

while(t!=NULL)

{

if(t->rang[0] != '*') //не выводить песни без голосов

break;

v=0;

for(int j=0; t->rang[j] != '\0'; j++)

v++; //счёт числа голосов

b=0;

if(t->next != NULL)

for(int j=0; t->next->rang[j] != '\0'; j++)

b++; //счёт числа голосов следующей песни

if(v == b)

{

printf("\n| %2d | ",k);

for(int i=0; i<38; i++)

printf("%c",st[t->n-1][i]);

printf("| %2d | %2d |\n",t->n,v);

printf("|_______|_________________________________________|_______|_______________|");

t=t->next;

kk++;

}

else

{

printf("\n| %2d | ",k);

for(int i=0; i<38; i++)

printf("%c",st[t->n-1][i]);

printf("| %2d | %2d |\n",t->n,v);

printf("|_______|_________________________________________|_______|_______________|");

t=t->next;

kk++;

k=kk;

}

}

return kk;

}

void list1(STEK *begin) //вывод 1 списка

{

int f=0; //счётчик первых песен

STEK *t=begin;

STEK *cur;

int no=1;

printf("\n\nТе кто старше 18 лет:");

while(t != NULL)

{

if(f==3)

break;

cur=begin;

while(cur != NULL)

{

if(t->n == cur->first && cur->age == 1) //

{

printf("\n%s выбрал(а) любимой песню номер №%d, которая в хит-параде на %d месте",cur->man,t->n,f+1);

no=0;

}

cur=cur->next;

}

t=t->next;

f++;

}

if(no == 1)

printf("\nиз этой группы никого нет");

}

void list2(STEK *begin) //вывод 2 списка

{

int f=0; //счётчик первых песен

STEK *t=begin;

STEK *cur;

int no=1;

printf("\n\nТе кто младше 18 лет:");

while(t != NULL)

{

if(f==3)

break;

cur=begin;

while(cur != NULL)

{

if(t->n == cur->first && cur->age == 2) //

{

printf("\n%s выбрал(а) любимой песню номер №%d, которая в хит-параде на %d месте",cur->man,t->n,f+1);

no=0;

}

cur=cur->next;

}

t=t->next;

f++;

}

if(no == 1)

printf("\nиз этой группы никого нет");

}

void list3(STEK *begin) //вывод 3 списка

{

int f=0; //счётчик первых песен

STEK *t=begin;

STEK *cur;

int no=1;

printf("\n\nМужчины:");

while(t != NULL)

{

if(f==3)

break;

cur=begin;

while(cur != NULL)

{

if(t->n == cur->first && cur->sex == 1) //

{

printf("\n%s выбрал любимой песню номер №%d, которая в хит-параде на %d месте",cur->man,t->n,f+1);

no=0;

}

cur=cur->next;

}

t=t->next;

f++;

}

if(no == 1)

printf("\nиз этой группы никого нет");

}

void list4(STEK *begin) //вывод 4 списка

{

int f=0; //счётчик первых песен

STEK *t=begin;

STEK *cur;

int no=1;

printf("\n\nЖенщины:");

while(t != NULL)

{

if(f==3)

break;

cur=begin;

while(cur != NULL)

{

if(t->n == cur->first && cur->sex == 2) //

{

printf("\n%s выбрала любимой песню номер №%d, которая в хит-параде на %d месте",cur->man,t->n,f+1);

no=0;

}

cur=cur->next;

}

t=t->next;

f++;

}

if(no == 1)

printf("\nиз этой группы никого нет");

}

void del(STEK **begin) //удаление элемента

{

STEK *t;

while(*begin!=NULL)

{

t=*begin;

*begin=(*begin)->next;

free(t);

}

}