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 05-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Question funcion de conjuntos,interseccion, union...

hola que tal

alguien sabe si delphi tiene una funcion para sacar la interseccion, union, diferencia etc. de los conjuntos, de matematicas discretas?


gracias

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #2  
Antiguo 05-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Delphi tiene el tipo de datos set. Busca en la ayuda acerca de él. También busca "set operators" y verás listados todos los operadores que puedes usar para este tipo de datos, incluidos los que mencionas.

// Saludos
Responder Con Cita
  #3  
Antiguo 05-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
muchas gracias roman lo investigare
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #4  
Antiguo 06-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Exclamation

estube leyendo la ayuda

dice que el signo "+" es union,"-" diferencia, "*" interseccion,

entonses acto seguido pase a probar.


con tres edit

Código Delphi [-]
 
 Er.text:=Ea.text + Eb.text;
este que es la union si funciona bien

ahora pase a probar la diferencia y la interseccion

Código Delphi [-]
 // diferencia
 Er.text:=Ea.text - Eb.text;
 
 //interseccion
 
 Er.text:=Ea.text * Eb.text;

es hambos casos me decia que la operacion no era el tipo

entonses decidi pasarlos a una bariable string.

Código Delphi [-]
 var
   a,b:string;
 begin
       a:=Ea.text;
       b:=Eb.text;
 
      Er.text:=a - b;
 // esta dos lineas estan en botones diferentes 
        Er.text:=a * b;
 
 end;

y me sigui marcando el mismo error. =S

despue sintente pasarlos a integer pero eso ya no es compatible.

o ahi un tipo especial para conjuntos?

saludos

gracias
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #5  
Antiguo 06-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por sakuragi
o ahi un tipo especial para conjuntos?
Estee...

Cita:
Empezado por yo mismo
Delphi tiene el tipo de datos set. Busca en la ayuda acerca de él.
Ahora, no te emociones mucho porque el tipo de datos set únicamente sirve para conjuntos cuyos elementos son enteros o de un tipo escalar. Por ejemplo,

Código Delphi [-]
type
  TDia = (Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado);
  TDias = set of TDia;

Aquí TDia es un tipo escalar- que básicamente es un rango de enteros con un nombre apropiado para usar en código: Domingo - 0, Lunes - 1, Martes -2, etc.

TDias es un tipo de datos que puede almacenar conjuntos de días:

Código Delphi [-]
var
  DiasLaborales: TDias;
  FinDeSemana: TDias;

begin
  DiasLaborales := [Lunes..Viernes];
  FinDeSemana := [Sabado, Domingo];

  Assert(DiasLaborales*FinDeSemana = []);
end;

Los conjuntos los especificas listando sus elementos entre corchetes [] o indicando un rango (como en DiasLaborales).

En el ejemplo ves que la intersección de DiasLaborales y FinDeSemana es el conjunto vacío que representas en código por [].

Puedes declarar tipos de conjuntos (set of) para cualquier tipo escalar.

// Saludos
Responder Con Cita
  #6  
Antiguo 09-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Question

hola que tal de nuevo

ahi forma de pasar lo que tengo en un edit.text a un set?

Código Delphi [-]
 a:=[strtoint(Ea.text)];

asi lo puse y no me marco erro

ala hora de haser la operacion si =S

no se como regresar e resultado de los set's para mostrarlos en un edit

alguna sugerencia?

gracias

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #7  
Antiguo 09-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Exclamation

bueno resumiendo
el problema que tengo es como pasarle los datos a un dato set

ya se mediante un edit, combo o memo


y bisebersa

alguna idea?


de hante mano gracias

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #8  
Antiguo 09-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Para hacer lo que pides, tendrás que basarte en el valor del Edit o Combo para ir asignando valores al conjunto o ver que valores tiene el conjunto para rellenar el Edit o el Combo. Lo que no puedes hacer es una asignación tan "directa" entre un conjunto y un Edit, como pusiste más arriba.

Por ejemplo, siguiendo con el ejemplo de roman, imaginemos que queremos rellenar un Memo con los días laborales:

Código Delphi [-]
type
  TDia = (Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado);
  TDias = set of TDia;

var
  DiasLaborales: TDias;
begin
  DiasLaborales := [Lunes, Martes, Miercoles, Jueves, Viernes, Sabado];
  Memo1.Clear;

  if Lunes in DiasLaborales then
    Memo1.Append('Lunes');

  if Martes in DiasLaborales then
    Memo1.Apeend('Martes');

  // Y así seguiríamos con los demás dias
end;

Verás que el Memo se irá rellenando según el contenido del conjunto "DiasLaborales" (es más, te sugiero jugar un poco con el contenido de "DiasLaborales" para que vayas viendo el resultado). Tambien, puedes hacerlo a la inversa, rellenar el conjunto según el Memo.

