PDA

View Full Version : [C++] Dare vincoli alle variabili


cdere
09-10-2009, 21:14
Salve,
mi affaccio ora ora sul c++ e mi serve una cosa che credo sia banale.. ma non sono riuscito a trovare da nessuna parte:

se io voglio creare una variabile intera matricola e voglio darle questi vincoli:

il numero di matricola è un numero a sei cifre, che varia fra 255312 e 499999

come faccio?

Grazie mille :)
Andrea

Perseverance
09-10-2009, 21:42
Il numero viene inserito da tastiera giusto?

#include <iostream>
using namespace std;


int main()
{
int matricola;
cout << "Dammi la matricola:\t";
cin >> matricola;

//Se la matricola è minore di... OR || maggiore di...
if(matricola < 255312 || matricola > 499999)
cout << "Matricola non valida";
else
cout << "OK"<<endl;

//system("pause");
return 0;
}

cdere
09-10-2009, 21:50
Ah ecco...
quindi l'unica è agire sull'implementazione.. credevo ci fossero delle statement (che nel C non ho trovato) e invece niente anche qui... tutti d'accordo?
Eppure il professore mi sembra che parlò di un'allocazione con subrange in modo da limitare anche l'uso della memoria.. non ne sapete nulla ?

Cmq grazie mille :D

Perseverance
20-10-2009, 22:34
In C++ puoi crearti dei tipi personali di dati, i predefiniti sono gli int, float, double e via dicendo. Forse la soluzione "automatica" è costruirti un tipo di dato concreto\astratto ed implementare i vincoli nella dichiarazione.

Ad esempio un altro modo per fissare dei limiti sup e inf ad una variabile che viene modificata a tempo di esecuzione senza intervento umano, è usare il mod % per scaricarci il resto della divisione, tipo

...
offset = 20;
while(...)
int temp = offsett + variabile_y % 50;
...

Così facendo temp può assumere valori da 20 a 70. Xò non è che la puoi usare così a caso.

Fortunatamente in altri linguaggi ad alto livello esiste la clausola CHECK che permette di fare quello che dici te:

CHECK variabile BEETWEN x AND y

Non credo che esista qualcosa di equivalente in c++ in modo diretto, ma te lo devi creare da solo in maniera "derivata"

tomminno
20-10-2009, 23:16
Esiste sempre la possibilità di crearsi una classe NumeroDiMatricola utilizzabile come un intero nelle espressioni (tramite operator int() ), che implementi i controlli sulla validità del numero al momento del set e che sollevi un'eccezione se questo non è valido.

Perseverance
21-10-2009, 10:23
Esattamente