Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Problema di ordinamento di vettori di puntatori a struct

    codice:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    
    #define N 100 //massimi maialini
    
    typedef struct {
        int giorno;
        int mese;
        int anno;
    } Data;
    
    typedef struct {
        char nome[20];
        Data datanascita;
        float peso;
        int popolarità;
    } Maialino;
    
    typedef struct {
        int numero_maialini;
        Maialino pigs[N];
    } Allevamento;
    
    int confronta(Data, Data);
    
    int main()
    {
        Allevamento a = {7,
                "Porky Pig", {12, 7, 1936}, 33.50, 85,
                "Miss Piggy", {17, 12, 1974}, 23.95, 170,
                "Babe", {23, 1, 1996}, 18.80, 250,
                "Pumbaa", {14, 11, 1994}, 79.99, 1690,
                "Peppa", {31, 5, 2004}, 12.15, 8500,
                "Hamm", {12, 7, 1968}, 19.05, 290,
                "Piglet", {22, 4, 1926}, 9.30, 1260
        };
    
        int i = 0;
        int j = 0;
    
        Maialino * ord_alfabetico[N] = { NULL };
        Maialino * ord_data[N] = { NULL };
        Maialino * ord_peso[N] = { NULL };
        Maialino * ord_pop[N] = { NULL };
    
        //stampa allevamento così com'è
        for (i = 0; i < a.numero_maialini; i++)
        {
            printf("Il maialino %s, ", a.pigs[i].nome); //nome maialino
            printf("nato il %d/%d/%d, ", a.pigs[i].datanascita.giorno, a.pigs[i].datanascita.mese, a.pigs[i].datanascita.anno); //data nascita maialino
            printf("pesa %.2f e ha ", a.pigs[i].peso ); //peso maialino
            printf("popolarita' %d ", a.pigs[i].popolarità); //nome maialino
            printf("\n");
        }
    
        //stampa ordine alfabetico
        ord_alfabetico[1] = &a.pigs[1];
        printf("%s", ord_alfabetico[1]);
    
        for (i = 0; i < a.numero_maialini-1; i++)
        {
            if (strcmp(a.pigs[i].nome, a.pigs[i + 1].nome) < 0)
            {
                ord_alfabetico[j] = &a.pigs[i];
                j++;
            }
            else if (strcmp(a.pigs[i].nome, a.pigs[i + 1].nome) > 0)
            {
                //mi perdo
            }
        }
        //stampa ordine data
    
        //stampa ordine peso
    
        //stampa ordine popolarità
    
    
        _getch();
        return 0;
    }
    
    int confronta(Data d1, Data d2)
    {
        int ris = 0;
    
        if (d1.anno > d2.anno)
        {
            ris = -1;
        }
        else if (d1.anno == d2.anno)
        {
            if (d1.mese > d2.mese)
            {
                ris = -1;
            }
            else if (d1.mese < d2.mese)
            {
                ris = 1;
            }
            else if (d1.mese == d2.mese)
            {
                if (d1.giorno < d2.giorno)
                {
                    ris = 1;
                }
                else if (d1.giorno > d2.giorno)
                {
                    ris = -1;
                }
                else if (d1.giorno == d2.giorno)
                {
                    ris = 0;
                }
            }
        }
        else if (d1.anno < d2.anno)
        {
            ris = 1;
        }
    
        return ris;
    }
    Sto facendo un esercizio per il quale mi si chiede di, avendo una struttura Allevamento con N maialini in ordine casuale, creare 4 array di puntatori a ciascun maialino, e ordinare questi array di puntatori in vari ordini.

    In parole povere: ho una struttura Allevamento a con 7 maialini in ordine casuale, e devo stampare a video l'allevamento a in ordine alfabetico. Per fare questo devo copiare gli indirizzi di ogni maialino nella "casella" [j] di ord_alfabetico[j]. In questo modo ho che la casella j punta al maialino corrispondente a.pigs[j].
    credo di aver intuito il ragionamento ma non riesco a scriverlo, mi servirebbe un aiuto.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    codice:
    for(int i = 0; i <a.numero_maialini; i++)
      ord_alfabetico[i] = &a.pigs[i]
    sort(ord_alfabetico, a.numero_maialini);
    dove in sort puoi implementare un qualsiasi algoritmo di sort (bubblesort, selectionsort, quicksort, mergesort, ...) usando come condizione strcmp(ord_alfabetico[i]->nome, ord_alfabetico[j]->nome)
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.