Problema selection sort

Messaggioda michele1239 » 20/02/2017, 10:19

Ragazzi buongiorno,
a marzo dovrei fare l'esame di elementi di informatica e avrei dei problemi con l'allocazione dinamica in particolare un esercizio mi chiede di ordinare la diagonale principale di una array bidimensionale in modo crescente questo è il mio programma:
void ordinamento(int mat[][max],int dim)
{
int pos;
int temp;
int min;
int i;
int j;
for(i=0;i<dim;i++){
min=mat[i][i];
pos=i;
for(j=i+1;j<dim;j++){
if(mat[j][j]<min){
mat[j][j]=min;
pos=j;
}
}
temp=mat[i][i];
mat[i][i]=mat[pos][pos];
mat[pos][pos]=temp;

}
chiaramente a monte del mio programma ho definito la costante max;
il programma non dà problemi di compilazione ma quando vado ad inserire la matrice

1 1

1 -5

dovrebbe stampare a video la matrice:


-5 1

1 1
invece stampa a video la matrice
1 1


1 1
Qualcuno puo' aiutarmi ?ho controllato anche la soluzione e non noto differenze con il mio programma.
Grazie mille per la disponibilità.
michele1239
Starting Member
Starting Member
 
Messaggio: 2 di 32
Iscritto il: 11/12/2016, 15:05

Re: Problema selection sort

Messaggioda Albesa81 » 20/02/2017, 11:04

michele1239 ha scritto:Qualcuno puo' aiutarmi ?ho controllato anche la soluzione e non noto differenze con il mio programma.

Sei sicuro? Prova ad eseguire quel codice tu con carta e penna.
Albesa81
Junior Member
Junior Member
 
Messaggio: 81 di 341
Iscritto il: 21/12/2010, 12:02

Re: Problema selection sort

Messaggioda michele1239 » 20/02/2017, 11:43

l'ho controllare una ventina di volte cercando delle differenze,ma non ne trovo (anche se ci sono visto che la soluzione funziona)
potresti dirmi dove sbaglio?
michele1239
Starting Member
Starting Member
 
Messaggio: 3 di 32
Iscritto il: 11/12/2016, 15:05

Re: Problema selection sort

Messaggioda Albesa81 » 20/02/2017, 11:47

Il libro potrebbe avere errori di stompa, cerca invece l'errore nel tuo codice. :-)
Albesa81
Junior Member
Junior Member
 
Messaggio: 82 di 341
Iscritto il: 21/12/2010, 12:02

Re: Problema selection sort

Messaggioda michele1239 » 20/02/2017, 11:49

potresti darmi un indizio su dove potrebbe essere l'errore?
michele1239
Starting Member
Starting Member
 
Messaggio: 4 di 32
Iscritto il: 11/12/2016, 15:05

Re: Problema selection sort

Messaggioda insideworld » 20/02/2017, 12:10

potrebbe anche essere un problema di indici. prova con una matrice 3x3 o 4x4 e vedi cosa succede.
se usi codeblocks puoi fare i debug ed eseguirlo passo passo
Avatar utente
insideworld
Junior Member
Junior Member
 
Messaggio: 52 di 306
Iscritto il: 13/01/2017, 15:24

Re: Problema selection sort

Messaggioda mide » 20/02/2017, 12:23

Non l'ho provato, ma ad occhio l'errore potrebbe essere qui
michele1239 ha scritto:
Codice:
  if(mat[j][j]<min){
            mat[j][j]=min;
            pos=j;



perchè nel tuo esempio sostituisci mat[j][j](che è uguale a -5) con il minimo (min=mat[i][i]=1) perdendo quindi il valore -5. Perciò lo scambio successivo con la variabile pos=j la fai tra 1 e 1.
mide
Junior Member
Junior Member
 
Messaggio: 30 di 344
Iscritto il: 27/01/2017, 23:08

Re: Problema selection sort

Messaggioda michele1239 » 20/02/2017, 12:29

mide ha scritto:Non l'ho provato, ma ad occhio l'errore potrebbe essere qui
michele1239 ha scritto:
Codice:
  if(mat[j][j]<min){
            mat[j][j]=min;
            pos=j;



perchè nel tuo esempio sostituisci mat[j][j](che è uguale a -5) con il minimo (min=mat[i][i]=1) perdendo quindi il valore -5. Perciò lo scambio successivo con la variabile pos=j la fai tra 1 e 1.


come dovrei modificare il codice?
michele1239
Starting Member
Starting Member
 
Messaggio: 5 di 32
Iscritto il: 11/12/2016, 15:05

Re: Problema selection sort

Messaggioda michele1239 » 20/02/2017, 12:33

posto la soluzione del professore, io non trovo differenze con il mio codice(sarò cieco?!?!?)

//funzione che ordina la diagonale principale
void ordinaDiagonale(int mat[][MAXNUM], int dim) {
int temp, min;
int i, j, pos;
for(i=0; i<dim; i++) {
min=mat[i][i];
pos=i;
for (j=i+1;j<dim;j++){
if (mat[j][j]<min) {
min=mat[j][j];
pos=j;
}
}
temp=mat[i][i];
mat[i][i]=mat[pos][pos];
mat[pos][pos]=temp;
}
}
michele1239
Starting Member
Starting Member
 
Messaggio: 6 di 32
Iscritto il: 11/12/2016, 15:05

Re: Problema selection sort

Messaggioda Albesa81 » 20/02/2017, 12:38

michele1239 ha scritto:(sarò cieco?!?!?)

No, semplicemente non hai riletto il tuo codice, altrimenti avresti notato quell'assegnamento invertito. :-)
Albesa81
Junior Member
Junior Member
 
Messaggio: 83 di 341
Iscritto il: 21/12/2010, 12:02

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite