• Domingo 15 de Septiembre de 2019, 14:41

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - epayan

Páginas: [1]
1
Pascal / aporte , punto de venta
« en: Domingo 18 de Julio de 2010, 06:44 »
En esta ocasión les hago una aportacion de un programita ejemplificando el uso de registros y archivos, entre otras cosas filtros ,ordenamioentos  un poco lentos pero funcionan ,ya uds le haran modificaciones pertinentes .....  ojala que les sea de utilidad.Compilado en FreePascal IDE for dos 0.9.2

algunas pantallas aqui -->h t t p ://pillin-slk.blogspot.com/2010/07/una-demostracion-de-archivos-y.html

2
Pascal / Aporte , Calendario
« en: Jueves 10 de Diciembre de 2009, 04:43 »
En Otro foro vi que alguien solicitaba un calendario y la forma convencional de presentarlo en pantalla , por lo que he visto no hay alguno
he aqui mi granito de arena, aceptamos sugerencias y correcciones..espero le sirva a alguien, o cuando menos se de una idea para generar el suyo.

el siguiente es un ejemplo de una funcion que recoje un tecla, la funcion en si, dibuja un calendario desplegando los dias de la semana y la particularidad de manipular lo meses y los años con las flechas, ademas de tomar el dia segun se posicione el cursor.

nota: compilado en freepascal

Código: Pascal
  1.  
  2. Program EjemploCalendario;
  3. Uses crt,sysutils,Calendario;
  4. {cuerpo del programa}
  5. var
  6.   Tecla:char;
  7.   Fecha:String[10];
  8. Begin
  9.    textattr:=14+1*16;
  10.    clrscr;
  11.    Fecha:=FormatDateTime('DD/MM/YYYY',Date);
  12.    Tecla:= FechaAlmanaque(Fecha,10,12,14,4);
  13.    write ('La Fecha es :',fecha);
  14.    readkey;
  15. End.
  16.  
  17.  
  18.  


algunas imagenes :
h t t p:// 4.bp.blogspot.com/_5QIJNhCUCcc/Sx_nNDqOSCI/AAAAAAAAADY/ZjWfeb6V-IU/s1600-h/pantalla+fecha2.JPG
h t t p:// 3.bp.blogspot.com/_5QIJNhCUCcc/Sx_wf_uuskI/AAAAAAAAADw/oUTtOBgG0eY/s1600-h/pantalla+fecha8.JPG
h t t p:// www.pillin-slk.blogspot.com/

3
Pascal / funcion edita fecha
« en: Martes 13 de Octubre de 2009, 18:35 »
en ocasiones nos vemos en la necesidad de realizar trabajos en la escuela , en donde pidamos fechas  y no contamos con una validacion adecuada. En caso de tener un maestro que se fije en todo , hasta en las validaciones..
pues bien , les hago una entrega de una funcion que valida, si la fecha es corecta o no tomando encuenta los años biciestos, en formato DD/MM/YYYY, de manera rapida que les sea de utilidad , mejoras acepto correcciones..


Código: Pascal
  1.  
  2. program editafechaprueba;
  3. uses crt,utileria;
  4. var
  5.    fecha:string[10];
  6.    tecla:char;
  7. begin
  8.    textattr:=15+0*16;
  9.    clrscr;
  10.    textattr:=15+0*16;
  11.    gotoxy(10,10);write('Fecha : ');
  12.  
  13.    tecla:=EditaFecha(Fecha,18,10,14,1);
  14.  
  15.    textattr:=15+0*16;
  16.    gotoxy(10,20);write('El resultado es : ',Fecha);
  17.    readln;
  18.  
  19. end.
  20.  
  21.  
  22.  
  23.  


la funcion recoge una tecla de salida, que pudiera serles utiles en otras operaciones.

4
Pascal / ejemplo de listas con apuntadores
« en: Viernes 2 de Octubre de 2009, 21:21 »
la ultima entrega que hice fué de Archivos tipeados y registros.
SI bien son utiles para manejar informacion permanente en la computadora , no es muy recomendable trabajar directamente con ellas, la razon es la velocidad..

Para solventar este problema se utilizan la memoria, y como usar esta memoria ?.. Nada mas y nada menos que con apuntadores , manajedos atravez de listas. He aqui un ejemplo de como cargar un archivo tipeado (records) y trabajar con ese archivo en la memoria, se nota mucho la diferencia a que si se trabajára con los archivos fisicamente .

