[ Foro de Pascal ]

Problema dificil registros

07-Jan-2015 00:11
Alberto Rilo Mosteiro
2 Respuestas

A ver si me podeis ayudar con la funcion, creo la parte const y type esta bien definida aunque dudo en el limite del array....  En la funcion se que esta mal, pero a ver si partiendo de esa base y con vuestra ayuda me sale .Muchas gracias.


(*EJERCICIO EXAMEN 2011-2012
Diseñe y codifique las estructuras de datos necesarias para mantener la información
sobre las personas pertenecientes a una red social, teniendo en cuenta que para cada
una de ellas se precisa conocer su nombre, fecha de nacimiento, sexo (H, M) y la lista
de sus amigos (como máximo 150, límite cognitivo de relaciones estables que una
persona puede mantener según el antropólogo británico R. Dunbar). Para cada uno de
estos amigos se almacenará información sobre su nombre, sexo y el grupo al que
pertenece (familia, trabajo, íntimo, otros).


Además de las estructuras de datos mencionadas, codifique también la función
BuscarAmigos (persona:tpersona;fragmento:tcadena):tlistamigos que a partir de
una persona y un nombre (o parte de un nombre) busca los amigos de sexo opuesto al
de esa persona con nombres similares. Por ejemplo, si se buscan los amigos de ?Paula
Mendez? cuyo nombre sea similar a ?Man? se seleccionarían los amigos con nombres
?Armando Perez?, ?Manuel Lopez? o ?Roberto Manteca? pero no ?Amanda Diaz? (sexo M).
En la estructura de datos de tipo tlistamigos la función debe devolver tanto el número
de amigos encontrados como el propio array con los datos de dichos amigos.*)


PROGRAM basico(input,output);
CONST
 maximoamigos=150;
 
type
 tcadena=string(30);
 tnombre=string(30);
 tgrupo=(familia,trabajo,intimo,otros);
 tfecha=record
        dia:1..31;
        mes:1..12;
        anho:1900..2015;
        end;
       
 tlistamigos= record
              nombre:tnombre;
              sexo:char;
              grupo:tgrupo;
              end;

 tpersona=record
          nombre:tnombre;
          fecha_nac:tfecha;
          sexo:char;
          listadeamigos:array[1..maximoamigos] of tlistamigos;
          end;             
 
 var
 persona:tpersona;
 fragmento:tcadena;
 
(******************************************************************)
FUNCTION BuscarAmigos(persona:tpersona;fragmento:tcadena):tlistadeamigos;
 VAR aux:tlistadeamigos;i:;
 BEGIN                               integer
  writeln('Inserte la persona de la que quiere buscar amigos');
   readln(persona.nombre);
  writeln('Inserte el fragmento que desea buscar'); 
   readln(fragmento);
   
 FOR i:=1 To maximoamigos DO
  begin 
  IF fragmento IN (persona.listadeamigos[i].nombre) AND
   (persona.sexo<>persona.listadeamigos[i].sexo) then
       persona.listadeamigos[i].nombre:=aux;
       
   end;
    BuscarAmigos:=Aux;
   end;       
(******************************************************************) 
 
 begin
 end.             

                   
       


07-Jan-2015 01:50
Alberto Rilo Mosteiro

tlistadeamigos lo quitaria del record y lo pondria fuera de este, y en su lugar amigos de tlistadeamigos


08-Jan-2015 04:08
Luis Torres (+18)

Revisa si tienes a tu disposición alguna función o procedimiento predefinido para el manejo de cadenas. En Turbo Pascal tienes la función pos(subcadena:string, cadena:string) : byte; la cual te devuelve la posición en la que se encuentra subcadena en cadena, si no la encuentra devolverá cero.

Saludos.






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