No, allora portresti spiegarmi meglio, poichè vorrei capire bene...
Nella funzione di lettura del vettore dim la inserisco come puntatore. Poi?
No, allora portresti spiegarmi meglio, poichè vorrei capire bene...
Nella funzione di lettura del vettore dim la inserisco come puntatore. Poi?
Certo, dato che nella funzione lettura chiedi il valore con la scanf.
E nelle altre funzioni così come è passata, per valore.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Quindi se nella funzione di lettura inserisco la dim come puntatore in automatico il valore che inserisco come dim rimane anche per le altra unzioni poichè il valore viene memorizzato in memoria per tutta la durata del programma e non solo quando viene chiamata dico bene?
Però questo mica risolve il problema del main che ho risolto con typedef giusto?
Ovviamente la variabile dim va nel main.
Il typedef non risolve alcun problema. Il codice precedente non aveva problemi con l'array.
No MP tecnici (non rispondo nemmeno!), usa il forum.
In che senso la ariabile dim va nel main?
Il problema che mi sorgeva con questo programma era che nel main dovevo dichiarare il vettore in questo modo "int vettore[grandezza]" ma la grandezza che inserivo per dichiarare il vettore poteva non essere uguale a quella inserita dall'utente.
Facendo in questo modo con questo codice, ho risolto la discrepanza tra la dimensione prefissata e quella scelta dall'utente. Anche se questo mi ha risolto il problema solo formalmente.codice:#include <stdio.h> #include <stdlib.h> #define max 30 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void leggi_v (int v1[], int v2[], int dim) { int i; printf ("Inserisci gli elementi del vettore 1:\n"); for (i=0; i<dim; i++) { printf ("Elemento %d: ", i+1); scanf ("%d", &v1[i]); } printf ("Inserisci gli elementi del vettore 2:\n"); for (i=0; i<dim; i++) { printf ("Elemento %d: ",i+1); scanf ("%d", &v2[i]); } } void stampa_v (int v1[], int dim) { int i; printf ("Il mio vettore sara' composto dai seguenti numeri \n"); for (i=0; i<dim; i++) { printf ("Elemento n.%d: %d\n", i+1, v1[i]); } } void stampa_v_diff (int v3[], int dim) { int i; printf ("Il mio vettore differenza sara' composto dai seguenti numeri \n"); for (i=0; i<dim; i++) { printf ("Elemento n.%d: %d\n", i+1, v3[i]); } } void check_v (int v1[], int v2[], int dim) { int vero = false; int i=0; for (i=0; i<dim; i++) { if (v1[i] > v2[i]) vero = true; else vero = false; } if (vero) printf ("Gli elementi del vettore1 sono maggiori degli elementi del vettore2\n\n\n"); else printf ("Gli elementi del vettore1 NON sono tutti maggiori degli elementi del vettore2\n\n\n"); } void calcola_diff (int v1[], int v2[], int v3[]) { int i; for (i=0; i<10; i++) { v3[i] = v1[i]-v2[i]; } } typedef int vet1[max]; typedef int vet2[max]; typedef int vet3[max]; int main() { vet1 v1; vet2 v2; vet3 v3; int dim; int vero = false; int i; printf ("Inserisci il numero di elementi dei vettori: "); scanf ("%d", &dim); leggi_v (v1,v2,dim); stampa_v (v1,dim); stampa_v (v2,dim); check_v (v1,v2,dim); for (i=0; i<dim; i++) { if (v1[i] > v2[i]) vero = true; else vero = false; } if (vero) { calcola_diff (v1,v2,v3); stampa_v_diff (v3,dim); } else return (0); }
Infatti quando dichiari un vettore all'inizo del main la dimensione che gli dai crea uno spazio in memoria tale a accogliere elementi fino a quella dimensione, quindi se avrei dichiarato il vettore "int vett[100]" Nel vettore potevano andarci max 100 elementi. Il problema era che dopo la combinazione quando l'utente inseriva la dim del vettore e gli elementi, nel programma uscivano gli elementi inseriti ad esempio (1 , 2 , 7 , 9) e il resto tutti 0 fino ad arrivare a 100 elementi. Questo l'ho risolto con il typedef come scritto nel codice ma non so perchè.
Vedo che non hai fatto quanto ti ho suggerito e che non hai compreso ... Forse più avanti lo farai ma non ho più tempo da impiegare inutilmente ...
Devi comprendere quello che fai, se non sai a cosa serve la typedef non usarla.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Questo codice quì era quello scritto in precedenza, ora l'ho cambiato seguendo quello che mi ha conisgliato.
La mia domanda era solo rivolta a sapare cosa cambia ai fini delle compilazione e del funzionamento del programma questo codice che avevo scritto e quello con le correzioni.
Per quanto riguarda il typedef la professoressa cel'ha spiegata per utilizzarla in questo modo....
Io cerco solo di capire al meglio il linguaggio C per giostrare con le funioni senza vincoli Poichè a breve ho l'esame e voglio cercare di dare il massimo.
Io ho inserito dim come puntatore, ma nel main mi da un errore e non passa alla compilazione.
codice:#include <stdio.h> #include <stdlib.h> #define max 30 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void leggi_v (int v1[], int v2[], int *dim) { int i; printf ("Inserisci gli elementi del vettore 1:\n"); for (i=0; i<*dim; i++) { printf ("Elemento %d: ", i+1); scanf ("%d", &v1[i]); } printf ("Inserisci gli elementi del vettore 2:\n"); for (i=0; i<*dim; i++) { printf ("Elemento %d: ",i+1); scanf ("%d", &v2[i]); } } void stampa_v (int v1[], int dim) { int i; printf ("Il mio vettore sara' composto dai seguenti numeri \n"); for (i=0; i<dim; i++) { printf ("Elemento n.%d: %d\n", i+1, v1[i]); } } void stampa_v_diff (int v3[], int dim) { int i; printf ("Il mio vettore differenza sara' composto dai seguenti numeri \n"); for (i=0; i<dim; i++) { printf ("Elemento n.%d: %d\n", i+1, v3[i]); } } void check_v (int v1[], int v2[], int dim) { int vero = false; int i=0; for (i=0; i<dim; i++) { if (v1[i] > v2[i]) vero = true; else vero = false; } if (vero) printf ("Gli elementi del vettore1 sono maggiori degli elementi del vettore2\n\n\n"); else printf ("Gli elementi del vettore1 NON sono tutti maggiori degli elementi del vettore2\n\n\n"); } void calcola_diff (int v1[], int v2[], int v3[]) { int i; for (i=0; i<10; i++) { v3[i] = v1[i]-v2[i]; } } typedef int vet1[max]; typedef int vet2[max]; typedef int vet3[max]; int main() { vet1 v1; vet2 v2; vet3 v3; int *dim; int vero = false; int i; printf ("Inserisci il numero di elementi dei vettori: "); scanf ("%d", &dim); leggi_v (v1,v2,*dim); stampa_v (v1,dim); stampa_v (v2,dim); check_v (v1,v2,dim); for (i=0; i<dim; i++) { if (v1[i] > v2[i]) vero = true; else vero = false; } if (vero) { calcola_diff (v1,v2,v3); stampa_v_diff (v3,dim); } else return (0); }
Ti ho detto che deve essere "passata" per puntatore non che deve essere un puntatore !
No MP tecnici (non rispondo nemmeno!), usa il forum.