Trabajo realizado por :
Patricia García Gómez
Francesc Nadal i Aura 1
Índice 1. INTRODUCCIÓN ..................................................................................................................................3 2. ESTRUCTURA GENERAL DE LOS PROGRAMAS .......................................................................4
2
1. Introducción El pascal es un lenguaje de programación de alto nivel y de propósito general que ha derivado del “ALGOL-60” y fue diseñado para enseñar técnicas de programación estructurada. Es de alto nivel porque su repertorio de instrucciones lo hacen próximo a los lenguajes humanos y a los procesos humanos de pensamiento. Sus instrucciones o sentencias se componen de expresiones de apariencia algebraica y de ciertas palabras inglesas como BEGIN, END, READ, WRITE, IF, THEN, REPEAT, WHILE, DO. La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos. En este manual vamos a hablar del programa Free Pascal. El Free Pascal es un compilador Pascal portable, libre y de código abierto, que representa una alternativa a los productos comerciales Turbo Pascal y Delphi.
3
A continuación detallaremos como usar este programa sin tener noción alguna de programación.
2. Estructura general de los programas Todos los programas creados en Free Pascal tienen una estructura general, fija en todos los programas. Dicha estructura es la siguiente:
En primer lugar empezamos el programa con la palabra Program e introducimos el nombre del programa a realizar. A continuación introducimos el apartado Uses, donde declaramos las bibliotecas que tengamos la necesidad de utilizar. En la mayoría de casos utilizaremos la biblioteca crt. Antes de comenzar la estructura para el programa con un begin introducimos las variables. El apartado lo introducimos con la palabra 4
Var, donde declaramos todas la variables que vayamos a usar y de que tipo son las susodichas. Siempre que empezamos la parte operativa las líneas del programa van dentro del conjunto de Begin […] End. Dentro del conjunto Begin/End, es donde procederemos a escribir tantas líneas de programa como nos hagan falta. En este apartado es donde pondremos las sentencias, las funciones de formato, y en definitiva todo lo que haya que escribir para crear el programa. Por último, después de begin introduciremos un clrscr; para que el programa nos borre información del programa cuando vayamos a ejecutarlo. Esta es la información que borra:
Y antes del End siempre se pone un readkey; lo cual sirve para que el ordenador espere hasta que el usuario tecleé una tecla para continuar con el programa. SIEMPRE después de cada línea de programa debemos poner “ Dentro del conjunto
; ”.
2.1 Teclas de acceso rapido Pantalla de edición y pantalla de ejecución. Las teclas que hemos usado en los programas de acceso rápido son: - Alt. + F5: Esta tecla rápida nos permite cambiar de la pantalla de edición a la pantalla de ejecución, y ver qué hace el programa con las instrucciones que le hemos dado.
5
- ctrl. + F5: Esta tecla sirve para mover la pantalla de edición. - ctrl. + F9: Con esta tecla rápida nos permite poner el programa en ejecución.
- Alt. + F9: Con la combinación de estas teclas compilamos el programa, y comprobamos si las instrucciones están correctamente hechas. Si las instrucciones que le damos están correctas nos aparece en pantalla un recuadro, donde pondrá: Press any key. Esto quiere decir que el programa está esperando a que pulses una tecla cualquiera, ya que no tienes ningún error y está todo correcto.
6
Si por el contrario tienes errores en la pantalla aparecerán los errores que tienes y en qué líneas están:
En la pantalla de arriban te pone cuántos errores tienes – en el caso del ejemplo dos – en el apartado “Total errors”, y en la pantalla verde de abajo te escribe cuales son los errores y en qué líneas se encuentran – en este ejemplo el error se encuentra en la línea 36,5 y se trata de que falta un; al final de un writeln- . - F2: Con esta tecla se guarda el programa que se haya realizado hasta ese momento de forma instantánea.
2.2 Tipos de variables Son varios los tipos de variables que podemos introducir según el programa que vayamos a realizar posteriormente. En esta sección se declaran todas las variables asociando a cada una un identificador, un tipo y, opcionalmente, un valor inicial. Se pueden combinar varios identificadores en una misma declaración de variable si se trata de variables del mismo tipo. Si se declara valor inicial, afectará a todas. Las variables pueden ser para números enteros, no enteros, para letras o nombres y constantes. A continuación explicamos las variables más frecuentes y que hemos utilizado nosotros: Tipo Real La variable de tipo Real se expresa en el programa - después de introducir la variable seguida de una coma – con dos puntos (:) y la palabra Real, y punto y coma (;). 7
Con ello declaramos la variable de tipo real, la cual va de 0 a +∞, es decir, números reales. En este tipo de variable si queremos que el programa nos de el número con un número determinado de decimales tendremos que introducir K:0:2 – por ejemplo -, siento K el número real, cero el número de cifras significativas, en este caso el cero quería decir que cogiera todas, y 2 el número de decimales que después tendría el número cuando ejecutaras el programa.
Sin embargo, si queremos introducir varias variables del tipo real no hace falta que recurramos a poner en diferentes líneas cada variable seguida de la palabra Real. Podemos poner varias variables con una coma y la siguiente variable. Cómo podemos observar en la foto anterior.
Tipo Entero La variable de tipo entero se expresa en el programa - después de introducir la variable seguida de una coma – con dos puntos (:) y la palabra Integer, y punto y coma (;). De este modo declaramos la variable como un número entero, el cual puede ser negativo o positivo, pero siempre entero. En este tipo de variable no hace falta determinarle cuales son el número de decimales que quieres obtener pues los números enteros son sin decimales. Los valores de tipo integer se representan con dígitos decimales. No se admiten ni el punto ni la coma. También se pueden usar enteros negativos pero hay que tener en cuenta que un entero negativo como -32, por ejemplo, no es una constante, es una expresión formada por el signo (-) y el valor entero 32. El uso de enteros negativos en expresiones aritméticas complejas puede dar lugar a resultados distintos de los esperados si no se interpreta bien esta cuestión. Las operaciones de entrada (lectura) permiten suministrar el signo "más" o "menos" con los valores enteros. En las operaciones de salida, el signo de los valores negativos se incluye automáticamente. Los datos de tipo integer pueden ser sometidos a operaciones aritméticas. Las variables se pondrán de la misma forma que las de tipo real:
8
Tipo Carácter La variable de tipo carácter se expresa en el programa - después de introducir la variable seguida de una coma – con dos puntos (:) y la palabra Char, y punto y coma (;). El tipo Char depende del código de caracteres empleado por la máquina. El más utilizado es el código ASCII. Una variable o constante tipo Char puede contener un solo carácter especificado entre apóstrofes. Las variables quedaran en el programa de la siguiente forma:
Tipo Cadena La única variable de tipo cadena que hemos utilizado es Ansistring. Ésta corresponde a las nuevas cadenas largas, de longitud variable. Estas cadenas son asignadas de forma dinámica, incluyen un contador de referencias, e implementan la técnica de copia por escritura (copy-on-write). El tamaño de tales cadenas es casi ilimitado, pues pueden almacenar hasta dos millardos de caracteres. También están basados en el tipo ANSIChar.
2.3 Estructura Array Es una estructura homogénea de datos de tamaño constante accediendo a cada uno de sus elementos mediante un identificador común y uno o varios índices. Todos los elementos del array son del mismo tipo. Además el número de ellos no varía durante la ejecución del programa. En la estructura Array accedemos a un elemento de la estructura mediante un identificador común, el nombre del array, y con el valor que toman uno o varios índices. Al número de índices necesarios para designar un elemento del array se le denomina dimensión del array. El número máximo de valores posibles que puede tomar cada índice se denomina rango de esa dimensión o índice. Los valores han de ser consecutivos, por lo que el índice ha de ser de un tipo ordinal. Los componentes de un "array" pueden estar estructurados. Una variable de tipo "array" cuyos componentes también son "arrays" se llama matriz.
9
A continuación expondremos un ejemplo de dicha estructura:
Como se puede observar en el ejemplo nosotros hemos utilizado la estructura Array para decirle al programa cuántos son los vectores que utilizaremos para realizar el programa. En este ejemplo han sido 5, por eso pone: array [1…5]. En pascal para decir que lo que queremos exponer va de a hasta b se pone entre medias tres puntos. Siendo a y b los límites que queramos establecer.
2.4 Constantes Una constante es un dato cuyo valor no puede cambiar durante la ejecución del programa. Recibe un valor en el momento de la compilación y este permanece inalterado durante todo el programa. Las constantes se declaran en una sección que comienza con la palabra reservada const. Después de declarar una constante ya puedes usarla en el cuerpo principal del programa. Tienen varios usos: 10
ser miembro en una expresión, en una comparación, asignar su valor a una variable, etc. Las constantes tiene lugar a continuación de las variables y la estructura array
2.5 Funciones A la hora de hacer un programa ligeramente grande existen determinados procesos que se pueden concebir de forma independiente, y que son más sencillos de resolver que el problema entero. Además, estos suelen ser realizados repetidas veces a lo largo de la ejecución del programa. Estos procesos se pueden agrupar en una función, definida para que no tengamos que repetir una y otra vez ese código en nuestros scripts, sino que simplemente llamamos a la función y ella se encarga de hacer todo lo que debe. Así que podemos ver una función como una serie de instrucciones que englobamos dentro de un mismo proceso. Este proceso se podrá luego ejecutar desde cualquier otro sitio con solo llamarlo. Por ejemplo, en una página web puede haber una función para cambiar el color del fondo y desde cualquier punto de la página podríamos llamarla para que nos cambie el color cuando lo deseemos. Una función es un modulo de un programa separado del cuerpo principal, que realiza una tarea especifica y que puede regresar un valor a la parte principal del programa u otra función o procedimiento que la invoque. Hay dos tipos de funciones:
2.5.1 Sentencias La parte ejecutable de un programa está formada por sentencias que constituyen la expresión de algoritmos que, aplicados a las estructuras de datos diseñadas, producen acciones enfocadas a la obtención de resultados útiles. En Pascal, las sentencias ejecutables se pueden clasificar en simples y estructuradas. Sentencias simples:
- Asignación. - Sentencia vacía. - Llamada a procedimiento. - Sentencia GOTO. Sentencias estructuradas: - Sentencia compuesta. - Condicionales: IF-THEN-ELSE 11
- Repetitivas: WHILE, REPEAT, FOR. Las sentencias estructuradas contienen a sentencias simples o a otras sentencias estructuradas que deben ser ejecutadas en orden, de forma repetitiva o cuando se cumplen condiciones determinadas. Una sentencia estructurada se puede usar en cualquier lugar donde está permitida una sentencia simple. En lo sucesivo se usará el término sentencia para designar a una sentencia simple o estructurada indistintamente. Sentencias simples: - Asignación: Reemplaza el valor actual de una variable o función por otro valor especificado por una expresión. En tiempo de ejecución, se evalúa la expresión y el resultado se asigna a la variable representada a la izquierda del signo ( := ). Como identificador se puede usar el nombre de una función o de cualquier variable. La variable (o función) y la expresión deben ser del mismo tipo, admitiéndose solamente las siguientes excepciones: 1. Que el tipo de la variable sea real y el tipo de la expresión: entero o un subrango de entero 2. Que el tipo de la expresión sea un subrango del tipo de la variable y viceversa Este tipo de sentencia se expresa en Pascal de la forma :=.
- Sentencia vacía: No produce otro efecto que avanzar el control de la ejecución del programa a la sentencia siguiente. Se puede representar por dos delimitadores (;) seguidos. Un caso de sentencia vacía se presenta cuando se escribe el punto y coma después del último componente de una sentencia compuesta. También se suele presentar en las sentencias IF-THEN-ELSE anidadas . - Sentencia GOTO:
La sentencia GOTO produce la bifurcación incodicional del control a una sentencia identificada por una etiqueta específica. La sentencia GOTO debe estar dentro del alcance de declaración de la etiqueta. Con GOTO no se puede saltar al interior de una sentencia estructurada desde fuera. En los tratados sobre PASCAL se recomienda vivamente NO USAR esta sentencia porque rompe la estructura de los programas. En algunos compiladores no está implementada.
12
A continuación expondremos un ejemplo de dicha sentencia:
Sentencias estructuradas: - Sentencia compuesta: Es una agrupación de sentencias que pueden ejecutarse secuencialmente como si fuesen una sentencia simple. Expresión: begin (sentencia) ; .... end
Se pueden agrupar sentencias simples y estructuradas, que pueden ser compuestas a su vez. Las sentencias componentes deben de estar separadas por el delimitador (;). No es necesario escribirlo entre la última sentencia y el delimitador END, pero es recomendable hacerlo para que no se olvide en caso de añadir otras sentencias posteriormente. - Sentencias condicionales:
13
Las sentencias condicionales producen la ejecución de una sentencia según el valor de una expresión de control. La sentencia de condición que nosotros hemos dado es: Sentencia if-then-else: La expresión que sigue a IF representa la condición a evaluar. La sentencia que sigue a THEN se ejecuta sólo si el valor de la condición es TRUE; en caso contrario se ejecuta la sentencia que sigue a ELSE (o no se ejecuta ninguna si no hay parte ELSE). La sentencia detallada de operaciones es la siguiente: 1. Evaluar la condición. 2. Si es TRUE : ejecutar la parte THEN, y seguir con el paso 4. 3. Si es FALSE : ejecutar la parte ELSE, y seguir con el paso 4. 4. Continuar con el resto del programa. No se puede suponer nada sobre el valor de la condición. El objeto de una clausula THEN o ELSE puede ser una sentencia simple o estructurada, incluso otra sentencia IF-THEN-ELSE. Este caso se interpreta como si los delimitadores BEGIN y END estuvieran incluidos Hay que notar que después de THEN y ELSE no debe escribirse el punto y coma. Si se escribe precediendo a ELSE, se terminará allí la sentencia IF y se producirá un error de compilación. Cuando se anidan varias sentencias IF, hay que tener en cuenta que la clausula ELSE afecta a la IF-THEN más próxima. La sintaxis de dicha sentencia es: if (expresión lógica) then (sentencia1) else (sentencia2) Y el logaritmo es:
14
A continuación expondremos un ejemplo donde se utiliza dicha sentencia:
- Sentencias repetitivas: Permiten programar la repetición de un grupo de sentencias mediante la construcción denominada CICLO o BUCLE. El grupo de sentencias que tienen que repetirse se llama "rango" del ciclo. El número de veces que ha de repetirse el rango está determinado por la "sentencia de control" de ciclo. También suele existir una sentencia "final de ciclo" que indica el final de las sentencias que componen el rango. Hay dos formas de ciclo: el ciclo condicional y el ciclo con contador. En PASCAL, el ciclo condicional se consigue con las sentencias WHILE y REPEAT; y para el ciclo con contador está la sentencia FOR. 15
Sentencia While: Indica al ordenador que se ejecuten una o más sentencias mientras se cumpla una determinada condición. La condición viene determinada por una variable o expresión booleana. Formato: while (condición) do begin (sentencia1); ... (sentencia2); end; while (condición) do (sentencia); Puedes añadir las sentencias que desees. N será el número de sentencia que hayas decidido poner o requieras para realizar Esta sentencia comprueba inicialmente si la condición es verdadera. Si la condición es verdadera se ejecutan las sentencias mientras la condición de su enunciado sea verdadera y finaliza cuando la condición es falsa. Dado que la condición puede ser falsa inicialmente, es decir antes de comenzar el bucle, habrá casos en que el bucle no se ejecute. Las características del bucle while son: - Se ejecuta mientras la condición sea verdadera, y dentro del bucle debe existir, por lo menos, una sentencia que modifique el valor de la variable o expresión, de lo contrario se puede producir una situación de bucle infinito. Si la expresión lógica es falsa al comenzar el bucle, éste no se realizará. - Para ejecutar un grupo de sentencias, hay que construir una sentencia compuesta con los delimitadores BEGIN y END. El logaritmo que sigue la sentencia while es el siguiente:
16
La secuencia detallada de operaciones que sigue dicha sentencia es la siguiente: 1. Evaluar la condición. Si es FALSE, seguir con el paso 4. 2. Ejecutar la sentencia componente, sabiendo que la condición es TRUE. 3. Volver al paso 1. 4. Sabiendo que la condición es FALSE, seguir con el resto del programa. A continuación expondremos un ejemplo de dicha sentencia:
Sentencia REPEAT – UNTIL: 17
Ejecuta las sentencias comprendidas entre las palabras reservadas REPEAT y UNTIL hasta que la expresión o variable sea verdadera. Formato: repeat begin (Sentencia); (Sentencia); ... end; until (condición); Las características del bucle repeat son: - Se ejecutan siempre una vez, por lo menos, y la terminación del bucle se produce cuando el valor de la expresión lógica o condición de salida es verdadera. Se ejecuta hasta que la expresión es verdadera, es decir, se ejecuta mientras la expresión sea falsa. Entre las palabras reservadas REPEAT y UNTIL se pueden escribir varias sentencias sin necesidad de utilizar los delimitadores BEGIN y END. Aquí actúa UNTIL como indicador de final de rango. En la ejecución, la expresión es evaluada después de que han sido ejecutadas las sentencias; por tanto, el rango del bucle se ejecuta una vez, por lo menos, siempre. A continuación expondremos el logaritmo de dicha sentencia:
18
A continuación expondremos un ejemplo de dicha sentencia:
Sentencia FOR: Repite la ejecución de una o varias sentencias un número fijo de veces previamente establecido. Necesita una variable de control del bucle que es necesariamente de tipo ordinal, ya que el bucle se ejecuta mientras la variable de control toma una serie consecutiva de valores de tipo ordinal, comprendidos entre dos valores extremos (inferior y superior). Las características del bucle FOR son: Aunque a primera vista pueda resultar más atractivo FOR, existen limitaciones en su aplicación ya que en el bucle FOR siempre se incrementa o decrementa (de uno en uno) los 19
valores de la variable de control de bucle y no de dos en dos o de tres en tres, o con valores fraccionarios. El número de iteraciones de un bucle FOR siempre es fijo y se conoce de antemano: Valor final - Valor inicial +1. En resumen permite construir bucles repetitivos controlados por un contador. Con FOR se especifica la ejecución repetitiva de una sentencia según el valor de una variable de control que se incrementa o decrementa automáticamente. Las sentencias que se repiten (rango del bucle) no deben modificar el valor de la variable de control. El test de final de bucle se realiza antes de ejecutarse la sentencia FOR; por tanto, es posible que el bucle no se ejecute ninguna vez. En la forma TO, si la variable de control tiene un valor menor o igual que el valor final, se ejecuta el bucle y se incrementa el valor de la variable de control. Cuando el valor de la variable de control es mayor que el valor final, se da por terminada la ejecución del bucle. Cuando el bucle termina de forma natural (se completa), el valor de la variable de control queda indefinido. Si termina por la acción de una sentencia GOTO, antes de completarse, la variable de control retiene el último valor asignado. La sentencia FOR proporciona el modo más natural para operar con "arrays". A continuación expondremos la sintaxis y el algoritmo de dicha sentencia: for (variable_control := valor_inicial) to (valor_final) do (sentencia)
20
Y por último expondremos un ejemplo de dicha sentencia:
Respecto a estas tres sentencias deberemos utilizar la sentencia o estructura FOR cuando se conozca el número de iteraciones, y siempre que la variable de control de bucle sea de tipo ordinal. Se deberá utilizar la estructura REPEAT-UNTIL cuando el bucle se realice por lo menos una vez, y en todos los demás casos utilizar la sentencia WHILE.
2.5.2 Funciones de formato Función Text Color: La función text color cambia el color de fuente de todo lo que imprimas en pantalla hasta que no definas un nuevo color. Estos son los valores que puedes incluir:
21
Con dichos colores cada vez que se quiera que el texto que vaya a salir en pantalla lo haga de un determinado color se pondrá: Text color(color deseado);
Y así es como quedará al ejecutar el programa:
22
- Función Write: El procedimiento write escribe en un registro del archivo el contenido de una variable de memoria definida del mismo tipo. Cuando el usuario está creando el programa y quiere que salga algún, variable, etc… usará la función write. Dicha función sacará lo que haya dentro de ella en la pantalla de ejecución cuando se esté llevando a cabo el programa. Si queremos – por ejemplo – el programa pide un dato al usuario y después queremos que aparezca seguido de lo que se ha escrito en esta función, o queremos que aparezca una variable determinada lo único que hay que hacer es cerrar con ‘, poner una coma y la variable. Si dicha variable se pone al final del write no hará falta poner nada más, si por el contrario se quiere seguir escribiendo habrá que poner otra coma, una ‘ y continuar escribiendo. La sintaxis de la función es: Write (‘ texto que se quiere que salga en pantalla ‘); A continuación expondremos un ejemplo: En esta foto vemos como hay que expresarlo cuando se está creado el programa:
Y en esta otra cómo queda cuando se está ejecutando dicho programa:
Como observamos en el ejemplo anterior, si se quiere que al ejecutarse el programa escriba en la línea siguiente se tendrá que poner un ln siguiendo al write. - Función Read: La función read sirve para ingresar en el programa aquellas variables introducidas por el usuario que está utilizando el programa. Dichas variables será las respuestas que se dará a lo que el programa pide y que se utilizan después para seguir con éste. La sintaxis de la función read es: Read (variable que quieras ingresar en el programa); Esta función puede ser sustituida incluyendo la variable en la función write. En esta función también puede ir seguida de ln.
23
- Función Trunc: La función trunc se usa para truncar un número real. La sintaxis de dicha función es la siguiente: Trunc (la variable que quieras truncar); Esta función sólo puede ser utilizada con las variables real. Pues cualquier otro tipo de variable no se podría truncar.
- Función round: La función round se usa para truncar un número real. La sintaxis de dicha función es la siguiente: round (la variable que quieras redondear); Esta función sólo puede ser utilizada con las variables real e integer. Pues cualquier otro tipo de variable no se podría redondear.
- Función delay: El programa Pascal cuando está en ejecución espera a que el usuario presione una tecla para continuar con su función. Una opción a esto es la función delay. Dicha función hace que el programa siga en ejecución cada cierto tiempo. Tiempo que se impondrá en la edición del programa. El tiempo será programa con una constante. Y después a lo largo del programa se pondrá la siguiente sintaxis para hacerlo después funcionar: Delay (t) , siendo t el tiempo. A continuación exponemos un ejemplo de dicha función:
24
- Función div: En Pascal se puede dividir dos números y te proporciona el resultado, o también se puede vivir y que aparte del resultado se obtenga el resto. Para hacer esto últimos se utiliza la función div. En resumen en el caso de la división, no importando los números que dividamos, el resultado será un número real, para obtener un resultado entero, debemos de utilizar el operador div. La sintaxis la exponemos en el siguiente ejemplo:
- Función mod: Esta función sirve para que Pascal calcule y saque por pantalla el resto de una división en número entero. A continuación expondremos un ejemplo de dicha función:
- Funciones básicas de cálculo: Las funciones básicas de pascal para realizar programas son: Para sumar dos variables se utilizará +, para restarlas -, para multiplicarlas * y para dividirlas /. - Función Random: Si queremos realizar números al azar para algún programa con Free Pascal debemos utilizar la función Random. La sintaxis de dicha función es: Randomize; P(siendo P la variable):=Random(hasta el número que queremos que elija al azar) En esta función cuando queremos – por ejemplo – que los números al azar sean del cero al 30 tenemos que poner en el paréntesis 29, es decir, un número menos del que queremos. Y así irá del 0 hasta el número que queramos. Sin embargo, si quieres que sea a partir del uno debemos sumar 1 fuera del paréntesis. Número al azar que va del 0 a X:
Número al azar del 1 a X:
25
- La función Length: La función Length proporciona la longitud lógica de una cadena de caracteres.
3. Teoría llevada a la práctica 3.1 Saludo
Empezamos escribiendo en nombre del programa, en este caso Saludo, a continuación declaramos la biblioteca crt; Empezamos el programa con un Begin y en la línea siguiente, escribimos un clrscr; para que a la hora de ejecutar el programa nos borre toda la información del FreePascal. En la línea siguiente escribimos un Write (‘ ’) o Writreln(‘ ’), este ultimo hace que al escribir lo que le previamente hemos introducido nos vaya a la siguiente línea del programa; con el texto que queremos que salga en la pantalla. Acabamos con un readkey;, el programa espera hasta que pulses cualquier tecla y un End. para finalizar el programa. Con todo lo descrito anteriormente, el programa una vez ejecutado, nos escribe en la pantalla lo que hemos introducido en el Write
Esquema del programa Program Suma; Uses crt; Begin 26
Clrscr; Write(‘ X Readkey;
’);
End.
3.2 Suma
Empezamos nombrando el programa como queramos, en este caso se llamará suma. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos 3 variables a utilizar, n1 (1º sumando), n2 (el 2º sumando) y rs (el resultado de la suma). Una vez que por pantalla nos salga “Ingrese el 1º número a sumar” utilizamos un Read(n1) o Readln(n1), este último para ir a la línea siguiente, para que el programa lo lea y posteriormente los sume. Después de que nos lea el 2º número (n2), al la variable -rs- le asignamos con “: = “ la suma de (n1) y (n2) . Cuando queremos que el programa nos escriba el resultado, dentro del write escribimos depuse del la parte que va entre las comillas, ‘ X ’, escribimos una coma y seguidamente ponemos rs. De esta manera hacemos que el programa escriba de manera automatica el resultado, si que nosotros tengamos que hacer nada. Con todo lo descrito anteriormente el programa nos pide dos numeros y seguidamente los suma y nos saca el resultado por pantalla.
Estructura programa 27
Progam Suma; Uses crt; Var N1, n2, rs: integer; Begin clrscr; Write(‘ X Readln(n1); Write(‘ X Readln(n2); rs: n1+n2; Write(‘ X readkey; End.
’); ’); ’,rs);
3.3 Rectángulo
Empezamos nombrando el programa como queramos, en este caso se llamará rectángulo. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos las variables a utilizar: base(b1), altura(h2) y área(ar); todas de carácter integer (numero entero con signo). Escribimos una breve introducción de que es lo que el progrma nos va a hacer. Escribimos un Writeln(); para dejar una línea en blanco entre linea y linea que saldra en el programa. Seguidamente después de un write en el que nos pida que ingresemos la base, una vez escrita y mediante un readln le decimos al programa que esa sera la variable b1 [readln(b1)]. 28
Seguidamente le escribimos la altura después que un write nos lo vuelva a perdir y con un readln hacemos los mismos pasos descritos para la base. A la variable ar (area), le asignamos que es la suma de b1(base) +h2(alura). Una vez calculada, el programa, mediante un write nos la muestra por la pantalla. Con todo lo descrito anteriormente, el programa nos pide que le ingresemos la base y altura de cualquier rectangulo y el nos calcula no area. Estructura del programa Progam Rectángulo; Uses crt; Var b1, h2, ar: integer; Begin clrscr; Writeln(‘ X ’); Writeln(); Writeln(‘ X ’); Write(‘ X ’); Readln(b1); Write(‘ X ’); Readln(h2); ar:= b1+b2; Write(‘ X ’,ar); readkey; End.
3.4 Círculo
29
Empezamos nombrando el programa como queramos, en este caso se llamará circulo. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos las variables a utilizar: radio(ra), longitud(long), área(ar) de tipo real. Definimos una constante (pi) como 3,1415926, para que a la hora de escribira lo tengamos que poner si valor cada vez y tambien para no ponerla en en las variable, pues ya la hemos definido anteriormente como constante. Empezamos el programa con un write donde nos explica en que consitira el programa. Seguidamente después de un write en el que nos pida que ingresemos la el radio de la circunferencia, utilizamos un read para que el valor que hemos escrito lo tome como “ra”. Una vez teniento “ra”, le asigamos a la variable ar(area) pi*radio*radio (ra^2). Una vez haya hecho el calculo, le decimos que nos lo escriba por pantalla. Despues que que nos haya sacado por pantalla el área de la circunferencia, le asignamos a la variable long(longitud) 2*pi*radio. Una ves hecho el cálculo, le decimos que nos lo muestre por la pantalla. En los 2 resultados, area y longitud, le decimos al programa que nos lo ponga solo con 3 decimales significativos de la marena siguiente: (ar / long) :0:3 . Con lo descrito anteriormente el programa nos pide que ingresemos el radio de una circunferencia y seguidamente nos calcula el área y la longiud. Esquema del programa Progam Circle; 30
Uses crt; Const pi=3.1415926; Var ra, long, ar: real; Begin clrscr; Writeln(‘ X ’); Writeln(); Write(‘ X ’); Writeln(); Readln(ra); Ar:=pi*ra*ra; Write(‘ X ’,ar:0:3); Writeln(); Long:=2*pi*ra; Write(‘ X ’,long:0:3); readkey; End.
3.5 Positivo
Empezamos nombrando el programa como queramos, en este caso se llamará Positivo. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos las variables a utilizar: num de tipo: integer. Escribimos en pantalla que el usuario nos ingrese un número. Con un readln el programa lee el número. Seguidamente imponemos una condicion, en este caso utilizamos el “If” una sentencia que lo que hace es: si la variable introducida cumple la condición, haga una cosa (If X <,>,<=,>= etc Y then) y si no, que haga la otra (else). 31
En este caso imponemos que si la variable num es >0 que nos escriba por pantalla que el número es positivo; si el número introducido nos es >0 entonces el programa nos escribe que el número es 0 o negativo. Con todo lo destrito anteriormente le programa nos pide que ingresemos un numero y nos dira si es positivo o negativo. Estructura del programa Progam Positivo; Uses crt; Var num: integer; Begin clrscr; Write(‘ X ’); Readln(num); If num>0 then Writeln(‘ X ’); else Write(‘ X ’); readkey; End.
3.6 Vectores
32
Empezamos nombrando el programa como queramos, en este caso se llamará Positivo. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos las variables a utilizar: vac: array[1..5] of real (hemos declarado un vector de longitud 5) y n1, n2: real. Escribimos por pantalla lo que el programa nos va a hacer, en este caso hacer la media de un vector de 5 elementos. Introducimos los 5 elementos, a la hora de escribir el read tenemos que especificarle que el valor introducido es 1 de los 5 elementos de la variable vec, se especifica de la siguiente manera Readln(vec[1]), Readln(vec[2]), Readln(vec[3]) hasta 5. Despues de introducir los 5 elementos del vector, a la variable n1 le asigamos la suma de los 5 elementos (vec[1]+vec[2]+vec[3]+vec[4]+vec[5]) y a la variable n2:= n1/5 (la media de la suma de los elementos vectoriales). Despues sacamos por pantalla el resultado de la suma vectorial(n1) con extensión “:0:2” y hacemos lo mismo con la media(n2) tambien con extensión “:0:2”. Con todo lo descrito anteriormente, el programa nos pide que introduzcamos 5 elementos de un vector y posteriormente nos calculara la suma vertorial y la media. Estructura del programa Program MediadleVector: Uses crt; Var vec: array[1..5] of real; n1, n2 :real; Begin clrscr; Write(‘ X ’); Write(‘ X ’); Realln(vec[1]); Write(‘ X ’); Realln(vec[2]); Write(‘ X ’); Realln(vec[3]); Write(‘ X ’); Realln(vec[4]); Write(‘ X ’); Realln(vec[5]); n1:=vec[1]+ vec[2]+ vec[3]+ vec[4]+ vec[5]; n2:=n1/5 Wrtieln(‘ X ’,n1:0:2); Writeln(‘ X ’,n2:0:2); Readkey; End. 33
3.7 Saludo 2
Empezamos nombrando el programa como queramos, en este caso se llamará Saludo2. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos las variables a utilizar: nombre: ansistring (definimos una cadena de caracteres de longitud variable) y edad: integer. Empezamos con un write donde nos pregunta por nuestro nombre, lo introducimos y lo lee mediante un readln. Seguidamente con otro write nos muestra en pantalla: Hola , nombre, Como estas?, esto se hace de la siguiente manera _Writeln(‘!Hola¡’, variable nombre,’ ¿Cómo estas?’);_ Luego hacemos lo mismo con la variable edad, nos la puide, la introducimos, la lee y en el siguiente read la incluimos para que nos la muestre por pantalla. Con todo lo descrito anteriormente, el programa nos piede nuestro nombre y nuestra edad para luego entablar una “conversación predefinida” con nuestros datos introducidos. Estructura del programa Program Saludo2; Uses crt; Var nombre: ansistring; edad: integer; Begin clrsrc; 34
Write(‘ X ’); Readln(nombre); Writeln(‘ X ’,nombre, ‘ Writeln(‘ X ’); Readln(edad); Writeln(‘ X ’,edad); Readkey;
X
’);
End.
3.8 Concatenar
Empezamos nombrando el programa como queramos, en este caso se llamará Concatenar. Declaramos la biblioteca que vamos a utilizar, crt. Declaramos las variables a utilizar: t1, t2, sum :ansistring. Empezamos con un write donde nos pida que estribamos un texto, seguidamente un readln lo lee y otro write nos vuelve a pedir un 2º texto con si correspondiente read. Despues haber introducido los 2 textos a la variable sum se le asigna la suma de t1+t2. Mediante la funcion Gotoxy (una funcion que nos permite llevar lo que queremos que salga en pantalla a unas coordenadas del eje carteiano concretas) en este caso queremos llevarlo a la posición (15,9) y lo hacemos de la siguiente manera Gotoxy(15,9). Una ves escrito la funcion goto, escribimos un write para que nos muestre los dos textos juntos y en las coordenadas (15,9). Con todo lo descrito anteriormente, el programa nos pide que escribamos 2 textos y posteriormente los junta y los lleva a una posición determinada del la pantalla. 35
Estructura del programa Program Concatenar; Uses crt; Var t1, t2, sumv: ansistring; Begin clrsrc; Write(‘ X ’); Read(t1); Write(‘ X ’); Read(t2); Sum:=t1+t2: Gotoxy(15,9); Write(sum); Readkey; End.
3.9 Azar
Hemos creado un programa que te dice numero de la loeteria. Para ello hemos tenido que introducir la función randomize y después num:=random(100) para que nos sacara número al azar entre 0 y 100. El resto del programa es lo normal, lo de siempre. Writeln para el programa pida algo, y readln para que el programa lo identifique y lo exponga después junto con la variable que le he asignado, que en este caso ha sido real (números reales). Estructura del programa Program Concatenar; Uses crt; 36
Var Nom, num1,num2,num3, num4, num5, num6 :interger; Begin clrsrc; Write(‘ X ’); Readln(nom); Writeln(‘ X ’); Writeln(); Randomize; num1:=random(49)+1; Writeln(‘ X ’,num1); num2:=random(49)+1; Writeln(‘ X ’,num2); Num3:=random(49)+1; Writeln(‘ X ’,num3); Readkey; End.
3.10 Redondeo
37
En este ejercicio hemos hecho que el programa nos pida un número entero y después nos ponga su valor original, su valor truncado, su valor redondeado. Después nos sume, multiplique y divida con otro número del mismo tipo de variable, y pidiéndonos dos números reales nos de la diferencia entre ambos, una división normal, otra donde después le pedimos el resto y te lo da y el opuesto de unos de ellos. Para ello primero hemos pedido una variable real con los dos primeros números. Con el primer número, mediante las funciones round y trunc hemos conseguido redondearlo y que el programa nos de su valor así y truncarlo. - antes de eso hemos añadido la función formato para así poner los decimales que queramos y lo hemos hecho poniendo el número y :0:2 siendo el segundo número el número de decimales que hemos querido que tuviera. Después hemos ingresado el otro número y mediando writeln hemos hecho la suma, el producto y la división. Todo esto añadiendo la función de formato, pues son números reales y si queremos que salga un determinado número de decimales hay que ponerlo. A continuación hemos introducido dos números enteros con la variable integer y los hemos ido dividiendo y demás como antes he dicho y el programa después nos da esos valores. Aquí no se pone la función formato.
3.11 Mayor de edad
El siguiente ejemplo consiste en que el programa pide el nombre, la edad y después te dice cómo te llamas y si eres mayor de edad o no. 38
Respecto a lo de pedir el nombre y la edad lo hemos hecho como siempre, con un writeln. Después para decir si la persona es mayor de edad o no, hemos utilizado la función if / else. Hemos puesto if K<18 k="">18 te diga que eres mayor de edad. Los dos procesos de que si eres o no mayor de edad según sea K hay que ponerlos con un begin y un end para que el programa lo realice después correctamente.
3.12 Contraseña
Este ejercicio consiste en que el programa te pide el nombre de usuario, si es Juan que pida una contraseña, y si no es Juan que salga que el programa se autodestruiría en 10 segundos. Y después si se introduce el nombre de usuario correcto que te pide la contraseña de cuatro dígitos y si lo haces bien sale por la pantalla bienvenido y si no que la contraseña es incorrecta. Todo esto se ha hecho con la función if / else.
39
3.13 Cadenas
El funcionamiento de este programa es sencillo. Mediante la funcion “length” podemos contar cuantos caracteres hemos escrito (contando los espacios). Este son los pasos: Nos sale en pantalla que escribamos nuestros nombre. Con un read lo lee y en el write donde nos diga cuandos caracteres tiene nuestro nombre incluimos la funcion length de la siguiente manera: Write(‘Tu nombre completo tiene : ‘, length(nom)’letras’);. Estructura del programa Begin Clrscr; Writeln(‘ X ’); Read(nom); Write(‘ X ’, length(nom),’ Readkey; End.
X
’);
40
3.14 Sentencia For
La sentencia for nos permite que desde un intervalo numerico haga una cosa y cuando llege al final podemos decirle que haga lo contrario a lo anterior con un dowto. El programa que hemos tomado como ejemplo es que la funcion nos muestre por pantalla numeros del 1 al 10 y que cuando llege al 10 que lo haga de manera viceversa, del 10 al 1. Tambien hemos tenido que usar un Begin dentro de otro debido a que dentro de un for solo puede haber escrito una linea de programa pero si dentro del for empezamos un begin podemos escribir tantas lineas de programa como queramos. La funcion downto es la mencionada anteriormente (desde 10 hasta1).
3.15 Letra
ç 41
Mediante este programa podemos averiguar el codigo Ascii. En este caso hemos averiguado el codigo Ascii de las letras desde la a hasta la z (mayusculas y minusculas). Todo esto lo hemos hecho con la funcion chr y la funcion ord.
42