Переписать код "Фонотека" с С++ - C (СИ)

Узнай цену своей работы

Формулировка задачи:

код есть на С++, а мне нужно его переделать в С. Помогите пожалуйста, буду очень благодарна. код:
Листинг программы
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. using namespace std;
  6. //односвязный список
  7. struct elem {
  8. char name[40]; //исполнитель
  9. char style[40]; //стиль
  10. int albums; //общее количество альбомов
  11. int cd_of_year; //количество дисков проданных за последний год
  12. elem *next; //указатель на следующий элемент
  13. };
  14. typedef elem *pelem; //тип-указатель
  15. pelem HEAD = NULL; //"голова" списка
  16. int NN=0; //текущее количество элементов
  17. int N_MAX = 10; //максимум списка
  18. pelem ad ()//добавление элемента
  19. {
  20. pelem neo = new elem;
  21. //добавление элемента в начало
  22. if (HEAD == NULL) {HEAD = neo;
  23. neo->next = NULL;}
  24. else {
  25. neo->next = HEAD;
  26. HEAD = neo;
  27. }
  28. NN++;
  29. return neo;
  30. }
  31. void ed (pelem p)//редактирование элемента
  32. {
  33. //ввод данных
  34. elem dan;
  35. cout<<"Artist: "; cin>>dan.name;
  36. cout<<"Style: " ; cin>>dan.style;
  37. cout<<"Albums: "; cin>>dan.albums;
  38. cout<<"CD za posledniy god: "; cin>>dan.cd_of_year;
  39. //передача данных в элемент
  40. dan.next = p->next;
  41. *p = dan;
  42. system("cls");
  43. }
  44. void rd (pelem p) //чтение элемента
  45. {
  46. if (p)
  47. {
  48. for(int i=0;i<80;i++) cout<<"_";
  49. cout<<"Object: "<< p->name<<endl;
  50. cout<<"Style: "<< p->style<<endl;
  51. cout<<"Albums: "<< p->albums<<endl;
  52. cout<<"CD za posledniy god:: "<< p->cd_of_year<<endl;
  53. for(int i=0;i<80;i++) cout<<"_";
  54. }
  55. }
  56. pelem find (char obj_name[]) //поиск элемента
  57. {
  58. pelem p = HEAD;
  59. do
  60. {
  61. if (!strcmp(p->name, obj_name)) return p;
  62. p=p->next;
  63. } while (p) ;
  64. cout<<"Ne naydenu"<<endl;
  65. return p;
  66. }
  67. void del (char obj_name[])
  68. {
  69. if (HEAD)
  70. {
  71. pelem p = find(obj_name);
  72. if (p)
  73. {
  74. if (p==HEAD) //если голова - и есть искомый объект
  75. {
  76. if (NN>1) HEAD=HEAD->next;
  77. else HEAD = NULL;
  78. }
  79. else
  80. {
  81. pelem father = HEAD;
  82. while (father->next!=p)
  83. father = father->next;
  84. father->next = p->next;
  85. }
  86. delete p;
  87. NN--;
  88. cout<<"Udaleno: "<<obj_name<<endl;
  89. return;
  90. }
  91. }
  92. }
  93. void sort () //сортировка
  94. {
  95. for (int j=0; j<NN; j++)
  96. {
  97. pelem p = HEAD;
  98. pelem son = p->next;
  99. if (p->albums < son->albums)
  100. {
  101. p->next = son->next;
  102. HEAD = son;
  103. son->next = p;
  104. }
  105. p = HEAD;
  106. while((p->next)->next)
  107. {
  108. pelem father = p;
  109. p = p->next;
  110. pelem son = p->next;
  111. if (p->albums < son->albums)
  112. {
  113. father->next = son;
  114. p->next = son->next;
  115. son->next = p;
  116. }
  117. p=father->next;
  118. }
  119. }
  120. }
  121. int main ()
  122. {
  123. int i;
  124. char c;
  125. do {
  126. cout<<"Menu"<<endl;
  127. cout<<"Count:"<< NN<<"/"<<N_MAX <<endl;
  128. cout<<"[1] add "<<endl;
  129. cout<<"[2] list "<<endl;
  130. cout<<"[3] edit "<<endl;
  131. cout<<"[4] delete "<<endl;
  132. cout<<"[5] search "<<endl;
  133. cout<<"[6] best-seller "<<endl;
  134. cout<<"[7] sort "<<endl;
  135. cout<<"[0] exit " <<endl;
  136. cout<<">>";
  137. c = getch();
  138. system("cls");
  139. if (c=='1') //добавление элемента
  140. {
  141. if (NN<N_MAX) {
  142. pelem p = ad();
  143. ed(p);
  144. }
  145. else cout<<"List is full"<<endl;
  146. }
  147. if (c=='2') //просмотр списка
  148. {
  149. pelem p = HEAD;
  150. if (p==NULL) cout<<"List is empty"<<endl; else
  151. while(p!=NULL)
  152. {
  153. rd(p);
  154. p=p->next;
  155. }
  156. }
  157. if (c=='3') {
  158. char obj[40];
  159. cout<<"Edit object : ";
  160. cin>>obj;
  161. if (HEAD)
  162. {
  163. pelem p =find(obj);
  164. if (p) ed(p);
  165. }
  166. else cout<<"List is empty"<<endl;
  167. }
  168. if (c=='4') {
  169. char obj[40];
  170. cout<<"Delete item : ";
  171. cin>>obj;
  172. if (HEAD) del(obj); else cout<<"List is empty"<<endl;
  173. }
  174. if (c=='5') {
  175. char c_2;
  176. do {
  177. cout<<"Poisk"<<endl;
  178. cout<<"[1] by name "<<endl;
  179. cout<<"[2] by genre "<<endl;
  180. cout<<"[0] <<back "<<endl;
  181. cout<<">>";
  182. c_2 = getch();
  183. system("cls");
  184. if (c_2=='1') {
  185. char obj[40];
  186. cout<<"Name : ";
  187. cin>>obj;
  188. if (HEAD) rd(find(obj));
  189. else cout<<"List is empty"<<endl;
  190. }
  191. if (c_2=='2') {
  192. char obj[40];
  193. cout<<"Genre : ";
  194. cin>>obj;
  195. pelem p=HEAD;
  196. if (HEAD)
  197. while (p)
  198. {
  199. if (!strcmp(p->style, obj)) rd(p);
  200. p = p->next;
  201. }
  202. else cout<<"List is empty"<<endl;
  203. }
  204. } while(c_2!='0');
  205. }
  206. if (c=='6') {
  207. if (HEAD)
  208. {
  209. pelem p = HEAD;
  210. pelem p_with_max = p;
  211. while(p)
  212. { if (p->cd_of_year > p_with_max->cd_of_year) p_with_max = p;
  213. p = p->next;
  214. }
  215. rd(p_with_max);
  216. }
  217. else cout<<"List is empty"<<endl;
  218. }
  219. if (c=='7') {
  220. sort();
  221. pelem p = HEAD;
  222. if (p==NULL) cout<<"List is empty"<<endl; else
  223. while(p!=NULL)
  224. {
  225. rd(p);
  226. p=p->next;
  227. }
  228. }
  229. } while(c!='0');
  230. return 0;
  231. }

