Сортировка массива - исправить код и кодировку - C (СИ)
Формулировка задачи:
Дело такое, пишу так сказать проект на автомат, вроде всё закончил, но есть две беды.
#include <stdio.h> #include <conio.h> #include <locale.h> #include <time.h> #include <string.h> #include <stdlib.h> void arr_input(int *arr, int n,int a, int b) { for (int i = 0; i < n; i++) arr[i]=a+rand()%(b-a); } void arr_output (int *arr, int n) { for (int i = 0; i < n; i++) printf(" %d ",arr[i]); } void arr_sort (int *arr, int n){ int tmp; for (int i = n; i > 0; i--) if (arr[i]<arr[i-1]) { tmp=arr[i]; arr[i]=arr[i-1]; arr[i-1]=tmp; } } int arr_count (int *arr, int n) { int count_ch = 0; for (int i = 0; i < n; i++) { int count = 1; while (count != 0) { int ch = arr[i]%10; if (ch<0) ch *= -1; if (ch == 4) count_ch++; count --; } } return count_ch; } int* arr_ent (int *arr, int *brr, int n) { int j=0; for (int i = 0; i < n; i++) { int count = 1; while (count != 0) { int ch = arr[i]%10; if (ch<0) ch *= -1; if (ch == 4) { brr[j]=arr[i]; j++; } count --; } } return brr; } void first(void) { system("cls"); printf("Г‡Г*Г¤Г*Г·Г* В№1.\n"); int *arr, *array, n, min, max, count,res; FILE *fo; printf("Ââåäèòå n:\n "); scanf("%d",&n);//ââîä Г°Г*çìåðГ*îñòè printf("Ââåäèòå ëåâóþ ГЈГ°Г*Г*èöó ïðîìåæóòêГ*:\n "); scanf("%d",&min);//ââîä ГЈГ°Г*Г*èöû Г*Г*Г·Г*Г«Г* printf("Ââåäèòå ГЇГ°Г*ГўГіГѕ ГЈГ°Г*Г*èöó ïðîìåæóòêГ*:\n "); scanf("%d",&max);//ââîä ГЈГ°Г*Г*èöû ГЄГ®Г*Г¶Г* system("cls"); srand(time(NULL)); arr = (int *)malloc(n*sizeof(int)); arr_input(arr,n,min,max); printf("ÈñõîäГ*ûé Г¬Г*Г±Г±ГЁГў: \n"); arr_output(arr,n); count = arr_count(arr,n); if (count == 0) { printf("\n\nÂûõîäÿùèé Г¬Г*Г±Г±ГЁГў ГЇГіГ±ГІ."); fo = fopen("kr.dat","wt"); if (fo == 0) perror("\nError opening file!"); else fprintf(fo,"NO MASSIVE!"); fclose(fo); //Г§Г*ГЇГЁГ±Гј Гў ГґГ*éë } else { array=(int *)malloc(sizeof(count)); arr_ent(arr,array,n); //arr_sort(array,count); fo = fopen("kr.dat","wt"); if (fo == 0) perror("\nError opening file!"); else res=fwrite(array,sizeof(int),count,fo); fclose(fo); fo = fopen("kr.dat","rb"); if (fo == 0) perror("\nError opening file!"); else res=fread(array,sizeof(int),count,fo); fclose(fo); printf("\n\nÂûõîäÿùèé Г¬Г*Г±Г±ГЁГў ñîñòîèò ГЁГ§ %d ýëåìåГ*òîâ(-Г*): \n",count); arr_output(array,count); } printf("\n\nÄëÿ ïåðåõîäГ* Г*Г*æìèòå <Enter>."); free(arr); free(array); getch(); }void arr_sort (int *arr, int n){ int tmp; for (int i = n; i > 0; i--) if (arr[i]<arr[i-1]) { tmp=arr[i]; arr[i]=arr[i-1]; arr[i-1]=tmp; } }
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #include "mod.h" int main() { int a; setlocale(LC_ALL, "Russian"); do { system("cls"); printf("\n Ââåäèòå: \n 1 ГЁ Enter - äëÿ âûâîäГ* ðåøåГ*ГЁГї 1 Г§Г*Г¤Г*Г·ГЁ\n 2 ГЁ Enter - äëÿ âûâîäГ* ðåøåГ*ГЁГї 2 Г§Г*Г¤Г*Г·ГЁ\n 3 ГЁ Enter - äëÿ âûâîäГ* ðåøåГ*ГЁГї 3 Г§Г*Г¤Г*Г·ГЁ\n 0 ГЁ Enter - äëÿ âûõîäГ* ГЁГ§ ïðîãðГ*ììû\n\n Ââåäèòå ГЂ: "); scanf("%d",&a); switch(a) { case 1: first(); break; case 2: second(); break; case 3: third(); break; } } while (a!=0); printf("\n\nÄëÿ âûõîäГ* Г*Г*æìèòå <Enter>."); getch(); return 0; }#include <stdio.h> #include <conio.h> #include <locale.h> #include <time.h> #include <string.h> #include <stdlib.h> typedef struct SP { char name[40]; char firm[40]; char *kind; char lg[40]; }; void sp_input(SP *num, int n){ int d; for (int i = 0; i < n; i++){ system("cls"); printf("Ââåäèòå Г¤Г*Г*Г*ûå %d-îé Г*ГЇГІГҐГЄГЁ.\n", i+1); printf("Ââåäèòå Г*Г*çâГ*Г*ГЁГҐ ëåêГ*ðñòâГ*:\n "); scanf("%s",num[i].name); printf("\nÂâåäèòå ôèðìó:\n "); scanf("%s",num[i].firm); do { printf("\nÂâåäèòå ГўГЁГ¤ ïðîäГ*æè (1 - ГЇГ® ðåöåïòó 2 - ñâîáîäГ*ûé):\n "); scanf("%d",&d); switch(d) { case 1: num[i].kind = "ГЇГ® ðåöåïòó"; break; case 2: num[i].kind = "ñâîáîäГ*ûé"; break; } }while(d != 1 && d != 2); printf("\nÏðèГ*Г*äëåæèò ëüãîòГ*îé ГЄГ*òåãîðèè (Г¤Г*/Г*ГҐГІ):\n "); scanf("%s",num[i].lg); } } void sp_sort(SP *num, int n){ SP plur; for(int i = 0;i < n;i++) for(int j = 0; j < n;j++) if(strcmp(num[i].name,num[j].name)<0){ plur=num[i]; num[i]=num[j]; num[j]=plur; } } void sp_output_kind(SP *num,int n){ int u,res; char *kind; FILE *fo; system("cls"); printf("\nÂâåäèòå ГўГЁГ¤ ïðîäГ*æè (1 - ГЇГ® ðåöåïòó 2 - ñâîáîäГ*ûé):\n "); scanf("%d",&u); do { switch(u) { case 1: kind = "ГЇГ® ðåöåïòó"; break; case 2: kind = "ñâîáîäГ*ûé"; break; } }while(u!=1 && u!=2); setlocale(LC_ALL, "Russian"); printf("\nГ’Г*áëèöГ* Г*ГЇГІГҐГЄ."); printf("\n| id | ËåêГ*ðñòâî | ÔèðìГ* | Âèä ïðîäГ*æè | Ëüãîòû |"); for (int i = 0; i < n; i++) if(strcmp(num[i].kind,kind)==0){ printf("\n| %3d| %11s | %9s | %13s | %6s |",i+1,num[i].name,num[i].firm,num[i].kind,num[i].lg); fo = fopen("kr.dat","wt"); if (fo == 0) perror("\nError opening file!\n"); else res=fwrite(&num,sizeof(int),40,fo); fclose(fo); } } void sp_output(SP *num, int n){ system("cls"); setlocale(LC_ALL, "Russian"); printf("\nГ’Г*áëèöГ* Г*ГЇГІГҐГЄ."); printf("\n| id | ËåêГ*ðñòâî | ÔèðìГ* | Âèä ïðîäГ*æè | Ëüãîòû |"); printf("\n____________________________________________________________"); for (int i = 0; i < n; i++) printf("\n| %3d| %11s | %9s | %13s | %6s |",i+1,num[i].name,num[i].firm,num[i].kind,num[i].lg); printf("\n\nГЌГ*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі äëÿ âûçîâГ* ìåГ*Гѕ.\n "); getch(); } void third(void){ system("cls"); int n,a,res; FILE *fo; printf("Ââåäèòå êîëè÷åñòâî Г¤Г*Г*Г*ûõ:\n "); scanf("%d",&n); SP num[n]; sp_input(num,n); fo = fopen("kr.dat","wt"); if (fo == 0) perror("\nError opening file!\n"); else res=fwrite(&num,sizeof(int),40,fo); fclose(fo); fo = fopen("kr.dat","rb"); if(fo == 0) perror("\nError opening file!"); else { res = fread(&num,sizeof(int),40,fo); } sp_output(num,n); printf("\n\nÂûáåðèòå ГґГіГ*êöèþ:\n\t1 - ÑîðòèðîâêГ* ГЇГ® Г*Г*çâГ*Г*ГЁГѕ ëåêГ*ðñòâГ*\n\t2 - ÈçìåГ*ГҐГ*ГЁГҐ Г*îìåðГ*\n\t0 - Âûõîä\n"); scanf("%d",&a); do { switch(a){ case 1: sp_sort(num,n);sp_output(num,n);break; case 2: sp_output_kind(num,n); break; } }while(a!=1 && a!=2); printf("\n\nÄëÿ ïåðåõîäГ* Г*Г*æìèòå <Enter>."); getch(); }
Решение задачи: «Сортировка массива - исправить код и кодировку»
textual
Листинг программы
void sp_sort(SP* num, int n) { SP plur; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (strcmp(num[i].name, num[j].name) < 0) { plur = num[i]; num[i] = num[j]; num[j] = plur; } }
Объяснение кода листинга программы
- В функции sp_sort() необходимо исправить ошибку в имени функции сортировки, которое сейчас называется sp_sort()
- В данной функции используется алгоритм сортировки пузырьком.
- Для сортировки используется два массива: первый массив называется num и содержит в себе структуры типа SP, второй массив называется plur и используется для временного хранения значения переменной.
- В функции используется два вложенных цикла: внешний цикл выполняется n-1 раз, где n - это размер массива num.
- Внутренний цикл выполняется n-i-1 раз, где n - это размер массива num, i - это значение переменной из внешнего цикла.
- Если значение переменной num[i].name меньше значения переменной num[j].name, то происходит обмен значений переменных num[i] и num[j] с использованием временной переменной plur.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д