Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62

    [c] Lista Linkata:creazione Dizionario

    ciao ragazzi..
    ho un problema..devo risolvere un esercizio con le liste linkate..
    la prima parte dell'esercizio consiste nella creazione di un dizionario della lingua italiana,il dizionario deve essere indicizzato tramite le lettere dell'alfabeto,ogni parola avrà il suo significato.Al massimo ci sono10 parole per ogni lettera e le parole sono inserite in ordine alfabetico..

    il problema che ho è il seguente..
    io so che l'alfabeto si compone di 21 lettere,quindi se il dizionario è indicizzato tramite le lettere, il mio dizionario sarà composto di 21 pagine..giusto?
    vi scrivo quello che ho pensato

    codice:
    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    typedef struct{
            int pagina=21; //ogni pagina corrisponde a una lettera dell'alfabeto, quindi sono 21
            int parole_per_pagina; //contatore di parole che mi  permette di definire il massimo
                                               //numero di parole che avrò per pagina
            char parola[20];    //parola che inserisco nel dizionario 
            char significato[200];  //significato che corrisponde alla parola inserita
            } dizionario;
    innanzitutto non so quello che ho pensato è giusto e poi immagino che dovrà esserci una corrispondenza tra il numero di pagine e le lettere,cioè pag 1-->A......pag 21-->Z, come faccio a creare questa corrispondenza?
    grazie per l'aiuto..

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Fai una semplicissima lista linkata e un inserimento ordinato in base alla parola...
    Per l'inserimento ordinato ti basta scorrere la lista finchè l'elemento da inserire è maggiore dell'elemento corrente e poi inserirlo nel posto corretto...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    Q

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Originariamente inviato da milu
    Q
    Cosa intendi?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    Questo che dici lo so fare..
    ma credevo di dover creare un dizionario con un certo numero di pagine e a ogni pagina far corrispondere una lettera dell'alfabeto..no?

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    un esercizio con le liste linkate
    ,il dizionario deve essere indicizzato tramite le lettere dell'alfabeto
    Se vuoi puoi dividere le parole per lettere e fare per ogni lettere un nodo con delle sottoliste che contengono le parole, ma è un'inutile complicazione che complica inserimento, modifiche e consultazione.
    Inoltre se ti servono tutte le parole con una tale lettera di inizio ti basta scorrere una lista semplice e selezionare le parole che ti interessano!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    ho capito..allora grazie!!la vedevo più complicata di quello che era!!

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Prego, non c'è di che!
    la vedevo più complicata di quello che era!!
    Gia!

    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    rieccomi..
    allora sono riuscita a creare un dizionario in questo modo,posto il codice
    codice:
    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    
    
    typedef struct{
            char parola[20];
            char significato[200];
            } elem;
            
    struct dizionario;
    typedef dizionario *Pdizionario;
        typedef struct dizionario{
                elem riga;
                Pdizionario next;
                } dizionario;
                
         Pdizionario inserisci(Pdizionario L, char*parola, char*significato){
               Pdizionario q;
               q=(Pdizionario)malloc(sizeof(dizionario)); 
               q->next=L;
               strcpy(q->riga.parola,parola);
               strcpy(q->riga.significato,significato);
               return(q);
               }
               
    
               
               void inserisciSignificato(Pdizionario L, char*parola,char*significato){
                    Pdizionario temp=L;
                    bool trovato=0;
                    while((temp!=NULL)&& (!trovato)){
                                         if(strcmp(parola,temp->riga.parola)==0)
                                         trovato=true;
                                         else temp=temp->next;
                                         }
                                         strcpy(temp->riga.significato,significato);
                                         }
                    bool cerca(Pdizionario L, char*parola){
                         Pdizionario temp=L;
                         bool trovato=false;
                         while((temp!=NULL)&& (!trovato)){
                          if(strcmp(parola,temp->riga.parola)==0)
                          trovato=true;
                                         else temp=temp->next;
                                         }
                          return(trovato);
                          }
               void leggiSignificato (Pdizionario L, char*parola){
                         Pdizionario temp=L;
                         bool trovato=false;
                         while((temp!=NULL)&& (!trovato)){
                          if(strcmp(parola,temp->riga.parola)==0)
                          trovato=true;
                                         else temp=temp->next;
                                         }
                                         printf("il significato relativo alla parola inserita e': %s\n",temp->riga.significato);
                                         system("PAUSE");
                                         }
                void leggi(Pdizionario L, char*parola){
                     if(cerca(L,parola)==true)
                     leggiSignificato(L,parola);
                     else{
                          printf("ERRORE: il significato collegato alla parola inserita non esiste\n");
                          system("PAUSE");
                          }
                          }
                
                void stampaDizionario(Pdizionario L){
                     Pdizionario q=L;
                     while(q!=NULL){
                                    printf("Parola: %s || ", q->riga.parola);  
                                    printf("Significato: %s\n", q->riga.significato);
                                    q=q->next;
                                    }
                                    system("PAUSE");
                                    }
                                    
       int main (){
       char parola[20], significato[200];
       int scelta,u=1, t=1;    
       Pdizionario L;
       L = NULL;
       
       do{
       //creazione MENU per utente
             printf("SCELTA OPERAZIONE \n");
             printf("\nPREMI 1:-----------INSERISCI DATI---------------------\n");
             printf("PREMI 2:-----------LEGGI DATI-----------------\n");
             printf("PREMI 3:----------VISUALIZZA TUTTO IL DIZIONARIO-----------\n");
             printf("PREMI 4:------------USCITA---------\n");
             printf("\nScelta: ");
             scanf("%d",&scelta);
                 
             if(scelta==1){
                printf("Digita la parola da inserire: ");
                scanf("%s",parola);   
                printf("inserisci il significato relativo alla parola inserita: \n");
                scanf("%s", significato);
                
                if(t==1){
                         L=inserisci(L,parola,significato);
                         t++;
                         }
                         else{
                              if(cerca(L,parola)==false)
                              L=inserisci(L,parola,significato);
                              else
                              inserisciSignificato(L,parola,significato);
                              }
                              }
             
                else if(scelta==2){
                     printf("inserisci il nome della parola da cui vuoi leggere: \n");
                     scanf("%s", parola);
                     leggi(L,parola);
                     }
                     else if(scelta==3)
                     stampaDizionario(L);
                     else u=0;
                     }while(u!=0);
                     system("PAUSE");
                     return 0;
                     
       }
    in pratica ho creato un menu:
    con la scelta uno posso inserire una parola e ad ogni parola inserita, inserisco anche il significato corrispondente, e qui ho un problema:se scrivo ad esempio casa e gli faccio corrispondere il significato:costruzione eretta dall'uomo
    quando,in seguito,con la scelta 3 chiedo di visualizzare il dizionario lui mi da:
    parola=casa,significato=costruzione
    parola=eretta, significato=dall'uomo
    se invece non metto gli spazi nel significato
    cioè scrivo la parola casa e inserisco come significato corrispondente CostruzioneErettaDall'uomo e in seguito scelgo di visualizzare il dizionario non mi da problemi..
    non so se sono stata chiara..
    in più ho un altro problema io vorrei visualizzare il dizionario ordinato alfabeticamente..ho pensato a una funzione del genere,ma non so dove dovrei inserirla..
    codice:
     
               Pdizionario InserisciElemento(Pdizionario L,char*parola){
               puntElenco q=L, prec;
               int PosTrovata;
               if(q==NULL){ //lista vuota
                           q=inserisci(L,parola);
                           return(q);
                           }
               if(strcmp(q->riga.parola,parola)>=0){ 
                                           q=inserisci(L,parola);
                                           return q;
                                           }
              //scorro lista 
               prec=q;
               while((q->next!=NULL) && (PosTrovata==0)){
                                     if(strcmp(q->next->riga.parola,parola)<0){
                                                                    prec=q;
                                                                    q=q->next;
                                                                    }
                                     else PosTrovata=1;
                                     }
               prec->next=inserisci(q->next,parola);
               return (L);
               }
    mi potete dare una mano?

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    scanf legge fino a ad uno spazio/nuova linea...
    usa
    codice:
    fgets(buffer, lunghezzabuffer, stdin); 
    // buffer -> char * (es: char buffer[100];)
    // lunghezzabuffer -> int, la lunghezza del buffer (nell'esempio 100)
    // stdin -> definito in stdio.h, identifica lo standard input
    "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 © 2024 vBulletin Solutions, Inc. All rights reserved.