Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C] bubble sort con puntatore

    solito problema dei puntatori...non riesco ad impostare la funzione scambia con il puntatore per poi essere richiamata nel main dentro l'algoritmo del bubble...per fare lo scambio dei 2 valori del vettore....me la dareste la solita dritta? N.B. naturalmente il prgramma così va in crash


    codice:
    #include <stdio.h>
    #define dim 100
    
    void scambia (int *x[], int n);
    
    int main(){
        
        int i, j;
        int max;
        int n;
        int a[dim];
        
        printf("dimensioni vettore (max %d) = ", dim);
        scanf("%d", &n);
        
        for(i=0;i<n;i++){
                         printf("a[%d] = ", i);
                         scanf("%d", &a[i]);
                         }
        
        j=i;
        
        for(i=0;i<n-1;i++){
           for(j=0;i<n-1-i;j++){
               if(a[j]>a[j+1]){
                 scambia(&a[j], &a[j+1]);
                 }
          }
        }
    for(i=0;i<n;i++)
    printf("%d", a[i]);    
    
    system("pause");
    return 0;
    }
        
    void scambia (int *x[], int n){
         int temp;
         int i;
    
         
         temp=*x[i];
         *x[i]=*x[i+1];
         *x[i+1]=temp;
    }

  2. #2
    Buongiorno.. , qundo chiami la funzione scambia nel main:
    codice:
    scambia(&a[j], &a[j+1]);
    passi alla funzione i due puntatori ai due elementi..
    Devi solo modificare
    codice:
    void scambia (int *x[], int n)
    Non devi passare il puntatore all'array e la dimensione di questo..Devi passare i puntatori ai due elementi.(ovviamente devi poi modificare le azioni della funzione scambia)..
    Facci sapere

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [C] bubble sort con puntatore

    EDIT: aggiungo qualcosa al post di ignaziodeblasi

    Originariamente inviato da Skass89
    N.B. naturalmente il prgramma così va in crash
    In realtà non vedo come la sola compilazione possa andare a buon fine, ancora prima che l'esecuzione. La funzione scambia l'hai dichiarata come

    codice:
    void scambia (int *x[], int n);
    ma poi la richiami così:

    codice:
    scambia(&a[j], &a[j+1]);
    Chiediti quella funzione cosa deve avere in input e tu cosa gli stai passando...

    Un paio di consigli: la funzione la devi dichiarare così:

    codice:
    void scambia (int *x, int *y);
    (i nomi dei parametri possono essere chiaramente diversi, quello che conta è il loro tipo), mentre la chiamata va bene come l'hai scritta. Ora prova a definire il corpo della funzione.

    Un'altra cosa: ricontrolla sempre gli indici dei cicli, altrimenti rischi di invecchiare molto presto

    codice:
        for(i=0;i<n-1;i++){
           for(j=0;i<n-1-i;j++){
    codice:
        for (i = 0; i < n-1; i++) {
           for (j = 0; j < n-1-i; j++) {
    every day above ground is a good one

  4. #4
    @ YuYevon Non avevo guardato ancora gli indici, hai fatto bene a puntualizzare questa cosa..
    Volevo far far a Skass89 la dichiarazione e la modifica della funzione come prima cosa..

  5. #5

    Re: Re: [C] bubble sort con puntatore

    [b]

    Un'altra cosa: ricontrolla sempre gli indici dei cicli, altrimenti rischi di invecchiare molto presto

    codice:
        for(i=0;i<n-1;i++){
           for(j=0;i<n-1-i;j++){
    codice:
        for (i = 0; i < n-1; i++) {
           for (j = 0; j < n-1-i; j++) {
    ahia! proprio sfuggito...queste cose mi preoccupano!

    -------------------------------------------------------------------

    ma dai!!!! nooooooooo!!!! era caXXataaaaaaaaa!!!!!!!!!! che odio è da ieri sera che ci pensavo....me lo sono sognato anche stanotte

    codice:
    #include <stdio.h>
    #define dim 100
    
    void scambia (int *x, int *y);
    
    int main(){
        
        int i, j;
        int max;
        int n;
        int a[dim];
        
        printf("dimensioni vettore (max %d) = ", dim);
        scanf("%d", &n);
        
        for(i=0;i<n;i++){
                         printf("a[%d] = ", i);
                         scanf("%d", &a[i]);
                         }
        
        j=i;
        
        for(i=0;i<n-1;i++){
           for(j=0;j<n-1-i;j++){
               if(a[j]>a[j+1]){
                 scambia(&a[j], &a[j+1]);
                 }
          }
        }
    for(i=0;i<n;i++)
    printf("%d", a[i]);    
    
    system("pause");
    return 0;
    }
        
    void scambia (int *x, int *y){
         int temp;
    
         
         temp=*x;
         *x=*y;
         *y=temp;
    }

  6. #6
    Si era molto semplice la cosa..devi stare più attento soprattutto agli indici..chiamali in modo diverso se ti viene meglio..

  7. #7
    si...ne ho parlato anche con oregon ieri...solo che questo era un programma che avevo abbandonato da qualche giorno, ma da ieri ho iniziato a cambiare i miei standard per gli indici..ad esempio come mi ha consigliato oregon invece della "i" metto "idx", perchè molto spesso la confondo con "1"...per la "j"???...direi che "jack" può andare bene....mi ricorda tanto il sabato sera...si è piacevole

  8. #8
    Anche idy se non ti confondi troppo

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Skass89
    da ieri ho iniziato a cambiare i miei standard per gli indici
    E per riprendere un vecchio discorso, non sarebbe male cambiare lo standard anche per l'indentazione. Non pensi che scritto così (ad esempio)

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define dim 100
    
    void scambia (int *x, int *y);
    
    int main(void)
    {
    	int i, j;
    	int n;
    	int a[dim];
    
    	printf("dimensioni vettore (max %d) = ", dim);
    	scanf("%d", &n);
    
    	for (i = 0; i < n; i++) {
    		printf("a[%d] = ", i);
    		scanf("%d", &a[i]);
    	}
    
    	for (i = 0; i < n-1; i++) {
    		for (j = 0; j < n-1-i; j++) {
    			if (a[j] > a[j+1]) {
    				scambia(a + j, a + j + 1);
    			}
    		}
    	}
    
    	for (i = 0; i < n; i++) {
    		printf("%d ", a[i]);
    	}
    
    	system("PAUSE");
    	return 0;
    }
    
    void scambia (int *x, int *y)
    {
    	int temp;
    
    	temp = *x;
    	*x = *y;
    	*y = temp;
    }
    il codice risulti un po' più leggibile?

    btw, al posto di &a[j] e &a[j+1] nella chiamata a scambia() ti ho scritto a + j e a + j + 1. Se ci ragioni un po', ti renderai conto che le scritture sono equivalenti (cioè: hanno lo stesso effetto) ma le tue sono ridondanti, iperboliche, pleonastiche, anafora con poliptoto. Inoltre, se proprio vuoi usare la funzione system() per bloccare l'esecuzione del tuo programma (e se cerchi in giro per il forum e magari il web troverai qualche milione di discussione in cui si sconsiglia di farlo, ma non chiedermi di riassumerne i motivi perché sarebbe inutile) includi l'header file stdlib.h, perché la system() è dichiarata lì. Si poteva anche eliminare la variabile max, inutilizzata.
    every day above ground is a good one

  10. #10
    Origiranriamente inviato da Yuyevon
    btw, al posto di &a[j] e &a[j+1] nella chiamata a scambia() ti ho scritto a + j e a + j + 1. Se ci ragioni un po', ti renderai conto che le scritture sono equivalenti (cioè: hanno lo stesso effetto) ma le tue sono ridondanti, iperboliche, pleonastiche, anafora con poliptoto. Inoltre, se proprio vuoi usare la funzione system() per bloccare l'esecuzione del tuo programma (e se cerchi in giro per il forum e magari il web troverai qualche milione di discussione in cui si sconsiglia di farlo, ma non chiedermi di riassumerne i motivi perché sarebbe inutile) includi l'header file stdlib.h, perché la system() è dichiarata lì. Si poteva anche eliminare la variabile max, inutilizzata.
    hai perfettamente ragione su tutto, sopratutto sull'indentazione. Per quanto riguarda "a + j e a + j + 1" anche se vorrei rifletterci non ci arriverei mai alla conclusione...è la prima volta che vedo una cosa del genere....sicuramente devo continuare gli studi...e se a te non pesa una spiegazione la gradirei molto...sai com'è....se mi capita di scriverlo all'esame commentando con il perchè di quella scrittura il punteggio aumenta e anche di molto perchè risulterebbe che il linguaggio l'ho approfondito "da solo". Invece il system() l'ho sempre usato anche senza include stlib.h e ha sempre funzionato...senza il system() la console si chiuderebbe prima di farmi vedere l'output! comunque cerco quella discussione mi intriga...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.