Funzioni

di il
5 risposte

Funzioni

Salve a tutti.. ho un problemino con questo esercizio: "Scrivere la funzione di immissione della sequenza in modo che dopo aver effettuato l inizializzazione dell arrey, esso venga ordinato." ci saranno una miriade di errori, potreste correggermelo con i vari commentini accanto? In modo che posso capire dove ho sbagliato! #include <stdio.h>
#define N 100
int vettore[N];
void ordinamento(int);

int main()
{
int i, n;
do { printf("Quanti elementi del vettore vuoi inserire? ");
scanf("%d", &n);
getchar();
}
while(n<1 || n>N);

for(i=0; i<n; i++)
{ printf("Inserisci l elemento %d del vettore: ", i+1);
scanf("%d", &vettore);
}

void ordinamento(aux);

printf("Il tuo vettore ordinato e': ", vettore[n]);

}

void ordinamento(int aux);
{
int i, j, aux;
for(j=0; j<n-1; j++)
for(i=0; i<n-1; i++)
if(vettore>vettore[i+1])
{aux = vettore; vettore = vettore[i+1]; vettore[i+1]= aux;
}

}

5 Risposte

  • Re: Funzioni

    Troppi cicli inutili.
    controlla la funzione ordinamento (che in realtà è l'ordinamento tramite l'algoritmo bubblesort).
    
    #include <stdio.h>
    #include <stdlib.h>
    #define N 100
    
    int vettore[N];
    
    void ordinamento(int n, int *);
    
    int main()
    {
    int i, n;
    
    printf("Quanti elementi del vettore vuoi inserire? ");
    scanf("%d", &n);
    
    for(i=0; i<n; i++)
    { 
    	printf("Inserisci l elemento %d del vettore: ", i+1);
    	scanf("%d", &vettore[i]);
    }
    ordinamento(n,vettore);      //devi far capire al programma principale che deve fare quella funzione!!
    
    }
    
    void ordinamento(int n, int *vettore)       //Algoritmo Bubblesort
    {
    int i, j, aux;
    for(j=0; j<n-1; j++)
    	for(i=0;i<n-1; i++)
    	{ 
    	 if(vettore[i]>vettore[i+1])    //se inverti maggiore con < l'ordinamento viene invertito
    	 {
    	  aux=vettore[i]; 
    	  vettore[i]=vettore[i+1]; 
    	  vettore[i+1]=aux;
    	 }
    	}
    
    printf("Il tuo vettore ordinato e': "); 
    for(i=0; i<n; i++)
    {
    printf("[%d] ", vettore[i]);
    }
    printf("\n");
    }
  • Re: Funzioni

    
    #include <stdio.h>
    #define N 100
    
    int vettore[N];
    
    void ordinamento(int);   //DEVI PASSARE ALLA FUNZIONE SIA LA n E SIA IL VETTORE SE NO CHE TI ORDINA??
    
    int main()
    {
    int i, n;
    do {	printf("Quanti elementi del vettore vuoi inserire? ");  //IL CICLO DO È INUTILE PER LA PRINTF PERCHÈ DEVI PRENDERE UNA VARIABILE SINGOLA 
    scanf("%d", &n);
    getchar();         //GETCHAR?? HAI GIA USATO LA SCANF! INOLTRE GETCHAR NON PRENDE UN NUMERO 
    }
    while(n<1 || n>N);            // UN CICLO CHE SERVE PER...?
    
    for(i=0; i<n; i++)
    { printf("Inserisci l elemento %d del vettore: ", i+1);
    scanf("%d", &vettore[i]);
    }
    
    void ordinamento(aux);   //GIÀ CORRETTO SOPRA
    
    printf("Il tuo vettore ordinato e': ", vettore[n]);
    
    }
    
    void ordinamento(int aux);
    {
    int i, j, aux;
    for(j=0; j<n-1; j++)
            for(i=0; i<n-1; i++) 
                 if(vettore[i]>vettore[i+1])
                {
                  aux = vettore[i]; 
                  vettore[i] = vettore[i+1]; 
                  vettore[i+1]= aux;
                }
    
    }
  • Re: Funzioni

    Grazie mille.. ma non è che sapete darmi un sito dove spiega bene bene le funsioni? Non le capisco!!!!
  • Re: Funzioni

    Però, se posso contraddirti, il vettore ordinato non va! ci sarà qualcosa di sbagliato
  • Re: Funzioni

    Il C mette a disposizione la funzione qsort con la quale è possibile ordinare praticamente di tutto con delle buone prestazioni. Nel caso di un vettore potresti fare così:
    
    #include <stdio.h>
    #include <stdlib.h>
    #define N 5
    
    typedef int (*ptr) (const void *, const void *);
    
    int cmp(int *a, int *b)
    {
    return (*a-*b);
    }
    
    int main()
    {
    int vett[N]={30,578,-34,28,1};
    int i;
    for(i=0;i<N;i++)
        printf("%d\n",vett[i]);
    puts("Dopo l'ordinamento:");
    qsort(vett,N,sizeof(int),(ptr)cmp);
    for(i=0;i<N;i++)
        printf("%d\n",vett[i]);
    return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte