[ Foro de Pascal ]

como buscar un dato de un campo de un array de registros ???

14-Feb-2012 17:30
oscar gomez
1 Respuestas

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.


19-Feb-2012 20:31
oscar gomez

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