PDA

Visualizza la versione completa : [C] Funzione di controllo dell'effettivo ordine crescente


matteo martis
17-12-2010, 10:34
Ciao!!

ho creato una pagina c che inseriti dieci numeri li ordina mediante l'algoritmo del selection sort in modo crescente.

prevista una funzione che controlli l'eventuale caso in cui l'ordine crescente sia raggiunto in anticipo: d problemi perch fa bloccare subito l'algoritmo.
Grazie!


#include <stdio.h> #define size 10

/* questo il main del programma in cui si chiamano le tre funzioni per prendere in input, ordinare un array e farci una ricerca */

void input(int [], int);
void selectsort(int [], int);
void printarray(int[], int);
char orderer(int[], int);
main()
{
int numeri[size];

input(numeri,size);
selectsort(numeri,size);
system("PAUSE");
} /*fine main*/

/* inizio funzione input*/
void input(int vet[], int dim)
{ int i;

for(i=0; i<dim; i++)
{
printf("\n\n inserisci l'elemento numerico numero %d \n\n", i+1);

scanf("%d", &vet[i]);
} printarray(vet,dim);

} /* fine della funzione di input */

/* inizio della funzione di selectionsort */
void selectsort(int vet[], int dim)
{

int i, j, p, min; char flag ='d'; /* inizio doppio ciclo di for alla base del selection sort */ for(i=0; i<(dim-1) && flag == 'd'; i++)
{ /* preset min */ min = vet[i]; for(j=i;j<dim; j++) { /* ricerca del consueto minimo */ if(min > vet[j]) { min = vet[j]; p=j; } else { if(min==vet[j]) { p=j; } } /* fine ricerca minimo*/ } /* scambio di posizioni nel caso il min non sia gi memorizzato nella posizione giusta inizio */ if(p!=i) { vet[p] = vet[i]; vet[i] = min; } /* scambio di posizioni fine*/ flag = orderer(vet, dim); } /* fine doppio ciclo */ /* stampa dell'array selection ordinato*/ printarray(vet,dim); } /* stampa un array inizio*/ void printarray(int vet[], int dim) { int i; printf("\n\n"); for(i=0; i<dim; i++) { printf("%d\t", vet[i]); } printf("\n\n"); } /* stampa un array fine*/ /* inizio funzione per il controllo dell'ordine degli elementi */ char orderer(int vet[], int dim) { int i, j; char ret='d'; printf(" controllo se per caso l'ordine e' arrivato prima del tempo"); for(i=0 ; i<dim; i++) { j= i+1; if(vet[i]>vet[j]) { ret = 'o'; } } return ret; } /* fine funzione per il controllo dell'ordine degli elementi */

ramy89
17-12-2010, 11:00
Non mettere tutto su una riga,fa male agli occhi :zizi:

matteo martis
17-12-2010, 11:07
chiedo scusa

ramy89
17-12-2010, 18:45
Puoi sistemare anche le ultime righe?

Loading