Está en la página 1de 65

Autor Khronos14 Desconectado Mensajes: 402 Curso de Delphi en: 6 Octubre 2010, 16:00

Tema: Curso de Delphi (Ledo 15,901 veces)

Hola, abro este hilo para empezar un curso de introduccin a Delphi. Antes de nada, aclaro que no necesitas conocimientos previos de programacin para seguir el curso y que para preservar la integridad del curso no posteis aqu. Para este curso voy a emplear la versin de Delphi 2010. A partir de Delphi 2007, se incluyeron mejoras notables como UNICODE nativo, soporte para interfaces tctiles y los genricos en la sintaxis de Delphi, as que para seguir este curso recomiendo usar Delphi 2009 o superior.

A lie is a lie

Captulo Captulo Captulo Captulo Captulo Captulo Captulo Captulo Captulo Captulo

1. Delphi. 2. Hola Mundo! 3. Tipos de datos. 4. Operadores. 5. Condicionales y saltos. 6. Bucles. 7. Procedimientos y Funciones I. 8. Vectores I. 9. Estructuras. 10. Punteros I.

NOTA: Si tenis alguna duda/consejo sobre el curso o sobre cualquier cuestin de Delphi podis consultarme por mp.

ltima modificacin: 30 Octubre 2010, 15:31 por Khronos14 https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Re: Curso de Delphi

En lnea

Respuesta #1 en: 6 Octubre 2010, 16:19 Desconectado Mensajes: 402

Captulo 1. Delphi.
Delphi es un entorno de desarrollo de aplicaciones rpidas o entorno RAD (Rapid Applications Development). Delphi emplea como lenguaje de aplicacin una versin moderna del Pascal, llamada Object Pascal, aunque mucha gente se refiere a Delphi como un lenguaje de programacin. Por qu Delphi? Delphi es un lenguaje de programacin de alto nivel con el que podrs desarrollar potentes aplicaciones como si programaras en C/C++ pero reduciendo drsticamente el tiempo de desarrollo, adems nos facilita el uso de las ltimas tecnologas de programacin para aplicaciones Windows y Web, tanto en la plataforma Win32 como .NET. Algunas caractersticas:

A lie is a lie

Delphi compila a cdigo mquina y no depende de ningn FrameWork o dependecias externas como OCX o DLLs de terceros para funcionar. Permite Assembler inline. Delphi trabaja con sus componentes VCL (Visual Component Library) y son ampliables. Puedes descargar nuevos componentes e instalarlos (algunos son de pago). Delphi es una estupenda eleccin para desarrollar aplicaciones que trabajan con motores de base de datos. De hecho, se pas de Turbo Pascal a Delphi para ese fin, recientemente se incorpor soporte para las bases de datos FireBird.

Adems Delphi cuenta con su versin para .NET llamada Delphi Prism que permite crear aplicaciones multiplataforma empleando MONO, pero este no es el objetivo de este curso. Seguramente conozcas alguna aplicacin desarrollada en Delphi, entre ellas: Skype, Ares, KMPlayer, AIMP, TuneUp, DevCpp, etc.. Aqu tienes una lista mucho ms amplia: Conocer el IDE (Integrated Development Enviroment) de Delphi, traducido como entorno de desarrollo integrado, es fundamental para desarrollar aplicaciones.

La interfaz es similar a la del Visual Studio, pero de todas formas voy a explicar lo bsico en este captulo. A primera vista tenemos una pgina de bienvenida en el centro del programa, que nos muestra los programas recientes y los favoritos. A la izquierda de la pgina de bienvenida tenemos dos paneles: Structure y Object Inspector. El primero va a mostrar todos los componentes visuales de nuestra aplicacin y con el segundo podremos ver las propiedades y eventos de cada componente (ya veremos que son). A la derecha de la pgina de bienvenida tenemos otros dos paneles: Project Manager y Tool Palette, el primero nos servir para ver los archivos y la configuracin de nuestro proyecto y el segundo panel es el cuadro de los componentes de Delphi. En la parte superior de Delphi tenemos el clsico men con las posibles configuraciones y opciones y debajo un panel con unos botones que ya iremos viendo.

ltima modificacin: 6 Octubre 2010, 22:43 por Khronos14 https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Desconectado Mensajes: 402 Re: Curso de Delphi Respuesta #2 en: 6 Octubre 2010, 22:41

En lnea

Captulo 2. Hola mundo!


Para empezar a programar en Delphi, vamos a dejar de lado la interface visual y los controles y empezaremos trabajando en modo consola. Para iniciar un nuevo proyecto en Delphi vamos a File -> New -> Other -> y se nos abrir una nueva ventana, en donde escogemos Console Application. Tendramos que ver algo as:

Por comodidad cerr los 4 paneles que rodeaban la pantalla principal. A lie is a lie Hay parte de cdigo que de momento no nos vas a ser til y que explicar ms adelante para que sirve. As que quitaremos el cdigo que se encuentra entre el begin y el end., quedando de la siguiente forma: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses

6. 7.

SysUtils;

8. begin 9. 10. 11. end. 12.

Ahora vamos a guardar el proyecto, vamos a File -> Save all -> y le damos un nombre a nuestro proyecto, por ejemplo: "HolaMundo", una vez hayis hecho esto, el cdigo fuente os cambiar, quedando as: Cdigo 1. program HolaMundo; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. begin 9. 10. 11. end. 12. SysUtils;

Con esto podemos deducir que "HolaMundo" que est precedido de program, es el nombre de nuestro proyecto. El nombre del proyecto tiene que ser el mismo que el del archivo .dpr (Delphi Project). A

continuacin de esta lnea encontramos {$APPTYPE CONSOLE}, esta es una de las muchas directivas de configuracin que tiene Delphi, APPTYPE (Application Type) es el tipo de aplicacin que vamos a crear. Si quitamos esta lnea o la dejamos as {$APPTYPE GUI} Delphi generar un programa que no mostrar la pantalla de la consola. Las aplicaciones visuales, por defecto, ya ni ponen esta lnea... A continuacin tenemos uses y debajo "SysUtils;". Con uses lo que haces es incluir ficheros de cdigo fuente en nuestro programa, en este caso, el fichero SysUtils.pas. Finalmente tenemos un begin(comienzo) y un end.(final). Aqu es donde empieza nuestro programa, el programa siempre termina con un end seguido de un punto. Delphi es un lenguaje no case sensitive (no es sensible a las maysculas/minsculas), es lo mismo BEGin que begin. Esta caracterstica est bastante desfasada, de hecho creo que solo Pascal/Object Pascal/Delphi y Basic la tienen, el resto de los lenguajes si que son sensibles a las maysculas, el ejemplo ms claro es C o Java. Para ser sincero, esta caracterstica me gusta bastante, evita dolores de cabeza corrigiendo maysculas y minsculas... Otra caracterstica muy importante de Delphi es que es un lenguaje de programacin fuertemente estructurado en la que hay que respetar las partes del programa. Pascal es muy estricto con este tema, no puedes declarar constantes antes que las funciones y muchas ms cosas... en este aspecto Delphi es ms permisivo. Una vez aclarado esto, vamos a crear un programa que nos muestre un Hola Mundo en la consola. Para ello vamos a emplear 2 procedimientos: WriteLn y ReadLn. Una funcin es un conjunto de instrucciones que se ejecutan una detrs de la otra y que retornan una valor, un procedimiento es lo mismo que una funcin pero sin devolver ningn valor. El procedimiento WriteLn, muestra el texto que se le pasa como parmetro en la consola. Las cadenas de caracteres en Delphi van entrecomillados por la comilla simple '. El procedimiento ReadLn() lo que hace es leer una lnea que se introduce por teclado hasta que se pulse Enter, lo que va a hacer en nuestro programa es evitar que se cierre. Cdigo 1. program HolaMundo; 2. 3. {$APPTYPE CONSOLE}

4. 5. uses 6. 7. 8. begin 9. 10. 11. 12. end. 13. WriteLn('Hola mundo!'); ReadLn; SysUtils;

Las lneas de cdigo que van dentro del begin y del end finalizan en punto y coma ; al igual que C o Java. Los procedimientos que no pasan parmetros pueden finalizar en () por si tienes la costumbre de C/C++/C#, de Java o de cualquier otro lenguaje, el compilador lo da por vlido. Una vez hecho esto, guardamos todo, y vamos a Project -> Compile HolaMundo. Luego pulsamos F9 o le damos al botn del Play que sale en color verde y se nos mostrar algo como esto:

El ejecutable se encuentra en la misma carpeta en la que guardamos el cdigo fuente. Felicidades, acabas de crear tu primer programa!

ltima modificacin: 7 Octubre 2010, 21:54 por Khronos14

En lnea

https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Desconectado Mensajes: 402 Re: Curso de Delphi Respuesta #3 en: 7 Octubre 2010, 22:35

Captulo 3. Tipos de datos.


A la hora de programar, ante la necesidad de trabajar con informacin y operar con datos empleamos las constantes y variables. Una constante es un identificador que puede hacer referencia a una cadena de caracteres, a un nmero entero, a un nmero en coma flotante, a un nmero hexadecimal, etc.. Su caracterstica principal es que su valor no puede ser alterado, al contrario que las variables. Para emplear variables, primero debemos definir que tipo de dato va a contener esa variable: texto, un nmero, un valor de tipo bool (cierto o false), etc... En esta tabla puedes ver los tipos de datos ms utilizados en Delphi y su equivalencia en C/C++ y Visual Basic.

A lie is a lie

En el siguiente ejemplo puedes ver el uso de constantes y como se utilizan: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. //Las constantes se deben de declarar debajo de los uses 9. //y siempre finalizan en ; 10. const 11. 12. 13. 14. 15. 16. begin 17. 18. 19. 21. Writeln(MiCadena); Writeln(OtraCadena); Readln; MiCadena = 'Hola, soy una constante'; OtraCadena = 'Adios'; UnNumero = 4; SysUtils;

20. end.

Para definir constantes utilizamos la palabra reservada const (las palabras reservadas suelen ir en negrita) y a continuacin le asignamos a nuestras constantes un identificador como nombre y les asignamos un valor mediante el =. Lo que est escrito encima de const es un comentario y sirven para comentar cdigo y facilitar la

comprensin del mismo, son ignorados por el compilador. En Delphi se pueden declarar comentarios de 3 formas: Cdigo 1. //Mediante la doble barra como en C/C++/C#, Java y otros lenguajes... 2. 3. { 4. 5. 6. } 7. 8. (* 9. 10. 11. *) 12. Esta es otra forma de declarar comentarios, aunque es poco conocida y usada... Es similar a la forma /* */ de C Entre llaves.... se pueden escribir varias lineas de comentario

