Autor |
Mensaje |
caravana
Nivel 4
Registrado: 24 Jul 2010
Mensajes: 115
|
|
Hola, estoy enloqueciendo con este tp, voy a suuuper agradecer a quien pueda poner su granito de arena , esats son mis dudas:
---¿esta bien planteada la suma (para calcular hm[1,32,23] por ej) en este procedure? xq no importa el valor q ingrese (en otro procedure d eingreso de datos) siemrpe me da = a 0....lo cual no es la idea..
----cuando corro el programa, la function me da un nuemro negativo!!!, ¿porq?? las opciones de repsuesta en realidad son: 1, 2, 3 o 4.
para q entiendan la idea es q tengo una matriz dnd i es el numero de candidato (de 1 a 4), j es el partido de proviencia (1 a 30) y k es la proviencia (1 a 20), y el valor q miro es la cantidad de votos.
procedure porcentaje(hm:matriz);
var i,j,k,cond:integer;tot,may,aux1,aux2,aux3,aux4:longint;
begin
clrscr;
writeln('PARTE 3: PORCENTAJE DE CADA CANDIDATO EN EL RESULTADO FINAL');
writeln('Si desea ver el porcentaje de cada candidato en el resultado final');
writeln('presione 1 y enter, sino cualquier numero');
readln(cond);
while (cond=1) do
cond:=0;
tot:=1;
begin
for j:=1 to l do
begin
for k:=1 to o do
begin
hm[1,32,k]:=hm[1,32,k]+hm[1,j,k];
hm[2,32,k]:=hm[2,32,k]+hm[2,j,k];
hm[3,32,k]:=hm[3,32,k]+hm[3,j,k];
hm[4,32,k]:=hm[4,32,k]+hm[4,j,k];
end;
end;
end;
begin
for i:=1 to m do
begin
for j:=1 to l do
begin
for k:=1 to o do
begin
tot:=tot+hm[1,32,23]+hm[2,32,23]+hm[3,32,23]+hm[4,32,23];
end;
repeat
begin
hm[i,32,23]:=hm[i,32,23]*100;
writeln('el porcentaje de cada candidato en el resultado final');
write('candidato 1: ');
writeln(hm[1,32,23] div tot, '%');
write('candidato 2: ');
writeln(hm[2,32,23] div tot, '%');
write('candidato 3: ');
writeln(hm[3,32,23] div tot, '%');
write('candidato 4: ');
writeln(hm[4,32,23] div tot, '%');
end;
until (tot=tot);
end;
end;
end;
end;
function gan(hm:matriz):integer;
var i,j,k:integer;maxi:longint;
begin
maxi:=0;
for i:=1 to 4 do
begin
for j:=1 to 30 do
for k:=1 to 22 do
begin
hm[i,32,k]:=hm[i,32,k]+hm[i,j,k];
end;
begin
if hm[i,32,23]>maxi then
begin
maxi:=hm[i,32,23];
gan:=i;
end;
end;
end;
end;
miiill graciasssss al q se apiade de miii
espero q se haya entendido
|
|
|
|
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
Primero: si necesitás ayuda con código como mínimo te recomiendo que tu código sea lo mas prolijo y legible posible, i.e: indenting, comentarios, etc
Segundo: estás pasando la matriz por valor y la estás modificando dentro del procedure, esperando que la matriz retenga los cambios pero lo único que estás haciendo es trabajando sobre una copia. Tenés que pasarla por referencia (poniendo var en frente del parametro).
Tercero: es medio de hijo de puta eso de guardar el total en el espacio x,x,23. De última usa el 0 y poné que tu matriz vaya de 0 a 20.
Cuarto: fijate de estar inicializando correctamente la matriz, especialmente los valores que deberían ser cero. Recordá que todo lo que no seteas toma el valor de lo que fuera que había antes en esos bytes así que las chances son muy altas de que sean numeros basura como se los llama.
Saludos
|
|
|
|
|
|
|
|
|
Kartlan
Nivel 5
Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
|
|
Todo lo que dijo koreano y...
koreano escribió:
|
Primero: si necesitás ayuda con código como mínimo te recomiendo que tu código sea lo mas prolijo y legible posible, i.e: indenting, comentarios, etc
|
Luego de agregar tabuladores... me parece que en el while del procedure no haces lo que queres.
Código:
|
...
while (cond=1) do
cond:=0;
tot:=1;
begin
...
end;
|
El while solo entra, pone cond en 0 y sale, como resultado lo que esta dentro del bucle se ejecuta una sola vez (esto se ve de una cuando miras el código tabulado con algun estilo.
Me parece que lo mismo en los ultimos bucles del for del procedimiento y de la función. Pone el código bien tabulado como vos crees que debe ser y va a ser más facil que te diga.
|
|
|
|
|
|
|
|
|
caravana
Nivel 4
Registrado: 24 Jul 2010
Mensajes: 115
|
|
gracias por las respeustasss
ya funciona muucho mejor
|
|
|
|
|
|
|
|
|
caravana
Nivel 4
Registrado: 24 Jul 2010
Mensajes: 115
|
|
ultima preguntaaaa
esta bien poner un while y seguifo un if??
por ejemplo:
while(cond=1) do
if (cond=1) then
porq es la unica manera q encontre para q el programa hiciera lo q yo queriaa
graciass al q pueda responderrr
|
|
|
|
|
|
|
|
|
loonatic
Nivel 9
Edad: 32
Registrado: 16 May 2009
Mensajes: 1256
Carrera: Sistemas
|
|
caravana escribió:
|
ultima preguntaaaa
esta bien poner un while y seguifo un if??
por ejemplo:
while(cond=1) do
if (cond=1) then
porq es la unica manera q encontre para q el programa hiciera lo q yo queriaa
graciass al q pueda responderrr
|
Me parece muy inutil... si entra al while es porque cond *es* 1. Tendría mas sentido si dijera por ejemplo while cond >= 1.
|
|
|
|
|
|
|
|
|
4WD
Administrador
Edad: 39
Registrado: 07 Sep 2006
Mensajes: 2430
Ubicación: Ingeniero
Carrera: Mecánica
|
|
caravana escribió:
|
while(cond=1) do
if (cond=1) then
|
A menos que haya algún problema con los BEGIN/END, que esté el if o no en esa situación no cambia nada... de hecho, se ejecuta siempre (como si no hubiera if).
|
|
|
|
_________________
|
|
|
|
|
|
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|