Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [C]Progetto agenda

    Salve a tutti,devo realizzare un progetto che prevede di creare un' agenda magari in futuro gestita con le funzioni di time.h (ad esempio si apre un file contenente tutti i dati dell' agenda),che pero' non ho ancora studiato.
    Per ora mi serve di sapere come strutturero' l' agenda,io un' idea ce l' avrei,ma mi sembra un po' troppo macchinosa.
    L' idea che mi è venuta in mente è di gestirla tramite una struttura del tipo:
    codice:
    typedef struct data
    {
      char *mese;
      char *giorno;
      char *nota;
      struct data *ptr;
    };
    Ma non ho idea di come potro' modificare la struttura durante il programma.
    Mi servirebbe uno spunto su come gestirla: il puntatore a struct serve per "tenere il conto" della struttura a cui sto puntando,ma come si fa a passare a una funzione l' intera struttura per poi modificarla?
    Se ad esempio gestisco il mese di ottobre cosi':
    codice:
    data ottobre[31];
    int i;
        for(i=1;i<=31;i++)
        {
            switch(k)
            {
                case 1:
                ottobre.[i].giorno="lunedi'";
                break;
                case 2:
                ottobre[i].giorno="martedi'";
                break;
                case 3:
                ottobre[i].giorno="mercoledi'";
                break;
                case 4:
                ottobre[i].giorno="giovedi'";
                break;
                case 5:
                ottobre[i].giorno="venerdi'";
                break;
                case 6:
                ottobre[i].giorno="sabato";
                break;
                case 7:
                ottobre[i].giorno="domenica";
                break;
            }
            if(k==7)
              k=0;
            k++;
        }
    Assegnando a un array di strutture i vari giorni della settimana,in futuro si potranno anche inserire della note.
    Come passo il puntatore char data *ptr a una funzione void (esempio:void InserisciNota) in modo che poi questa funzione possa chiedere ad esempio "inserisci una nota" e la inserisce all' interno della struttura,assegnandola a lla variabile char*nota?
    Poi un' altra domanda,se volessi fare il tutto senza sprechi di memoria dovrei allocare la struttura dinamicamente,magari usando una pila?
    Datemi piu' spunti possibile che sono alle prime armi e vorrei sapere come realizzare l' agenda senza trovarmi poi "inpallato" perche' non so gestire i dati,vorrei sapere dai piu' esmperti come realizzereste una cosa del genere,qualsiasi consiglio è benaccetto,grazie.

  2. #2
    Esempi ce ne sono tanti, più o meno corretti (come questo http://www.daniweb.com/forums/thread256309.html, guarda però le correzioni !), tuttavia dipende dalle caratteristiche che vuoi implementare e dalle funzionalità che vuoi utilizzare (per esempio OOP?) quindi la risposta è vaga.

    Dal codice che hai postato mi vengono in mente 2 cose:

    1. per la data userei una struttura apposita, e creerei anche una funzione in grado di verificare se una data inserita è corretta

    2. eviterei switch con confronto di stringhe ("lunedì", "martedì" ecc..) ma opterei per un bel
    typedef enum DayOfWeek{} DayOfWeek con i relativi giorni in modo da associare ad ogni giorno un valore numerico (ricorda: le funzioni che a partire da una data ti indicano il giorno della settimana, ritornano sempre un int, in genere 0 per la Domenica andando in avanti (evidente derivazione anglosassone), ecco perchè è utile identificare i giorni come numeri interi)


    Per qualsiasi altro dubbio, posta pure



    Ciao

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Grazie per i suggerimenti e per la risposta,mi è già più chiaro come fare.
    Al momento il mio più grande dubbio è su come passare la struttura ad una funzione (la funzione serve ad esempio per aggiungere note o per fare una ricerca),se scrivo ad esempio:
    codice:
    typedef enum day{DOMENICA,ecc...}
    typedef enum month{GENNAIO,ecc...}
    typedef struct data
    {
        month mese;
        day giorno;
        char *nota;
        struct data *ptr;   //Forse mi servirà per gestire la pila di struct;
    };
    void inserisci_dati(data*);
    int main ()
    {
        data *oggi;
        oggi=(data*)malloc(sizeof(data));
        inseriscinota(oggi);
        /*adesso voglio passare ad inserire i dati nella struttura tramite una funzione*/
    ......
    void inserisci_dati(data*p)
    {
        *p.giorno=LUNEDI;    /*ecco che partono gli errori*/
    Io alla funzione gli passo il puntatore alla struttura,subito mi da errore: "giorno has not been declared",come dovrei fare?

  4. #4
    Forse questo ti chiarirà un pò le idee: http://www.dis.uniroma1.it/~liberato...trutture.shtml


    Ciao

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Qua dice di passargli lo struct normalmente,come fosse una normale variabile,ma se poi lo modifico le modifiche restano anche fuori dalla funzione?
    Per questo tentato di passargli un puntatore.
    Comunque ho provato a fare un programma che per ora lascia inserire solo una nota,mi da errore nell' ultima riga:"espected declaration before '{' token".
    Ecco il codice:
    codice:
    #include"ramy.h"
    typedef enum day{DOMENICA,LUNEDI,MARTEDI,MERCOLEDI,GIOVEDI,VENERDI,SABATO};
    typedef enum month{GENNAIO,FEBBRAIO,MARZO,APRILE,MAGGIO,GIUGNO,LUGLIO,AGOSTO,SETTEMBRE,OTTOBRE,NOVEMBRE,DICEMBRE};
    typedef struct data
    {
        month mese;
        day giorno;
        char *nota;
        struct data *ptr;
    };
    void inseriscinota(data);
    int main ()
    {
        data oggi;
        inseriscinota(oggi);
        printf("%s",oggi.nota[0]);
        return 0;
    }
    void inseriscinota(data dd)
    {
        dd.giorno=LUNEDI;
        dd.mese=OTTOBRE;
        char a;
        int i;
        dd.nota=(char*)malloc(sizeof(char));
        for(i=1;i<1000;i++)
        {
            dd.nota=(char*)realloc(dd.nota,i*sizeof(char));
            if(a==0)
            {
              printf("Allocazione fallita");
              i=999;
            }
            dd.nota[i-1]=getchar();
            if(dd.nota[i-1]==10)
              i=999;
            i++;
            }
        }
    }

  6. #6
    Nella procedura inseriscinota c'è una parentesi graffa di troppo: ecco il codice modificato
    codice:
      
    void inseriscinota(data dd)
    {
        dd.giorno=LUNEDI;
        dd.mese=OTTOBRE;
        char a;
        int i;
        dd.nota=(char*)malloc(sizeof(char));
        for(i=1;i<1000;i++)
        {
            dd.nota=(char*)realloc(dd.nota,i*sizeof(char));
            if(a==0)
            { printf("Allocazione fallita"); i=999;}
            dd.nota[i-1]=getchar();
            if(dd.nota[i-1]==10) i=999;
            i++;
        }
    }
    Così ti dovrebbe essere più comprensibile


    Ciao

  7. #7
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ho corretto un pò di cosa,ma crasha appena inserisco i valori.
    codice:
    #include"ramy.h"
    typedef enum day{DOMENICA,LUNEDI,MARTEDI,MERCOLEDI,GIOVEDI,VENERDI,SABATO};
    typedef enum month{GENNAIO,FEBBRAIO,MARZO,APRILE,MAGGIO,GIUGNO,LUGLIO,AGOSTO,SETTEMBRE,OTTOBRE,NOVEMBRE,DICEMBRE};
    typedef struct data
    {
        month mese;
        day giorno;
        char *nota;
        struct data *ptr;
    };
    void inseriscinota(data);
    int main ()
    {
        data oggi;
        inseriscinota(oggi);
        printf("%s",oggi.nota[0]);
        return 0;
    }
    void inseriscinota(data dd)
    {
        dd.giorno=LUNEDI;
        dd.mese=OTTOBRE;
        int i=0;
        dd.nota=(char*)malloc(sizeof(char));
        do
        {
            i++;
            dd.nota=(char*)realloc(dd.nota,(i)*sizeof(char));
            dd.nota[i-1]=getchar();
            if(dd.nota[i-1]==10)
              i=1000;
        }while(i!=1000);
    }

  8. #8
    Guarda, costruire un'agenda in C non è propriamente un esercizio semplice per chi inizia, per questo ti consiglio di prendere spunto da codici già pronti per capire il funzionamento: un esempio è questo, ben strutturato

    http://www.daniweb.com/forums/thread48321.html


    Ciao

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non deve essere un'agenda complessa,essendo un progetto universitario si può anche fare gestendo tutto dal prompt,adesso mi vedo un pò di esempi.Ho già in mente come farla comunque,grazie dell' aiutò.
    Posterò di volta in volta i miei dubbi nel caso che mi inceppo su qualcosa

  10. #10
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    dubbio da un principiante

    secondo me sbagli nel creare il tipo di dato
    Io quando creo un tipo di dato con typedef uso questa sintassi

    typedef struct nome_sturttura nuovo_tipo

    oppure


    typedef struct nome
    {
    elementi della stuttura

    }nuovo_tipo;


    in pratica
    codice:
    typedef struct data
    {
        month mese;
        day giorno;
        char *nota;
        struct data *ptr;
    }nuovo_tipo;
    poi usi nuovo_tipo non data
    Tecnologia

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.