que les sea de utilidad
anexo el programa principal
Código: Pascal
  1.  
  2. program ejemploapuntadores;
  3. uses crt,utileria,apuntadores;
  4.  
  5. {cuerpo del programa}
  6. Var
  7.   TIApuntadorRegistro:ApuntadorRegistro;
  8.   Inicio,Final:ApuntadorRegistro;
  9.   Archivo:TipoArchivo;
  10.   Registro:TipoRegistro;
  11.   tecla:char;
  12.   Tamanio,contador:longint;
  13.   Opcion:Integer;
  14.   ArregloSeleccion:arregloVertical;
  15.   Ventana1:Save_screen;
  16. Begin
  17.     textattr:=15+1*16;
  18.     clrscr;
  19.     ArregloSeleccion[1]:='Mant. a Reg.';
  20.     ArregloSeleccion[2]:=' Listado    ';
  21.     ArregloSeleccion[3]:='Acerda de ..';
  22.     ArregloSeleccion[4]:='   Salir    ';
  23.     cuadro3d(1,1,80,3,2,1);
  24.     Textattr:=0+2*16;
  25.     gotoxy(2,2);write(' Ejemplos del uso de Apuntadores y Registros en Pascal 11/10/2009');
  26.     cuadro3d(2,23,79,25,2,1);
  27.     Textattr:=0+2*16;
  28.     gotoxy(45,24);write('epayan76@hotmail.com');
  29.     InicializaLista(Inicio,Final);
  30.     AperturaDeArchivo(Archivo);
  31.     CargaArchivoAMemoria(Archivo,Registro,Inicio,Final,TIApuntadorRegistro);
  32.     Close(archivo);
  33.     Repeat
  34.          cursoroff;
  35.          Opcion := MenuVertical(ArregloSeleccion,4,1,5,0,7,15,1);
  36.          case Opcion of
  37.              1 : Begin
  38.                    GetScreen(ventana1);
  39.                    Alta(Registro,Inicio,Final,TIApuntadorRegistro);
  40.                    PutScreen(Ventana1);
  41.                  End;
  42.              2 : Begin
  43.                    GetScreen(ventana1);
  44.                    EfectoScroll(Inicio,Final,TIApuntadorRegistro);
  45.                    PutScreen(Ventana1);
  46.                  End;
  47.              3 : Begin
  48.                    GetScreen(ventana1);
  49.                    AcercaDe;
  50.                    PutScreen(Ventana1);
  51.                  End;
  52.          end;{case}
  53.     Until ( Opcion = 4) or ( Opcion = 27);
  54. End.
  55.  
  56.  
  57.  


anexo archivo zip con las utilerias y el archivo.dat que debera estar en c:

5
Pascal / pequeño ejemplo de archivos
« en: Jueves 24 de Septiembre de 2009, 02:58 »
dentro de la humilde aportacion que les traigo, acontinuacion un pequeño ejemplo del manejo de  archivos tipeados
cito el programa principal y anexo dos unidades la primera utileria.pas y la segunda archivos.pas
compilado en freepascal.

