Pascal/Turbo Pascal - Procedure y arrays

 
Vista:
sin imagen de perfil

Procedure y arrays

Publicado por Ricard (5 intervenciones) el 04/12/2016 18:39:39
Hola gente,

me estoy iniciando a la programación con Pascal a través de aulamentor y tengo algunas dudas.

Tengo el siguiente ejercicio:

Escriba un programa que pida al usuario 10 números y los meta en una tabla (esto se hará en un procedimiento). A continuación, pida al usuario un número multiplicador y multiplique cada número de la tabla por ese número (esto se realizará en otro procedimiento). Finalmente mostrará el resultado por pantalla (en un tercer procedimiento).

he llegado al siguiente codigo


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
Program A_7_1_3;
 
Var
datos: array[1..10] of integer;
i: integer;
multiplicador: integer;
resultado: integer;
datos2:integer;
 
procedure entrada_datos (var datos:integer);
var
i:integer;
Begin
for i := 1 to 10 do
    begin
         writeln('Introduzca 10 numeros: ');
         readln(datos);
    end;
end;
 
procedure multiplicacion (var multiplicador:integer; resultado:integer; datos:integer);
var
i:integer;
Begin
writeln('introduzca el multiplicador ');
readln(multiplicador);
for i := 1 to 10 do
resultado := multiplicador * datos;
end;
 
procedure presenta_resultados (var resultado:integer);
var
i:integer;
Begin
for i := 1 to 10 do
    writeln(resultado);
end;
 
Begin
 
entrada_datos(datos[i]);
multiplicacion(resultado,multiplicador,datos[i]);
writeln('El valor del resultado ',resultado);
writeln('El valor del dato es el siguiente ', datos[1]);
writeln('El valor del dato es el siguiente ', datos[2]);
writeln('El valor del dato es el siguiente ', datos[3]);
(* presenta_resultados(resultado); *)
end.


He puesto que en los procedures me pase los parámetros por referencia y sin embargo las variables utilizadas en el procedure entrada_datos no me pasa a los otros procedures o al programa principial.

Gracias
Saludos
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

Procedure y arrays

Publicado por David (224 intervenciones) el 06/12/2016 17:42:13
Te propongo la siguiente solución:

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Program A_7_1_3;
 
Uses CRT;
 
Const
  TOPE = 3;
 
tYPE
  TDatos = Array[1..TOPE] of Integer;
Var
 
datos: Tdatos;
 
i: integer;
 
multi: integer;
 
resultado: integer;
 
datos2:integer;
 
 
 
procedure entrada_datos (var dato:tdatos);
 
var
 
i:integer;
 
Begin
 
for i := 1 to TOPE do
 
    begin
 
         writeln('Introduzca ',tope, ' numeros: ');
 
         readln(dato[I]);
 
    end;
 
end;
 
 
 
procedure multiplicacion (var multiplicador:integer;  var dato:tdatos);
 
var
 
i:integer;
 
Begin
 
writeln('introduzca el multiplicador ');
 
readln(multiplicador);
 
for i := 1 to tope do
 
dato[i] := multiplicador * dato[I];
 
end;
 
 
 
procedure presenta_resultados (var dato:tdatos);
 
var
 
i:integer;
 
Begin
 
clrscr;
for i := 1 to tope  do
 
    writeln('El resultado es : ',dato[i]);
 
end;
 
 
 
Begin
 
 
 
entrada_datos(datos);
 
multiplicacion(multi,datos);
Presenta_resultados(datos);
 
readln;
(* presenta_resultados(resultado); *)
 
end.


He hecho alguna modificación en tu código, pero creo que no te resultará difícil comprenderlo. Si tienes alguna duda, vuelve a escribir

Saludos.
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
sin imagen de perfil

Procedure y arrays

Publicado por Ricard (5 intervenciones) el 06/12/2016 18:46:53
Hola,

primero de todo gracias por el comentario, he cogido tu código y lo he adaptado al mío de la siguiente forma, ahora me funciona perfectamente, pero hay algunas cosillas que no acabo de entender


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
Program A_7_1_3;
 
type
tdatos=Array[1..3] of integer;
 
Var
datos: tdatos;
multiplicador: integer;
 
procedure entrada_datos (var dato:tdatos);
var
i:integer;
Begin
for i := 1 to 3 do
    begin
         writeln('Introduzca 3 numeros: ');
         readln(dato[i]);
    end;
end;
 
procedure multiplicacion (var multiplicador:integer; dato:tdatos);
var
i:integer;
Begin
writeln('introduzca el multiplicador ');
readln(multiplicador);
for i := 1 to 3 do
dato[i] := multiplicador * dato[i];
end;
 
procedure presenta_resultados (var dato:tdatos);
var
i:integer;
Begin
for i := 1 to 3 do
    writeln(dato[i]);
end;
 
Begin
 
entrada_datos(datos);
multiplicacion(multiplicador,datos);
presenta_resultados(datos);
end.

No acabo de entender la variable dato, veo que la pones en todos los procedimientos pero en cambio no declaras la variable en el programa principal, no sería más fácil declarar la variable en el programa principal? Por ejemplo en la multiplicación

1
2
3
4
5
6
7
8
9
procedure multiplicacion (var multiplicador:integer; dato:tdatos);
var
i:integer;
Begin
writeln('introduzca el multiplicador ');
readln(multiplicador);
for i := 1 to 3 do
dato[i] := multiplicador * dato[i];
end;

