Risoluzione di un problema banale

di il
13 risposte

Risoluzione di un problema banale

Ciao ragazzi, ho questo esercizio da svolgere ma non riesco a capire dove sbaglio, mi si blocca una volta inseriti tutti i valori dell array.
sottoprogrammi:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "dichiarazioni.h"
using namespace std;

void inserisci_vet(int vet[],int riemp)
{        
    cout<<"inserisci i tuoi valori\n";
    for(int i=0;i<riemp;i++)
    {
        cout<<"val "<<i<<": ";
        cin>>vet[i];
    } 
}

void stampa_vet(int vet[],int riemp)
{
    cout<<"i valori contenuti nell'array sono:"<<endl;
    for(int i=0;i<riemp;i++)
    {
        cout<<"v["<<i<<"]: ";
        cout<<vet[i]<<endl;
    } 
}

void sdoppia(int vet[],int riemp,int v1[],int& r1, int& r2,int v2[])
{
    for(int i=0;i<riemp;i++)
    {
        if(vet[i]%2==0) //pari
        {
            r1++;
            v1[r1]=vet[i];
        }    
        else //dispari
        {
            r2++;
            v2[r2]=vet[i]; 
        }
    } 
}

void stampa_prima_vetminimo(int v1[],int v2[],int r1,int r2)
{
    if(r1<r2)
    {
        stampa_vet(v1,r1);
    }
    else
        stampa_vet(v2,r2);
}
dichiarazioni
#ifndef DICHIARAZIONI_H
#define DICHIARAZIONI_H

#define nmax 100

#endif /* DICHIARAZIONI_H */

void inserisci_vet(int vet[],int riemp);
void stampa_vet(int vet[],int riemp);
void sdoppia(int vet[],int riemp,int v1[],int& r1, int& r2,int v2[]);
void stampa_prima_vetminimo(int v1[],int v2[],int r1,int r2);
main
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include "dichiarazioni.h"
using namespace std;

int main()
{
    int r1,r2=0;
    int riemp;
    int vet[nmax],v1[nmax],v2[nmax];
    
    cout<<"quanti valori vuoi immettere?\n";
    cin>>riemp;
    inserisci_vet(vet,riemp);
    sdoppia(vet,riemp,v1,r1,r2,v2);
    stampa_prima_vetminimo(v1,v2,r1,r2);

    system ("pause");
    return 0;
}

grazie in anticipo!

13 Risposte

  • Re: Risoluzione di un problema banale

    Ti suggerisco di richiamare la stampa_vet dopo aver inserito il vettore di input così puoi capire se il problema è sull'inserimento o successivo all'inserimento
  • Re: Risoluzione di un problema banale

    L'errore l ho localizzato in sdoppia
  • Re: Risoluzione di un problema banale

    All'inizio di sdoppia() stampa a video i valori di riemp, r1 ed r2, e stampi questi valori anche prima di uscire dalla funzione
  • Re: Risoluzione di un problema banale

    Ma mi si blocca il programma proprio nel mezzo di quella funzione, come posso far stampare i valori alla fine della funzione quando la stessa non mi parte? cmq il compito di quella funzione e di dividermi in due vettori (uno con solo valori pari ed uno con solo valori dispari) i valori del vettore inserito dall utente.... errori di forma non ne vedo però =(
  • Re: Risoluzione di un problema banale

    Il fatto è che ho un brutto rapporto che le referenze, ogni volta che le uso è un problema haha
  • Re: Risoluzione di un problema banale

    Non c'è soluzione?
  • Re: Risoluzione di un problema banale

    Per quanto ne so, il passaggio di parametri by reference si fa in questo modo:
    -quando passi i parametri devi passare l'indirizzo non il suo "contenuto", ergo: &a
    -quando dichiari la funzione devi usare i puntatori, ergo: *a
    Dopodiché per operare sul contenuto della variabile puntata, si usa la notazione: *a

    Aggiungo, che il C++ non lo conosco ma credo che questo meccanismo sia uguale al C, potrei sbagliare.......

    Se ho ragione cerca della documentazione sui puntatori e cerca di capirci qualcosa!!!
  • Re: Risoluzione di un problema banale

    Caro emix, ti ho chiesto di "stampare" i valori all'inizio della funzione e, già che ci sei, anche alla fine della funzione: tu dice che ti si blocca all'interno e per questo motivo vediamo i parametri che le arrivano e se è vero che si blocca all'interno.
    Evidentemente c'è qualcosa che sfugge e in questo modo individuiamo il punto incriminato.
  • Re: Risoluzione di un problema banale

    E non è corretto scrivere su un altro forum (html) contemporaneamente ... non so dove risponderti ... per equità, non rispondo da nessuna parte ...
  • Re: Risoluzione di un problema banale

    Ciao,

    nella funzione sdoppia_vet() incrementi r1 (e anche r2), che sono gli indici del vettore, prima dell'assegnazione; prova a spostare le istruzioni di incremento (r1++ e r2++) dopo quelle di assegnazione (v1[r1] = vet e v2[r2] = vet.
  • Re: Risoluzione di un problema banale

    Domanda ai più esperti.
    Quello che ho detto è valido anche per il c++ ? La notazione scritta da emix è accettata dal c++ ? Grazie
  • Re: Risoluzione di un problema banale

    Nanni16 ha scritto:


    Quello che ho detto è valido anche per il c++ ? La notazione scritta da emix è accettata dal c++ ?
    Ciao,

    Il passaggio delle variabili by reference ad una funzione scritto da emix è corretto:
    in C++ per passare un valore by reference è sufficiente che i parametri della funzione siano dichiarati con &, alla chiamata invece gli argomenti vengono passati allo stesso modo degli altri, quindi senza dover usare nessun operatore.

    Fonti: https://www.tutorialspoint.com/cplusplus/cpp_function_call_by_reference.htm
  • Re: Risoluzione di un problema banale

    Grazie!!
Devi accedere o registrarti per scrivere nel forum
13 risposte