Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-03-2009
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
consultita tipo de dato...

buenas gente como va?, tengo una pequeña dudita que como siempre supuse la gente del foro que es bien grosa me la puede aclarar.
Estoy diagramando lo que seria un juego del Ahorcado, y primeramente me surgio la duda sobre que tipo de dato me almacenaria la palabra, pense en un arreglo por el acceso directo, y he aqui mi problema el arreglo es de dimension fisica fija verdad?, y las palabras ingresadas no tienen especificada la dimension. Existe alguna forma de dimensionar el arreglo al ingresar la palabra acorde al tamaño de esta?, o directamente me pienso otra estructura?quizas este encarando mal el problema gracias de antemano!
Responder Con Cita
  #2  
Antiguo 19-03-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola loadminds,
Dices que estás diagramando... ¿podríamos ver una muestra de ellos? Digo... para tener una idea más clara de como estás enfocando el programa.

El asunto es que como estás adelantando en algo y nos pides recomendaciones, es necesario que nos brindes algo más de información para ver de que modo ayudarte. Tu tienes una visión, y es muy probable que la visión de quienes pasemos por aquí tengamos una propia... Es más, tal vez la manera en como veamos o nos imaginamos al tema no sea compatible con la tuya.
¿Me entiendes?
Comentanos algo más concreto, por favor.

Pareciera ser que tienes un vector o arreglo estático. Algo así tal vez:
Código Delphi [-]
type
TArreglo = array[1..MAX_LETRAS] of Char;

var
MiArreglo: TArreglo;

Se puede definir un arreglo dinámico, si tu duda pasa por el tema del "tamaño" o la cantidad de caracteres que pueda tener la palabra:

Código Delphi [-]
type
  TArregloDinamico = array of char;

Y de éste modo puedes definirle su tamaño en tiempo de ejecución mediante la función SetLength():

Código Delphi [-]
SetLength(miarreglodinamico, 24);

Y como es dinámico, la primera posición es 0 y la última ese tamaño menos 1 (según el ejemplo, 23). Puedes recorrer el array de este modo:
Código Delphi [-]

for i := Low(miarreglodinámico) to High(miarreglodinamico) do ...

Y como todo array, vector o arreglo se puede acceder a un elemento mediante el índice:

Código Delphi [-]
arreglo[indice] := 'A';

Recomiendo que leas la ayuda que ofrece Delphi sobre dynamics arrays.

Pero a como lo veo, este método es un tanto impráctico y "redundante". Se puede trabajar con el tipo string tranquilamente. El tipo string funciona como un vector de modo que puede tranquilamente definirse su tamaño y acceder a una posición determinada del mismo. La diferencia es que aquí al primer elemento le corresponde el índice 1.

Código Delphi [-]
var texto: string;
begin
  SetLength(texto);
  texto[1] := 'A';
  for i := 1 to Length(texto);
     texto[i] := ...

Me gustaría que nos comentases con mayores detalles sobre tus dudas, inquietudes. "Muestranos" algo con lo que podamos entenderte, opinar y ofrecerte soluciones y/o alternativas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 19-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, puedes también guardarlo en un StringList.

Código Delphi [-]
 sl : TStringList;
 .................
 sl := TStringList.Create;
 ............
 //Para guardar
 sl .Add('A');
 sl.Add('L');
 .................
 //Para recorrer
 for i := 0 to sl.Count-1 do
  showmessage(sl[i]);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 19-03-2009
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.737
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
En pascal (y Delphi) cada string es un arreglo. Puedes acceder a cada letra con subíndices.

- La primera posición (0) indica el largo de la cadena.
- Las siguientes posiciones te dan cada caracter.

Código Delphi [-]
var 
   s : string;
