[C++] Funzione di controllo per i valori del binomiale

Steven11
Salve a tutti.
Rovistando tra i codici che ho scritto, mi sono imbattuto in uno che non avevo completato perché c'era un errore - che là per là non trovavo - e avevo rimandato la correzione.
Ora lo rivedevo ma continua a non saltarmi all'occhio l'errore.

Il codice è banale, si tratta di stampare un coeff. binomiale dati $n$ e $k$ costruendo la funzione.
Per arricchirlo (quasi per vezzo) un attimo e impratichirmi avevo pensato di costruire un'altra funzione che giudicasse i valori immessi, cioè ti dicesse di inserire altri valori se uno tra $n$ e $k$ è negativo o pure $n
Insomma, ho scritto quindi
      controlval(n,k);

e la funzione controlval alla fine
void controlval(int a, int b)
      {
           int a1, b1;
           while ((a<0)||(b<0)||(a<b))
      {cout <<"Valori non accettabili, scegline altri\n\n";
      cout <<"Digita n= "; cin >> a;
      cout <<"Digita k= "; cin >> b;};
      }


Il fatto è questo: se pure metto [tex]$n=-3$[/tex] e [tex]$k=5$[/tex]
lui mi invita a inserire altri valori e lo fa finché non vanno bene, ma alla fine quando gli metto quello giusti lui comunque calcola il coeff. binomiale con i primi messi, che quindi vale 0.
Cioè non tiene conto che li ho cambiati.
Spero che qualcuno possa indirizzarmi verso l'errore.

Scusate con al solito per l'incompetenza, ma come ho già detto non sto amando questa materia :D
A presto e grazie in anticipo!

Risposte
Nidhogg
Ciao, stai passando a e b alla funzione di controllo per valore, quindi anche se all'interno della funzione i valori verranno modificati, la modifica resterà locale al blocco di esecuzione della funzione. Col passaggio di parametri per riferimento (puntatori) questo problema dovrebbe risolversi, salvo errori nella funzione chiamante.

apatriarca
In C++ puoi usare i reference invece che i puntatori per avere una sintassi più semplice:
void controlval(int &a, int &b)
{
    while ((a<0) || (b<0) || (a<b))
    {
        cout <<"Valori non accettabili, scegline altri\n\n";
        cout <<"Digita n= "; cin >> a;
        cout <<"Digita k= "; cin >> b;
    }
}

Steven11
Ciao!
Ora infatti ricordo che questa questione era stata sottolineata anche nelle dispense, ma non l'avevo compresa a fondo.
All'inizio poi continuava a darmi errore perché non inserivo le & anche nella testata, quindi avevo desistito pensando ad un altra strada da prendere :wink:

Grazie mille ad entrambi, soprattutto ad apatriarca sempre pronto a leggere i miei noiosi topic :)

A presto!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.