Сортировка массива - исправить код и кодировку - 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;
         }
}

Объяснение кода листинга программы

  1. В функции sp_sort() необходимо исправить ошибку в имени функции сортировки, которое сейчас называется sp_sort()
  2. В данной функции используется алгоритм сортировки пузырьком.
  3. Для сортировки используется два массива: первый массив называется num и содержит в себе структуры типа SP, второй массив называется plur и используется для временного хранения значения переменной.
  4. В функции используется два вложенных цикла: внешний цикл выполняется n-1 раз, где n - это размер массива num.
  5. Внутренний цикл выполняется n-i-1 раз, где n - это размер массива num, i - это значение переменной из внешнего цикла.
  6. Если значение переменной num[i].name меньше значения переменной num[j].name, то происходит обмен значений переменных num[i] и num[j] с использованием временной переменной plur.

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

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