Funzione per ordinare un vettore

di il
1 risposte

Funzione per ordinare un vettore

Buongiorno a tutti, devo creare una funzione che ordina un vettore di numeri, e mette nella prima parte gli elementi minori o uguali a 50 e nella seconda parte quelli maggiori, e poi testarla in un main. Non posso usare vettori di supporto.
io ho pensato a questa soluzione, ma qualcosa non funziona e non saprei proprio come risolvere, penso che l'errore sia nella chiamata della funzione:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100
int separa(int vett[], int numEl);

int main(){

FILE*fp;

if((fp=fopen("cinquanta.txt", "w"))==NULL)
	printf("Errore");
int vettore[MAX];
int i=0;
int numero;
while(fp!= EOF){
	fscanf(fp, "%d", &numero);
	vettore[i]=numero;
	i++;
	}
int lunghezza;
lunghezza=sizeof(vettore)/sizeof("%d");

separa( vettore[MAX], lunghezza);
for(i=0; i<lunghezza; i++)
	printf("%d", vettore[i]);


}

int separa(int vett[], int numEl){
int i, minori, maggiori, scambio,trovato;
printf("Quanti numeri vuoi inserire?");
scanf("%d", &numEl);

minori=0;
maggiori=0;
for(i=0; i<numEl; i++){
	printf("Elemento %d: ", i+1);
	scanf("%d", &vett[i]);
	if(vett[i]<=50)
		minori++;
	else
		maggiori++;
	}
for(i=0; i<numEl; i++){
	if(vett[i]>50 && i<= minori){
	trovato=0;
	int j;
	for(j=minori; j<numEl && trovato==0; j++){
			if(vett[j]<=50){
			
			scambio=vett[i];
			vett[i]=vett[j];
			vett[j]=scambio;
			trovato=1;
			}
	
		}
	}
}

}

1 Risposte

  • Re: Funzione per ordinare un vettore

    Al di la dell'algoritmo che vuoi utilizzare e del funzionamento o meno della relativa implementazione, stai facendo un gran pasticcio nella suddivisione in sottoproblemi.
    La funzione separa() sostanzialmente fa tutto, ovvero il caricamento dei dati e il loro ordinamento; inoltre nel main() questi dati vengono caricati da disco, quali dati vuoi utilizzare???
    Ti suggerisco di ripartire da zero, implementando tre funzioni
    a) carica_dati() che carica il vettore da disco, da inserimento utente oppure anche con un vettore fisso (per debugare); la funzione deve ritornare il numero di elementi effettivamente caricati
    b) la funzione separa() che esegue il procedimento, e che come primo step potresti decidere di non farle fare niente
    c) una stampa_dati() che riceve il vettore e il numero di elementi e li stampa a video
    Il main() deve risultare qualcosa del tipo
    int vettore[MAX];
    int ndati;
    ndati=carica_dati(vettore,MAX);
    separa(vettore,ndati);
    stampa(vettore,ndati);
    Compilando ed eseguendo il programma dovresti ottenere la stampa dei dati caricati; ottenuto ciò puoi pensare di andare avanti, diversamente no.
Devi accedere o registrarti per scrivere nel forum
1 risposte