Buenos días. Parece que necesitas ayuda para conseguir que te funcione un programa en pascal. Voy a intentar solucionarlo pero antes, me gustaría ofrecer algunos conceptos:
1) Si explicas cual es el propósito de tu programa nos ayudarás mucho a los que no tenemos bien desarrollada la función telepática.
2) Explicar cual es el problema también ayuda.
3) En la página donde se ponen las consultas hay una regleta de iconos tal como esta:
Y en ella he marcado con una flecha el icono que hay que seleccionar para insertar código pascal en una consulta.
Sale en el editor una linea como esta:
Y solo hay que sustituir la frase "Reemplace este texto" por el código de tu programa. Por ejemplo, el programa:
Program YaVoy;
begin
writeln('Ya voy!!!');
readln;
end.
Se convierte en:
4) Es conveniente explicar con comentarios las operaciones poco evidentes o que pueden interpretarse mal, pero solo esas.
5) Indentar el código. Un programa que no está bien presentado es mucho más dificil de interepretar que otro que haga lo mismo pero esté escrito con intención de dejar lo más claro posible su operación. Hay que pensar en el pobre programador que en el futuro tenga que revisar, corregir o modificar tu programa. Sobre todo porque el pobre porgramador puedes ser tú mismo/a.
Ej::
program hacelomismoqueyavoy;begin;writeln('Ya voy!!!')readln;end;
Imagínate un programa de 1000 lineas como esta. Y encima esta versión tiene un par de errores. ¿Puedes localizarlos?
Bueno, después de este rollo moral, vamos a hacer la autopsia al programa:
Primeramente una inspección visual:
- Lo primero que se ve es una lista de un tipo Record que no contiene más que un campo integer. A menos que estés pensando en ampliar los datos que se registran, usar un record para contener solamente un entero es un desperdicio. Se consigue lo mismo con:
var Lista: array[1..3200] of Integer; O si te gustan los nombres que empiezan por V: var Vector: array[1..3200] of Integer;
- A continuación se declara la variable
num que posteriormente no se urtiliza en ningún sitio. Pero hay una variable
numero que aparece a menudo. Está claro que lo que se quería declarar era
numero de modo que cambiamos el identificador.
- Seguimos examinando el programa y vemos que hay la presentación de un menú. En principio parece perfecto.
- Sigue la ejecución de las opciones seleccionadas. Y aquí ya me pierdo. Lo primero que me llama la atención es el uso de comentarios. Si hay una opción del menú que dice "1 - cargar numeros aleatorios", poner el comentario "{ cargar numeros aleatorios }" a la opción 1 no aporta gran cosa. En cambio las siguientes lineas son un misterio para mi y me hubiera venido muy bien un comentario significativo. Francamente no sé qué hace esta parte del programa. La dejo como está.
- La segunda opción "{ inserte un valor }" empieza comprobando si la variable valor es cero. Examinamos el programa y vemos que anteriormente no se ha asignado ningún valor a la variable
valor . Por lo tanto,
valor puede valer cualquier cosa: cero, trece, menos mil quinientos... Me da la impresión de que antes de la linea
falta un readln(valor);. Pero como no sé qué se pretende hacer, no estoy seguro.
Lo que se hace a continuación después del
else parece ser visualizar los datos de la lista. Pero se usa valor[i].vector que evidentemente es un fallo porque
valor no es un array o arreglo. Supongo que lo que se prentende mostrar es Lista[i].vector, o si se ha hecho el cambio que he propuesto al principio, esa linea quedaria asi:
- Ultimo asunto: Eliminar valor.
Siguen cinco líneas de código que parecen copiadas de algún problema parecido, pero que aquí no tienen mucho sentido. Lo que aparentemente hacen es eliminar el elemento
i-ésimo del array
a que se supone que tiene
n elementos válidos. El único problema es que ni
j , ni
a , ni
n están declarados en este programa. Y encima el valor de
i no está definido.
- Post-Ultimo asunto: El programa presenta un menu pero no está en bucle (falta cerrar la instrucción
Repeat con un
Until). O sea que una vez que se elige una opción, la ejecuta y termina. Tambien falta cerrar las opciones del
case con un
end. Y si se elige cualquier numero que no esté en el menú también termina sin hacer nada.
He pensado dejar una versión que compila y ejecuta algo, pero no sé qué. Pero no vale la pena.
Pido disculpas por el tono cínico en que está escrito este post. He querido aprovecharlo para dejar algunas ideas que puedan ayudar a la gente que está empezando y tiene interés en manejarse en pascal.