|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 1
|
programmazione linguaggio c
compito:
struttura dati ABR (ALBERO BINARIO DI RICERCA) codice prodotto CHAR tipologia INT prezzo INT pezzi INT l’albero è ordinato per codice prodotto. 1 inserire il codice prodotto con dettagli all’interno dell’abr. 2 inserire la tipologia ed visualizzare tutti i dettagli contenenti la stessa tipologia. PROBLEMA nella 2 domanda perché invece di visualizzare tutti i codici prodotto con la stessa tipologia mi visualizza solamente la prima che ho inserito. AIUTO ..!! questo è il file sorgente: #include <stdio.h> #include <stdlib.h> #include <string.h> void flush (void); #define ABRVUOTO NULL #define STR 10 typedef struct{ char codice[STR]; unsigned int tipologia,pezzi,prezzo; }tipobaseabr; typedef struct nodoabr{ tipobaseabr info; struct nodoabr *leftchild,*rightchild; }*abr; typedef short boolean; boolean EMPTYABR(abr n){ return(n==ABRVUOTO); } void MAKENULLABR(abr *n){ *n=ABRVUOTO; } abr LEFTCHILD(abr n){ if(!EMPTYABR(n)) return(n->leftchild); } abr RIGHTCHILD(abr n){ if(!EMPTYABR(n)) return(n->rightchild); } tipobaseabr LABEL(abr n){ if(!EMPTYABR(n)) return(n->info); } boolean MEMBER(abr n,tipobaseabr x){ if(EMPTYABR(n)) return 0; if(!confrontaabr(n->info,x)) return 1; if(confrontaabr(n->info,x)>0) return MEMBER(n->leftchild,x); else return MEMBER(n->rightchild,x); } void INSERTABR(abr *n,tipobaseabr x){ if(EMPTYABR(*n)){ (*n)=(struct nodoabr *)malloc(sizeof(struct nodoabr)); (*n)->info=x; (*n)->leftchild = (*n) ->rightchild = ABRVUOTO; }else if(confrontaabr((*n)->info,x)>0)INSERTABR(&(*n)->leftchild,x); else if(confrontaabr((*n)->info,x)<0) INSERTABR(&(*n)->rightchild,x); } int confrontaabr(tipobaseabr a,tipobaseabr b){ return strcmp(a.codice,b.codice); } int confrontatipologia(tipobaseabr a,tipobaseabr b){ return (a.tipologia-b.tipologia); } void Leggistringa(char s[],unsigned short dim){ unsigned short i; for(i=0;(s[i]=getchar())!='\n' && i<dim-1;i++); s[i]='\0'; if(i==dim-1) flush(); } unsigned int INDICE(tipobaseabr x,unsigned int n){ unsigned int i,s=0; for(i=0;x.codice[i]!= '\0' ;i++) if(x.codice[i]>='0' && x.codice[i]<='9') s += x.codice[i]; return(s%n); } void allocazione(abr **n,unsigned int x){ *n=(abr *)malloc(x*sizeof(abr)); } void inserimentoprodotto(tipobaseabr *x){ printf("\nInserimento codice prodotto:"); Leggistringa(x->codice,STR); } void inserimentodettagli(tipobaseabr *x){ printf("\nInserisci la tipologia:"); scanf("%u",&x->tipologia); flush(); printf("\nNumero di pezzi:"); scanf("%u",&x->pezzi); flush(); printf("\nPrezzo prodotto:"); scanf("%u",&x->prezzo); flush(); } void inserimentotipologia(tipobaseabr *x){ printf("\nInserisci la tipologia:"); scanf("%u",&x->tipologia); flush(); } void INSERIMENTO_PRODOTTO(abr *n,tipobaseabr); void VISUALIZZA_DETTAGLI(abr n); boolean DETTAGLI(abr n,tipobaseabr x); abr * archivio; main(){ unsigned int i,scelta,n,index; tipobaseabr prodotto; do{ printf("\nInserisci la dimensione del vettore:"); scanf("%u",&n); flush(); }while(n<2); allocazione(&archivio,n); for(i=0;i<n;i++) MAKENULLABR(archivio + i); do{ printf("\n---ESAME 18-02---"); printf("\n1inserimento prodotto"); printf("\n2infromazione prodotto dalla tipologia"); printf("\n3fine"); printf("\nscelta--->"); scanf("%u",&scelta); flush(); switch(scelta){ case 1: inserimentoprodotto(&prodotto); index = INDICE(prodotto,n); INSERIMENTO_PRODOTTO(archivio+index,prodotto); break; case 2: inserimentotipologia(&prodotto); if(!DETTAGLI(*archivio,prodotto)) printf("\ntitolo non trovato."); break; } }while(scelta<3); } void flush(void){ while(getchar()!='\n'); } void INSERIMENTO_PRODOTTO(abr *n,tipobaseabr x){ if(MEMBER(*n,x)) printf("\nIl codice inserito e' gia' in archivio."); else { inserimentodettagli(&x); INSERTABR(n,x); } } void VISUALIZZA_DETTAGLI(abr n){ if(!EMPTYABR(n)) printf("\nCodice prodotto:%s",n->info.codice); printf("\nNumero pezzi:%u",n->info.pezzi); printf("\nPrezzo prodotto:%u",n->info.prezzo); } boolean DETTAGLI(abr n,tipobaseabr x){ if(EMPTYABR(n)) return 0; if(!confrontatipologia(n->info,x)){ VISUALIZZA_DETTAGLI(n); return 1; } if(confrontatipologia(n->info,x)>0) return DETTAGLI(n->leftchild,x); else return DETTAGLI(n->rightchild,x); } |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jun 2008
Città: Torino
Messaggi: 118
|
lol?
queste cose noi non le facciamo.
__________________
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:58.



