Решение задачи: «Переписать код "Фонотека" с С++»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. //односвязный список
  7. typedef struct elem_t
  8. {
  9.    char name[40];  //исполнитель
  10.    char style[40]; //стиль
  11.    int  albums;    //общее количество альбомов
  12.    int  cd_of_year;    //количество дисков проданных за последний год
  13.    struct elem_t* next; //указатель на следующий элемент
  14. }  elem;
  15.  
  16. typedef elem* pelem; //тип-указатель
  17. pelem HEAD = NULL; //"голова" списка
  18. int NN = 0; //текущее количество элементов
  19. int N_MAX = 10; //максимум списка
  20.  
  21. pelem ad() //добавление элемента
  22. {
  23.    pelem neo = (pelem) malloc(sizeof(elem));
  24.    //добавление элемента в начало
  25.    if (HEAD == NULL)
  26.    {
  27.       HEAD = neo;
  28.       neo->next = NULL;
  29.    }
  30.    else
  31.    {
  32.       neo->next = HEAD;
  33.       HEAD = neo;
  34.    }
  35.    NN++;
  36.    return neo;
  37. }
  38.  
  39. void ed(pelem p) //редактирование элемента
  40. {
  41.    //ввод данных
  42.    elem dan;
  43.    printf("Artist: ");
  44.    scanf("%s", dan.name);
  45.  
  46.    printf("Style: ");
  47.    scanf("%s", dan.style);
  48.  
  49.    printf("Albums: ");
  50.    scanf("%d", &dan.albums);
  51.  
  52.    printf("CD za posledniy god: ");
  53.    scanf("%d", &dan.cd_of_year);
  54.  
  55.    dan.next = p->next;
  56.    *p = dan;
  57.  
  58.    system("cls");
  59. }
  60.  
  61. void rd(pelem p)  //чтение элемента
  62. {
  63.    int i;
  64.    if (p)
  65.    {
  66.       for (i = 0; i < 80; i++)
  67.       {
  68.          printf("_");
  69.       }
  70.       printf("\n");
  71.  
  72.       printf("Object: %s\n", p->name);
  73.       printf("Style: %s\n", p->style);
  74.  
  75.       printf("Albums: %d\n", p->albums);
  76.       printf("CD za posledniy god: %d\n", p->cd_of_year);
  77.  
  78.       for (i = 0; i < 80; i++)
  79.       {
  80.          printf("_");
  81.       }
  82.       printf("\n");
  83.    }
  84. }
  85.  
  86. pelem find(char obj_name[])  //поиск элемента
  87. {
  88.    pelem p = HEAD;
  89.    do
  90.    {
  91.       if (!strcmp(p->name, obj_name))
  92.       {
  93.          return p;
  94.       }
  95.       p = p->next;
  96.    }
  97.    while (p);
  98.    printf("Ne naydenu\n");
  99.    return p;
  100. }
  101.  
  102. void del(char obj_name[])
  103. {
  104.    if (HEAD)
  105.    {
  106.       pelem p = find(obj_name);
  107.       if (p)
  108.       {
  109.          if (p == HEAD) //если голова - и есть искомый объект
  110.          {
  111.             if (NN > 1)
  112.             {
  113.                HEAD = HEAD->next;
  114.             }
  115.             else
  116.             {
  117.                HEAD = NULL;
  118.             }
  119.          }
  120.          else
  121.          {
  122.             pelem father = HEAD;
  123.             while (father->next != p)
  124.             {
  125.                father = father->next;
  126.             }
  127.             father->next = p->next;
  128.          }
  129.          free(p);
  130.          NN--;
  131.          printf("Udaleno: %s\n", obj_name);
  132.          return;
  133.       }
  134.    }
  135. }
  136. void sort()  //сортировка
  137. {
  138.    int j;
  139.    for (j = 0; j < NN; j++)
  140.    {
  141.       pelem p = HEAD;
  142.       pelem son = p->next;
  143.       if (p->albums < son->albums)
  144.       {
  145.          p->next = son->next;
  146.          HEAD = son;
  147.          son->next = p;
  148.       }
  149.       p = HEAD;
  150.       while ((p->next)->next)
  151.       {
  152.          pelem father = p;
  153.          p = p->next;
  154.          pelem son = p->next;
  155.          if (p->albums < son->albums)
  156.          {
  157.             father->next = son;
  158.             p->next = son->next;
  159.             son->next = p;
  160.          }
  161.          p = father->next;
  162.       }
  163.    }
  164. }
  165.  
  166. int main()
  167. {
  168.    char c;
  169.    do
  170.    {
  171.       printf("Menu\n"
  172.              "Count: %d/%d\n"
  173.              "[1] add\n"
  174.              "[2] list\n"
  175.              "[3] edit\n"
  176.              "[4] delete\n"
  177.              "[5] search\n"
  178.              "[6] best-seller\n"
  179.              "[7] sort\n"
  180.              "[0] exit\n"
  181.              ">>", NN, N_MAX);
  182.  
  183.       c = getch();
  184.       system("cls");
  185.       if (c == '1') //добавление элемента
  186.       {
  187.          if (NN < N_MAX)
  188.          {
  189.             pelem p = ad();
  190.             ed(p);
  191.          }
  192.          else
  193.          {
  194.             printf("List is full\n");
  195.          }
  196.       }
  197.       if (c == '2') //просмотр списка
  198.       {
  199.          pelem p = HEAD;
  200.          if (p == NULL)
  201.          {
  202.             printf("List is empty\n");
  203.          }
  204.          else
  205.             while (p != NULL)
  206.             {
  207.                rd(p);
  208.                p = p->next;
  209.             }
  210.       }
  211.       if (c == '3')
  212.       {
  213.          char obj[40];
  214.          printf("Edit object : ");
  215.          scanf("%s", obj);
  216.          if (HEAD)
  217.          {
  218.             pelem p = find(obj);
  219.             if (p)
  220.             {
  221.                ed(p);
  222.             }
  223.          }
  224.          else
  225.          {
  226.             printf("List is empty\n");
  227.          }
  228.       }
  229.       if (c == '4')
  230.       {
  231.          char obj[40];
  232.          printf("Delete item : ");
  233.          scanf("%s", obj);
  234.          if (HEAD)
  235.          {
  236.             del(obj);
  237.          }
  238.          else
  239.          {
  240.             printf("List is empty\n");
  241.          }
  242.       }
  243.       if (c == '5')
  244.       {
  245.          char c_2;
  246.          do
  247.          {
  248.             printf("Poisk\n"
  249.                    "[1] by name \n"
  250.                    "[2] by genre \n"
  251.                    "[0] <<back \n"
  252.                    ">>");
  253.             c_2 = getch();
  254.             system("cls");
  255.             if (c_2 == '1')
  256.             {
  257.                char obj[40];
  258.                printf("Name: \n");
  259.                scanf("%s", obj);
  260.                if (HEAD)
  261.                {
  262.                   rd(find(obj));
  263.                }
  264.                else
  265.                {
  266.                   printf("List is empty\n");
  267.                }
  268.             }
  269.             if (c_2 == '2')
  270.             {
  271.                char obj[40];
  272.                printf("Genre: \n");
  273.                scanf("%s", obj);
  274.                pelem p = HEAD;
  275.                if (HEAD)
  276.                   while (p)
  277.                   {
  278.                      if (!strcmp(p->style, obj))
  279.                      {
  280.                         rd(p);
  281.                      }
  282.                      p = p->next;
  283.                   }
  284.                else
  285.                {
  286.                   printf("List is empty\n");
  287.                }
  288.             }
  289.          }
  290.          while (c_2 != '0');
  291.       }
  292.       if (c == '6')
  293.       {
  294.  
  295.          if (HEAD)
  296.          {
  297.             pelem p = HEAD;
  298.             pelem p_with_max = p;
  299.             while (p)
  300.             {
  301.                if (p->cd_of_year > p_with_max->cd_of_year)
  302.                {
  303.                   p_with_max = p;
  304.                }
  305.                p = p->next;
  306.             }
  307.             rd(p_with_max);
  308.          }
  309.          else
  310.          {
  311.             printf("List is empty\n");
  312.          }
  313.       }
  314.       if (c == '7')
  315.       {
  316.          sort();
  317.          pelem p = HEAD;
  318.          if (p == NULL)
  319.          {
  320.             printf("List is empty\n");
  321.          }
  322.          else
  323.             while (p != NULL)
  324.             {
  325.                rd(p);
  326.                p = p->next;
  327.             }
  328.       }
  329.    }
  330.    while (c != '0');
  331.  
  332.    return 0;
  333. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут