如何对结构数组进行排序?

时间:2021-10-20 19:17:15

Could you help me write the continuation of the code:

你能帮我写一下代码的延续:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define DIM 50
#define MESI 12
#define STRUCT 4

/* 1) Inserimento e stampa in forma tabellare per provincia dei dati mensili sul morbillo
   2)Visualizzare il valore medio mensile
   3)Ordinamento regioni decrescenti annuali
   4)Caricamento dati da file
   5)Regione e mese con maggior numero di casi di morbillo
   regioni = Lombardia piemonte puglia e veneto
 */

typedef struct
{
    char regione[DIM];
    char mese[DIM][MESI];
    int morbillo[MESI];
} data;

bool inserimento_morbilli(data utente[]);
bool regioni_mesi(data utente[]);
void stampa_dati(data utente[]);
bool ordinamento_regioni(data utente[]);
bool caricamento_file(data utente[]);

int main()
{
    data utente[STRUCT];
    regioni_mesi(utente);
    int scelta;

    do
    {
        printf("Premi [1] per stampare in forma tabellare i dati inerenti al morbillo\n");
        printf("Premi [2] per effettuare l'ordinamento basandoci sulla regione con minori casi di morbillo\n");
        printf("Premi [3] per caricare i dati da file\n");
        scanf("%d", &scelta);
        if (scelta == 1)
        {
            inserimento_morbilli(utente);
        }
        else if (scelta == 2)
        {
            ordinamento_regioni(utente);
        }
        else if (scelta == 3)
        {
            caricamento_file(utente);
        }
    } while (scelta != 0);
}

bool inserimento_morbilli(data utente[])
{
    utente[0].morbillo[0] = 0;
    utente[0].morbillo[1] = 0;
    utente[0].morbillo[2] = 0;
    utente[0].morbillo[3] = 0;
    utente[0].morbillo[4] = 0;
    utente[0].morbillo[5] = 0;
    utente[0].morbillo[6] = 4;
    utente[0].morbillo[7] = 0;
    utente[0].morbillo[8] = 0;
    utente[0].morbillo[9] = 10;
    utente[0].morbillo[10] = 7;
    utente[0].morbillo[11] = 1;
    // Lombardia
    utente[1].morbillo[0] = 0;
    utente[1].morbillo[1] = 1;
    utente[1].morbillo[2] = 2;
    utente[1].morbillo[3] = 12;
    utente[1].morbillo[4] = 0;
    utente[1].morbillo[5] = 2;
    utente[1].morbillo[6] = 3;
    utente[1].morbillo[7] = 6;
    utente[1].morbillo[8] = 4;
    utente[1].morbillo[9] = 0;
    utente[1].morbillo[10] = 4;
    utente[1].morbillo[11] = 5;
    // Veneto
    utente[2].morbillo[0] = 0;
    utente[2].morbillo[1] = 0;
    utente[2].morbillo[2] = 3;
    utente[2].morbillo[3] = 2;
    utente[2].morbillo[4] = 18;
    utente[2].morbillo[5] = 17;
    utente[2].morbillo[6] = 14;
    utente[2].morbillo[7] = 16;
    utente[2].morbillo[8] = 20;
    utente[2].morbillo[9] = 5;
    utente[2].morbillo[10] = 9;
    utente[2].morbillo[11] = 8;
    utente[3].morbillo[0] = 7;
    utente[3].morbillo[1] = 5;
    utente[3].morbillo[2] = 2;
    utente[3].morbillo[3] = 14;
    utente[3].morbillo[4] = 3;
    utente[3].morbillo[5] = 2;
    utente[3].morbillo[6] = 2;
    utente[3].morbillo[7] = 1;
    utente[3].morbillo[8] = 1;
    utente[3].morbillo[9] = 1;
    utente[3].morbillo[10] = 1;
    utente[3].morbillo[11] = 0;
    stampa_dati(utente);
}

void stampa_dati(data utente[])
{
    int i;
    int j;
    printf("|%-20s|%-20s|%-20s|\n", "Regione", "Mese", "Morbillo");
    printf("---------------------------------------------------\n");
    for (i = 0; i < STRUCT; i++)
    {
        printf("|%-20s|------------------------------------------", utente[i].regione);
        for (j = 0; j < MESI; j++)
        {
            printf("\n                     |%-20s|%-20d|\n", utente[i].mese[j], utente[i].morbillo[j]);
        }
    }
}

bool ordinamento_regioni(data utente[])
{
    int i;
    int j;
    int valore_max_morbillo[STRUCT];
    data temp;
    int min;
    for (i = 0; i < STRUCT; i++)
    {
        for (j = 0; j < MESI; j++)
        {
            valore_max_morbillo[i] += utente[i].morbillo[j];
        }
    }
    for (i = 0; i < STRUCT; i++)
    {
        printf("\n\nI valori totali del morbillo sono\n |%d|\n", valore_max_morbillo[i]);
    }
    i = 0;
    j = 0;
    // Inizio Ordinamento
    for (i = 0; i < STRUCT - 1; i++)
    {
        for (j = 0; j < MESI - 1; j++)
        {
            if (valore_max_morbillo[i] > valore_max_morbillo[i + 1])
            {
                temp = utente[j];
                utente[j] = utente[j + 1];
                utente[j + 1] = temp;
            }
        }
    }
}

bool caricamento_file(data utente[])
{
    int dim;
    int dim2;
    int i;
    int j;
    FILE *fp;
    fp = fopen("dati.txt", "r");
    if (fp == NULL)
    {
        printf("Errore il file non e'stato aperto correttamente \n");
        exit(1);
    }
    else
    {
        for (i = 0; i < STRUCT; i++)
        {
            for (j = 0; j < MESI; j++)
            {
                fscanf(fp, "%d", &utente[i].morbillo[j]);
            }
        }
        printf("Dati caricati da File\n\n");
        printf("|%-20s|%-20s|%-20s|\n", "Regioni", "Mesi", "Casi Morbillo");
        printf("---------------------------------------------------------\n");
        for (i = 0; i < STRUCT; i++)
        {
            printf("|%-20s|\n", utente[i].regione[j]);
            for (j = 0; j < MESI; j++)
            {
                printf("                     |%-20s|%-20d|\n", utente[i].mese[j], utente[i].morbillo[j]);
            }
        }
    }
}

bool regioni_mesi(data utente[])
{
    // Puglia
    strcpy(utente[0].regione, "Puglia");
    strcpy(utente[0].mese[0], "Gennaio");
    strcpy(utente[0].mese[1], "Febbraio");
    strcpy(utente[0].mese[2], "Marzo");
    strcpy(utente[0].mese[3], "Aprile");
    strcpy(utente[0].mese[4], "Maggio");
    strcpy(utente[0].mese[5], "Giugno");
    strcpy(utente[0].mese[6], "Luglio");
    strcpy(utente[0].mese[7], "Agosto");
    strcpy(utente[0].mese[8], "Settembre");
    strcpy(utente[0].mese[9], "Ottobre");
    strcpy(utente[0].mese[10], "Novembre");
    strcpy(utente[0].mese[11], "Dicembre");

    // Lombardia
    strcpy(utente[1].regione, "Lombardia");
    strcpy(utente[1].mese[0], "Gennaio");
    strcpy(utente[1].mese[1], "Febbraio");
    strcpy(utente[1].mese[2], "Marzo");
    strcpy(utente[1].mese[3], "Aprile");
    strcpy(utente[1].mese[4], "Maggio");
    strcpy(utente[1].mese[5], "Giugno");
    strcpy(utente[1].mese[6], "Luglio");
    strcpy(utente[1].mese[7], "Agosto");
    strcpy(utente[1].mese[8], "Settembre");
    strcpy(utente[1].mese[9], "Ottobre");
    strcpy(utente[1].mese[10], "Novembre");
    strcpy(utente[1].mese[11], "Dicembre");

    // Veneto
    strcpy(utente[2].regione, "Veneto");
    strcpy(utente[2].mese[0], "Gennaio");
    strcpy(utente[2].mese[1], "Febbraio");
    strcpy(utente[2].mese[2], "Marzo");
    strcpy(utente[2].mese[3], "Aprile");
    strcpy(utente[2].mese[4], "Maggio");
    strcpy(utente[2].mese[5], "Giugno");
    strcpy(utente[2].mese[6], "Luglio");
    strcpy(utente[2].mese[7], "Agosto");
    strcpy(utente[2].mese[8], "Settembre");
    strcpy(utente[2].mese[9], "Ottobre");
    strcpy(utente[2].mese[10], "Novembre");
    strcpy(utente[2].mese[11], "Dicembre");

    // Piemonte
    strcpy(utente[3].regione, "Piemonte");
    strcpy(utente[3].mese[0], "Gennaio");
    strcpy(utente[3].mese[1], "Febbraio");
    strcpy(utente[3].mese[2], "Marzo");
    strcpy(utente[3].mese[3], "Aprile");
    strcpy(utente[3].mese[4], "Maggio");
    strcpy(utente[3].mese[5], "Giugno");
    strcpy(utente[3].mese[6], "Luglio");
    strcpy(utente[3].mese[7], "Agosto");
    strcpy(utente[3].mese[8], "Settembre");
    strcpy(utente[3].mese[9], "Ottobre");
    strcpy(utente[3].mese[10], "Novembre");
    strcpy(utente[3].mese[11], "Dicembre");
}

How do I sort? I tried to do it with the bubble with the 2 indices but nothing did not order anything.

我该如何排序?我尝试用2个指数的泡沫做到这一点,但没有任何东西没有订购任何东西。

I should order the structure based on the lowest rainfall per region, so I made a total sum per region so I could compare the total sum but nothing is in order.

我应该根据每个地区的最低降雨量来订购结构,所以我为每个地区做了总和,这样我就可以比较总和,但没有任何顺序。

1 个解决方案

#1


0  

Repost

Hi you could write me the continuation of the point [CODE]

嗨,你可以写我继续点[代码]

How do I sort? I tried to do it with the bubble with the 2 indices but nothing did not order anything.

我该如何排序?我尝试用2个指数的泡沫做到这一点,但没有任何东西没有订购任何东西。

I should order the structure based on the lowest rainfall per region, so I made a total sum per region so I could compare the total sum but nothing nin order anything help pls.

我应该根据每个地区的最低降雨量来订购结构,所以我为每个地区做了总和,所以我可以比较总和,但没有任何顺序,任何有用的帮助。

#1


0  

Repost

Hi you could write me the continuation of the point [CODE]

嗨,你可以写我继续点[代码]

How do I sort? I tried to do it with the bubble with the 2 indices but nothing did not order anything.

我该如何排序?我尝试用2个指数的泡沫做到这一点,但没有任何东西没有订购任何东西。

I should order the structure based on the lowest rainfall per region, so I made a total sum per region so I could compare the total sum but nothing nin order anything help pls.

我应该根据每个地区的最低降雨量来订购结构,所以我为每个地区做了总和,所以我可以比较总和,但没有任何顺序,任何有用的帮助。