Código Delphi [-]
  DiasLaborales := []; // Vaciamos el conjunto

  if Memo1.Lines[0] = 'Lunes' then
    DiasLaborales := DiasLaborales + [Lunes];
  ...

Espero haberme explicado bien! (cualquier cosa vuelve a preguntar)

Saludos!

Última edición por jmariano fecha: 09-09-2005 a las 14:17:02.
Responder Con Cita
  #9  
Antiguo 09-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quizá les interesen este par de funciones:

Código Delphi [-]
uses TypInfo;

function StrToDia(S: String): TDia;
begin
  Result := TDia(GetEnumValue(TypeInfo(TDia), S))
end;

function DiaToStr(Dia: TDia): String;
begin
  Result := GetEnumName(TypeInfo(TDia), Ord(Dia));
end;

Por ejemplo:

Código Delphi [-]
var
  Dia: TDia;

begin
  Dia := StrToDia(Edit1.Text);

  // ó

  Edit1.Text := DiaToStr(Dia);
end;

Se puede rellenar un combo con

Código Delphi [-]
var
  Dia: TDia;

begin
  for Dia := Domingo to Sabado do
    if Dia in DiasLaborales then
      ComboBox1.Items.Add(DiaToStr(Dia));
end;

// Saludos
Responder Con Cita
  #10  
Antiguo 09-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
muchas gracias

me ta sirviendo


una duda mas

como le hago para que no ponga
lunes y martes en lineas separadas

lunes
martes

asi me los pone en el memo

ahi forma de ponerlos seguidos

"lunes martes"
Código Delphi [-]
 if Lunes in DiasLaborales then
    Memo1.Append('Lunes');

  if Martes in DiasLaborales then
    Memo1.Apeend('Martes');

en ves de poner una constante strgin como en el codigo
Código Delphi [-]
  DiasLaborales := []; // Vaciamos el conjunto

  if Memo1.Lines[0] = 'Lunes' then
    DiasLaborales := DiasLaborales + [Lunes];

enves de lunes poner una variable, por que si tengo un conjunto de numero
que pueden ir de 0 hasta 300

para compararlos todos, vas ser mucho mucho codigo por tantos
posibles conparaciones.

bueno todo esto lo quiero haser para

por ejemplo

tener dos edir o combobox o memos
para insertar los conjuntos por ejemplo

conjnto a " 2 3 4 5 3"
conjunto b " 3 4 5 6 7 "
eso numero insertarlos como ya dije hanteriormente

pasar ese conjunto a y b

a una variable que creamos de dato set

para haser la operaciones que se puden haser con set

ya teniendo el resultado

desplegarlo en un edit,combo o memo

espero haver sido claso

saludos

gracias



...
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #11  
Antiguo 09-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
gracias roma

te me delantaste

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #12  
Antiguo 09-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ya veo por donde vas. A las dos funciones anteriores agrégale estas dos:

Código Delphi [-]
// Convierte lista separada por comas en variable de tipo TDias
function StrToDias(S: String): TDias;
var
  Lista: TStrings;
  I: Integer;

begin
  Lista := TStringList.Create;
  Result := [];

  try
    Lista.CommaText := S;
    for I := 0 to Lista.Count - 1 do
      Include(Result, StrToDia(Lista[i]));
  finally
    Lista.Free;
  end;
end;

// Convierte variable de tipo TDIas en lista separada por comas
function DiasToStr(Dias: TDias): String;
var
  Lista: TStringList;
  Dia: TDia;

begin
  Lista := TStringList.Create;

  try
    for Dia := Domingo to Sabado do
      if Dia in Dias then
        Lista.Add(DiaToStr(Dia));

    Result := Lista.CommaText;
  finally
    Lista.Free;
  end;
end;

Pero aquí estoy suponiendo que vas a escribir en los edit tus conjuntos separando los elementos con comas y no espacios. Aunque a fin de cuentas así es como se escriben los conjuntos ¿no?

// Saludos
Responder Con Cita
  #13  
Antiguo 09-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Muy bueno roman! Me gustaron tus funciones para convertir entre cadenas y conjuntos (gracias a ti acabo de estrenar la herramienta "Code Librarian" de las GExperts )

Saludos!

Última edición por jmariano fecha: 09-09-2005 a las 22:11:11.
Responder Con Cita
  #14  
Antiguo 09-09-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
muchas gracias

les debo una cena




saludos.

una pregunta roman, donde aprendiste tanto? o como?

gracias
__________________
OpenSuse OpenOffice.org icomputo
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


La franja horaria es GMT +2. Ahora son las 14:42:00.


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