Oppure

Loading
15/02/10 20:24
matteog
ho provato ad implementare questo albero ma non mi funziona e mi dà i seguenti errori:
pp(66) : error C3861: 'trovadato': identifier not found
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(76) : error C2059: syntax error : '('
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(77) : error C2039: 'p' : is not a member of 'nodo'
1> c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(15) : see declaration of 'nodo'
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(77) : error C2232: '->nodo::info' : left operand has '' type, use '.'
1>c:\documents and settings\falco\documenti\visual studio 2008\projects\alberon\alberon\alberon.cpp(83) : error C3861: 'confrontadati': identifier not found
error C2050: switch expression not integral
error C2051: case expression not constant
error C3861: 'trovanodo': identifier not found
error C2051: case expression not constant
error C3861: 'trovanodo': identifier not found
warning C4060: switch statement contains no 'case' or 'default' labels
error C2664: 'stamparicorsiva' : cannot convert parameter 1 from 'dati' to 'nodo *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called


#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
struct campi
{
    int codice;
    char descrizione[20];
};
 typedef struct campi dati;
 struct nodo 
 {
    dati info;
    struct nodo *dx, *sx;
 };
 int  uguale=0;
int segue=1;
int precede=-1;
 
struct nodo *radice;
 
void operazione(char testata[]) {
    printf("\n%s\n",testata);
    return;
}
 
int confrontodati(dati dato1, dati dato2)
{
    int c;
    if(strcmp(dato1.descrizione,dato2.descrizione)==0) 
        c = uguale;
    else 
        c = segue;
    return c;
}
 
int leggidato(struct campi *D){
    int cod;
    printf("codice (0=fine): ");
   cin>>cod;
    if(cod !=0) {
        D->codice = cod;
        printf("descrizione: ");
        cin>>D->descrizione;
    }
    return cod;
}
 
void inizializza(void)
{
       radice= NULL;
       return;
}
 
struct nodo *generando(void)
{
    struct nodo *p = NULL;
    dati D;
    int fine;
    fine = leggidato(&D);
    while(fine != 0) 
    {  
		p=trovadato(D,p);
        fine = leggidato(&D);
    }
return p;
}
 
struct nodo *trovadato(dati dato, struct nodo *p)
{
    if(p==NULL)
	{
        p->(struct nodo *) malloc (sizeof(struct nodo));
        p->info = dato;
        p-> sx = NULL;
        p-> dx = NULL;
    }
    else 
	{
        switch(confrontadati(dato, p->info)) 
		{
            case precede:
                p->sx = trovanodo(dato, p->sx);
                break;
            case segue:
                p->dx = trovanodo(dato,p->dx);
                break;
        }
    }
    return p;
}
 
void stamparicorsiva(struct nodo*p)
{
    if (p!=NULL)
	{
        stamparicorsiva(p->sx);
        stamparicorsiva(p->info);
        stamparicorsiva(p->dx);
    }
    return;
}
 
void creaalbero(void)
{
    operazione ("inserimento dei dati");
    radice = generando();
    return;
}
 
void stampaalbero(void)
{
    operazione("stampa lista ordinata\n");
    printf("\n");
    return;
}

void main() 
{
    int scelta;
    inizializza();
    do
	{
        do
		{
            printf("\n --------------------------\n");
            printf("1.creazione albero");
            printf("2. stampa ordinata");
            printf("3.fine");
            printf("\n --------------------------\n");
            scanf("%d",&scelta);
        }
        while(scelta < 1 || scelta >2);
            switch (scelta)
			{
                case 1: 
                creaalbero();
                break;
                case 2:
                stampaalbero();
                break;
            }
     }
     while(scelta !=3);
}



Aiutatemi!!!!!!!!!
aaa
15/02/10 20:35
nessuno
Se devi usare la funzione trovadato prima di definirla, allora devi indicarne il prototipo all'inizio del tuo file sorgente.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
15/02/10 20:49
matteog
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
struct campi
{
    int codice;
    char descrizione[20];
};
 typedef struct campi dati;
 struct nodo 
 {
    dati info;
    struct nodo *dx, *sx;
 };
 struct nodo *trovadato(dati dato, struct nodo *p);
