cesar.zapata
22-10-2012, 22:13:25
Hola soy nuevo en este foro de delphi , realmente no conozco nada de este programa pero por cuestiones de la universidad hemos empezado a utilizar este programa que realmente resulta interesante.
Me han pedido Hacer un algoritmo referido a este tema
Escribir un algoritmo (y programa) que dados:
Un día (dd): variable unDia
Un mes (mm): variable unMes
Un año (aaaa) variable unAny
Deberá:
1. Definir una variable lógica anyOK
Se aceptan años entre 1900 y 2100.
2. Definir una variable lógica mesOK
El mes debe estar incluido (naturalmente) en el rango 1-12.
3. Definir una variable lógica diaCreible (de 1 a 31)
Ya sabemos que todos los meses no son de 31 días y menos febrero pero eso lo
resolveremos en un próximo ejercicio.
4. Escribir una expresión lógica que dado un año (variable unAny), diga si es o no bisiesto
////La duda es siguiente como tengo que utilizar la comanda STRING para que la fecha que tenga que introducir el usuario sea la indicada dd/mm//aaaa , desde ya muchas gracias por prestar atencion a mi duda ///
Casimiro Notevi
22-10-2012, 22:54:25
La duda es siguiente como tengo que utilizar la comanda STRING para que la fecha que tenga que introducir el usuario sea la indicada dd/mm//aaaa
Puedes usar un componente tdatetimepicker o puedes usar un componente maskedit, le asignas la máscara y nada más.
Otra cosa es que quieras hacerlo tú mismo, para aprender, en pascal.
Entonces es como cualquier otro lenguaje, sólo que usando los comandos y funciones apropiados.
Delphius
23-10-2012, 00:07:00
La duda es siguiente como tengo que utilizar la comanda STRING
Yo diría que primero empecemos con clases de ortografía, es comandO
Y en segundo lugar, ¡En Delphi no existen comandos! Y si existiera el "comando", dudo que se llame string :rolleyes:
String es un tipo de dato, pensado para almacenar caracteres alfanuméricos.
¿Y si empezamos a estudiar mejor las nociones del lenguaje primero y describir las dudas puntuales de forma apropiada? ¿En que tienes dudas? ¿Que has estado haciendo y te trabaste?
Saludos,
nlsgarcia
23-10-2012, 01:08:44
cesar.zapata,
Revisa este código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
MaskEdit1: TMaskEdit;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function Valida_Date1(Day, Month, Year : Integer) : Boolean;
function Valida_Date2(Day, Month, Year : Integer) : Boolean;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Función 1 de Validación de Fecha
function Valida_Date1(Day, Month, Year : Integer) : Boolean;
var
AuxYear : Boolean;
begin
// Valida que Dia, Mes y Año sean diferente de cero
if Day = 0 then
begin
ShowMessage('Día Invalido');
Result := False;
Exit;
end;
if Month = 0 then
begin
ShowMessage('Mes Invalido');
Result := False;
Exit;
end;
if Year = 0 then
begin
ShowMessage('Año Invalido');
Result := False;
Exit;
end;
// Valida que el mes este entre 1 y 12
if (Month < 1) OR (Month > 12) then
begin
ShowMessage('Mes Invalido');
Result := False;
Exit;
end;
// Valida si el Año es Bisiesto
AuxYear := False;
if ((Year Mod 4) = 0) and ((Year Mod 100) <> 0) then
begin
AuxYear := True;
end;
if ((Year Mod 4) = 0) and ((Year Mod 100) = 0) and ((Year Mod 400) = 0) then
begin
AuxYear := True;
end;
// Valida que el rango correcto de días según el mes
case Month of
9, 4, 6, 11:
if (Day < 1) or (Day > 30) then
begin
ShowMessage('Día Invalido');
Result := False;
Exit;
end;
2:
if (Month = 2) and (AuxYear) then
begin
if (Day < 1) or (Day > 29) then
begin
ShowMessage('Día Invalido');
Result := False;
Exit;
end;
end
else
begin
if (Day < 1) or (Day > 28) then
begin
ShowMessage('Día Invalido');
Result := False;
Exit;
end;
end;
1, 3, 5, 7, 8, 10, 12:
if (Day < 1) or (Day > 31) then
begin
ShowMessage('Día Invalido');
Result := False;
Exit;
end;
end;
Result := True;
end;
// Función 2 de Validación de Fecha
function Valida_Date2(Day, Month, Year : Integer) : Boolean;
var
ValDate : TDateTime;
begin
Try
// Usa la función EncodeDate para validar la fecha
ValDate := EncodeDate(Year, Month, Day);
Except
Result := False;
Exit;
end;
Result := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Formatea la fecha
MaskEdit1.EditMask := '00-00-0000';
// Coloca la fecha actual
MaskEdit1.Text := FormatDateTime('dd/mm/yyyy', Now);
MaskEdit1.AutoSelect := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
StrDate : String;
Day, Month, Year : Integer;
begin
StrDate := MaskEdit1.Text;
Day := StrToInt(Copy(StrDate,1,2));
Month := StrToInt(Copy(StrDate,4,2));
Year := StrToInt(Copy(StrDate,7,4));
// Validata la fecha en forma programática detallada (Tipo Pascal)
If Not Valida_Date1(Day,Month,Year) then ShowMessage('Fecha Invalida');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
StrDate : String;
Day, Month, Year : Integer;
begin
StrDate := MaskEdit1.Text;
Day := StrToInt(Copy(StrDate,1,2));
Month := StrToInt(Copy(StrDate,4,2));
Year := StrToInt(Copy(StrDate,7,4));
// Valida la fecha usando la función EncodeDate
If Not Valida_Date2(Day,Month,Year) then ShowMessage('Fecha Invalida');
end;
end.
En el código anterior tienes dos funciones de validación de fechas, manejo de Strings y uso del control MaskEdit que te sirviran de base para tu proyecto.
Espero sea útil :)
Nelson
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.