Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    Funzione potenza con puntatori, non stampa ultimo valore

    Il titolo è abbastanza esplicativo
    Sto facendo un esercizio con i puntatori. Prendo in input una serie di interi e poi voglio stampare, per ogni intero, il suo elevamento al quadrato.
    Però se inserisco, per esempio, dimensione 4, mi stampa le potenze dei primi 3 numeri e l'ultimo no. Stessa cosa per dimensioni diverse. Mi stampa tutte le potenze tranne l'ultimo e non riesco a capire il perchè.
    Avevo provato a fare la funzione potenza in modo ricorsivo, ma non ci sono riuscito , mi dava lo stesso errore però, quindi se riesco a capire dove sbaglio provo a rifarla , poi ho letto in una discussione qui sul forum che la funzione potenza è meglio farla iterativa, visto che la ricorsiva non presenta grandi vantaggi.
    Comunque, questo è il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void potenza(int *p, int dim){
        int i;
        for(i=0; i<dim; i++){
            p[i]=p[i]*p[i];
        }
    }
    
    int main(){
        int *p, i, dim;
    
        printf("Inserisci la dimensione del vettore: ");
        scanf("%d", &dim);
    
        p=(int *)malloc(dim*sizeof(int));
    
        printf("Inserisci un numero:\n");
        for(i=0; i<dim-1; i++){
            scanf("%d ", (p+i));
        }
    
        potenza(p, dim);
    
        printf("Numeri elevati a potenza:\n");
        for(i=0; i<dim-1; i++){
            printf("%d ", *(p+i));
        }
    
        system("PAUSE");
    }
    Qualche suggerimento?
    Tra l'altro ho un dubbio teorico: in questo esercizio uso un array di puntatori giusto? Visto che faccio l'allocazione dinamica. O forse ho detto una castroneria?

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    for(i=0; i<dim; i++){
            scanf("%d ", (p+i));
    
    ...
    for(i=0; i<dim; i++){
            printf("%d ", *(p+i));
    Hai fatto la funzione quadrato.Ogni numero viene elevato al quadrato.
    Non usi un array di puntatori, usi un puntatore tramite il quale allochi dinamicamente un array di interi.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da ramy89
    codice:
    for(i=0; i<dim; i++){
            scanf("%d ", (p+i));
    
    ...
    for(i=0; i<dim; i++){
            printf("%d ", *(p+i));
    Hai fatto la funzione quadrato.Ogni numero viene elevato al quadrato.
    Non usi un array di puntatori, usi un puntatore tramite il quale allochi dinamicamente un array di interi.
    Io infatti quello volevo fare. Non ho capito l'errore che mi hai segnalato però..

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da goatboy
    Io infatti quello volevo fare. Non ho capito l'errore che mi hai segnalato però..
    Non ti stampava l' ultimo valore perché il for usciva quando i<dim-1 non era verificato.
    Ma condizione doveva essere i<dim, altrimenti l' ultimo non te lo stampa perché quando i=n-2 incrementa i ed esce dal ciclo, senza eseguirlo ulteriormente.

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da ramy89
    Non ti stampava l' ultimo valore perché il for usciva quando i<dim-1 non era verificato.
    Ma condizione doveva essere i<dim, altrimenti l' ultimo non te lo stampa perché quando i=n-2 incrementa i ed esce dal ciclo, senza eseguirlo ulteriormente.
    Però adesso se metto dimensione 4 , ne inserisco 5 (0,1,2,3,4) e me ne stampa 4..

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Se dim vale 4, è normale che te ne stampa 4.
    Il problema sarà sicuramente la pulitura del buffer, ecco perché ti chiede 5 valori anziché 4.
    Pulisci il buffer di input:

    codice:
    printf("Inserisci un numero:\n");
        for(i=0; i<dim-1; i++){
            scanf("%d ", (p+i));
            while(getchar()!=10)
                ;
        }

  7. #7
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da ramy89
    Se dim vale 4, è normale che te ne stampa 4.
    Infatti la perplessità era sul fatto che me ne chiedesse 5, non che me ne stampasse 4

    Ho provato a mettere fflush(stdin) prima del ciclo for con la scanf, ma non cambia nulla.

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Fai vedere il codice così come lo compili.

  9. #9
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Ecco qua.. ho tolto la fflush(stdin) perchè non cambiava nulla..

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void potenza(int *p, int dim){
        int i;
        for(i=0; i<dim; i++){
            p[i]=p[i]*p[i];
        }
    }
    
    int main(){
        int *p, i, dim;
    
        printf("Inserisci la dimensione del vettore: ");
        scanf("%d", &dim);
    
        p=(int *)malloc(dim*sizeof(int));
    
        printf("Inserisci un numero:\n");
        for(i=0; i<dim; i++){
            scanf("%d ", (p+i));
        }
    
        potenza(p, dim);
        printf("Numeri elevati a potenza:\n");
        for(i=0; i<dim; i++){
            printf("%d ", *(p+i));
        }
    
        system("PAUSE");
    }

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void potenza(int *p, int dim){
        int i;
        for(i=0; i<dim; i++){
            p[i]=p[i]*p[i];
        }
    }
    
    int main(){
        int *p, i, dim;
    
        printf("Inserisci la dimensione del vettore: ");
        scanf("%d", &dim);
    
        p=(int *)malloc(dim*sizeof(int));
    
        printf("Inserisci un numero:\n");
        for(i=0; i<dim; i++){
            scanf("%d ", (p+i));
            while(getchar()!=10)
                ;
        }
    
        potenza(p, dim);
        printf("Numeri elevati a potenza:\n");
        for(i=0; i<dim; i++){
            printf("%d ", *(p+i));
        }
    }
    E' probabile che sei su linux, allora la fflush non funzionava, oppure non sei su linux e la mettevi nella posizione sbagliata (cioè prima della scanf e non dopo).

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.