Dentro del begin y del end. hacemos 2 llamadas al procedimiento Writeln y le pasamos como parmetro el contenido de las constantes MiCadena y OtraCadena Las constantes no se pueden declarar en cualquier parte del cdigo, generalmente se declaran debajo de los uses aunque ya veremos en otro captulo que se pueden declarar en ms sitios. A la hora de declarar constantes y variables tenemos algunas limitaciones con el nombre del identificador, estas son las normas a seguir:

No se pueden emplear palabras reservadas como identificador, adems de que no pueden existir 2 variables/constantes con el mismo identificador. No se pueden emplear smbolos como identificador de una constante o variable. Se pueden emplear maysculas, minsculas, guiones bajos y nmeros. Si quieres usar nmeros para declarar constantes o variables, el identificador de la constante o variable

nunca puede empezar por nmero.

Estos son ejemplos de identificadores de constantes y variables no vlidos: Cdigo 1. const 2. 3. 4. 5. 1Mensaje = 'Esto es un mensaje'; Men saje = 'Esto es otro mensaje'; #M = 18;

Para declarar variables tenemos que poner primero la palabra reservada var y a continuacin podemos definir nuestras variables. Primero se pone el identificador seguido de : y el tipo de datos que va a contener, luego se finaliza con ;. Las variables en Delphi se declaran fuera del begin y del end., mucha gente lo considera una molestia porque tiene la mala costumbre declarar variables en medio del cdigo, de esta forma te quedan todas las variables estructuradas y un cdigo limpio y ordenado. Para asignarle un valor a una variable se utiliza el operador de asignacin := y como siempre, se termina con ;. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. const SysUtils;

9. 10. 11. 12.

Pi = 3.14; NumeroEnHex = $FD4; //Para declarar un nmero en hexadecimal se utiliza el dolar

13. var 14. 15. 16. 18. 19. 20. 21. 22. 23. 24. 25. 26. 28. Numero:= NumeroEnHex; Cadena:= 'Esto es una cadena'; Writeln(Cadena); Cadena:= 'Esto es otra cadena'; Writeln(Cadena); Readln; EsCierto:= false; Cadena: string; Numero: integer; EsCierto: boolean; //solo puede ser true o false EsCierto:= true;

17. begin

27. end.

El tipo de dato string almacena una cadena de caracteres, es muy til y la utilizars mucho. Integer almacena un nmero entero comprendido entre -2,147,483,648 a 2,147,483,647 y Boolean solo puede tomar el valor de true (cierto) o false (falso). Quedara algo as:

ltima modificacin: 12 Octubre 2010, 00:18 por Khronos14

En lnea

https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419

Khronos14 Desconectado Mensajes: 402

Re: Curso de Delphi Respuesta #4 en: 8 Octubre 2010, 23:36

Captulo 4. Operadores.
Los operadores nos proporcionan la base matemtica y lgica en la programacin. En el captulo anterior ya vimos un operador, el operador de asignacin :=. Operadores aritmticos. + Suma. - Resta. * Multiplicacin. / Divisin real. div Divisin entera (slo entre nmeros enteros). mod Resto divisin.

A lie is a lie

Un ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 11. numero1, numero2, suma: integer; numero1:= 3; 10. begin SysUtils;

12. 13. 14. 16.

numero2:= 4; suma:= numero1 + numero2;

15. end.

Si quieres declarar varias variables del mismo tipo, puedes hacerlo en la misma lnea mediante una , como se muestra en el ejemplo. Operadores relacionales. Se emplean en las condiciones (las veremos en el prximo captulo) y son los siguientes: < Menor que. > Mayor que. = Igual que. <> Distinto. <= Menor o igual que. >= Mayor o igual que. Operadores lgicos. And Conjuncin lgica. Or Disyuncin inclusiva lgica. Xor Disyuncin exclusiva. Not Negacin lgica. Shr Desplazamiento de bits a la derecha. Shl Desplazamiento de bits a la izquierda. Una vez visto esto, vamos a aprender como leer la entrada del teclado en Delphi. El procedimiento ya lo conoces: Readln(); Cdigo

1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 16. Cadena: string; Write('Introduce algo: '); Readln(cadena); Writeln('Esta es la cadena que introduciste: ' + cadena); Readln; 10. begin SysUtils;

15. end.

El procedimiento Write es idntico al WriteLn, slo que este ltimo hace un salto de lnea en la consola. Para leer la entrada de datos mediante el teclado, tenemos que pasarle como parmetro al procedimiento Readln la variable en la que se guardar la informacin de entrada. A continuacin mostramos el contenido de la variable Cadena. El operador + funciona como el operador aritmtico de la suma y para concatenar cadenas. Introducimos la cadena "hola" y pulsamos Enter. Tendramos algo como esto:

Si queremos leer del teclado un nmero entero, a Readln le tenemos que pasar como parmetro una variable de tipo integer. Con unas lneas de cdigo podemos hacer que nos pida 2 nmeros, los sume y nos muestre su resultado. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE}

4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 15. 16. 18. Numero1, Numero2: integer; Write('Introduce un numero: '); Readln(Numero1); Write('Introduce otro numero: '); Readln(Numero2); Writeln('La suma de los dos numeros es: ', Numero1 + Numero2); Readln; 10. begin SysUtils;

17. end.

En el ltimo Writeln, NO podemos hacer esto: Cdigo 1. Writeln('La suma de los dos numeros es: ' + (Numero1 + Numero2));

2.

