
- •Введение
- •2 Условие задачи №1
- •3 Структура входных/выходных данных
- •4 Блок-схемы алгоритмов и алгоритмы по шагам
- •5 Код программы
- •6 Результаты работы программы
- •7 Условие задачи №2
- •8 Структура входных/выходных данных
- •9 Блок-схемы алгоритмов и алгоритмы по шагам
- •10 Код программы
- •11 Результаты работы программы
- •12 Условие задачи №3
- •13 Структура входных/выходных данных
- •14 Блок-схемы алгоритмов и алгоритмы по шагам
- •15 Код программы
- •16 Результаты работы программы
- •17 Заключение
- •18 Литература
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);
}
}