Stampa Vettore inverso

di il
9 risposte

Stampa Vettore inverso

Ho un problema con il seguente programma.La traccia è questa:

Scrivere un programma che data una sequenza di interi la stampi al contrario, allocando la memoria necessaria
in modo dinamico attraverso l’uso della funzione malloc.
L’input è dato da un intero n e da una sequenza di n numeri; basta una sola chiamata di malloc per allocare un vettore di dimensione n.

Ho provato a risolverlo in questo modo ma mi stampa valori a caso.Penso che l'errore sia nell'ultimo ciclo for ma ,nonostante le modifiche,continua
a non funzionare.


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n,*a; //Indice per il ciclo,numero di elementi,puntatore usato come array

    printf("\nInserisci il numero di elementi della sequenza:  ");
    scanf("%d",&n);

    a=(int *) malloc(n *sizeof(int)); //alloco dinamicamente il vettore

    if(a==NULL){                        //controllo
        printf("\nAllocazione fallita\n");
        exit(EXIT_FAILURE);
    }

    printf("\nInserisci %d caratteri numerici: ",n
           );
    for(i=0; i<n; i++){                             //Inserisco uno alla volta i caratteri
        printf("\nInserisci il prossimo carattere: ");
        scanf("%d",&a[i]);
        }

    printf("\nIl vettore stampato in ordine inverso e': \n"); //Ciclo per stampare il vettore inverso

    for(i=n; i>0; i--){
        printf("%d",a[i]);
    }

    free(a); //Libero la memoria allocata
    return 0;
}



9 Risposte

  • Re: Stampa Vettore inverso

    Innanzitutto ti consiglio di stampare i valori nell'ordine naturale e verifica che sia tutto corretto.
    poi ci aggiungi in ogni riga la stampa dell'indice (i) oltre all'elemento (a).
    a questo punto riprova a stampare in ordine inverso e tutto ti sarà più chiaro.
  • Re: Stampa Vettore inverso

    Ti sei concentrato sulla malloc ma hai dimenticato come funzionano gli array in c
  • Re: Stampa Vettore inverso

    candaluar ha scritto:


    Innanzitutto ti consiglio di stampare i valori nell'ordine naturale e verifica che sia tutto corretto.
    poi ci aggiungi in ogni riga la stampa dell'indice (i) oltre all'elemento (a).
    a questo punto riprova a stampare in ordine inverso e tutto ti sarà più chiaro.

    Grazie mille,ho capito ora.Avevo impostato il ciclo con i=n e non con i=n-1.
    Grazie ancora

    Ti sei concentrato sulla malloc ma hai dimenticato come funzionano gli array in c

    Oregon scusami cosa vuoi dire? E' sbagliato usare un puntatore in questo modo?
  • Re: Stampa Vettore inverso

    Intendevo proprio che hai usato n al posto di n-1 ... e il ciclo deve comprendere 0 come ultimo indice
  • Re: Stampa Vettore inverso

    Un'ultima cosa,nell'allocazione dinamica,al posto di *a che è una variabile di tipo puntatore avrei potuto utilizzare anche
    un vettore,ad esempio a[n]? Quella era la mia idea,però non si conosce a priori il numero di elementi che devono essere inseriti
    dall'utente.
  • Re: Stampa Vettore inverso

    In che senso? Devi usare un puntatore, che alla fine si comporta come un array, ma devi usare un puntatore.
  • Re: Stampa Vettore inverso

    Ad esempio se dichiaro un vettore,lo chiamo vett (è giusto un esempio) con 20 elementi" int vett[20]"

    vett[20]=(int *) malloc(20 *sizeof(int))

    è sbagliata?
  • Re: Stampa Vettore inverso

    Sbagliatissimo
  • Re: Stampa Vettore inverso

    Ok,grazie mille
Devi accedere o registrarti per scrivere nel forum
9 risposte