Autor |
Mensaje |
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
Buenas tengo un problema con este programa, con el procedimiento llamado Buscar. El tema es así cargo en vectores nombre de distritos y nombre de candidatos y luego leo desde un archivo la info con votos (los datos del archivo son el distrito y el nombre de candidato),lo q tengo q hacer es poner los resultados en una matriz (array) a traves de esa funcion busqueda, pero no funciona... no se por que...
Código:
|
program MP2_TP;
uses
crt;
type
rango=0..100;
vector=array[rango]of string;
matriz=array[rango,rango]of integer;
var
numdist,numcand:rango;
VCodDist,VNomDist,VNomCandi,VPartido:vector;
matrizvotos:matriz;
p: rango;
Procedure CargarDistritos( var numdist: rango; var VCodDist: vector; var VNomDist: vector );
var
i: rango;
distrito: text;
nomarch: string[15];
begin
write('Ingrese nombre de archivo de distritos: ');
readln(nomarch);
assign(distrito,nomarch);
reset(distrito);
i:=0;
repeat
begin
i:=i+1;
readln(distrito, VCodDist[i], VNomDist[i]);
end;
until EOF (distrito);
numdist:=i;
close(distrito);
end;
Procedure CargarCandidatos( var numcand: rango; var VNomCandi: vector; var VPartido: vector);
var
i: rango;
Candidatos: text;
nomarch: string[15];
begin
write('Ingrese nombre de archivo de Candidatos: ');
readln(nomarch);
assign(Candidatos,nomarch);
reset(Candidatos);
i:=0;
repeat
begin
i:=i+1;
readln(Candidatos, VNomCandi[i], VPartido[i]);
end;
until EOF (Candidatos);
numcand:=i;
close(Candidatos);
end;
Function Buscar( n: rango; v: vector; j: string; var p: rango ):integer;
begin
p := 1;
while ( p <= n ) and ( v[p] <j> n then p:=0;
end;
Procedure IniciarMatriz( numdist, numcand: rango; var mat: matriz );
var
i, j: rango;
begin
for i:=1 to numdist do
for j:=1 to numcand do
mat[i,j] := 0;
end;
Procedure CargarMatriz( numdist, numcand: rango; var VCodDist: vector; var VNomCandi: vector ; var matrizvotos: matriz);
var
codigo,nomarch, nombre: string[15];
cant: integer;
i,fila, columna: rango;
votos: text;
begin
write('Ingrese nombre de archivo de votos: ');
readln(nomarch);
assign(votos,nomarch);
reset(votos);
writeln;
while not EOF(votos) do
begin
readln(votos,codigo,nombre);
columna:=buscar(numdist,VCodDist,codigo,i);
fila:=buscar(numcand,VNomCandi,nombre,i);
matrizvotos[fila,columna]:= matrizvotos[fila,columna] + 1;
end;
end;
Procedure MostrarMatriz( n, m: rango; var mat: matriz );
var
i, j: rango;
begin
writeln;
write(' Columna');
for j:=1 to m do
write(j:10);
writeln;
writeln (' Filas');
writeln;
for i:=1 to n do
begin
write(i:6);
for j:=1 to m do
write(mat[i,j]:10);
writeln;
writeln;
end;
end;
Procedure MostrarVector( n: rango; var v: vector);
var
i: rango;
begin
for i:=1 to n do
begin
writeln(v[i]);
writeln;
end;
end;
begin
clrscr;
Writeln('Bienvenido a las Elecciones 2007');
CargarDistritos(numdist,VCodDist,VNomDist);
mostrarvector(numdist,VCodDist);
readln;
writeln;
writeln;
CargarCandidatos(numcand,VNomCandi,VPartido);
mostrarvector(numcand,VNomCandi);
readln;
writeln;
writeln;
Iniciarmatriz(numcand,numdist,matrizvotos);
cargarmatriz(numcand,numdist,VCodDist,VNomCandi,matrizvotos);
mostrarmatriz(numcand,numdist,matrizvotos);
readln;
end.
|
|
|
|
|
|
|
|
|
|
Rada
Moderador
Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
debe haber salido mal, es:
Procedura Buscar( n: rango; v: vector; j: string; var p: rango );
begin
p := 1;
while ( p <= n ) and ( v[p] <j> n then p:=0;
end;
|
|
|
|
|
|
|
|
|
Dx9
Moderador
Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552
Carrera: Informática
|
|
Martinldz escribió:
|
debe haber salido mal, es:
Procedura Buscar( n: rango; v: vector; j: string; var p: rango );
begin
p := 1;
while ( p <= n ) and ( v[p] <j> n then p:=0;
end;
|
Ese es un problema que tiene el foro con los "mayor" y "menor"
|
|
|
|
_________________ Biblioteca Apuntes
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
Ahora si:
|
|
|
|
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
Donde dice Procedua deberia decir Procedure
|
|
|
|
|
|
|
|
|
Dx9
Moderador
Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552
Carrera: Informática
|
|
Te recomiendo hacerlo en una funcion, porque estas devolviendo el numero de posicion en caso de encontrarlo y un 0 en caso de no encontrarlo.
Pero tu codigo de buscar parece que funciona bien, debe estar en otro lado el error.
Probaste si carga todos los datos bien? y que los imprime bien?
PD: tenia ganas de programar un poco en pascal
Código:
|
Function Buscar (n:rango;v:vector;string_buscado:string):integer;
var
i:integer;
encontrado:boolean;
begin
i:=0;
encontrado:=false;
while ((not encontrado) and ( i<n)) do
begin
inc(i);
if (v[i] = string_buscado) then
encontrado:=true;
end;
if (encontrado) then
buscar:=i
else
buscar:=0;
end;
|
|
|
|
|
_________________ Biblioteca Apuntes
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
gracias Dx9, me compila pero la matriz me sigue quedando toda en 0, no me suma los votos
|
|
|
|
|
|
|
|
|
Dx9
Moderador
Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552
Carrera: Informática
|
|
en:
columna:=buscar(numdist,VCodDist,codigo,i);
fila:=buscar(numcand,VNomCandi,nombre,i);
mete un
writeln(columna);
writeln(fila);
Y ya que esta:
writeln(matrizvotos[fila,columna]);
a ver si te imprime las correctas..
Y si te muestra todo bien, es un problema de los "var"
Otra cosa no se me ocurre toy oxidado
|
|
|
|
_________________ Biblioteca Apuntes
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
hice lo q me decis y nose... me muestra la misma info...
|
|
|
|
|
|
|
|
|
Dx9
Moderador
Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552
Carrera: Informática
|
|
Si te imprime todo correctamente, debe ser un problema con el pasaje por referencia.
te recomiendo:
1.
Procedure CargarMatriz( numdist, numcand: rango; var VCodDist: vector; var VNomCandi: vector ; var matrizvotos: matriz);
cambiar por:
Procedure CargarMatriz( numdist, numcand: rango; var VCodDist: vector; var VNomCandi: vector ; var mat: matriz);
2. Mover el var principal abajo, asi evitas problemas.
Program
funciones
var
begin
end.
3. Esperar a alguien que sepa mas
|
|
|
|
_________________ Biblioteca Apuntes
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
Ahora pruebo lo q me decís. Gracias por la ayuda!
|
|
|
|
|
|
|
|
|
4WD
Administrador
Edad: 39
Registrado: 07 Sep 2006
Mensajes: 2430
Ubicación: Ingeniero
Carrera: Mecánica
|
|
Me parece que tenés un problema con la FUNCTION buscar. Justamente es una función (no un procedimiento) y fijate que ¡no devuelve nada!. Eso no sería problemático si no intentaras usar el resultado devuelto...
Pascal no te avisa cuando te olvidaste un ret para una function. Fue un bug que me llevó bastante trackear en el tp de numérico
PD: El parser del foro tiene un problema con los ">", incluso dentro de los CODE.
|
|
|
|
_________________
|
|
|
|
|
Martinldz
Nivel 3
Edad: 39
Registrado: 21 Nov 2006
Mensajes: 45
Ubicación: Lomas de Zamora
Carrera: Agrimensura
|
|
|
|
|
Rada
Moderador
Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
|
|
|
|
|
|
Ir a página 1, 2 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 CrackerTracker365 Attacks blocked.
|