Pascal/Turbo Pascal - buenas alguien me podria ayudar por favor, gracias

 
Vista:
sin imagen de perfil
Val: 19
Ha disminuido 1 puesto en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

buenas alguien me podria ayudar por favor, gracias

Publicado por Quiqa (2 intervenciones) el 04/06/2020 01:15:49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
program t3;
 
var
    lista: array [1..3200] of
        record
            vector: integer;
 
        end;
    num: integer;
    opcion: integer;
    i: integer;
    valor: integer;
 
 
begin
   numero:= 0;
    repeat
        WriteLn('........');
        WriteLn;
        WriteLn('1- cargar numeros aleatorios');
        WriteLn('2- insertar un valor');
        WriteLn('3- eliminar el valor');
        WriteLn('4- mostrar el vector cargado');
        WriteLn('5- salir');
        Write('Escoja una opción: ');
        ReadLn(opcion);
        WriteLn;
 
        case opcion of
            1: { cargar numeros aleatorios }
                if numero < 3200 then
                begin
                   numero := numero + 1;
                    WriteLn('Introduciendo un numero ', numero);
                    ReadLn(numero);
 
                    WriteLn;
                 end
                 else
                    WriteLn('......');
 
            2: { inserte un valor }
                begin
                if valor= 0 then
                    WriteLn('No hay datos')
                else
                    for i := 1 to valor do
                        WriteLn(i, ' ', valor[i].vector);
                WriteLn;
                end;
 
            3: { eliminar valor}
 
 
               Begin
For j:=i to n-1 do
a[j]:=a[j+1];
n:=n-1;
End;
 
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

buenas alguien me podria ayudar por favor, gracias

Publicado por juanba (40 intervenciones) el 04/06/2020 09:22:45
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:
InsertarCodigo

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:

Reeemplace_esteb

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:

1
2
3
4
5
Program YaVoy;
begin
  writeln('Ya voy!!!');
  readln;
end.

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

1
if valor = 0 then

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:

1
2
for i := 1 to valor do
  writeln(1, '  ', Lista[i]);

- 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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar