Переписать код "Фонотека" с С++ - 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;
}

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


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

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

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