Ciao a tutti, è il mio primo post nel forum, spero di non scrivere troppe vaccate .
Volevo chiedere se qualcuno avesse la pazienza di capire e spiegarmi cosa ci sia di sbagliato in questo codice.
L'esercizio da svolgere richiede che si legga da standard input una sequenza di numeri (diversi tra loro) terminata da uno 0, e che si salvi in un array ordinato numericamente. Ogni volta che viene letto un intero bisogna scorrere l'array per trovare la sua posizione adatta, e far scorrere i numeri già memorizzati. Per comodità assumo che la sequenza sia lunga massimo 10 numeri.
E' un po' che ci sbatto la testa, ed ho provato un po' di soluzioni diverse (tutte fallite ), quindi scusatemi se il codice è confuso e molto poco elegante; provo ad aggiungere più commenti possibile.
#include<stdio.h>
int main (void){
int a[10], n, cont=0, i, j, k, flag=0; /* cont è il contatore di elementi inseriti; flag serve per evitare di inserire 2 volte il valore in a[] */
printf("Inserire la sequenza di numeri (massimo 10 elementi, per terminare inserire '0'): ");
do{
scanf("%d", &n);
if(n!=0){
if(cont=0){ //inserisco il primo elemento in testa
a[0]=n;
flag=1;
}
else { //
for(i=0; i<cont; i++){ // scorro a[] alla ricerca della posizione corretta
if(n<a[i]){ // cerco il primo numero in a[] da scalare, insieme ai successivi
for(j=cont-1; j>=i: j--){ //a partire dall'ultimo elemento faccio scalare gli elementi
a[j+1]=a[j];
}
a[i]=n;
flag=1;
break; //ferma il ciclo for di 'i'
}
}
}
if(flag=0)
a[cont]=n;
cont++;
flag=0; // azzero flag per il prossimo elemento
} while(n!=0);
for(k=0; k<=cont; k++) //stampo l'array
printf("%d\n", a[k]);
}