[ Foro de Pascal ]
Cordial saludo profesor Nacho cabanes y colaboradores.
Agradecerte tu tiempo y tu valiosa ayuda.
Profesor nacho me surge una duda de como buscar un dato dentro de un aray de registros. porejemplo supongamos que tenemos la siguiente estructura de arrays de registros:
nombre ciudad visitas_ene visitas_freb visitas_marzo
paco alicante 20 10 4
jose madrid 10 8 6
maria girona 5 20 2
mi definicion de estructura digamos que es esta:
program xyz;
uses crt;
const
numencuestados =100;
type
datos =record
nombre,ciudad:string[30];
visitas:array[1..numencuestados];
end;
personasEncuesta=array[1..numencuestados] of datos;
numvisitas=array[1..numpart] of byte;
var
persona:personasEncuesta;
i,j:integer;
ciudad_a_buscar:string[30];
...
como puedo buscar una ciudad que se pide por teclado, dentro de mi estructura y si no se encuentra pedirla nuevamente?
osea como buscar si porejemplo la ciudad digitada es alicante (que como vemos si se encuentra en mi estructura de ejemplo)
nombre ciudad visitas_ene visitas_freb visitas_marzo
paco madrid 20 10 4
jose alicante 10 8 6
maria girona 5 20 2
...
o si se teclea: barcelona, al no encontrarse pedir nuevamente que se introduzca una nueva ciudad y buscarla hasta que se encuentre en la estructura.
por su ayuda mil gracias profesor.
cordial saludo profesor Nacho.
he realizado con exito lo referente a lo que te pedia el favor me ayudaras en el caso de buscar, sin embargo queria preguntarte como seria el cambio en el codigo del procedimiento buscarciudad que realice para poder pedir por pantalla nuevamente una ciudad , si esta al buscarla no se encuentra dentro de la lista existente. yo intente hacerlo con un repeat y logro preguntarlo pero cuando intento digitar la nueva ciudad me saca de ejecucion.
te dejo el ejercicio solucionado para que lo veas en ejecucion.
program caminantes;
uses crt;
const numencuestados=4;
numvisitas=3;
type
cadena=string[30];
rango=1..numencuestados;
personas=record
nombre,ciudad:cadena;
visitas_trimestre:array[1..numvisitas] of integer;
end;
personas_encuestas=array[rango] of personas;
visitas=array[1..numvisitas] of integer;
var
persona:personas_encuestas;
i,j:integer;
ciudad_a_buscar:cadena;
hallado:boolean;
procedure buscarciudad( var persona:personas_encuestas;var ciudad:cadena;hallado:boolean;numencuestados:integer);
var i:integer;
begin
hallado:=false;
i:=0;
while not hallado and(i<numencuestados) do
begin
i:=i+1;
if persona[i].ciudad=ciudad then
hallado:=true;
end;
if hallado = false then
writeln('LA CIUDAD digitada no sencontrada');
end;
{DE LA FORMA ANTERIOR ME BUSCA CORRECTAMENTE SI UNA CIUDAD ESTA O NO, EN EL ARRAY DE REGISTROS DEFINIDO, SIN EMBARGO COMO VES CUANDO NO LA ENCUENTRA SOLO ME ENVIA EL MENSAJE:
'LA CIUDAD digitada no se encuentra en la lista', lo que yo quiero es que si no se encuentra la ciudad digitada, me vuelva a preguntar por una nueva , hasta que se encuentre.
LO INTENTE HACER CON EL REPEAT Y APESAR QUE SE ME PREGUNTA NUEVAMENTE POR UNA CIUDAD AL NO ENCONTRARSE LA DIGITADA,TENGO EL PROBLEMA QUE AL INTENTAR INTRODUCIR OTRA ME SACA Y NO SE POR QUE O QUE DEBO CORREGIR, LO QUE HICE FUE:
procedure buscarciudad( var persona:personas_encuestas;var ciudad:cadena;hallado:boolean;numencuestados:integer);
var i:integer;
begin
i:=1;
repeat
hallado:=false;
if persona[i].ciudad= ciudad then
hallado:=true;
writeln('ciudad digitada no encontrada');
writeln('digite una nueva ciudad :');
i:=i+1;
until (hallado = false) or (i>numencuestados);
end;
begin {programa principal}
clrscr;
writeln;writeln;writeln;writeln;
for i:=1 to numencuestados do
begin
writeln('introduzca el nombre de la persona: ');
readln(persona[i].nombre);
writeln('introduzca la ciudad donde esta la persona ');
readln(persona[i].ciudad);
for j:=1 to numvisitas do
begin
writeln('introduca el tiempo de encuesta mes ',j,':');
readln(persona[i].visitas_trimestre[j]);
end;
end;
clrscr;
GOTOXY(17,7);
WRITELN(' ******** DATOS DE ENTRADA ******** ');
WRITELN;
GOTOXY(7,9);
WRITELN(' Nombre Ciudad encuestaEnero encuesta_febrero encuesta_marzo');
GOTOXY(7,10);
WRITE('______ ______ ___________ __________ _________');
WRITELN;WRITELN;WRITELN;
FOR i:=1 to numencuestados do
begin
GOTOXY(7,10+i);
WRITE(persona[i].nombre,' ');
GOTOXY(21,10+i);
WRITE(persona[i].ciudad);
for j:=1 to numvisitas do
begin
GOTOXY(27+10*j,10+i);
WRITE(persona[i].visitas_trimestre[j]);
WRITELN;
end;
end;
writeln;writeln;
writeln('INTRODUCE UNA CIUDAD');
readln(ciudad_a_buscar);
buscarciudad(persona,ciudad_a_buscar,hallado,numencuestados);
readkey;
end.
POR TU AYUDA MIL GRACIAS PROFESOR.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)