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

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti alla nostra comunità. È facile!

Crea un nuovo account

Accedi

Sei già iscritto? Accedi qui.

Accedi Ora

  • Statistiche forum

    528010
    Discussioni Totali
    6327876
    Risposte Totali
  • Statistiche Utenti

    121690
    Utenti totali
    14120
    Record utenti online
    NeroCavi
    Nuovo iscritto
    NeroCavi
    Iscritto
  • Statistiche annunci

    83
    Annunci attivi
    12
    Domande
    0
    Recensioni
    0
    Offerte
    Ultimi Annunci
    By Windowsvista
    mese e 29 giorni
×