Pascal/Turbo Pascal - Punteros

 
Vista:
sin imagen de perfil

Punteros

Publicado por Alejandro (15 intervenciones) el 13/09/2015 06:47:18
Hola que tal, necesito ayuda con un ejercicio que no logro solucionar.

El ejercicio me pide lo siguiente:

Estructuras con punteros
1) Desarrollar un Programa que devuelva la Multiplicación de los Números introducidos en los
Nodos de la Lista.

Tengo que multiplicar todos los numero que haya ingresado la persona, el tema es que el codigo me anda solo si en el procedimiento MULTIPLICACION le pongo que sume, porque si le pongo que multiplique, me tira cero todo el tiempo, porque esta multiplicando por cero.
Y no entiendo como hacer para que multiplique el numero que tiene en el nodo por el siguiente numero del siguiente nodo. Lo que tendria que hacer es recorrer todo la lista y que cuando termine me diga el resultado de la multiplicacion de todos los numeros de la lista.

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
96
97
98
99
100
101
102
103
program lab3_ejer1;
uses crt;
 
type
 
	tl_lista= ^tNodo;
	tNodo= record
		ve_nro: integer;
		siguiente: tl_lista;
	end;
var
 
	vl_lista : tl_lista;
	ve_dato: integer;
	vl_auxiliar: tl_lista;
 
procedure inicializarLista(var p_lista: tl_lista);
begin
	p_lista:=nil;
 
end;
 
function listaVacia(p_lista: tl_lista):Boolean;
begin
 
	if(p_lista= nil) then
		listaVacia:=true
	else
		listaVacia:=false;
end;
 
procedure insertarPrimero(var p_lista: tl_lista; p_dato: integer);
begin
	new(p_lista);
	p_lista^.ve_nro:= p_dato;
	p_lista^.siguiente:= nil;
 
end;
 
procedure insertarAdelante(var p_lista: tl_lista; p_dato: integer);
var
	vl_auxiliar: tl_lista;
 
begin
	new(vl_auxiliar);
	vl_auxiliar^.ve_nro := p_dato;
	vl_auxiliar^.siguiente:= p_lista;
	p_lista:= vl_auxiliar;
 
end;
 
procedure insertarElemento(var p_lista: tl_lista; p_dato: integer);
begin
	if p_lista= nil then
		insertarPrimero(p_lista, p_dato)
	else
		insertarAdelante(p_lista, p_dato);
end;
 
procedure VisualizarTodos(p_lista: tl_lista);
begin
	if not listaVacia(p_lista) then
		begin
			while(p_lista<> nil) do
				begin
					writeln('Dato: ', p_lista^.ve_nro);
					p_lista:= p_lista^.siguiente;
				end;
		end
	else
		writeln('Lista vacia!!!');
end;
 
procedure cargarNros;
begin
 
	writeln;
	write ('Ingrese el n',chr(163),'mero: ');
	write;
		readln (ve_dato);
	insertarElemento (vl_lista, ve_dato);
 
end;
 
procedure multiplicacion(p_lista: tl_lista);
var
	vl_auxiliar: tl_lista;
	va_multi: integer;
begin
	va_multi:=0;
	if not listaVacia(p_lista) then
		begin
			vl_auxiliar:= vl_lista;
			while(vl_auxiliar <> nil) do
				begin
					va_multi:= va_multi * vl_auxiliar^.ve_nro; // en esta parte es donde le pongo * y me tira cero, ya que multiplica por cero, pero yo necesito que multiplique por el siguiente numero de la lista, y no sumar
					vl_auxiliar:= vl_auxiliar^.siguiente;
				end;
			writeln ('Resultado: ', va_multi);
		end
	else
	writeln('Lista vacia!!!');
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

Punteros

Publicado por ramon (2158 intervenciones) el 13/09/2015 22:14:08
Mira en la operación tienes que hacer esto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure multiplicacion(p_lista: tl_lista);
var
	vl_auxiliar: tl_lista;
	va_multi: integer;
begin
	va_multi:=1;
	if not listaVacia(p_lista) then
		begin
			vl_auxiliar:= vl_lista;
			while(vl_auxiliar <> nil) do
				begin
					va_multi:= va_multi * vl_auxiliar^.ve_nro; // en esta parte es donde le pongo * y me tira cero, ya que multiplica por cero, pero yo necesito que multiplique por el siguiente numero de la lista, y no sumar
					vl_auxiliar:= vl_auxiliar^.siguiente;
				end;
			writeln ('Resultado: ', va_multi);
		end
	else
	writeln('Lista vacia!!!');
end;

Ya que sino siempre sera valor 0 y la variable (va_multi la pondría como longint y no como integer por la capacidad de cada una
Integer -32768..32767
Longint -2147483648..2147483647
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