Структура государства - Удаление со сдвигом влево - C (СИ)

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

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

Здравствуйте. Вот выполнил структуру на тему государства. Организовал вывод, добавление со сдвигом в право, а вот удаление со сдвигом влево не получается. Посмотрите пожалуйста:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <strings.h>
//----------------
typedef struct{
    char nazv_stol[20];
    char nazv_strani[20]; 
    int chisl_nasel;
    long god_osn; 
} gosy;
//---------------------------
 
int OutMenu()
{
int i;
 printf("--------------------------MENU--------------------------------\n");
 printf("\n1.Zapolnit struktyru Stolizi_Gosydarstv\n"); 
 printf("\n2.Vivod struktyru Stolizi_Gosydarstv\n"); 
 printf("\n3.Vivod informazii o stolze po nazvaniy gosydarstva\n"); 
 printf("\n4.Vivod vsex stoliz s naseleniem > n\n"); 
 printf("\n5.Add Stolisy so sdvigom v pravo(ot 0)\n");
 printf("\n6.Del Stolisy so sdvigom v levo(ot 1)\n");
 printf("\nPres Enter-->");
 scanf("%d", & i);   

return i;     
}
//******************************************
gosy* Add_strukt(gosy* mass, int kol, int *n)
{
 if(kol==1)
 {
 mass=(gosy*)malloc(kol*sizeof(gosy)); 
 
  printf("Nazvanie Stolizi= ");
  getchar();
  gets(mass[0].nazv_stol);  
  
  printf("\nNazvanie Strani= ");
  gets(mass[0].nazv_strani);
    
  printf("\nSchislennost naselenia= ");
  scanf("%d", & mass[0].chisl_nasel);

  printf("\nGod osnovania= ");
  scanf("%d", & mass[0].god_osn);   
  *n=kol;   
  return mass;
}
else
{
 mass = (gosy *)realloc(mass, kol*sizeof(gosy));    
  printf("Nazvanie Stolizi= ");
  getchar();
  gets(mass[kol-1].nazv_stol);  
  
  printf("\nNazvanie Strani= ");
  gets(mass[kol-1].nazv_strani);
    
  printf("\nSchislennost naselenia= ");
  scanf("%d", & mass[kol-1].chisl_nasel);

  printf("\nGod osnovania= ");
  scanf("%d", & mass[kol-1].god_osn);        
}      
*n=kol;    
return mass;       
}
//******************************************
void Out_Strukt(gosy *mass,int *n)
{
for(int i=0; i<*n; i++)
{
printf("%s\n",mass[i].nazv_stol);       
printf("%s\n",mass[i].nazv_strani); 
printf("%d\n",mass[i].chisl_nasel); 
printf("%d\n",mass[i].god_osn);          
}         
}
//*****************************************
void Out_po_nazv_gosy(gosy *mass, int *n)
{
 int var;
 for(int i=0; i<*n; i++)
 {
 printf("%d.%s\n", i+1, mass[i].nazv_strani);                  
 }        
printf("\nVibirite punkt-> ");  
scanf("%d", & var);
 
printf("%s\n",mass[var-1].nazv_stol);       
printf("%s\n",mass[var-1].nazv_strani); 
printf("%d\n",mass[var-1].chisl_nasel); 
printf("%d\n",mass[var-1].god_osn); 
}
//*****************************************
void   Out_n(gosy *mass, int *n)
{
int nasel=0;
printf("Vvedite kol-vo nasel->");      
scanf("%d", &nasel);
 
for(int i=0; i<*n; i++)
{
 if(nasel<mass[i].chisl_nasel)
 {
  printf("%s\n",mass[i].nazv_stol);                               
 }               
}       
        
}
//*****************************************
gosy* Add_so_sdvig(gosy *mass,int *n)
{      
 int k; 
 gosy *temp;  
 printf("Vvedite poziziy>");
 scanf("%d", & k);
 temp=(gosy*)malloc(*n*sizeof(gosy)); 
 
for(int i=0; i<*n; i++)
{
temp[i]=mass[i];        
}
free(mass);
mass = (gosy*)realloc(mass, (*n+1)*sizeof(gosy));
for(int i=0; i<(*n+1); i++) 
{
if(i<(k))
{
mass[i]=temp[i];       
}       
else
{
    if(i==(k))
{ 
  printf("Nazvanie Stolizi= ");
  getchar();
  gets(mass[k].nazv_stol);  
  
  printf("\nNazvanie Strani= ");
  gets(mass[k].nazv_strani);
    
  printf("\nSchislennost naselenia= ");
  scanf("%d", & mass[k].chisl_nasel);

  printf("\nGod osnovania= ");
  scanf("%d", & mass[k].god_osn);
}               
else
{mass[i]=temp[i-1]; }                   
}                
}
 free(temp);       

return mass;       
}
//******************************************
 
gosy* del_so_sdvig(gosy *mass,int *n)
{
 int k; 
 gosy *temp;  
 printf("Vvedite poziziy>");
 scanf("%d", & k);
 k--;
 temp=(gosy*)malloc(*n*sizeof(gosy)); 
 
for(int i=0; i<*n; i++)
{
temp[i]=mass[i];        
}
free(mass);
mass = (gosy*)realloc(mass, (*n-1)*sizeof(gosy));
for(int i=0; i<(*n-1); i++) 
{
if(i<(k-1))
{
mass[i]=temp[i];       
}       
else
{
mass[i]=temp[i+1];  
}                
}
 free(temp);  
return mass;       
}
 
//*******************************************
main()
{
    int i,n=0, kol=1;
    gosy *mass;

    while (i!=10)
    {
    i=OutMenu(); 
    
    switch(i)
    {
    case 1:
         {
         mass=Add_strukt(mass, kol, &n);
         kol++;
         break;         
         }       
              
    case 2:
         {
          Out_Strukt(mass, &n);
         break;                      
         }        
              
    case 3:
         {
          Out_po_nazv_gosy(mass, &n);
         break;                      
         }                
    case 4:
         {
          Out_n(mass, &n);
         break;                      
         }        
              
    case 5:
         {
        mass=Add_so_sdvig(mass, &n);
        n++;
         break;                      
         }  
    case 6:
         {
        mass=del_so_sdvig(mass, &n);
        n--;
         break;                      
         }            
    }     
           
    }  
      
free(mass);       
getch();
}
(не работает только функция номер 6- удаление со сдвигом влево)

Решение задачи: «Структура государства - Удаление со сдвигом влево»

textual
Листинг программы
gosy *del_so_sdvig(gosy **mass, int *n)

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


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

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

11   голосов , оценка 3.818 из 5
Похожие ответы