Esto provocara una excepcin, porque no se puede concatenar una cadena de texto con un nmero entero de esta forma. Poniendo la coma y a continuacin el nmero entero, el procedimiento Writeln se encarga l solo de convertir ese nmero a cadena de caracteres para que se pueda mostrar por pantalla. Para convertir un nmero entero a string, disponemos de la funcin IntToStr (Integer To String) que est declarada en la unidad SysUtils. A esta funcin slo se le puede pasar como parmetro un nmero entero y devuelve el nmero en forma de cadena de caracteres. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 15. 16. Numero1, Numero2: integer; Write('Introduce un numero: '); Readln(Numero1); Write('Introduce otro numero: '); Readln(Numero2); Writeln('La suma de los dos numeros es: ' + Readln; IntToStr(Numero1 + Numero2)); 10. begin SysUtils;

17. end.

18.

Este ejemplo realiza lo mismo que el anterior, pero emplea la funcin IntToStr para convertir la suma de esos dos nmeros enteros en una cadena de caracteres, que se concatena con "La suma de los dos numeros es: ". Hay ms funciones de conversin de datos que ya iremos viendo, por ejemplo: StrToInt hace lo contrario; otras funciones podran ser: FloatToStr, StrToFloat, TryStrToInt, TryStrToFloat, etc... Consejo: Si alguna vez desconoces donde est declarada una variable, constante, funcin, etc... pinchas sobre ella y le das al botn derecho y a Find Declaration. Inmediatamente te llevar a la unidad donde est declarda, y en ocasiones hay comentarios explicando lo que hace y porqu.

ltima modificacin: 12 Octubre 2010, 00:20 por Khronos14 https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Desconectado Mensajes: 402 Re: Curso de Delphi Respuesta #5 en: 12 Octubre 2010, 00:08

En lnea

Captulo 5. Condicionales y saltos.


Mediante las condiciones podemos prever errores y controlar diferentes formas de hacer una cosa. Ejemplo: Si pi es igual a 3.14... entonces hacemos esto, si es falso, hacemos esto otro. Bsicamente esa es la estructura de las condiciones, slo que hay que emplear terminologa inglesa y adaptarlo a la estructura semntica y sintctica de Delphi. Para crear una condicin hay que emplear If Then, con una condicin en medio: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE}

A lie is a lie

4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 16. 15. end. Verdad: boolean; Verdad:= True; if Verdad = True then Writeln('Es verdad'); Readln; 10. begin SysUtils;

Esta es una condicin de una sola lnea, si la condicin se cumple, se ejecutara el Writeln y luego seguira con la ejecucin del programa que en este caso sera hacer un Readln. Ahora vamos a ver la estructura para hacer algo en caso contrario: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var SysUtils;

9. 11. 12. 13. 14. 15. 17.

Verdad: boolean; Verdad:= False; if Verdad = True then Writeln('Es verdad') //En las condiciones de una sola linea con else no se pone ; else Writeln('No es verdad'); Readln;

10. begin

16. end.

Mediante el else podemos hacer algo en caso de que la condicin no se cumpla, pero tan slo ejecuta una lnea de cdigo. Para ejecutar varias lneas de cdigo en un condicional tenemos que crear un begin y un end; dentro de la condicin. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 11. 12. Numero: integer; Numero:= 14; if Numero < 10 then 10. begin SysUtils;

13. 14. 15. 16. 17. 18. 19. 20. 21. 23. 22. end.

begin Writeln('El numero es menor de 10'); Writeln('...'); end else begin Writeln('El numero es mayor o igual que 10'); Writeln('...............'); end; Readln;

Aqu se utiliza end; para cerrar el condicional, end. solo se usa para terminar el programa. Otro mtodo de salto, son las estructuras case. Con ellas podemos hacer muchas comparaciones en pocas lneas. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. Numero: integer; 10. begin SysUtils;

11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 22.

Write('Introduce un numero: '); Readln(Numero); case Numero of 1: Writeln('Es el numero 1'); 2: Writeln('.... el 2'); 3: Writeln('.... el 3'); else Writeln('Otro numero...'); end; Readln;

21. end.

El programa hace lo siguiente: Pide un que se introduzca un nmero, luego mediante el case of ejecuta una accin u otra. Despus de cada opcin se ponen 2 puntos y a continuacin la lnea que vas a ejecutar, si quieres escribir varias lneas por opcin introduces un begin y un end; en cada una de ellas. El else es la opcin por defecto, en el caso de que no coincida con ninguna de las que tenemos programadas; tambin puede contener varias lneas.

Otro tipo de salto es usando etiquetas y el goto. Es poco recomendable utilizarlas ya que no entran dentro de la programacin estructurada y pueden provocar bucles infinitos, as que no los vamos a ver.

Calculadora versin 1.0


Vamos a hacer una pequea calculadora en modo consola, con un men y una serie de opciones para sumar, restar, multiplicar y dividir.

Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 15. 16. 17. 18. 19. 21. Readln; 20. end. Opcion: integer; Writeln('Calculadora version 1.0'); Writeln('1 - Sumar dos numeros'); Writeln('2 - Restar dos numeros'); Writeln('3 - Multiplicar dos numeros'); Writeln('4 - Dividir dos numeros'); Writeln(''); //Lo dejamos en blanco para dejar una separacin Write('Introduce una opcion: '); 10. begin SysUtils;

Empezamos haciendo un men bastante sencillo, el programa segn la opcin que escojamos va a hacer una operacin u otra. Cdigo

1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. end; end; 2: begin case Opcion of 1: begin Write('Introduce una opcion: '); Readln(Opcion); Opcion: integer; Writeln('Calculadora version 1.0'); Writeln('1 - Sumar dos numeros'); Writeln('2 - Restar dos numeros'); Writeln('3 - Multiplicar dos numeros'); Writeln('4 - Dividir dos numeros'); Writeln(''); //Lo dejamos en blanco para dejar una separacin 10. begin SysUtils;

