Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   club de futbol (https://www.clubdelphi.com/foros/showthread.php?t=71581)

goomba91 29-12-2010 11:18:12

club de futbol
 
hola,
estoy realizando un programa con delphi 7 sobre un equipo de futbol, en el qual debo hacer un registro de cada uno de los jugadores del equipo, ingresando su nombre, peso, estatura, rendimiento y numero de goles.

El problema me surge cuando se me pide que laaplicacion debe permitir modificar un dato deljugador como por ejemplo el peso, buscando por el nombre...
intuyo que debo utilizar una estructura while/do pero no se mas.
por favor, una ayudita.

Neftali [Germán.Estévez] 29-12-2010 11:42:29

Hola goomba91, bienvenido a los foros.
Antes de nada te recomiendo que revises la Guía de estilo.

Tu problema es acceder a los datos para poder modificarlos. Antes de seguir lo más importante es que expliques dónde están almacenados esos datos.

¿Records en memoria?
¿Los tienes en una Base de Datos?
¿En un fichero plano en disco?

Después lo lógico es:
(1) Buscar el jugador a modificar; El método variará segun los tengas almacenados (aquí puedes ser que tengas que utilizar un WHILE).
(2) Modificar los datos de ese jugador.
(3) Guardarlos de nuevo si es necesario.

goomba91 29-12-2010 12:05:16

dado que no me han enseñado aun a usar bases de datos ni ficheros, intuyo seran records en memoria.
P.D. tambien he considerado usar un procedure o function para ello, pero comobien dices mi problema es acceder a dicha informacion para despues modificarla

Neftali [Germán.Estévez] 29-12-2010 12:28:59

En ese caso lo primero que debes hacer es definir la estructura de los records tal y como te han enseñada para almacenar los datos de cada jugador.

Luego debes rellenar los records con datos (PROCESO DE ALTAS);
(1) Pidiendo los datos por pantalla
(2) Realizando una pequeña rutina que rellene unos cuantos datos de ejemplo.

Hay que entender que si los datos no se guardan en disco, cada vez que ejecutes el programa deberás volver a introducir los datos de los jugadores, de ahi que sea bueno tener el punto (2), la rutinilla que te rellene al menos 2 o 3 jugadores para no tener que hacerlo manualmente cada ejecución; eso te ahorarrá tiempo ál hacer pruebas.

Una vez tengas esto, se puede empezar a programar las modificaciones (PROCESO DE MODIFICACION). Se trataría de buscar un jugador y modificar sus datos.

goomba91 04-01-2011 11:58:03

ya he realizado el codigo del programa

Código Delphi [-]
program jugador;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Const
Nmax=3;

Type

t_jugador=record
   nombre:string;
   peso:real;
   altura:real;
   rendimiento:real;
   num_gol:integer;
   tiempo: integer;
end;

t_club= Array[1..Nmax] of t_jugador;

var
 i:integer;
 player: t_club;
 x,y:integer;
 rendto:real;

function frend(var n1:integer;var n2:integer):real;
begin (*subprograma que nos determinara el rendimiento *)
   rendto:= (x/y)*100;
end;

begin (*programa principal *)
  for i:=1 to Nmax do
  begin 
    write('Escribe el nombre del jugador: ');
    readln(player[i].nombre);
    write('Escribe el peso del jugador(kg): ');
    readln (player[i].peso);
    write('Escribe la estatura del jugador(m): ');
    readln (player[i].altura);
    write('Escribe el numero de goles marcados: ');
    readln(player[i].num_gol);
    write('Escribe el tiempo jugado en minutos: ');
    readln(player[i].tiempo);
    x:= player[i].num_gol;
    y:= player[i].tiempo;
    frend(x,y);
    write('rendimiento: ',rendto:4:2,' %');
    readln;
  end;
  readln;
end.
pero me surgen las siguientes dudas:
-¿como hago para poder introducir el maximo numero de jugadores que quiera?, antes de empezar a rellenar los datos de cada uno, es decir, pedirlo por pantalla previamente.
-sigo sin saber como modificar un dato, se que deberia buscar por el nombre del jugador y posteriormente por el dato a modificar, pero no se inicia la busqueda ni como modificarlo.

ecfisa 04-01-2011 18:12:35

Hola.

Te hago una observación sobre la funcion frend, no es necesario utilices var en los parámetros
Código Delphi [-]
function frend(n1, n2:integer):Real;
begin
   frend:= (n1/n2)*100;
end;


Sobre tu primera pregunta, creo que podes hacerlo de dos maneras:
1)
Código Delphi [-]
const
  Nmax= 1000; // o lo que gustes
