Zoro Inviato 12 Settembre 2016 Segnala Condividi Inviato 12 Settembre 2016 Salve a tutti, Avrei un dubbio per quanto riguarda un programmino.Questo è il codice: #include <stdio.h> #include <stdlib.h> #define max 30 void leggi_v (int v1[], int *dim) { int i; printf ("Inserire gli elementi del vettore: \n\n"); for (i=0; i<*dim; i++) { printf ("Elemento %d: ", i+1); scanf ("%d", &v1[i]); } } void stampa_v (int v1[], int dim) { int i; printf ("Il vettore sara' composto dai seguenti elementi \n"); for (i=0; i<dim; i++) printf ("Elemento n.%d: %d\n", i+1, v1[i]); } void check_v (int v1[], int dim) { int i; int contatore = 0; for (i=0; i<dim; i++) { if ((v1[i]%2) == 1 || v1[i] == 0) { contatore++; } } if (contatore < dim) { printf ("Il vettore non contiene solo numeri dispari o pari a 0\n"); } if (contatore == dim) { printf ("Apposto"); } } typedef int vet1[max]; int main(){ vet1 v1; int dim; printf ("Inserire il numero di elementi del vettore: "); scanf ("%d", &dim); leggi_v (v1, &dim); stampa_v (v1, dim); check_v (v1, dim); } Come da titolo questo programma dovrebbe ricevere dall'utente un vettore di numeri interi, controllare se al suo interno sono presenti numeri dispari o pari a 0 e ordinarlo in modo che tutti i dispari siano a sinistra e gli zeri a destra.Per esempio:v{1,0,9,0,7,15}, il vettore ha elementi dispari o uguali a 0, v_ordinato{1,9,7,15,0,0} Non saprei davvero come completare la funzione di ordina_vettore... qualche consiglio? Link al commento Condividi su altri siti Altre opzioni di condivisione...
leotech Inviato 16 Settembre 2016 Segnala Condividi Inviato 16 Settembre 2016 La funzione per ordinare il vettore deve funzionare se nell'array ci sono solo numeri dispari e 0 o anche nel caso in cui ci siano i numeri pari? Link al commento Condividi su altri siti Altre opzioni di condivisione...
Zoro Inviato 16 Settembre 2016 Autore Segnala Condividi Inviato 16 Settembre 2016 Nel caso ci siano numeri pari il programma deve terminare. Link al commento Condividi su altri siti Altre opzioni di condivisione...
leotech Inviato 18 Settembre 2016 Segnala Condividi Inviato 18 Settembre 2016 Eccoti il codice, ho apportato alcune modifiche a quello che avevi postato tu (ho aggiunto il return 0 alla funzione main che mancava e ho spostato la creazione dell'array v1 dopo la selezione della dimensione per evitare di occupare più memoria inutilmente. Spero di esserti stato utile #include <stdio.h> #include <stdlib.h> void leggi_v (int v1[], int *dim) { int i; printf ("Inserire gli elementi del vettore: \n\n"); for (i=0; i<*dim; i++) { printf ("Elemento %d: ", i+1); scanf ("%d", &v1[i]); } } void stampa_v (int v1[], int dim) { int i; printf ("Il vettore sara' composto dai seguenti elementi \n"); for (i=0; i<dim; i++) printf ("Elemento n.%d: %d\n", i+1, v1[i]); } void ordina_vettore(int v1[], int dim) { int temp = 0; int i = 0; int j = 0; int numeri = 0; int zeri = 0; for(int k = 0; k < dim; k++) { if(v1[k] == 0) { zeri++; } else if(v1[k] != 0) { numeri++; } } int array_numeri[numeri]; int array_zeri[zeri]; for(int k = 0; k < dim; k++) { if(v1[k] == 0) { array_zeri[i] = v1[k]; i++; } else if(v1[k] != 0) { array_numeri[j] = v1[k]; j++; } } for(i = 0; i < numeri; i++) { for(j = 0; j < numeri - i - 1; j++) { if(array_numeri[j] > array_numeri[j + 1]) { temp = array_numeri[j]; array_numeri[j] = array_numeri[j + 1]; array_numeri[j + 1] = temp; } } } for(i = 0; i < numeri; i++) { v1[i] = array_numeri[i]; } for(j = i; j < dim; j++) { v1[j] = array_zeri[j - i]; } } void check_v (int v1[], int dim) { int i; int contatore = 0; for (i=0; i<dim; i++) { if ((v1[i]%2) == 1 || v1[i] == 0) { contatore++; } } if (contatore < dim) { printf ("Il vettore non contiene solo numeri dispari o pari a 0\n"); } if (contatore == dim) { printf ("Ok\n"); ordina_vettore(v1, dim); printf("Vettore ordinato:\n\n"); for(int i = 0; i < dim; i++) { printf("Elemento %d: %d\n", i + 1, v1[i]); } } } int main(){ int dim; printf ("Inserire il numero di elementi del vettore: "); scanf ("%d", &dim); int v1[dim]; leggi_v (v1, &dim); stampa_v (v1, dim); check_v (v1, dim); return 0; } Link al commento Condividi su altri siti Altre opzioni di condivisione...
Zoro Inviato 18 Settembre 2016 Autore Segnala Condividi Inviato 18 Settembre 2016 Ora lo studio un poco e cerco di capire dove e cosa ho sbagliato. Grazie mille.Una domanda veloce: perchè il main ha bisogno di return(0)? Ne ha sempre bisogno? Link al commento Condividi su altri siti Altre opzioni di condivisione...
leotech Inviato 18 Settembre 2016 Segnala Condividi Inviato 18 Settembre 2016 Prego Il return 0, senza le parentesi, serve ad indicare al sistema operativo che il programma è stato eseguito correttamente. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.