PDA

Visualizza la versione completa : [C] Verificare l'ordinamento di un vettore


.:DarkSkull:.
17-07-2011, 19:03
Ciao a tutti! Sto facendo un programma che controlla se un array di interi ha gli elementi pari disposti in ordine crescente e gli elementi dispari disposti in ordine decrescente. Ho scritto questo codice, ma a quanto pare non riesce ha uscire dal primo ciclo.


#include <stdio.h>

int main()
{
int i,j,ris;
int V[]={1,5,2,4,3,3,4,2,5,1};
ris=-1;

for(i=0;i<10;i+2)
{
for(j=i+2;j>i;j-2)
{
if(V[j]>V[i])
ris=0;
else
ris=1;
}

}
if(ris==0)
printf("Gli elementi pari del vettore sono ordianti in ordine crescente\n");
else
printf("Gli elementi pari del vettore non sono ordianti in ordine crescente\n");
ris=-1;
for(i=1;i<10;i+2)
{
for(j=i+2;j>i;j-2)
{
if(V[j]<V[i])
ris=0;
else
ris=1;
}
}
if(ris==0)
printf("Gli elementi dispari del vettore sono ordianti in ordine decrescente\n");
else
printf("Gli elementi dispari del vettore non sono ordianti in ordine decrescente\n");

return 0;
}

oregon
17-07-2011, 21:07
Nella prima for, secondo te

i+2

cosa fa ? Pensaci bene ...

.:DarkSkull:.
18-07-2011, 12:10
Si sposta di due elementi no?

oregon
18-07-2011, 12:11
Originariamente inviato da .:DarkSkull:.
Si sposta di due elementi no?

No

.:DarkSkull:.
23-07-2011, 10:05
Ho modificato i+2 con i+=2... Però non fa quello che dovrebbe il programma... suggerimenti?

Dark867
23-07-2011, 10:21
Sbagli proprio a livello di concetto, supponi di avere un array fatto così
3 2 1 2 4
ed esegui il tuo algoritmo: avrai ke gli el pari sn ordinati!
Questo xke 3<1 fa diventare la tua ris=1, ma 1<4 la fa tornare a 0! Devi settare l'algoritmo in modo che "basta una vola sola ke gli el nn sn in ordine ke ris diventa 1 e c resta x sempre!"...pensa tu a cm fare (suggerimento: or)

oregon
23-07-2011, 11:16
Originariamente inviato da .:DarkSkull:.
Ho modificato i+2 con i+=2... Però non fa quello che dovrebbe il programma... suggerimenti?

Non ho detto che quello fosse l'unico problema, ma sicuramente era un errore ...

Magari valuta questo pezzo di codice



ris=-1;
for(i=0; i<8; i+=2)
for(j=i+2; j>i; j-=2)
if(V[j]>V[i])
ris=0;

.:DarkSkull:.
23-07-2011, 12:45
Adesso il programma funziona... anche se non ho usato nessun "or" come suggeriva Dark867.
Ecco il codice:


#include <stdio.h>

int main()
{
int i,j,ris;
int V[]={1,5,2,4,3,3,4,2,5,1};
ris=0;

for(i=0;i<8;i+=2)
{
for(j=i+2;j>i;j-=2)
{
if(V[j]<V[i])
ris=1;
}

}
if(ris==0)
printf("Gli elementi pari del vettore sono ordinati in ordine crescente\n");
else
printf("Gli elementi pari del vettore non sono ordianti in ordine crescente\n");
ris=0;
for(i=1;i<8;i+=2)
{
for(j=i+2;j>i;j-=2)
{
if(V[j]>V[i])
ris=1;
}
}
if(ris==0)
printf("Gli elementi dispari del vettore sono ordianti in ordine decrescente\n");
else
printf("Gli elementi dispari del vettore non sono ordianti in ordine decrescente\n");

return 0;
}

oregon
23-07-2011, 12:51
Hai usato praticamente il codice che ti ho suggerito ... hai invertito il significato della variabile res (non so perché) ma hai anche invertito < e > e quindi va bene ...

Dark867
23-07-2011, 14:10
Si va bene anke così.

Loading