var
  i, Tope: Integer;
  s: string;
begin
  Str(Nmax, s);
  Write('Cuantos jugadores?'+' (Maximo: '+ s +'):');
  Readln(Tope);
  for i:= 1 to Tope do
  ...

2)Pero creo que es un poco mejor finalizar el ingreso cuando se de Intro sin ingresar nada ('')
Código Delphi [-]
var
  player: t_club;
  Ingresados: Integer;
...
var
  x,y: Integer;
  rendto:real;
begin
  Ingresados:= 1;
  write('Nombre del jugador (nada para terminar): ');
  readln(player[Ingresados].nombre);
  while (i < Nmax) and (Player[Ingresados].nombre <> '') do
  begin
    Inc(Ingresados); 
    // pedir demas datos y mostrar resultados
    ...
    write('Nombre del jugador (nada para terminar): ');
    readln(player[Ingresados].nombre);
  end;
  ....
  ...
end.

Sobre tu segunda pregunta podrías hacer una función que te devuelva la posición dentro del arreglo si encuentra el dato,
o cero si no.
Código Delphi [-]
function Buscar(Nombre: string; Num: Integer): Integer;
var
  i,sw: Integer;
begin
  sw:= 0;
  for i:= 1 to Num do
  begin
    writeln(player[i].Nombre+' '+Nombre);
    if Player[i].Nombre = Nombre then
      sw:= i;
  end;
  Buscar:= sw;
end;

Una vez lleno el arreglo, se usaria así:
Código Delphi [-]
...
var
  jugador: string;// nombre a buscar
  Posic: Integer; // posición del dato en el arreglo
begin
  write('Buscar: '); Readln(jugador);
  Posic:= Buscar(Jugador, Ingresados); 
  if Posic > 0 then 
    //  los datos a modificar estarán en Player[Posic]
  ...

Es muy útil el consejo de Neftali si usas datos en memoria. Te va a ahorrar bastante tiempo...

También sería mejor si hicieras un procedimiento/función para el ingreso, otro para modificar, etc.

Un saludo.

goomba91 06-01-2011 14:28:04

gracias de antemano, pero tengo una dudilla.

que quieres decir cuando escribes:
Str(Nmax, s);

...
Inc(Ingresados);es decir, ¿para que sirve?

ecfisa 06-01-2011 15:33:24

Cita:

Empezado por goomba91 (Mensaje 386785)
gracias de antemano, pero tengo una dudilla.

que quieres decir cuando escribes:
Str(Nmax, s);

...
Inc(Ingresados);es decir, ¿para que sirve?

Hola.

Str es un procedimiento de la unit System que convierte una variable numérica a string ('Nmax' en este caso) y la almacena
en 's' de tipo string. En la ayuda de Delphi tenés toda la información. Se podría haber usado IntToStr con el mismo resultado.

La variable Ingresados almacena la cantidad de jugadores ingresados que en este caso, pueden ser menos o la totalidad-1 de
elementos del arreglo pero no más. De ahí que la línea Inc(Ingresados) incrementa la cantidad de jugadores ingresados en 1
en cada ingreso y en el ciclo while se evalúa ( i < Nmax) para que no supere el rango declarado del arreglo (Nmax).

Saludos.

goomba91 07-01-2011 18:20:00

pero no seria (Ingresados<Nmax) porque sino no le veo sentido dado que no he introducido ningun valor para i

ecfisa 14-01-2011 03:33:42

Cita:

Empezado por goomba91 (Mensaje 386920)
pero no seria (Ingresados<Nmax) porque sino no le veo sentido dado que no he introducido ningun valor para i

Si, tenés toda la razón.
Disculpá el error, pero escribí el código sin probarlo por que no tenía delphi en ese equipo... :o

Un saludo.


La franja horaria es GMT +2. Ahora son las 00:28:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi