Sicuramente ci sono dei problemi qui:
codice:
for(i=0; i<=(N*N)-1; i++) {
for(j=i++; j<=(N*N)-1; j++)
if(ar[i ]==ar[j])
flag=1;
if(ar[i ]!=ar[j])
flag=0;
}
- scrivi j=i++ quando probabilmente intendi j=i+1; le due cose sono molto diverse: j=i++ fa sì che a j venga assegnato i e poi i venga incrementato di 1 (quindi fai due errori: j parte "indietro di uno" e i viene incrementato quando non dovrebbe); al contrario, j=i+1 "fa partire" j l'elemento dopo quello corrente.
- il for ripete solo l'istruzione che lo segue, per cui il tuo blocco di codice di fatto è:
codice:
for(i=0; i<=(N*N)-1; i++) {
for(j=i++; j<=(N*N)-1; j++) {
if(ar[i ]==ar[j])
flag=1;
}
if(ar[i ]!=ar[j])
flag=0;
}
che ovviamente non è quello che intendevi; per ovviare al problema, usa le graffe correttamente (qui correggo anche il j=i++):
codice:
for(i=0; i<=(N*N)-1; i++) {
for(j=i+1; j<=(N*N)-1; j++) {
if(ar[i ]==ar[j])
flag=1;
if(ar[i ]!=ar[j])
flag=0;
}
}
o, anche più chiaro:
codice:
for(i=0; i<=(N*N)-1; i++) {
for(j=i+1; j<=(N*N)-1; j++) {
if(ar[i ]==ar[j])
flag=1;
else
flag=0;
}
}
Nota però che il programma così è ancora sbagliato: ad ogni iterazione flag viene sovrascritto, per cui se l'ultima coppia esaminata è uguale all'uscita del ciclo flag rimarrà impostato a zero. Per ovviare a questo problema, ti basta impostare flag a 1 quando individui duplicati e non impostarlo mai a zero in seguito. Dato poi che, una volta che hai individuato una coppia di duplicati, il tuo lavoro è finito, puoi anche uscire con un break subito dopo aver impostato flag a 1:
codice:
for(i=0; i<=(N*N)-1; i++) {
for(j=i+1; j<=(N*N)-1; j++)
{
if(ar[i ]==ar[j])
{
flag=1;
break;
}
}
}