28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 39.

3: begin end; 4: begin end; else Writeln('Introduce una opcin entre 1 y 4'); end; Readln;

38. end.

Creamos un case of para el men y preparamos las posibles opciones para permitir varias lneas. Adems ya puse la opcin por defecto en caso de que no se introduzca una opcin vlida. Ahora tenemos que pedir 2 nmeros, hacer las operaciones y mostrar el resultado por pantalla. Tenemos un problema con la ltima operacin, que hay que comprobar: la divisin entre cero, que solucionaremos con un condicional: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. Opcion: integer; SysUtils;

10. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.

Numero1, Numero2: integer; //Creamos el menu de nuestro programa... Writeln('Calculadora version 1.0'); Writeln('1 - Sumar dos numeros'); Writeln('2 - Restar dos numeros'); Writeln('3 - Multiplicar dos numeros'); Writeln('4 - Dividir dos numeros'); Writeln(''); //Lo dejamos en blanco para dejar una separacin //Pedimos un numero por teclado Write('Introduce una opcion: '); Readln(Opcion); //Dependiendo de la opcion... case Opcion of 1: begin //Suma Write('Introduce un numero: '); Readln(Numero1); Write('Introduce otro numero: '); Readln(Numero2); Writeln('El resultado de ' + IntToStr(Numero1) + ' + ' + IntToStr(Numero2) + ' = ' + IntToStr(Numero1 + Numero2)); end; 2: begin //Resta Write('Introduce un numero: ');

11. begin

38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. entera 62. 63. 64.

Readln(Numero1); Write('Introduce otro numero: '); Readln(Numero2); Writeln('El resultado de ' + IntToStr(Numero1) + ' - ' + IntToStr(Numero2) + ' = ' + IntToStr(Numero1 - Numero2)); end; 3: begin //Multiplicacion Write('Introduce un numero: '); Readln(Numero1); Write('Introduce otro numero: '); Readln(Numero2); Writeln('El resultado de ' + IntToStr(Numero1) + ' * ' + IntToStr(Numero2) + ' = ' + IntToStr(Numero1 * Numero2)); end; 4: begin //Division Write('Introduce un numero: '); Readln(Numero1); Write('Introduce otro numero: '); Readln(Numero2); if Numero2 <> 0 then Writeln('El resultado de ' + IntToStr(Numero1) + ' / ' + IntToStr(Numero2) + ' = ' + IntToStr(Numero1 div Numero2)) //Divisin else Writeln('El divisor no puede ser 0 :('); end; else Writeln('Introduce una opcin entre 1 y 4'); //Error

65. 66. 67. 69.

end; Readln;

68. end.

Tendramos algo como esto:

Para mostrar el resultado de una operacin utilizamos Writeln y concatenamos la cadena de salida con el operador +. Como puedes observar, en la opcin de suma aparece tambin el operador + para sumar dos nmeros enteros. En la opcin 4 comprobamos que el segundo nmero no es 0, si no es as mostramos un mensaje de error (cuidado con el punto y coma al final de la lnea del condicional, este es el nico caso en el que no se necesita). Esta "calculadora" se puede mejorar mucho, plante el programa de esta forma para repasar los condicionales y saltos. ltima modificacin: 12 Octubre 2010, 12:57 por Khronos14 https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Desconectado Mensajes: 402 Re: Curso de Delphi Respuesta #6 en: 12 Octubre 2010, 12:56 En lnea

Captulo 6. Bucles.
Los bucles son un conjunto de instrucciones que se repiten una serie determinada de veces hasta que la condicin deje de cumplirse. Son extremadamente tiles e imprescindibles en la programacin.

En delphi tenemos 3 tipos de bucles:

Bucles For. Repiten una accin un nmero determinado de veces, pueden ser bucles ascendentes o descendentes. Bucles While (mientras). Repiten una serie de instrucciones hasta que la condicin se cumpla. Bucles Repeat..Until. Es parecido al bucle while pero la condicin se realiza al final de cada instancia del bucle.

A lie is a lie

Bucles For. En este tipo de bucles necesitaremos una variable que actuar como contador, generalmente ser de tipo integer aunque tambin podra ser de tipo char. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. Contador: integer; 10. begin 11. 12. 13. 14. Readln; 15. end. for Contador := 0 to 10 do Writeln('El contador vale: ', Contador); SysUtils;

16.

El bucle for vendra a significar algo como "desde 0 hasta 10 hacemos esto...". En cada instancia del bucle, el valor de Contador se incrementa en 1. Como ocurre con los condicionales, si dentro del bucle no ponemos begin y end;, el bucle slo ejecuta una lnea de cdigo. Para hacer un bucle for descendente, hay que utilizar downto y cambiar el valor de inicio y el valor final del bucle. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. Contador: integer; 10. begin 11. 12. 13. 14. 15. 16. 17. Readln; 18. end. for Contador := 10 downto 1 do begin Writeln('El contador vale: ', Contador); Writeln('Restamos 1..'); end; SysUtils;

19.

Conseguiramos algo como esto:

Bucles While Los bucles while se basan en una condicin al principio del bucle que se llama a cada nueva instancia del bucle. Veamos

un ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. SysUtils; 7. 8. var 9. i: integer = 1; //Las variables se pueden inicializar de esta forma... 10. begin 11. 12. while i <= 10 do 13. 14. 15. 16. 17. 18. Readln; 19. end. 20. begin Writeln('Esta es la instancia numero: ', i); Inc(i); end;

