Структура государства - Удаление со сдвигом влево - 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)