Переписать код "Фонотека" с С++ - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д