El significado del bucle while sera "mientras i sea menor o igual que 10 hacemos esto...". En este bucle, si utilizamos un contador de tipo entero, tenemos que incrementar su valor en cada instancia del bucle, si no tendramos un bucle infinito. El procedimiento Inc incrementa en 1 el valor de la variable que se le pase como parmetro, el procedimiento contrario es Dec.

Bucles Repeat...Until. Se traduce como repetir..hasta. Funciona de la misma manera que el bucle while, pero la condicin se realiza al final del bucle. Veamos como funciona con un ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. SysUtils; 7. 8. var 9. i: integer = 1; //Las variables se pueden inicializar de esta forma... 10. begin 11. 12. repeat 13. 14. 16. 17. Readln; 18. end. 19. Writeln('Esta es la instancia numero: ', i); Inc(i);

15. until I > 10;

La traduccin sera: "repetir hasta que i sea mayor que 10". En el bucle repeat..until no se emplea begin y end; para escribir varias lneas, de hecho, no hace falta. La utilidad de los bucles while y repeat..until es que se puede utilizar como condicin cualquier variable o condicin. Por ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. SysUtils; 7. 8. var 9. Salida: string; 10. begin 11. 12. repeat 13. 14. 16. 17. Readln; 18. end. 19. Write('Introduce "salir": '); Readln(Salida);

15. until Salida = 'salir';

En este ejemplo, utilizamos como condicin de salida una variable de tipo string. La ejecucin del bucle no termina

hasta que ingresemos por el teclado la palabra "salir". Interrumpir un bucle Para trabajar con bucles tenemos 2 mtodos bastante tiles: el mtodo Break y el mtodo Continue. El mtodo break interrumpe un bucle y sale de l. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. SysUtils; 7. 8. var 9. i: integer; 10. begin 11. 12. for i := 0 to 10 do 13. 14. 15. 16. 17. 18. 19. Readln; 20. end. end; begin Writeln('I vale: ', i); if I = 7 then break;

21.

En este ejemplo, se tendra que escribir en la consola 11 veces el mensaje "I vale: x". Pero dentro del bucle puse una condicin de que si I vale 7, salga del bucle. Continue sirve para saltarnos una instancia del bucle, pero no sale de l. Ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. SysUtils; 7. 8. var 9. i: integer; 10. begin 11. 12. for i := 0 to 10 do 13. 14. 15. 16. 17. 18. 19. Readln; 20. end. end; begin if I = 5 then Continue; //No ejecuta el Writeln Writeln('I vale: ', i);

21.

Si ejecutamos el programa, podemos observar que no escribe en la consola "I vale: 5" porque esa instancia se la salta.

En lnea https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419

Khronos14 Desconectado Mensajes: 402

Re: Curso de Delphi Respuesta #7 en: 26 Octubre 2010, 16:30

Captulo 7. Procedimientos y Funciones I.


Como vimos anteriormente los Procedimientos, al contrario que las funciones, no devuelven ningn valor. Para declarar un procedimiento empleamos la siguiente sintaxis: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. procedure MiProcedimiento; 9. begin 10. 11. end; 12. 13. begin 14. 15. end. 16. SysUtils;

A lie is a lie

En el archivo .dpr del programa los procedimientos y funciones se declaran siempre encima del begin y del end. (es el punto de entrada del programa o EntryPoint). Utilizamos la palabra reservada procedure y a continuacin ponemos el

identificador de nuestro procedimiento seguido de un punto y coma. El identificador de los procedimientos y funciones siguen las mismas reglas que las variables y constantes. A continuacin ponemos un begin y un end; terminado en punto y coma. Una vez hecho esto, podemos poner cdigo dentro de nuestro procedimiento entre el begin y el end;. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. procedure MiProcedimiento; 9. begin 10. 11. 13. 14. begin 15. 16. 18. MiProcedimiento; //Tambin sirve MiProcedimiento(); Readln; Writeln('Este es mi procedimiento'); Writeln('....'); SysUtils;

12. end;

17. end.

El procedimiento escribe un par de lneas en la consola y lo llamamos desde el punto de entrada de nuestro programa. Para declarar una funcin utilizamos la palabra reservada function y sigue las mismas reglas que los procedimientos,

excepto que despus del identificador de la funcin va seguida de : y el tipo de dato a devolver. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. function Funcion: integer; 9. var 10. Operacion: integer; 11. begin 12. 13. 15. 16. begin 17. 18. 20. Writeln('Funcion: ', Funcion); Readln; Operacion:= ((14 * 27) div 2) - 4; Result:= Operacion; //Tambin vale Funcion:= Operacion; SysUtils;

14. end;

19. end.

Nuestra funcin devuelve un valor entero. Dentro de un procedimiento y funcin se pueden declarar nuevas variables que solamente son accesibles desde el interior de ellas. Para ello se declaran antes del begin. Para devolver el valor de la funcin se emplea Result seguido del operador de asignacin aunque tambin sirve empleando el nombre de la funcin. Al contrario que C/C++ y otros lenguajes de programacin, el hecho de llamar

a result no interrumpe la ejecucin de la funcin. Si quieres interrumpir la ejecucin de un procedimiento o funcin puedes emplear Exit;. Paso de parmetros Para que una funcin o procedimiento reciba unos parmetros se realiza de la siguiente forma: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. function Suma(a: integer; b: integer): integer; 9. begin 10. 12. 13. begin 14. 15. 17. Writeln('Suma: ', Suma(2, 3)); Readln; Result:= a + b; 11. end; SysUtils;

