Переписать код "Фонотека" с С++ - C (СИ)
Формулировка задачи:
код есть на С++, а мне нужно его переделать в С. Помогите пожалуйста, буду очень благодарна.
код:
Листинг программы
- #include <iostream>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- using namespace std;
- //односвязный список
- struct elem {
- char name[40]; //исполнитель
- char style[40]; //стиль
- int albums; //общее количество альбомов
- int cd_of_year; //количество дисков проданных за последний год
- elem *next; //указатель на следующий элемент
- };
- typedef elem *pelem; //тип-указатель
- pelem HEAD = NULL; //"голова" списка
- int NN=0; //текущее количество элементов
- int N_MAX = 10; //максимум списка
- pelem ad ()//добавление элемента
- {
- pelem neo = new elem;
- //добавление элемента в начало
- if (HEAD == NULL) {HEAD = neo;
- neo->next = NULL;}
- else {
- neo->next = HEAD;
- HEAD = neo;
- }
- NN++;
- return neo;
- }
- void ed (pelem p)//редактирование элемента
- {
- //ввод данных
- elem dan;
- cout<<"Artist: "; cin>>dan.name;
- cout<<"Style: " ; cin>>dan.style;
- cout<<"Albums: "; cin>>dan.albums;
- cout<<"CD za posledniy god: "; cin>>dan.cd_of_year;
- //передача данных в элемент
- dan.next = p->next;
- *p = dan;
- system("cls");
- }
- void rd (pelem p) //чтение элемента
- {
- if (p)
- {
- for(int i=0;i<80;i++) cout<<"_";
- cout<<"Object: "<< p->name<<endl;
- cout<<"Style: "<< p->style<<endl;
- cout<<"Albums: "<< p->albums<<endl;
- cout<<"CD za posledniy god:: "<< p->cd_of_year<<endl;
- for(int i=0;i<80;i++) cout<<"_";
- }
- }
- pelem find (char obj_name[]) //поиск элемента
- {
- pelem p = HEAD;
- do
- {
- if (!strcmp(p->name, obj_name)) return p;
- p=p->next;
- } while (p) ;
- cout<<"Ne naydenu"<<endl;
- return p;
- }
- void del (char obj_name[])
- {
- if (HEAD)
- {
- pelem p = find(obj_name);
- if (p)
- {
- if (p==HEAD) //если голова - и есть искомый объект
- {
- if (NN>1) HEAD=HEAD->next;
- else HEAD = NULL;
- }
- else
- {
- pelem father = HEAD;
- while (father->next!=p)
- father = father->next;
- father->next = p->next;
- }
- delete p;
- NN--;
- cout<<"Udaleno: "<<obj_name<<endl;
- return;
- }
- }
- }
- void sort () //сортировка
- {
- for (int j=0; j<NN; j++)
- {
- pelem p = HEAD;
- pelem son = p->next;
- if (p->albums < son->albums)
- {
- p->next = son->next;
- HEAD = son;
- son->next = p;
- }
- p = HEAD;
- while((p->next)->next)
- {
- pelem father = p;
- p = p->next;
- pelem son = p->next;
- if (p->albums < son->albums)
- {
- father->next = son;
- p->next = son->next;
- son->next = p;
- }
- p=father->next;
- }
- }
- }
- int main ()
- {
- int i;
- char c;
- do {
- cout<<"Menu"<<endl;
- cout<<"Count:"<< NN<<"/"<<N_MAX <<endl;
- cout<<"[1] add "<<endl;
- cout<<"[2] list "<<endl;
- cout<<"[3] edit "<<endl;
- cout<<"[4] delete "<<endl;
- cout<<"[5] search "<<endl;
- cout<<"[6] best-seller "<<endl;
- cout<<"[7] sort "<<endl;
- cout<<"[0] exit " <<endl;
- cout<<">>";
- c = getch();
- system("cls");
- if (c=='1') //добавление элемента
- {
- if (NN<N_MAX) {
- pelem p = ad();
- ed(p);
- }
- else cout<<"List is full"<<endl;
- }
- if (c=='2') //просмотр списка
- {
- pelem p = HEAD;
- if (p==NULL) cout<<"List is empty"<<endl; else
- while(p!=NULL)
- {
- rd(p);
- p=p->next;
- }
- }
- if (c=='3') {
- char obj[40];
- cout<<"Edit object : ";
- cin>>obj;
- if (HEAD)
- {
- pelem p =find(obj);
- if (p) ed(p);
- }
- else cout<<"List is empty"<<endl;
- }
- if (c=='4') {
- char obj[40];
- cout<<"Delete item : ";
- cin>>obj;
- if (HEAD) del(obj); else cout<<"List is empty"<<endl;
- }
- if (c=='5') {
- char c_2;
- do {
- cout<<"Poisk"<<endl;
- cout<<"[1] by name "<<endl;
- cout<<"[2] by genre "<<endl;
- cout<<"[0] <<back "<<endl;
- cout<<">>";
- c_2 = getch();
- system("cls");
- if (c_2=='1') {
- char obj[40];
- cout<<"Name : ";
- cin>>obj;
- if (HEAD) rd(find(obj));
- else cout<<"List is empty"<<endl;
- }
- if (c_2=='2') {
- char obj[40];
- cout<<"Genre : ";
- cin>>obj;
- pelem p=HEAD;
- if (HEAD)
- while (p)
- {
- if (!strcmp(p->style, obj)) rd(p);
- p = p->next;
- }
- else cout<<"List is empty"<<endl;
- }
- } while(c_2!='0');
- }
- if (c=='6') {
- if (HEAD)
- {
- pelem p = HEAD;
- pelem p_with_max = p;
- while(p)
- { if (p->cd_of_year > p_with_max->cd_of_year) p_with_max = p;
- p = p->next;
- }
- rd(p_with_max);
- }
- else cout<<"List is empty"<<endl;
- }
- if (c=='7') {
- sort();
- pelem p = HEAD;
- if (p==NULL) cout<<"List is empty"<<endl; else
- while(p!=NULL)
- {
- rd(p);
- p=p->next;
- }
- }
- } while(c!='0');
- return 0;
- }
Решение задачи: «Переписать код "Фонотека" с С++»
textual
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- //односвязный список
- typedef struct elem_t
- {
- char name[40]; //исполнитель
- char style[40]; //стиль
- int albums; //общее количество альбомов
- int cd_of_year; //количество дисков проданных за последний год
- struct elem_t* next; //указатель на следующий элемент
- } elem;
- typedef elem* pelem; //тип-указатель
- pelem HEAD = NULL; //"голова" списка
- int NN = 0; //текущее количество элементов
- int N_MAX = 10; //максимум списка
- pelem ad() //добавление элемента
- {
- pelem neo = (pelem) malloc(sizeof(elem));
- //добавление элемента в начало
- if (HEAD == NULL)
- {
- HEAD = neo;
- neo->next = NULL;
- }
- else
- {
- neo->next = HEAD;
- HEAD = neo;
- }
- NN++;
- return neo;
- }
- void ed(pelem p) //редактирование элемента
- {
- //ввод данных
- elem dan;
- printf("Artist: ");
- scanf("%s", dan.name);
- printf("Style: ");
- scanf("%s", dan.style);
- printf("Albums: ");
- scanf("%d", &dan.albums);
- printf("CD za posledniy god: ");
- scanf("%d", &dan.cd_of_year);
- dan.next = p->next;
- *p = dan;
- system("cls");
- }
- void rd(pelem p) //чтение элемента
- {
- int i;
- if (p)
- {
- for (i = 0; i < 80; i++)
- {
- printf("_");
- }
- printf("\n");
- printf("Object: %s\n", p->name);
- printf("Style: %s\n", p->style);
- printf("Albums: %d\n", p->albums);
- printf("CD za posledniy god: %d\n", p->cd_of_year);
- for (i = 0; i < 80; i++)
- {
- printf("_");
- }
- printf("\n");
- }
- }
- pelem find(char obj_name[]) //поиск элемента
- {
- pelem p = HEAD;
- do
- {
- if (!strcmp(p->name, obj_name))
- {
- return p;
- }
- p = p->next;
- }
- while (p);
- printf("Ne naydenu\n");
- return p;
- }
- void del(char obj_name[])
- {
- if (HEAD)
- {
- pelem p = find(obj_name);
- if (p)
- {
- if (p == HEAD) //если голова - и есть искомый объект
- {
- if (NN > 1)
- {
- HEAD = HEAD->next;
- }
- else
- {
- HEAD = NULL;
- }
- }
- else
- {
- pelem father = HEAD;
- while (father->next != p)
- {
- father = father->next;
- }
- father->next = p->next;
- }
- free(p);
- NN--;
- printf("Udaleno: %s\n", obj_name);
- return;
- }
- }
- }
- void sort() //сортировка
- {
- int j;
- for (j = 0; j < NN; j++)
- {
- pelem p = HEAD;
- pelem son = p->next;
- if (p->albums < son->albums)
- {
- p->next = son->next;
- HEAD = son;
- son->next = p;
- }
- p = HEAD;
- while ((p->next)->next)
- {
- pelem father = p;
- p = p->next;
- pelem son = p->next;
- if (p->albums < son->albums)
- {
- father->next = son;
- p->next = son->next;
- son->next = p;
- }
- p = father->next;
- }
- }
- }
- int main()
- {
- char c;
- do
- {
- printf("Menu\n"
- "Count: %d/%d\n"
- "[1] add\n"
- "[2] list\n"
- "[3] edit\n"
- "[4] delete\n"
- "[5] search\n"
- "[6] best-seller\n"
- "[7] sort\n"
- "[0] exit\n"
- ">>", NN, N_MAX);
- c = getch();
- system("cls");
- if (c == '1') //добавление элемента
- {
- if (NN < N_MAX)
- {
- pelem p = ad();
- ed(p);
- }
- else
- {
- printf("List is full\n");
- }
- }
- if (c == '2') //просмотр списка
- {
- pelem p = HEAD;
- if (p == NULL)
- {
- printf("List is empty\n");
- }
- else
- while (p != NULL)
- {
- rd(p);
- p = p->next;
- }
- }
- if (c == '3')
- {
- char obj[40];
- printf("Edit object : ");
- scanf("%s", obj);
- if (HEAD)
- {
- pelem p = find(obj);
- if (p)
- {
- ed(p);
- }
- }
- else
- {
- printf("List is empty\n");
- }
- }
- if (c == '4')
- {
- char obj[40];
- printf("Delete item : ");
- scanf("%s", obj);
- if (HEAD)
- {
- del(obj);
- }
- else
- {
- printf("List is empty\n");
- }
- }
- if (c == '5')
- {
- char c_2;
- do
- {
- printf("Poisk\n"
- "[1] by name \n"
- "[2] by genre \n"
- "[0] <<back \n"
- ">>");
- c_2 = getch();
- system("cls");
- if (c_2 == '1')
- {
- char obj[40];
- printf("Name: \n");
- scanf("%s", obj);
- if (HEAD)
- {
- rd(find(obj));
- }
- else
- {
- printf("List is empty\n");
- }
- }
- if (c_2 == '2')
- {
- char obj[40];
- printf("Genre: \n");
- scanf("%s", obj);
- pelem p = HEAD;
- if (HEAD)
- while (p)
- {
- if (!strcmp(p->style, obj))
- {
- rd(p);
- }
- p = p->next;
- }
- else
- {
- printf("List is empty\n");
- }
- }
- }
- while (c_2 != '0');
- }
- if (c == '6')
- {
- if (HEAD)
- {
- pelem p = HEAD;
- pelem p_with_max = p;
- while (p)
- {
- if (p->cd_of_year > p_with_max->cd_of_year)
- {
- p_with_max = p;
- }
- p = p->next;
- }
- rd(p_with_max);
- }
- else
- {
- printf("List is empty\n");
- }
- }
- if (c == '7')
- {
- sort();
- pelem p = HEAD;
- if (p == NULL)
- {
- printf("List is empty\n");
- }
- else
- while (p != NULL)
- {
- rd(p);
- p = p->next;
- }
- }
- }
- while (c != '0');
- return 0;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д