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

    [C] Lista dinamica in logica FIFO/LIFO.

    Salve a tutti, sotto ho scritto un esercizio che devo svolgere.

    Premetto che ho capito la logica che sta dietro alla fifo/lifo.
    Il problema è che non riesco a capire come posso implementare in c la creazione di un numero imprecisato di strutture (da indentare in lista). Cioè, se io da lato client posso creare un qualsiasi numero di strutture, come faccio ad identificarle una per una? dovrei memorizzarle in un vettore? ma di quanto dovrei allocarlo?

    Non vi chiedo ovviamente di risolvermi il problema ma apprezzerei tanto una mano nel capire come strutturarlo.

    Grazie, Paolo.

    codice:
    POLITECNICO DI TORINO
    CORSO DI LAUREA IN INGEGNERIA INFORMATICA/TELECOMUNICAZIONI
    CORSO DI ALGORITMI E PROGRAMMAZIONE
    Esercitazione di laboratorio n. 7
    La corretta implementazione di almeno una delle versioni di almeno una delle strutture dati
    proposte sarà oggetto di valutazione ai fini dell’attribuzione del punteggio per i laboratori.
    Esercizio n. 1: gestione di strutture FIFO.
    Si realizzi un programma C che, attraverso un’apposita interfaccia utente, permetta di gestire una
    struttura dati di tipo FIFO (coda non prioritaria).
    Le operazione permesse devono essere quelle di:
    - creazione di una nuova struttura (vuota).
    - inserimento di un nuovo elemento della struttura.
    - estrazione di un elemento dalla struttura.
    - visualizzazione (a video) di tutti gli elementi nella base dati (opzionale).
    - salvataggio della base dati su file (opzionale).
    - caricamento di una nuova base dati da file (opzionale).
    In questo esercizio, il programma deve essere realizzato su tre moduli distinti:
    - l’interfaccia utente (il client).
    - un modulo con le funzioni per la gestione della coda.
    - un modulo con le funzioni per la gestione dei singoli dati.
    In particolare, si desidera che l’implementazione della libreria sulla struttura dati corrisponda a un
    ADT di I categoria.
    Si supponga che ogni elemento della base dati possa essere (a scelta del programmatore):
    - una stringa di lunghezza massima pari a 50 caratteri.
    - un numero intero.
    - una struttura composta da due campi (stringa + numero).
    Si realizzi il programma in due versioni:
    - supponendo che il numero massimo di elementi nella coda sia pari a 100 (implementazione
    tramite vettori).
    - supponendo che non ci sia limite al numero di elementi che è possibile memorizzare nella
    coda (implementazione tramite liste).
    Esercizio n. 2: gestione di strutture LIFO.
    Si ripeta quanto proposto per l’Esercizio 1 nel caso di una struttura dati di tipo LIFO (stack).

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Andiamo al dettaglio ... cosa sai fare e dove ti fermi? Faccelo capire meglio con un inizio di codice che sai scrivere e comprendi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    in dettaglio mi fermo molto presto ...

    premessa: ho ipotizzato di creare una sorta di raccolta di libri.
    sono riuscito a "svolgere" solo il primo punto (creare una nuova struttura) con scarsissimi risultati.

    il secondo punto non capisco cosa voglia dire (non capisco cosa voglia intendere con "elemento" e poi la traccia non mi sembra poi così chiara). stesso discorso per il terzo

    tornando al primo punto:
    A parte il fatto che ci saranno sicuramente errori "sintattici", mi blocco proprio a livello logico quando devo aggiungere il nodo appena creato alla fine della mia lista... come faccio a "ricordare" dove finisce la mia lista? il passaggio su cui mi blocco è comunque segnalato nel codice allegato "struct_library.c"

    ecco cosa ho combinato finora: (il main è abbastanza banale, pressoché inutile leggerlo ma lo allego ugualmente)

    main.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #include "struct_library.h"
    
    int main()
    {
        char key;
    
        printf("\n\t- Benvenuto. Questo e' il menu:\n\n");
    
        do
        {
            printf(" 1 - Crea una nuova struttura.\n");
            printf(" 2 - Inserisci un nuovo elemento nella struttura.\n"); //???
            printf(" 3 - Estrai un elemento della struttura.\n"); //???
            printf(" 4 - Visualizza gli elementi della struttura.\n");
            printf(" 5 - Salva il database su un nuovo file.\n");
            printf(" 6 - Carica il database da un file.\n");
            printf(" ... o premi 'Q' per uscire.\n");
    
            printf("\n Inserisci il tuo comando: ");
            fscanf(stdin, "%c%*c", &key); //mi prende il \0 !!!
            fflush(stdin);
    
            switch (key)
            {
            case '1':
                nuovolib();
                break;
            case '2':
                //  insert();
                break;
            case '3':
                //  extract();
                break;
            case '4':
                //  view();
                break;
            case '5':
                //  save();
                break;
            case '6':
                //  load();
                break;
            case 'q':case'Q': break;
            default:
                printf("\n\t!!! COMANDO ERRATO, RIPROVA !!!\n");
            }
        }
        while (key != 'Q' && key != 'q');
    
        printf("\nHai chiuso la sessione. A presto!\n");
    
        return (EXIT_SUCCESS);
    }

    struct_library.h
    codice:
     
    typedef struct rec *lpointer;
    
    typedef struct rec {
        char titolo[50];
        float prezzo;
        lpointer next;
    } libro;
    
    void aggiungi(lpointer pn);
    void nuovolib();
    void inserisci(lpointer* pins, lpointer pnodo);
    struct_library.c
    codice:
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "struct_library.h"
    
    void nuovolib()
    {
        lpointer nuovo;
        nuovo = (lpointer) malloc(sizeof (libro));
    
        printf("\nInserimento di un libro");
        printf("\nTitolo : ");
        fgets(nuovo->titolo, 100, stdin);
        printf("Prezzo : ");
        scanf("%f", &nuovo->prezzo);
        aggiungi(nuovo);
        return;
    }
    
    void aggiungi(lpointer pn)
    {
        lpointer *posins; 
        
       // funzione tale che posins=ultimo.next   
        
        inserisci(posins, pn);
    }
    
    void inserisci(lpointer* pins, lpointer pnodo)
    {
        *pins = pnodo;
    }
    in attesa che si accenda una lampadina :P

    EDIT: ah e dimenticavo... non ho la più pallida idea di come separare le funzioni in due moduli distinti... ma quello (per ora) non è così grave...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.