16. end.

Los parmetros se declaran a continuacin del identificador de la funcin o procedimiento, entre parntesis. Los parmetros se separan con punto y coma, aunque si son del mismo tipo se pueden declarar as:

Cdigo 1. function Suma(a,b: integer; mensaje: string): integer; 2. begin 3. 4. 6. Writeln(Mensaje); Result:= a + b;

5. end;

Los parmetros que se pasan a una funcin/procedimiento se pueden modificar dentro de ella. Para evitar esto, los parmetros se pueden declarar como constantes. Segn el libro Delphi 5, declarar los parmetros como constantes optimizan el ejecutable generado, as que si sus valores no van a variar, es un buen hbito. Cdigo 1. function Resta(const a, b: integer): integer; 2. begin 3. 5. Result:= a - b; 4. end;

Si en tu programa tienes varias funciones/procedimientos tienes que plantear el orden de declaracin para que no se produzcan errores. Por ejemplo: Cdigo 1. program Project1; 2.

3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. procedure Proc1; 9. begin 10. 12. 13. procedure Proc2; 14. begin 15. 17. 18. begin 19. 21. Readln; 20. end. Writeln('Hacer algo'); 16. end; Proc2; 11. end; SysUtils;

Este cdigo NO se podra compilar, el compilador dara una excepcin. En el procedimiento Proc1 se est llamando a Proc2 que est declarado a continuacin, as que Proc1 no tiene ninguna referencia para llamar a Proc2 por lo que se produce un error. Para corregir este error, bastara con poner Proc2 encima de Proc1. Dentro de unos cuantos captulos veremos como declarar funciones y procedimientos en archivos .pas y tendramos otra forma de solucionar este error. En lnea

https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Desconectado Mensajes: 402 Re: Curso de Delphi Respuesta #8 en: 26 Octubre 2010, 17:06

Captulo 8. Vectores I.
Los vectores o matrices, en ingls Arrays, es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de una matriz. Son muy utilizados en programacin y se declaran empleando la palabra reservada array. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4.

A lie is a lie

5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 16. Lista: array [0..3] of integer; Lista[0]:= 3; Lista[1]:= 7; Lista[2]:= 16; Lista[3]:= 15; 10. begin SysUtils;

15. end.

La sintaxis es simple: se emplea array a continuacin el rango del vector entre corchetes y con 2 puntos, y para terminar la palabra reservada of y el tipo de dato. Para acceder a los elementos se emplea el identificador de la variable y el nmero de elemento va entre corchetes. En C/C++ y otros lenguajes, la primera posicin de un array siempre es 0, en Delphi esta restriccin no existe, pudiendo declarar el rango que quieras dentro del array (siempre que sea positiva y no sea descendente). Ejemplo: Cdigo 1. var 2. 3. Lista: array [14..18] of integer;

De esta forma un array puede no tener su primera posicin en 0, por lo que surgen 2 funciones para determinar la primera posicin del array y la ltima: Low y High. Son ms utilizadas en arrays dinmicos (que ya los veremos) pero tambin se pueden emplear. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 10. i: integer; Lista: array [12..15] of integer; SysUtils;

11. begin 12. 13. for i := 12 to 15 do 14. 16. Lista[i]:= i; 15. end.

Con Low y High sera as: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 10. 12. 13. for i := Low(Lista) to High(Lista) do 14. 16. Lista[i]:= i; 15. end. i: integer; Lista: array [12..15] of integer; SysUtils;

11. begin

Arrays Inicializados. Existe la posibilidad de declarar un array con sus valores inicializados. Ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 10. 11. 12. 14. 15. 16. 17. 18. 19. 20. Readln; 21. end. Write('Introduce el numero del mes: '); Readln(Mes); if (Mes >= 1) and (Mes <= 12) then Writeln('Estamos en : ' + Meses[Mes]); Meses: array [1..12] of string = ('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'); Mes: integer; SysUtils;

13. begin

22.

La variable Meses se declara un array de tipo string, con los valores de los Meses. Para inicializar un array con valores, se tienen que introducir exactamente el nmero de elementos. No puedes declarar un array con 12 meses y inicializar 11 meses. Tendramos algo como esto:

Arrays Multidimensionales. Existe la posibilidad de crear arrays con varias dimensiones. Cdigo 1. program Project1;

2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 10. 12. 13. 15. Matriz: array [1..4, 1..5] of integer; //Matriz bidimensional Matriz[1,2]:= 5; Readln; SysUtils;

11. begin

14. end.

En lnea https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 Khronos14 Desconectado Mensajes: 402 Re: Curso de Delphi Respuesta #9 en: 30 Octubre 2010, 00:44

Captulo 9. Estructuras.
Las estructuras son tipos de datos que contienen otros datos, es una agrupacin de variables bajo un identificador comn. Para crear una estructura debemos definirla con el mtodo type que con el se pueden definir nuevos tipos de datos.

Por ejemplo: Cdigo 1. type 2. 3. Cadena = string;

A lie is a lie

De esta forma definimos un nuevo tipo de datos, llamado Cadena, que es tipo string. Despus se podra crear una variable con el nuevo tipo de dato. Cdigo 1. var 2. Prueba: Cadena; 3.

Puedes definir tipos de datos, que se conocen como datos tipo enum. Son como constantes que tienen un valor numrico, pero los identificas con una cadena. Cdigo 1. type 2. 3. Coche = (seat, bmw, golf, mercedes, ferrari, porsche);

