Vai al contenuto





Zoro

[C] Trovare Elementi Dispari O Uguali A 0 In Un Array E Spostarli

Recommended Posts

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 da Zoro

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti


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 da leotech

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

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?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Ospite
Rispondi a questa discussione...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Crea Nuovo...

Info

Per offrirti il miglior servizio possibile il sito utilizza cookies, anche di terze parti e profilazione. Utilizzando il sito acconsenti al loro impiego. Privacy Policy Termini di utilizzo