[C con Clase] help

Steven Davidson srd4121 en njit.edu
Vie Dic 3 02:24:41 CET 2010


Hola Edinson,

2010/12/3 Edinson Vivas <edinson.vivas en gmail.com>

> Buenas Noches amigos, quisiera saber si me pueden ayudar a resolver un
> problema que tengo con un programa de inscripcion que estoy haciendo
> como trabajo para la universidad en C++...


[CORTE]


> esta funcion de ingresar los datos del estudiante esta mediante un
> menu... cada vez que se registra un estudiante el programa pregunta si
> quiere inscribir otro o volver al menu...
>
> si vuelvo al menu e intento registrar un nuevo usuario, me
> sobreescribe los que ya estan, esto porque lo tengo con un contador:
>
> Ejemplo:
>
> indice = 0
> do
> {
> indice++;
> .
> ..
> cin >> lista[indice].nombre;
> ...
> ....
> indice <= 100;
> }while (opcion != 'n'
>
> ahora, mi pregunta y quisiera saber si me pueden ayudar, es como hago
> para que no me sobreescriba los datos ya registrados, sino que los
> desplace y me permita registrar en cualquier ocacion un nuevo
> "estudiante".


Tal y como describes el problema, éste se basaría en que reiniciabas
'indice' para que vuelva a empezar desde 0, por lo que sobreescribías los
registros del comienzo. Sin embargo, el código que nos das no describe este
caso. Sugiero que verifiques el uso de 'indice' que actúa como la cantidad
actual de elementos existentes. Quizá te interese renombrar esta variable
para describir su tarea; por ejemplo, 'nCantActual' o algo parecido.

Cuando el usuario quiera agregar un nuevo registro, comprueba que la
cantidad actual de elementos no supere a la cantidad máxima. No queremos
sobrepasarnos de los límites del array. Si se puede agregar, entonces
actualiza la cantidad actual incrementándola, para así asignar nuevos datos
al último registro.

Si acaso quieres eliminar los últimos registros, entonces comprueba que la
cantidad actual no sea 0, ya que no tiene sentido eliminar un registro de
una lista vacía. Si existen registros, entonces disminuye la cantidad actual
de elementos. No podemos "borrar" un registro, porque no se puede eliminar
memoria literalmente; simplemente ignoramos esos datos guardados.


Si de verdad quieres agregar un nuevo registro en otra parte de la lista,
entonces sí tienes que dejar "hueco". Esto significa que tendrás que copiar
registro a registro del último al posterior (el nuevo último), del penúltimo
al último, y así sucesivamente hasta dejar el hueco que quieres.


La otra posibilidad es usando listas dinámicamente enlazadas en lugar de
arrays (arreglos), para tener mayor control de la estructura y además no
tenemos estos problemas de "dejar huecos". De todas maneras, sospecho que no
has llegado a ver estos conceptos, por lo que no diré más al repsecto por si
acaso te confundo.


Espero que esto aclare la duda.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101203/156eff81/attachment.html>


Más información sobre la lista de distribución Cconclase