int  uguale=0;
int segue=1;
int precede=-1;
 
struct nodo *radice;
 
void operazione(char testata[]) {
    printf("\n%s\n",testata);
    return;
}
 
int confrontodati(dati dato1, dati dato2)
{
    int c;
    if(strcmp(dato1.descrizione,dato2.descrizione)==0) 
        c = uguale;
    else 
        c = segue;
    return c;
}
 
int leggidato(struct campi *D){
    int cod;
    printf("codice (0=fine): ");
   cin>>cod;
    if(cod !=0) {
        D->codice = cod;
        printf("descrizione: ");
        cin>>D->descrizione;
    }
    return cod;
}
 
void inizializza(void)
{
       radice= NULL;
       return;
}
 
struct nodo *generando(void)
{
    struct nodo *p = NULL;
    dati D;
    int fine;
    fine = leggidato(&D);
    while(fine != 0) 
    {  
		p=trovadato(D,p);
        fine = leggidato(&D);
    }
return p;
}
 
struct nodo *trovadato(dati dato, struct nodo *p)
{
    if(p==NULL)
	{
        p=(struct nodo *) malloc (sizeof(struct nodo));
		p->info = dato;
        p-> sx = NULL;
        p-> dx = NULL;
    }
    else 
	{
		switch(confrontodati(dato,p->info)) 
		{
            case -1:
                p->sx = trovadato(dato, p->sx);
                break;
            case 1:
                p->dx = trovadato(dato,p->dx);
                break;
        }
    }
    return p;
}
 
void stamparicorsiva(struct nodo*p)
{
    if (p!=NULL)
	{
        stamparicorsiva(p->sx);
        stamparicorsiva(p);
        stamparicorsiva(p->dx);
    }
    return;
}
 
void creaalbero(void)
{
    operazione ("inserimento dei dati");
    radice = generando();
    return;
}
 
void stampaalbero(void)
{
    operazione("stampa lista ordinata\n");
    printf("\n");
    return;
}

void main() 
{
    int scelta;
    inizializza();
    do
	{
        do
		{
            printf("\n --------------------------\n");
            printf("1.creazione albero");
            printf("2. stampa ordinata");
            printf("3.fine");
            printf("\n --------------------------\n");
            scanf("%d",&scelta);
        }
        while(scelta < 1 || scelta >2);
            switch (scelta)
			{
                case 1: 
                creaalbero();
                break;
                case 2:
                stampaalbero();
                break;
            }
     }
     while(scelta !=3);
}


lò corretto ma adesso non funziona niente tranne la costruzione o almeno sembra perchè?????
aaa
15/02/10 20:52
nessuno


Italiano questo sconosciuto ...

"L'ho corretto" ... almeno usiamo bene l'italiano se il C non lo si conosce ...

E poi che vuol dire "non funziona niente" ... ci sono altri errori in compilazione ? No ?

Allora dicci "cosa fai" esattamente quando esegui il programma, cosa ti aspetti e, invece, che risultati hai ...

Devi essere tu ad indicare i problemi, non noi a cercarli ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
15/02/10 20:55
matteog
allora scusate per l'italiano non mi ero accorto di quell'orrore!!!comunque non stampa niente quando premo due nel menù!non vi sono errori in fase di compilazione credo sia un problema limitato allafunzione stampa ma non sò dove si trova l'errore.La costruzione sembrerebbe funzionare invece.
aaa
15/02/10 21:00
nessuno
Scusami ... ci vedrò poco ma nella funzione stampaalbero non c'è nulla che possa servire a stampare l'albero ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
15/02/10 21:03
matteog
hai ragione
aaa
15/02/10 21:04
nessuno
Ma non l'hai scritto tu il programma? :-|
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.