PDA

Visualizza la versione completa : [C++] Programma "Rubrica" e uso di puntatori


angelodevastato
01-05-2007, 13:35
Allora...ho scritto una rubrica in c++ molto basilare...(file c++: http://angelodevastato.altervista.org/main.cpp ) una rubrica molto semplice senza l'implicazione di dover salvarla o altre cose ma deve soltanto simulare le operazioni basi di una rubrica. A quanto mi hanno detto scritto abbastanza bene, soltanto che, ora devo metterci i puntatori, e dato che la prima volta che li uso, non ci capisco una mazza (detto papale papale)..vorrei soltanto qualche dritta..grazie a tutti per le eventuali risposte!!! :mame: :mame: :mame:

AndyJ
01-05-2007, 15:26
:)

Il tuo un buon programma. Lo definirei pi "C" che "C++", ed vero, hai evitato l'uso di puntatori.

Mi chiedevo invece se non fosse il caso di cercare di trasformare l'applicazione in qualcosa che usi "classi/oggetti" in una "collezione" piuttosto che impiegare un puntatore fine a se stesso.

Col puntatore potresti ingradire dinamicamente la dimensione dele voci contenute nella rubrica (ora limitata a 50). Oppure, trasformare la struttura "rubrica" in qualcosa che sia una lista o un tree (tree magari per tenere gli elementi ordinati sin dell'inserimento senza invocare poi una funzione di "ordinamento" - molto bello invece il fatto che fai uso della ricerca binaria, complimenti).

Gli elementi stessi dichiarate nella struttura "rubrica" potrebbero essere a sua volta dei puntatori (sono tutte degli "array" di caratteri), ma questo ricorda molto pi il "C" e le metodologie di lavoro "unsafe" che non C++ dove si andrebbe invece ad impiegare la classe "string" o "wstring" (al posto degli array di caratteri).

Comunque nel codice ci sono delle note di programmazione "unsafe" (questa parola indica l'impiego di celle di memoria al di fuori del loro dominio applicativo; il C ed il C++ consentono questa pratica ed spesso la causa di molti problemi che richiedono una montagna di tempo per essere scovati).

Ad esempio nella funzione "aggiunta" dichiari un'array di caratteri "char strin[15];" di 15 elementi.
Ora... vero che ad un certo punto fai questi controlli:


if (strlen(strin)>15) //controllo lunghezza
{
flag=1;
printf(".... troppo lungo, inserire di nuovo\n");
}

ma se fossero vere queste righe di codice, allora la variabile "strin" gi stata "sfondata", in quanto essa pu contenere in modo "safe" 14 caratteri validi (il 15cesimo dovrebbe fungere da terminatore di stringa contenendo '\0'). L'impiego dell'array oltre al 15cesimo carattere considerato "unsafe" perch andrebbe a sovrascrivere celle di memoria dedicate ad altre "cose" (variabili o al codice stesso).

poi te la butto l... una ricerca di tipo "wildcard compare", ossia facendo uso dei caratteri "*" e "?" come per per il comando DIR del DOS... Qui c' l'esempio di uno che ha scritto una funzione a questo scopo: http://www.codeproject.com/string/wildcmp.asp - l'alternativa sarebbe quella di usare le "regular expressions" che per sono un po' pi complesse.

I miei pi sinceri complimenti per la completezza e l'attenzione a molti particolari in fase di programmazione. Complimenti per l'impiego della ricerca binaria.

:)

Loading