espero que les sea de utilidad.
Código: Pascal
  1.  
  2. program RegArchivos;
  3. uses crt,strings,go32,utileria,archivos,sysutils; {unidades o utilerias utilizadas}
  4.  
  5. {-----*-------*-------*-------*--------*------*------*------*-------*------}
  6. { Cuerpo del programa }
  7. Var
  8.     Archivo  : TipoArchivo; {tipo del archivo}
  9.     registro : TipoRegistro; {tipo del registro}
  10.     Ventana1 , Ventana2 , Ventana3 : save_screen;
  11.     Opcion , Numero : integer;
  12.     seleccion : ArregloVertical;
  13.     Tecla : char;
  14. Begin
  15.     textattr:=15+1*16;
  16.     borraarea(1,1,79,25,15,1);
  17.     clrscr;
  18.     {agregamos un menu}
  19.     Seleccion[1]:='Mant. de Regis';
  20.     Seleccion[2]:=' Listado       ';
  21.     Seleccion[3]:=' Salir        ';
  22.     cuadro3d(1,1,80,3,2,1);
  23.     Textattr:=0+2*16;
  24.     gotoxy(2,2);write('Programa que Ejemplifica el uso de Archivos y Registros en Pascal .11/10/2009');
  25.     cuadro3d(2,23,79,25,2,1);
  26.     Textattr:=0+2*16;
  27.     gotoxy(45,24);write('epayan76@hotmail.com');
  28.     Repeat
  29.        cursoroff;
  30.        opcion := MenuVertical(Seleccion,3,1,5,0,7,15,1);
  31.        case opcion of
  32.             1 : begin
  33.                    GetScreen(ventana1);
  34.                    AperturaDeArchivo(Archivo); {aperturamos el archivo}
  35.                    Alta(Archivo,Registro);
  36.                    close(Archivo);
  37.                    PutScreen(Ventana1);
  38.                 End;
  39.             2 : Begin
  40.                    GetScreen(ventana1);
  41.                    AperturaDeArchivo(Archivo); {aperturamos el archivo}
  42.                    EfectoScroll(Archivo,Registro);
  43.                    Close(Archivo);
  44.                    PutScreen(Ventana1);
  45.                 End;
  46.        End;{case}
  47.     Until (Opcion= 3) or (Opcion = 27);
  48.     cursoron;
  49.     textattr:=15+0*16;
  50.     clrscr;
  51. End.
  52. {este programa puede ser usado y distribuido libremente con fines didacticos y educativos}
  53.  
  54.  

6
Pascal / utilerias
« en: Jueves 17 de Septiembre de 2009, 22:49 »
hola foro, revisando el baul me tope con algunas utilerias usadas que me gustaria reciclar y compartir , para los programas inline, ya un poco viejitos recondicionados para freepascal..
un saludo y espero que les sea util..
los procedimientos y funciones que se incluyen:
1.- GetScreen .
2.- PutScreen.
3.- Marco.
4.- cuadro.
5.- cuadro3d.
6.-PresentaTextoDerecha.
7.-PresentaTextoIzquierda.
8.-PresentaTextoMedio.
9.-MenuVertical.
10.- MenuHorizontal.
11.- Concatena.
12.-RellenaBlancos.
13.-RellenaCaracter.
14.-Borraarea
15.-ConvierteMayuscula.
16.-EditaCuerda.
17.-EditaFecha.
18.-EditaPassword
19.-EditaEntero.
20.-EditaByte.
21.-EditaLongint.
22.-EditaReal.
23.-NumAPalabra

aquie un ejemplo:
Código: Pascal
  1. program prueba3;
  2. uses crt,strings,go32,utileria,sysutils; {unidades o utilerias utilizadas}
  3.  
  4. {-----*-------*-------*-------*--------*------*------*------*-------*------}
  5. { Cuerpo del programa }
  6. Var
  7.     Ventana1 : save_screen;
  8.     Opcion   , Numero : integer;
  9.     seleccion : ArregloVertical;
  10.     Tecla : char;
  11. Begin
  12.     textattr:=15+1*16;
  13.     borraarea(1,1,79,25,15,1);
  14.     clrscr;
  15.     {agregamos un menu}
  16.     Seleccion[1]:='Mant. de Regis';
  17.     Seleccion[2]:='  Reportes    ';
  18.     Seleccion[3]:=' Modif. Reg.  ';
  19.     Seleccion[4]:=' Listado      ';
  20.     Seleccion[5]:=' Salir        ';
  21.     cuadro3d(1,1,80,3,2,1);
  22.     Textattr:=0+2*16;
  23.     gotoxy(2,2);write('Programa que Ejemplifica el uso de Archivos y Registros en Pascal .11/10/2009');
  24.     cuadro3d(2,23,79,25,2,1);
  25.     Textattr:=0+2*16;
  26.     gotoxy(45,24);write('Elabor¢: Edwin Ariel Payan Haas');
  27.  
  28.     Repeat
  29.        cursoroff;
  30.        opcion := MenuVertical(Seleccion,5,1,5,0,7,15,1);
  31.        case opcion of
  32.             1 : begin
  33.                    GetScreen(ventana1);
  34.                    gotoxy(30,10);write(hola);
  35.                    readln;
  36.                    PutScreen(Ventana1);
  37.                 End;
  38.             2 : begin
  39.                 End;
  40.             3 : Begin
  41.                 End;
  42.             4 : Begin
  43.                    GetScreen(ventana1);
  44.                    gotoxy(30,10);write(hola);
  45.                    readln;
  46.                    PutScreen(Ventana1);
  47.                 End;
  48.        End;{case}
  49.     Until (Opcion= 5) or (Opcion = 27);
  50.     textattr:=15+1*16;
  51.     borraarea(1,1,79,25,15,1);
  52.     clrscr;
  53.  
  54. End.
  55.  
  56.  