no veo como dato llega a pasar al programa principal. Y otra pregunta, el array lo llamamos dtados y dentro de el tenemos la variable dato? es correcto?

Lo siento pero esto de los arrays me está costando mucho a parte la teoría de Aulamentor realmente da un poco de pena, 4 páginas de nada para explicar los arrays y no queda para nada claro, encima la profesa te contesta cada 4 días un poco triste la verdad...

Muchísimas gracias de antemano
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Procedure y arrays

Publicado por David (224 intervenciones) el 06/12/2016 19:48:30
Vamos por partes:

En tipos creamos un tipo de datos que se llama precisamente TDatos y que es un array de TOPE posiciones. TOPE es una constante que utilizaremos por si en vez de 10 nos pidieran otra cantidad, sólo tendríamos que cambiar ese valor y ya está. DATO es la variable que pasamos como parámetro en los procedimientos. Para evitar repeticion de variables y errores en la compilación, como variable global creamos DATOS (que es del mismo tipo que DATO) y que usaremos para llamar a los procedimientos y que es lo que llegua al programa principal.

Espero haberte aclarado las dudas. Si no es así, vuelve a escribir.

Saludos.
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
sin imagen de perfil

Procedure y arrays

Publicado por Ricard (5 intervenciones) el 06/12/2016 19:58:14
Hola,

a ver datos y dato son de tipo tdatos no?

concretamente en este paso

dato[i] := multiplicador * dato[i];

para cada valor de i, estamos haciendo la operacion de multiplicar el valor i y el multiplicador. Pero luego la variable dato la usamos en otro procedimiento, no entiendo porque la podemos pasar al otro procedimiento si dato no lo hemos declarado como variable en el programa prinicipal.

Muchas gracias de nuevo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Procedure y arrays

Publicado por David (224 intervenciones) el 06/12/2016 20:42:48
Efectivamente dato y datos son del tipo TDatos. A ver, la variable que pasamos en el programa principal es DATOS y DATO es el nombre que damos a la variable que pasamos como parámetro en cada procedimiento.
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
sin imagen de perfil

Procedure y arrays

Publicado por Ricard (5 intervenciones) el 06/12/2016 21:20:02
Gracias, lo veo un poco más claro ahora, mañana voy a practicar a ver si así lo veo más claro. Es el segundo curso que hago en aulamentor , estoy haciendo el de iniciación a la programación pero no me gusta nada, muy poca teoría y necesito estar cada 2x3 haciendo preguntas el profesor y este te contesta cada 4 días, y así es muy complicado seguir el hilo....

Bueno gracias de nuevo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Procedure y arrays

Publicado por David (224 intervenciones) el 06/12/2016 21:23:40
De nada. Para cualquire cosa no dudes en volver a preguntar
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
sin imagen de perfil

Procedure y arrays

Publicado por Ricard (5 intervenciones) el 07/12/2016 10:36:04
Hola,

he vuelto a probar el código y veo que no me aplica el multiplicador

Program A_7_1_3;

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
type
tdatos=Array[1..3] of integer;
 
Var
datos: tdatos;
multiplicador: integer;
 
procedure entrada_datos (var dato:tdatos);
var
i:integer;
Begin
for i := 1 to 3 do
    begin
         writeln('Introduzca 3 numeros: ');
         readln(dato[i]);
    end;
end;
 
procedure multiplicacion (var multiplicador:integer; dato:tdatos);
var
i:integer;
Begin
writeln('introduzca el multiplicador ');
readln(multiplicador);
for i := 1 to 3 do
dato[i] := multiplicador * dato[i];
end;
 
procedure presenta_resultados (var dato:tdatos);
var
i:integer;
Begin
for i := 1 to 3 do
    writeln(dato[i]);
end;
 
Begin
 
entrada_datos(datos);
multiplicacion(multiplicador,datos);
presenta_resultados(datos);
end.


pascal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Procedure y arrays

Publicado por d (224 intervenciones) el 07/12/2016 14:18:18
Aquí está el error

procedure multiplicacion (var multiplicador:integer; dato:tdatos);. El array se debe pasar siempre por referencia. Lo correcto sería

Procedure multiplicacion(var multiplicador:integer; var dato:tdatos)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Procedure y arrays

Publicado por Juan José (1 intervención) el 03/04/2020 11:56:20
Buenas compañeros, antes de nada gracias por las aclaraciones que estáis aportando ya que me están sirviendo de mucho.
Y destacar lo que dice el compañero Ricard, me está resultando muy complicado la programación, y mira que me gusta y me pica, pero pienso como él en que el temario de AulaMentor es totalmente penoso.

Estoy aprendiendo más con vosotros que con el curso. Muchas gracias.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Procedure y arrays

Publicado por lorena (1 intervención) el 21/01/2021 23:20:30
hola juan jose, la verdad esta pagina ha sido mi salvacion, por que yo tambien estoy en aula mentor y es un temario desactualizado y no entiendo nada del contenido que ponen....he tenido que buscarme la vida con videos en youtube, el tutor a vecs pagan 5 dias ...asi que ya no pierdo mas el tiempo y me apunto a daw....

la verdad aprendo mucho con vosotros....saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar