Ciao a tutti, questo è il mio problema:
premetto: uso visual studio 2010 (lo so è come usare un carrarmato x una zanzara ma mi trovo bene, e visto che lo ho installato x f#nn vedo perchè non usarloDefinire una procedura ricorsiva dividi che, dati una lista di interi positivi l e un intero positivo val, suddivide la lista l in due liste: la prima contiene tutti gli elementi di l che sono multipli di val e l'altra contiene tutti gli elementi di l che non sono multipli di val. Il prototipo della procedura è: void dividi(Lista_int l, int val, Lista_int *pl1, Lista_int *pl2) dove l è la lista da suddividere e *pl1 e *pl2 sono le liste ottenute come output.
Utilizzare le seguenti definizioni di tipo, da non consegnare:
typedef struct elem_i {
int val;
struct elem_i *next;
} Elem_int;
typedef Elem_int *Lista_int;)
oltre al fatto che non capisco l'uso di Lista_int *pl1, Lista_int *pl2 non posso non deferenziarle?? (visto che ho:typedef Elem_int *Lista_int; che già deferenzia??)
comunque io ho scritto questo codice ma non va crasha senza alcuna spiegazione, da test effettuati presumo crashi quando faccio pl1->val=l->val;
sapreste dirmi perchè si rifiuta di funzionare??? anche se faccio un semplice pl1->val=5;
insomma il problema è come gestisco pl1 (e di conseguenza immagino pl2)
grazie a tutti
il mio codice:
eventuale main se volete testarlo... penso sia ok solo un po ridondante...codice:void dividi(Lista_int l, int val, Lista_int pl1, Lista_int pl2) { if(l==NULL) { pl1=pl2=l; //return??; } else { if ((l->val % val)==0) {//crea lista pl1 if (pl1==NULL) { pl1==(Lista_int)malloc(sizeof(Lista_int)); pl1->val =l->val; } else { pl1->next=(Lista_int)malloc(sizeof(Lista_int)); pl1=pl1->next; pl1->val =l->val; } printf("prova: \n"); } else {//crea lista pl2 if (pl2==NULL) { pl2==(Lista_int)malloc(sizeof(Lista_int)); pl2->val =l->val; } else { pl2->next=(Lista_int)malloc(sizeof(Lista_int)); pl2=pl1->next; pl2->val =l->val; } } //avanza e riparti l=l->next; dividi(l,val,pl1,pl2); } }
codice:#include "stdafx.h" #include <stdlib.h> typedef struct elem_i { int val; struct elem_i *next; } Elem_int; typedef Elem_int *Lista_int; void dividi(Lista_int l, int val, Lista_int pl1, Lista_int pl2); int _tmain(int argc, _TCHAR* argv[]) { int n,i, val; Lista_int lista,l2,pl1,pl2; printf("quante informazione si vogliono inserire?"); scanf("%d",&n); if(n==0) lista=NULL; else { lista=(Lista_int)malloc(sizeof(Lista_int)); printf("inserire informazione 1: "); scanf("%d", &lista->val); l2=lista; for(i=2; i<=n;i++) { l2->next=(Lista_int)malloc(sizeof(Lista_int)); l2=l2->next; printf("inserisci l'info n%d: ",i); scanf("%d", &l2->val); } l2->next=NULL; } l2=lista; printf("\nlista inizio\n"); while(l2!=NULL) { printf("%d",l2->val); printf("--> "); l2=l2->next; } printf("NULL"); l2=lista; pl1=NULL; pl2=NULL; val=2; dividi(lista,val,pl1,pl2); l2=lista; printf("\nlista 0\n"); while(l2!=NULL) { printf("%d",l2->val); printf("--> "); l2=l2->next; } printf("NULL"); l2=pl1; printf("\nlista 1\n"); while(l2!=NULL) { printf("%d",l2->val); printf("--> "); l2=l2->next; } printf("NULL"); l2=pl2; printf("\nlista 2\n"); while(l2!=NULL) { printf("%d",l2->val); printf("--> "); l2=l2->next; } printf("NULL"); return 0; }

)
Rispondi quotando