begin
   s := 'Delphi';
   ShowMessage('La primera letra de S es : '+s[1]);   
   ShowMessage('El largo de S es : '+IntToStr(Ord(s[0]));   
end;
Responder Con Cita
  #5  
Antiguo 19-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, creo que nos hemos complicado Marcelo, ademas que se me ha ido lo acaba de explicar Duosiloa que cabeza que tengo, loadminds mejor que lo hagas como te ha indicado Duosiloa manejandolo como un String.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 19-03-2009
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
primero que nada muchisimas gracias por las respuestas!!, esta tarde intentare con las opciones que me dieron. La idea es sencilla, el usuario ingresa una palabra, la que necesito almacenarme en la estructura en cuestion.
Luego mediante botones (uno por letra), el usuario va tirando posibles letras para intentar adivinar la palabra, la cual va actualizando a medida que acierta, o en caso contrario contablizando los errores.
Es decir, almacenada ya la palabra, deberia analizarla caracter a caracter comparando con el ingresado hasta el final de esta y asi concluir si es una letra erronea o tiene alguna aparicion.
Quizas soy un poco confuso al explicarlo, esta tarde tratare de tener algo de codigo para que sea mas sencillo, saludos a todos y gracias x los datos!!
Responder Con Cita
  #7  
Antiguo 21-03-2009
loadminds loadminds is offline
Miembro
 
Registrado: nov 2008
Posts: 13
Poder: 0
loadminds Va por buen camino
bueno gente logre que funcione pero me quedo alguna que otra duda minima.
Antes de consultarles doy una idea mas o menos de como seria el Form, se ingresa una nueva palabra en un Tmaskedit de otro Form, que se almacena en un string y se visualiza su inicial y tantos guiones como letras resten en este formato 'L _ _ _ _ _ '. Tengo 6 Timages que voy mostrando y ocultando de acuerdo a los errores, que se contabilizan tambien en un Tedit y finalmente un boton por cada letra:

Tedit.Text:=palabra[1]; //inicial
for i:=2 to length(palabra) do
Tedit.Text:=Tedit.Text+' _ '; // resto de las letras separadas por espacio para poder contar la cant

y al ir adivinando letra a letra modifico la palabra en la posicion de la letra por un '_' y en una segunda variable string que contiene todos guiones por la o las letras adivinadas. Asi se me iria "formando" en la variable auxiliar la palabra letra a letra. Finalmente muestro la variable auxiliar con la inicial incluida en el Tedit de esta forma:

procedure actualizarletra(i:integer; letra:char);
begin
palabra[i]:='_';
palabramodificada[i]:=letra;
Tedit.Text:=palabramodificada;
end;

Al ser char, no puedo meter el espacio adelante ni atras para mantener el formato inicial y no quedar separacion entre los guiones ('L______' sin poder contar las q qdan) Se les ocurre alguna idea para lograrlo?me suena a demasiado sencillo pero no le encuentro la vuelta.
Y una ultima duda pero primordial, es como terminar el juego, (el gameover es facil, hay un limite en cantidad de errores) pero para ganarlo se me ocurre analizar la variable palabra verificando que sean todos guiones (la palabra ya se descubrio) o viceversa con la variable auxiliar, pero deberia hacerlo cada vez que clickeo una letra?
Responder Con Cita
  #8  
Antiguo 23-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por loadminds Ver Mensaje
bueno gente logre que funcione pero me quedo alguna que otra duda minima.
Antes de consultarles doy una idea mas o menos de como seria el Form, se ingresa una nueva palabra en un Tmaskedit de otro Form, que se almacena en un string y se visualiza su inicial y tantos guiones como letras resten en este formato 'L _ _ _ _ _ '. Tengo 6 Timages que voy mostrando y ocultando de acuerdo a los errores, que se contabilizan tambien en un Tedit y finalmente un boton por cada letra:

Tedit.Text:=palabra[1]; //inicial
for i:=2 to length(palabra) do
Tedit.Text:=Tedit.Text+' _ '; // resto de las letras separadas por espacio para poder contar la cant

y al ir adivinando letra a letra modifico la palabra en la posicion de la letra por un '_' y en una segunda variable string que contiene todos guiones por la o las letras adivinadas. Asi se me iria "formando" en la variable auxiliar la palabra letra a letra. Finalmente muestro la variable auxiliar con la inicial incluida en el Tedit de esta forma:

procedure actualizarletra(i:integer; letra:char);
begin
palabra[i]:='_';
palabramodificada[i]:=letra;
Tedit.Text:=palabramodificada;
end;

Al ser char, no puedo meter el espacio adelante ni atras para mantener el formato inicial y no quedar separacion entre los guiones ('L______' sin poder contar las q qdan) Se les ocurre alguna idea para lograrlo?me suena a demasiado sencillo pero no le encuentro la vuelta.
Y una ultima duda pero primordial, es como terminar el juego, (el gameover es facil, hay un limite en cantidad de errores) pero para ganarlo se me ocurre analizar la variable palabra verificando que sean todos guiones (la palabra ya se descubrio) o viceversa con la variable auxiliar, pero deberia hacerlo cada vez que clickeo una letra?
Hola de nuevo, no te endiendo muy bien, que recuerde este jueguito consiste si introduces o seleccionas una letra, se busca en todas las posiciones donde se encuentra y se reemplaza la letra en todas esas posiciones y también tienes la opción de indicar directamente toda la palabra, claro que tiene numero n de intentos.

Lo que se me ocurre es esto, digamos que introduces la letra desde un Edit y lo que se va formando lo muestras en un label.

Código Delphi [-]
var
 Aux, Palabra : String;
 Ind : Integer;
begin
  //En Aux estaría la palabra completa que viene de tu otro form
 Aux := 'Algo';
 //En tu label como dices tu, estaría la inicial y los guiones osea A___
 //y lo guardamos también en palabra
 Palabra := Label.Caption;
 
 //En edit1 esta la letra que ha introducido, buscamos y reemplazamos
 While Pos(Edit1.Text, Aux) > 0 do
  begin
   Ind := Pos(Edit1.Text, Aux);
   Aux[Ind] := '_';
   Palabra[Ind] := Edit1.Text[1];
  end;
 Label2.Caption := Palabra; //Actualizamos nuestro label
 Edit1.Clear;

Ahora para saber si ha ganado, en tu label no tendría que haber ningún guión, sería hacer un "Pos" , deberías también dar la opción de introducir toda la palabra y si es igual a la que tienes, entonces ya ha ganado sino, que siga introduciendo letras hasta el numero de veces que tu definas.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tipo de dato MaMu OOP 1 15-12-2008 07:12:58
tipo de dato arnedokpo Conexión con bases de datos 1 14-07-2008 16:37:06
Tipo de dato nelem Internet 4 15-01-2008 16:46:06
Tipo de Dato BetoAlonso Varios 11 09-12-2007 00:30:01
Identificar el tipo de dato kayetano MySQL 1 28-07-2004 19:43:54


La franja horaria es GMT +2. Ahora son las 22:16:28.


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
Copyright 1996-2007 Club Delphi