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