Какой параметр передать в функцию - C (СИ)

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

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

У меня есть структура данных, которую я сортирую и записываю в файл.И у меня есть 2 функции сортировки для чисел и строк. Как мне правильно передать параметр в функцию, чтоб она выполнялась не для одного поля, но и для другого. Например, Если у меня функция сортирует по коду изделия, то какой параметр надо передать, чтоб она сортировала по цене.
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
typedef struct Vurobu
{
    int kod;
    int cina;
    char nazva[15];
    char vurobnuk[15];
};
Vurobu v[10];
 
void Zcit(Vurobu c[],int k)
{
    int i;
    
    for (i=0;i<k;i++)
    {
        printf("Vvedit dani pro vurib %d\n",i+1);
        printf("Nazva vuroby\n");
        scanf("%s",&c[i].nazva);
        printf("Kraina vurobnuk\n");
        scanf("%s",&c[i].vurobnuk);
        printf("Vvedit kod vuroby\n");
        scanf("%d",&c[i].kod);
        printf("Vvedit cina vuroby\n");
        scanf("%d",&c[i].cina);
    }
}
 
void Sort1(Vurobu c[],int k)
{
    int temp;
    int i,j;
    for (i=0;i<k;i++)
        for (j=i+1;j<k;j++)
        {
            if (c[i].kod>c[j].kod)
            {
            temp=с[i].kod;
            c[i].kod=c[j].kod;
            c[j].kod=temp;
            }
        }
}

void Sort2(Vurobu c[],int k)
{
    char temp[15];
    int i,j;
    for (i=0;i<k;i++)
        for (j=i+1;j<k;j++)
        {
            if (strcmp(c[i].nazva,c[j].nazva)>0)
            {
                strcpy(temp,c[i].nazva);
                strcpy(c[i].nazva,c[j].nazva);
                strcpy(c[j].nazva,temp);
            }
        }
}
 
void Vuvid(Vurobu c[], int k)
{
    int i;
    printf("       Nazva vuroby    Vurobnuk     Cina       Kod\n");
    for (i=0;i<k;i++)
        printf("%15s%15s%10d%10d\n",c[i].nazva,c[i].vurobnuk,c[i].cina,c[i].kod);
}
        
void Vfajl(Vurobu c[],int k)
{
    FILE *fp;
    int i,j;
    char a[10];
    fp=fopen("D:\\fajlstr.txt","wt");
    if (fp==NULL)
        printf("Error.Ne ydalos' vidkrutu fajl");
    for (i=0;i<k;i++)
    {   
        fprintf(fp,"%15s%15s%10d%10d",c[i].nazva,c[i].vurobnuk,c[i].cina,c[i].kod);
        fputc('\n',fp);
    }
    fclose(fp);
}
 
int main()
{
    int n,p;
    printf("Vvedit kilksit vurobiv\n");
    scanf("%d",&n);
    Zcit(v,n);
    printf("Vuberit' sortyvanna vurobiv\n");
    printf("1 - Po kody\n2 -Po nazvi\n");
    scanf("%d",&p);
    if (p==1)
        Sort1(v,n);
    if (p==2)
        Sort2(v,n);
    Vuvid(v,n);
    Vfajl(v,n);
    getch();
    return 0;
}
Тема актуальна

Решение задачи: «Какой параметр передать в функцию»

textual
Листинг программы
int temp;
if (c[i].kod > c[j].kod)
{
    temp = с[i].kod;
    c[i].kod = c[j].kod;
    c[j].kod = temp;
}

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

В данном коде происходит сортировка массива структур по значению поля kod.

  1. Переменная temp инициализируется значением первого элемента массива c.
  2. Если значение поля kod текущего элемента массива c больше значения поля kod следующего элемента массива c, то значения полей kod этих элементов меняются местами, при этом значение temp используется как временное хранилище для сохранения значения первого элемента.
  3. Процесс повторяется до тех пор, пока все элементы массива c не будут отсортированы по возрастанию значения поля kod.

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


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

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

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