Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
caravana
Nivel 4



Registrado: 24 Jul 2010
Mensajes: 115


blank.gif
MensajePublicado: Jue Dic 02, 2010 1:11 am  Asunto:  AYUDA con TP pascal Responder citandoFin de la PáginaVolver arriba

Hola, estoy enloqueciendo con este tp, voy a suuuper agradecer a quien pueda poner su granito de arena Smile, 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 Smile

espero q se haya entendido :S


   OcultoGalería Personal de caravanaVer perfil de usuarioEnviar mensaje privado
koreano
Nivel 9



Registrado: 15 Jul 2010
Mensajes: 1796

Carrera: No especificada
blank.gif
MensajePublicado: Jue Dic 02, 2010 7:57 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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


   OcultoGalería Personal de koreanoVer perfil de usuarioEnviar mensaje privado
Kartlan
Nivel 5


Edad: 43
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
argentina.gif
MensajePublicado: Jue Dic 02, 2010 9:14 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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.


Aries Género:Masculino Gallo OfflineGalería Personal de KartlanVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
caravana
Nivel 4



Registrado: 24 Jul 2010
Mensajes: 115


blank.gif
MensajePublicado: Jue Dic 02, 2010 5:38 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

gracias por las respeustasss
ya funciona muucho mejor Smile


   OcultoGalería Personal de caravanaVer perfil de usuarioEnviar mensaje privado
caravana
Nivel 4



Registrado: 24 Jul 2010
Mensajes: 115


blank.gif
MensajePublicado: Jue Dic 02, 2010 11:30 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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 Smile


   OcultoGalería Personal de caravanaVer perfil de usuarioEnviar mensaje privado
loonatic
Nivel 9


Edad: 32
Registrado: 16 May 2009
Mensajes: 1256

Carrera: Sistemas
CARRERA.sistemas.3.jpg
MensajePublicado: Jue Dic 02, 2010 11:49 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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 Smile


Me parece muy inutil... si entra al while es porque cond *es* 1. Tendría mas sentido si dijera por ejemplo while cond >= 1.


Geminis Género:Femenino Cabra OfflineGalería Personal de loonaticVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
4WD
Administrador


Edad: 39
Registrado: 07 Sep 2006
Mensajes: 2430
Ubicación: Ingeniero
Carrera: Mecánica
argentina.gif
MensajePublicado: Lun Dic 06, 2010 9:16 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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).

_________________
ImageImage
ImageImage
ImageImage

Escorpio Género:Masculino Rata OfflineGalería Personal de 4WDVer perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

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 CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.2828s ][ Pedidos: 20 (0.2103s) ]