PDA

Visualizza la versione completa : [C/C++]: Coda composita


Il Pazzo
19-09-2006, 13:02
Ho fatto la ricerca nel forum e non ho trovato nulla....
Ho fatto questa coda composita:

typedef struct servizio{
int numero;
int stato; //0 libero, 1 occupato
union{
int richiesta;
int posizione;
int tempo;
servizio *succ;
} coda;
servizio *next;
} posta;

void inizializza();

void main{
posta *sportello=NULL;
inizializza();
}

void inizializza(){
int i;

for(i=0;i<5;i++){
sportello->numero = i+1;
sportello->stato = 0;
sportello=sportello->next;
}
sportello=NULL;

C'è qualche errore da qualche parte? è esatta l'inizializzazione (a me preoccupa solo se l'accesso alla locazione successiva è esatto)? come faccio ad accedere a "richiesta" ora?

Grazie.

Il Pazzo
19-09-2006, 13:08
si ap arte gli errori di sintassi... vedi le () dopo il main... e il passaggio di parametri (inesistente) che ho corretto così:

prototipo e funzione:
void inizializza(posta *sportello)

chiamata di funzione:
inizializza(sportello);

Mi riferisco a errori logici... grazie ancora...

Ho corretto il main così:

void main(){
posta *sportello=NULL, *primo=NULL;
primo=sportello;
inizializza(sportello);
sportello=primo;
while(sportello!=NULL){
cout<<sportello->numero;
sportello=sportello->next;
}
}

quando faccio partire il programma però mi compare la finestrella di windows che dice "inviare" "non inviare"...

Il Pazzo
20-09-2006, 12:20
Ho aggiornato il programma così.. però senza successo...


#include<iostream.h>


typedef struct servizio{
int numero;
int stato; //0 libero, 1 occupato
union{
int richiesta;
int posizione;
int tempo;
servizio *succ;
} coda;
servizio *next;
} posta;




void inizializza(posta *sportello);




void main(){
posta *sportello;
sportello=NULL;

inizializza(sportello);

// while(sportello!=NULL){
cout<< sportello->numero;
// sportello=sportello->next;
//}
}




void inizializza(posta *sportello){
posta *temp;
int i;

for(i=0;i<5;i++){
sportello = new posta;
sportello->numero = i+1;
sportello->stato = 0;
sportello =sportello->next;

}
//sportello=NULL;
}

Samuele_70
20-09-2006, 14:21
Prova così :


#include <iostream.h>

typedef struct servizio
{
int numero;
int stato; //0 libero, 1 occupato
union
{
int richiesta;
int posizione;
int tempo;
servizio *succ;
} coda;
servizio *next;
} posta;

posta *inizializza( int postaNum)
{
posta *first = new posta, *tmp = first;

for( int i=0; i<postaNum; i++)
{
tmp->numero = i+1;
tmp->stato = 0;
tmp->next = new posta;
tmp = tmp->next;
}
tmp->next=NULL;

return first;
}

int main()
{
posta *sportello = inizializza( 5 );

while(sportello->next!=NULL)
{
cout<<"Sportello "<<sportello->numero<<endl;
sportello=sportello->next;
}
return 0;
}

Il Pazzo
20-09-2006, 18:27
Ahhhh grazie mille... è da ieri che lottavo per inizializzare qulla cosa...
e infine... penso che da come ho dichiarato la lista... dovrebbe essere una lista composita..
quindi dal mio raginamento penso che in teoria ogni nodo (che qui si chiama sportello) sia collegato al nodo successivo e a una lista.... come faccio ad accedere alla lista?

Se ho fatto giusto (e se ho capito quello che ho fatto) la lista interna dovrebbe essere di tipo coda.... ma che nome ha?

In breve.. il mio problema è come faccio ad inserire la "richiesta" ????

Samuele_70
20-09-2006, 19:24
Originariamente inviato da Il Pazzo
Ahhhh grazie mille... è da ieri che lottavo per inizializzare qulla cosa...
e infine... penso che da come ho dichiarato la lista... dovrebbe essere una lista composita..
[...]

Osservando la definizione della struttura posta, con più attenzione noto delle 'anomalie',


typedef struct servizio
{
int numero;
int stato; //0 libero, 1 occupato
union
{
int richiesta;
int posizione;
int tempo;
servizio *succ;
} coda;
servizio *next;
} posta;

Il puntatore ad un elemento di tipo 'servizio' all'interno della union è inutile (va bene invece la next),
in effetti la stessa union sembra superflua, sicuro che sia necessaria ?

Il Pazzo
20-09-2006, 20:07
si in pratica nel libro che ho io.. c'è scritto che sta cosa qui è una lista composita... nel libro mi fa vedere la dichiarazione della lista (che in pratica ho copiato cambiando però i nomi)... poi dice "L'implementazione delle funzioni primitive (inserimento in testa, cancellazoine, inserimento in coda, etc... ) non presentano particolari difficoltà"...

mah!?!?! il cavolo non rappresentano nessuna difficoltà.. per me ste liste (anche le più semplici ) sono un tabù assoluto...

Nel programma di sviluppo che usa effettivamente quando scrivo "tmp->" mi compare una piccola finestrella dove sono riportati i componenti della struttura, fra cui c'è coda... però non riesco a fare nulla quando scrivo "tmp->coda".. non la riesco ad inizializzare a NULL... a un intero... niente.. boh...

Samuele_70
20-09-2006, 21:11
Forse stai saltando un pò di tappe, dovresti fare pratica con programmi più semplici :zizi:

Comunque nel tuo esempio puoi accedere all'intero richiesta così :

sportello->coda.richiesta = 333

Il Pazzo
20-09-2006, 21:45
non è la stessa cosa di scrivere


sportello->coda->richiesta?


si lo so.. ma volevo provare a darmi un esame all'uni.. ma sicuramente non ci arrivo più... pensavo fossero più semplici.. a guardarle non sembrao così complesse

Samuele_70
20-09-2006, 21:59
Originariamente inviato da Il Pazzo
non è la stessa cosa di scrivere
sportello->coda->richiesta?


No, non è la stessa cosa, dato la union (all'interno della struttura) è allocata dinamicamente,
(dall'operatore new) mentre la variabile di tipo int richiesta no.

Loading