un ejemplo visual de este codigo:
http: // 2.bp.blogspot.com/_5QIJNhCUCcc/SrP6imfuOoI/AAAAAAAAABg/HTFASS_gZv8/s1600-h/pantalla+demo.JPG


Agregando mas codigo a la utileria incluyo una funcion convierte numero a palabras , el codigo estaba en Visual Basic y se porto a pascal. cito las fuentes , por que hay que dar credito a los autores http:/ / gchable.wordpress.com/2007/10/14/4/ , al parecer el autor es Saúl López con una pequeña modificación de ByPaco² .
el codigo anexado a continuacion:

Código: Pascal
  1. Function NumAPalabra(Cantidad:real):String;
  2. const
  3.    {Declaramos las unidades del 1 al 29}
  4.    Unidades: array [1..29] of string[15]= ('UN','DOS','TRES','CUATRO','CINCO','SEIS','SIETE','OCHO','NUEVE','DIEZ',
  5.                                              'ONCE','DOCE','TRECE','CATORCE','QUINCE','DIECISEIS','DIECISIETE','DIECIOCHO','DIECINUEVE','VEINTE',
  6.                                              'VEINTIUN','VEINTIDOS','VEINTITRES','VEINTICUATRO','VEINTICINCO','VEINTISEIS','VEINTISIETE','VEINTIOCHO','VEINTINUEVE');
  7.    {declaramos las decenas del 10 al 90}
  8.    Decenas : array [1..9] of String[15] = ('DIEZ','VEINTE','TREINTA','CUARENTA','CINCUENTA','SESENTA','SETENTA','OCHENTA','NOVENTA');
  9.  
  10.    {Declaramos las centenas del 100 al 900}
  11.    Centenas :Array [1..9] of string[15] = ('CIENTO','DOSCIENTOS','TRESCIENTOS','CUATROCIENTOS','QUINIENTOS','SEISCIENTOS','SETECIENTOS','OCHOCIENTOS','NOVECIENTOS' );
  12.  
  13. var {declaramos las variables usadas en la funcion}
  14.    CantidadReal    :Real;
  15.    CantidadEntera  ,TmpCantidadentera :longInt;
  16.    Centavos        :REAL;
  17.    TextoCentavos   :String;
  18.    TnDigito        ,TnPrimerDigito ,
  19.    TnSegundoDigito ,TnTercerDigito :integer;
  20.    BloqueTexto     :String;
  21.    TnNumeroBloques :Byte;
  22.    TnBloqueCero    :integer;
  23.    Contador        :integer;
  24.  
  25. Begin
  26.    {Inicializamos las variables}
  27.    centavos         := 0;
  28.    CantidadEntera   := Trunc(Cantidad);
  29.    TmpCantidadentera:= CantidadEntera;
  30.    Centavos         := round(((CantidadEntera-Cantidad) * 100 )* -1);
  31.    TnDigito         := 0;
  32.    TnNumeroBloques  := 1;
  33.    TnPrimerDigito   := 0;
  34.    TnSegundoDigito  := 0;
  35.    TnTercerDigito   := 0;
  36.    BloqueTexto      := '';
  37.    TnBloqueCero     := 1;
  38.  
  39.    Repeat
  40.         For Contador:= 1 To 3  do {ciclo para determinar unidades,decenas ,centenas}
  41.             Begin
  42.               TnDigito:=TmpCantidadEntera Mod 10;{hacemos el recorrido por cada digito}
  43.               If TnDigito <> 0 Then{si no es cero buscamos en los arreglos constantes}
  44.                  Begin
  45.                       Case Contador of
  46.                           1:Begin  {si son unidades}
  47.                                 BloqueTexto := ' '+ Unidades[TnDigito];
  48.                                 TnPrimerDigito := TnDigito ;
  49.                             End;
  50.                           2:Begin {si son decenas}
  51.                                 If TnDigito <= 2 Then
  52.                                    BloqueTexto := ' ' + Unidades[(TnDigito * 10) + TnPrimerDigito ]+ ' '
  53.                                 Else
  54.                                    Begin
  55.                                        If TnPrimerDigito <> 0 then
  56.                                            BloqueTexto := ' '+ Decenas[TnDigito]+ ' Y'+BloqueTexto
  57.                                        Else
  58.                                           If TnDigito <> 0 then
  59.                                              BloqueTexto := ' '+ Decenas[TnDigito]
  60.                                           Else
  61.                                              BloqueTexto:= BloqueTexto
  62.                                        End;
  63.                                    TnSegundoDigito := TnDigito;
  64.                                    End;
  65.                            3:Begin {si son centenas}
  66.                                  IF (TnDigito = 1) and (TnPrimerDigito = 0) and (TnSegundoDigito = 0) then
  67.                                      BloqueTexto:=' CIEN '+BloqueTexto
  68.                                  Else
  69.                                     BloqueTexto:= Centenas[TnDigito] + BloqueTexto;
  70.                                  TnTercerDigito := TnDigito;
  71.                              End;
  72.                       End;{case}
  73.                    TmpCantidadentera:=trunc(TmpCantidadentera/10);{dividimos entre 10 para recorrer la cifra}
  74.                  End
  75.               Else
  76.                  Begin
  77.                      TnBloqueCero := TnBloqueCero + 1 ;{validamos los bloques para determinar miles y millones}
  78.                      TmpCantidadentera:=trunc(TmpCantidadentera/10);{dividimos entre 10 para recorrer la cifra}
  79.                      If TmpCantidadEntera = 0 Then {rompiendo el ciclo forzozamente}
  80.                         Contador:=3;
  81.                  End;
  82.          End;{for}
  83.          Case TnNumeroBloques of {validando miles y millones}
  84.               1: Begin {validando cientos}
  85.                      NumAPalabra := BloqueTexto;
  86.                  End;
  87.              2 :Begin {validando miles}
  88.                     If TnBloqueCero < 2 then
  89.                        NumAPalabra:=BloqueTexto+NumAPalabra
  90.                     Else
  91.                        begin
  92.                           If (TnPrimerDigito = 0) and (TnSegundoDigito = 0) and (TnTercerDigito = 0) then
  93.                              NumAPalabra:=BloqueTexto+NumAPalabra
  94.                           Else
  95.                              NumAPalabra:=BloqueTexto+' MIL '+NumAPalabra;
  96.                        End;
  97.                  End;
  98.               3 :Begin {validando millones}
  99.                      If (TnPrimerDigito = 1) and (TnSegundoDigito = 0) and (TnTercerDigito = 0) then
  100.                         NumAPalabra:= BloqueTexto + ' MILLON '+ NumAPalabra
  101.                      Else
  102.                         NumAPalabra:= BloqueTexto + ' MILLONES '+ NumAPalabra;
  103.                  End;
  104.             End;{case}
  105.             TnNumeroBloques := TnNumeroBloques + 1 ; {incrementando el bloque}
  106.            {inicializando variables para las siguientes pasadas en caso de haber miles y millones}
  107.             TnDigito        := 0;
  108.             TnPrimerDigito  := 0;
  109.             TnSegundoDigito := 0;
  110.             TnTercerDigito  := 0;
  111.             BloqueTexto     := '';
  112.      Until TmpCantidadEntera = 0 ;{validar hasta que que sea 0}
  113.      Str(Centavos:2:0,TextoCentavos);{convirtiendo los centavos a texto}
  114.      If CantidadEntera > 1 then {si la cantidad es mayor que 1}
  115.         NumAPalabra:= 'SON: ('+ NumAPalabra  +' PESOS '+TextoCentavos+'/100 M.N)'
  116.      Else {en caso que sea 1}
  117.         NumAPalabra:= 'SON: ('+ NumAPalabra  +' PESO '+TextoCentavos+'/100 M.N)'
  118. End;
  119.  
cualquier aportacion para enriquecer a la utileria sera bienvenida

compartamos codigo solo asi se superan las personas......

Páginas: [1]