Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] ordinamento per selezione

    questo è il codice

    codice:
    #include <stdio.h>
    #define dim 10
    
    int main(){
        
        int a[dim];
        int i, j, imin, temp, b, n;
        
        printf("inserire dimensioni vettore = ");
        scanf("%d", &n);
        
        for(i=0;i<n;i++){
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
        }
        
        for(i=0;i<n-1;i++){
        imin=i;
               for(j=i+1;j<n;j++){
               if(a[imin]>a[i])
               imin=j;
               temp=a[i];
               a[i]=a[imin];
               a[imin]=temp;
               
              }
        }
        for(i=0;i<n;i++)
        printf("%d ", a[imin]);
        
        
        
       system("pause");
       return 0;
    }
    sono un paio di giorni che lo rivedo per cercare l'errore ma niente...mi sfugge sicuramente qualcosa....impostato così, il programma non mi restituisce l'array ordinato ma la penultima cifra da me inserita ripetuta tante volte quante sono le celle dell'array, deicse all'inizio dell'esecuzione...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Il fatto che ti stampi sempre lo stesso numero è dovuto al ciclo di stampa con un errore abbastanza evidente

    codice:
    for (i = 0; i < n; i++)
        printf("%d ", a[imin]);
    sono sicuro che lo vedi :)

    Per il resto, c'è qualcosa che non va nell'algoritmo. Rivedi come fai l'aggiornamento dell'indice del minimo. Considera anche che lo scambio tra l'elemento a[i] e a[imin] va fatto solo *dopo* la conclusione del ciclo for interno, e non ad ogni sua iterazione, quindi sistema meglio le parentesi graffe.
    every day above ground is a good one

  3. #3
    codice:
    for(i=0;i<n-1;i++){
        imin=i;
               for(j=i+1;j<n;j++){
               if(a[imin]>a[j])
               imin=j;
               }
        temp=a[i];
        a[i]=a[imin];
        a[imin]=temp;
         
        }
        for(i=0;i<n;i++)
        printf("%d ", a[i]);  //assurdo...altro che evidente, era bello grosso
    eccolo qui....ora funziona....questi errori mi demoralizzano, sopratutto quando sei avanti ad uno schermo per ore e poi ti arriva la notizia che stai dormendo visto che la soluzione è così semplice....GRAZIE MILLE....

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Skass89
    questi errori mi demoralizzano
    Non ti abbattere, di errori così se ne commettono a miliardi, soprattutto quando si studia.

    Approfitto per consigliarti uno stile di indentazione più decente: migliorare la leggibilità del codice è un ottimo modo per individuare subito errori di scrittura (come puo essere un imin in luogo di i, che non è dovuto certamente ad ignoranza) o di indentazione (come parentesi graffe messe dove non ci devono stare). Dai uno sguardo agli stili di indentazione, in particolare al K&R, e in generale allo stile di programmazione.
    every day above ground is a good one

  5. #5
    YuYevon grazie, sei molto gentile...mi metto subito in lettura...chissà forse riesco diminuire i fissamenti con bocca aperta avanti a qusto schermo grazie ancora...siete stati una bella scoperta!!! spero di non rompervi fino a dopo capodanno quindi nel caso fosse vero TANTISSIMI AUGURI E BUON INIZIO!!!!

  6. #6
    Tra parentesi, credo che, soprattutto per un principiante, sia più chiaro lo stile di indentazione ANSI (o Allman).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.