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

    [C] Funzione swap

    Ciao a tutti!
    Sto realizzando una semplice funzione di swap che scambi due numeri contenuti in un array (sto provando ad utilizzare i puntatori, è questo che mi dà problemi).
    Il codice è questo:

    codice:
    void swap(int *pa, int *pb){
         int papp;
         papp=*pa;
         *pa=*pb;
         *pb=papp;
         }
    e la chiamata è questa:
    codice:
    swap(&v[i],&v[min]);
    La compilazione è a posto; se eseguo il programma, invece, spunta un errore di Windows che mi avvisa di un crash del file che ho chiamato "es1".
    A quanto pare il crash succede solo se metto il primo numero uguale alla grandezza dell'array...

    Qualcuno saprebbe dirmi cosa succede?
    Grazie VVoVe:

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,469

    Re: [C] Funzione swap

    Originariamente inviato da Lasentinella
    A quanto pare il crash succede solo se metto il primo numero uguale alla grandezza dell'array...
    Cioe'? Questa frase non e' chiara ...

    Dato che l'errore non e' nella funzione swap ma nel resto del programma, devi mostrare quello che manca ...

  3. #3
    Ecco il programma:
    codice:
    #define MAX_LEN 100
    #include <stdio.h>
    #include <conio.h>
    void leggi_vettore(int *v, int n);
    void stampa_vettore(int *v, int n);
    void selsort(int *v, int n);
    int pos_min(int *v, int from, int to);
    void swap(int *pa, int *pb);
    int main(void)
    {
        int x[MAX_LEN];
        int len;
        printf("Lunghezza del vettore: ");
        scanf("%d", &len);
        leggi_vettore (x,len);
        selsort(x,len);
        stampa_vettore(x,len);    
        getch();
    }
     
     void leggi_vettore(int *v, int n){
          int i;
          for(i=0;i<n;i++){
            printf("Inserisci il %d numero: ",i);
            scanf("%d",&v[i]);
          }
    }
          
     void stampa_vettore(int *v, int n){
          int i;
          for(i=0;i<n;i++)
          printf("%d",v[i]);
     }
    
    void selsort(int *v, int n){
         int i, min, app;
         for(i=0;i<n;i++){
         swap(&v[i],&v[pos_min(v,i,n)]);
         }
    }
    
    int pos_min(int *v, int from, int to){
        int i, min=from;
        for(i=from;i<to-1;i++){
          if(v[i]<v[min])
            min=i;
        }
        return min;
    }
    
    void swap(int *pa, int *pb){
         int papp;
         papp=*pa;
         *pa=*pb;
         *pb=papp;
         }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,469
    Penso che le funzioni da correggere siano queste

    codice:
    void selsort(int *v, int n){
         int i;
         for(i=0;i<n;i++)
    	swap(&v[i],&v[pos_min(v,i,n)]);
    }
    
    int pos_min(int *v, int from, int to){
        int i, min=from;
        for(i=from+1;i<to;i++){
          if(v[i]<v[min])
            min=i;
        }
        return min;
    }

  5. #5
    Corretto e funziona perfettamente
    Grazie Oregon !

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.