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

    C++ Array Ordine Inverso

    Salve, un altra ricorsione questa volta almeno per me un po piu complessa dove provo a compilare ma non mi stampa l'array all'inverso.
    la traccia dice cosi:


    – Dato un vettore di interi, costruire (con una funzione ricorsiva) un secondo vettore che contiene gli
    stessi elementi del primo ma in ordine inverso.
    Esempio: se A = [1,2,3,4,5], il vettore costruito dovrà essere B = [5,4,3,2,1].*/
    codice:
    # include <iostream>
    using namespace std;
    
    bool costruzione (int [],int [], int ,int);
    void stampa (int []);
    const int n=5;
    int main ()
    {
    	int a[n]={1,2,3,4,5};
    	int b[n]={0};
    	
    	if (costruzione (a,b,4,0))
    	cout<<endl;
    	stampa (b);
    return 0;	
    }
    
    bool costruzione (int a[],int b[], int i, int j)
    {
    	if (i==n-1)
    	return true;
    	
    	if (a[i]!=b[j])
    	return false;
    	
    	
    	return costruzione (a,b,i-1,j+1);
    	
    	}
    void stampa (int b[])
    {
    	for (int j=0;j<n;j++)
    	cout<<b[j];
    	cout<<endl;
    	
    	
    	}

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59
    Ciao!!!

    Beh ci sono diverse imprecisioni, prima di tutto non capisco perché fai restituire un bool alla funzione, a cosa ti serve?

    Poi sempre nella funzione è sbagliato il passo base e anche il passo ricorsivo, non assegni mai al vettore b i valori del vettore a, quindi mi sembra normale che il programma non faccia quello che vuoi, come minimo un' assegnazione ci deve essere prova un po' a modificare il codice se poi non riesci chiedi pure.

  3. #3
    Ciao , inanzitutto grazie dall'aiuto, capisco che vuoi dire di fare una cosa del tipo : a[i]=b[j];
    ma è la condione iniziale che non mi viene propio per far scorrere l'array a e poi assegnare ogni valore a b

  4. #4
    Originariamente inviato da marcos666
    ma è la condione iniziale che non mi viene propio
    Puoi basarti sull'indice i, oppure sull'indice j.
    Se ti basi su i, questo indice viene decrementato, e sai bene che gli array non hanno indici negativi...quindi?

  5. #5
    guarda solo questo mi viene in mente:

    codice:
    # include <iostream>
    using namespace std;
    
    int  costruzione (int [],int [], int ,int);
    void stampa (int []);
    const int n=5;
    int main ()
    {
    	int a[n]={1,2,3,4,5};
    	int b[n]={0};
    	
    	if (costruzione (a,b,4,0))
    	cout<<endl;
    	stampa (b);
    
    
    return 0;	
    }
    int costruzione (int a[],int b[], int i, int j)
    {
        while (j!=n-1)
        a[i]=b[j];
    	
    	return costruzione (a,b,i-1,j+1);
    	
    	}
    void stampa (int b[])
    {
    	for (int j=0;j<n;j++)
    	cout<<b[j];
    	cout<<endl;
    	
    	
    	}

  6. #6
    Originariamente inviato da marcos666
    guarda solo questo mi viene in mente:
    Il while non ci vuole assolutamente, in quel modo la funzione entra in un loop infinito..
    Il corpo corretto della funzione è questo:
    codice:
    if( i == -1 )
        return b;
    b[j] = a[i];
    return costruzione (a, b, i-1, j+1);

  7. #7
    grazie per la tua pazienza

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.