Zoro Segnala messaggio Inviato Settembre 12, 2016 (modificato) 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? Modificato Settembre 12, 2016 da Zoro Cita Condividi questo messaggio Link di questo messaggio Condividi su altri siti
leotech Segnala messaggio Inviato Settembre 16, 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? Cita Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Zoro Segnala messaggio Inviato Settembre 16, 2016 Nel caso ci siano numeri pari il programma deve terminare. Cita Condividi questo messaggio Link di questo messaggio Condividi su altri siti
leotech Segnala messaggio Inviato Settembre 18, 2016 (modificato) 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; } Modificato Settembre 18, 2016 da leotech Cita Condividi questo messaggio Link di questo messaggio Condividi su altri siti
Zoro Segnala messaggio Inviato Settembre 18, 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? Cita Condividi questo messaggio Link di questo messaggio Condividi su altri siti
leotech Segnala messaggio Inviato Settembre 18, 2016 Prego Il return 0, senza le parentesi, serve ad indicare al sistema operativo che il programma è stato eseguito correttamente. Cita Condividi questo messaggio Link di questo messaggio Condividi su altri siti