De esta forma, definimos el tipo de dato Coche que solo puede tomar los valores entre parntesis. En realidad, el tipo de datos Coche es numrico positivo, seat corresponde al 0, bmw al 1, etc...

Un ejemplo de como usarlo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. type 9. 10. 11. var 12. 14. 16. MiCoche: Coche; MiCoche:= bmw; 13. begin 15. end. Coche = (seat, bmw, golf, mercedes, ferrari, porsche); SysUtils;

Para crear una estructura se emplea la directiva record, en C se llama struct. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE}

4. 5. uses 6. 7. 8. type 9. 10. 11. 12. 13. 14. 15. begin 16. 17. end. 18. Agenda = record Nombre: string; Apellidos: string; Telefono: integer; end; SysUtils;

Definimos el tipo de datos Agenda, que es una estructura, y en su interior contiene 3 subvariables: Nombre, Apellidos y Telefono. Para acceder a las variables de la estructura haramos algo como esto: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. SysUtils;

8. type 9. 10. 11. 12. 13. 14. 15. var 16. 18. 19. 20. 22. MiAgenda: Agenda; MiAgenda.Nombre:= 'Pepe'; MiAgenda.Apellidos:= 'No tengo apellidos'; MiAgenda.Telefono:= 62352352; 17. begin Agenda = record Nombre: string; Apellidos: string; Telefono: integer; end;

21. end.

Creamos la variable MiAgenda que es del tipo Agenda, que acabamos de crear. Para acceder a las subvariables se pone un . y el nombre de la variable. Las estructuras son muy tiles en programacin y se emplean mucho. Cuando quieres volcar estructuras en ficheros y trabajar con la memoria de forma ms compacta, tienes que declarar la estructura como packed record y la estructura tiene que tener tamao fijo. Es decir, una estructura que vas a volcar en un fichero no puede tener una variable de tipo string, porque no tiene tamao fijo... esto ya lo veremos ms adelante cuando veamos ficheros. Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE}

4. 5. uses 6. 7. 8. type 9. 10. 11. 12. 13. 14. 15. var 16. 18. 19. 20. 22. MiAgenda: Agenda; MiAgenda.Nombre:= 'Pepe'; MiAgenda.Apellidos:= 'No tengo apellidos'; MiAgenda.Telefono:= 62352352; 17. begin Agenda = packed record Nombre: array[0..49] of char; Apellidos: array[0..99] of char; Telefono: integer; end; SysUtils;

21. end.

En este ejemplo, la variable Nombre slo puede contener 50 caracteres y Apellidos 100. Trabajar con variables que almacenan caracteres de tamao fijo, como es el caso, puede suponer errores de desbordamiento (Buffer Overflow) si no sabes lo que haces. ltima modificacin: 30 Octubre 2010, 00:45 por Khronos14 https://play.google.com/store/apps/developer?id=Estanislao%20R.%20P%C3%A9rez%20Nartallo&hl=es_419 En lnea

Khronos14 Desconectado Mensajes: 402

Re: Curso de Delphi Respuesta #10 en: 30 Octubre 2010, 15:31

Captulo 10. Punteros I.


Los punteros son variables que almacenan la posicin de memoria en la que se encuentra un dato. En Delphi se pueden emplear punteros como se hara en C. A simple vista las clases y objetos de Delphi, no parecen punteros, pero en realidad si que lo son. Se oculta su verdadera naturaleza para que al programador le sea ms agradable trabajar con ellos (ya veremos las clases ms adelante). Otro ejemplo, es el tipo de datos string; este es un puntero que apunta a una regin de memoria dinmica en la que se almacena texto. El tamao mximo de unstring ronda los 4 Gb... El tipo genrico de puntero en Pascal se llama Pointer, es un puntero no-de tipo porque nicamente contiene una direccin de memoria, y el compilador no guarda ninguna informacin sobre el dato al que apunta. Los punteros con tipo se declaran utilizando el operador ^ (puntero) antes del tipo de dato de una variable. Ejemplo: Cdigo 1. var 2. 3. I: ^Integer;

A lie is a lie

Para que un puntero tenga la direccin de memoria de otra variable, usaramos este mtodo: Cdigo

1. program Project1; 2. 3. {$APPTYPE CONSOLE} 4. 5. uses 6. 7. 8. var 9. 10. 12. 13. 14. 15. 16. 17. 19. Writeln('I tiene el valor: ', I); Writeln('Puntero tiene el valor: ', Puntero^); Readln; Puntero: ^Integer; I: Integer; I:= 5; Puntero:= @I; //Tambien sirve Puntero:= Addr(I); SysUtils;

11. begin

18. end.

Creamos una variable de tipo integer y un puntero que apunta a una variable de tipo integer. Introducimos un valor en I y utilizando el operador @ o Addr, le decimos a Puntero que apunte a la direccin de memoria de I. Luego comprobamos que I y Puntero tienen el mismo valor. Para acceder al valor de un puntero hay que poner el operador ^ al final. Tendramos algo como esto:

Un puntero tambin puede apuntar a un valor en concreto, no hace falta que sea una variable. Ejemplo: Cdigo 1. program Project1; 2. 3. {$APPTYPE CONSOLE}

4. 5. uses 6. 7. 8. var 9. 11. 12. 13. 14. 16. Writeln('Puntero tiene el valor: ', Puntero^); Readln; Puntero: ^Integer; Puntero^:= 5; 10. begin SysUtils;

15. end.