CIENCIAS DE LA COMPUTACIÓN MAT 1104 22 CAPÍTULO V SENTENCIAS EN TURBO PASCAL 5.1 SENTENCIAS BÁSICAS, INTRODUCCIÓN La programación en la formación del estudiante de ingeniería es realmente importante. Trabajar sus propios programas es una necesidad que le será exigida en materias posteriores, ya que todos los paquetes existentes actualmente serán siempre insuficientes cuando se trate de resolver un problema de características específicas. La posibilidad de manejar gran cantidad de información a grandes velocidades resultará apasionante para el estudiante que afronte el aprendizaje de la asignatura de manera metódica. El estudiante podrá efectuar programas que hallen, por ejemplo, la suma de una serie de N términos, donde N puede variar en el orden de las centenas o miles de términos de la serie. También podrá resolver otro tipo de programas que resuelvan los problemas que sean de su interés. Durante el aprendizaje de las sentencias descritas a continuación, se recomienda tener a disposición el Turbo Pascal con el fin de practicar, verificar y consolidar lo aprendido. 5.2 WRITE S Esta sentencia permite la escritura o salida por pantalla de los valores que se desean imprimir. También permite escribir mensajes y efectuar separaciones en la impresión que se adecuen a las exigencias del programador. Si se desea imprimir el mensaje "RESULTADO FINAL", la sentencia que debe escribirse usando turbo pascal seria: WRITE('RESULTADO FINAL'); El mensaje escrito entre apóstrofes, aparecerá tal como se escribió. si se desea escribir el resultado de una variable que previamente tenía un valor asignado, por ejemplo si A=234.45 debe escribirse: WRITE('A=',A:3:2); En este caso se imprime el mensaje escrito entre apóstrofes y luego el valor de A con 3 cifras en la parte entera y 2 en la parte decimal Un WRITELN, escrito en lugar de write hace que el cabezal de impresión se ubique en la siguiente línea después de efectuar la impresión. Un WRITELN; sin otro aditamento, permite un salto de línea. En el siguiente programa se prueban diferentes modos de impresión: CIENCIAS DE LA COMPUTACIÓN MAT 1104 23 C:\TURBO\BIN\TURBO.EXE File Edit Search Run Compile Debug Tools Options Windows Help [□] IMPRESIO .PAS PROGRAM IMPRESION; uses crt; VAR A,B:REAL; R:STRING; BEGIN clrscr; A:=456.34; B:=567.7; R:='RESULTADO DEL PROBLEMA = '; WRITE('A=');WRITELN(A); WRITELN('B=',B:4:4); WRITELN(R,A+B:4:2); END. 1:1 F1 Help F2 Save F3 Open 1=[ ] Alt+F9 Compile F9 Make Alt+F10 Local menu Al ejecutar este programa se obtiene la siguiente salida: A=4.5634000000E+02 B=657.7000 RESULTADO DEL PROBLEMA = 1024.04 Donde las líneas se corresponden respectivamente 5.3 READ N Esta sentencia permite la lectura o introducción de datos al programa, al igual que en la sentencia WRITE se tiene la opción READLN que permite que el cabezal de impresión se ubique en la siguiente línea. Si se desearía introducir el valor de A que es igual a 34.56, la sentencia que debe escribirse será: READ(A); Esta sentencia hará que la ejecución del programa se detenga en la pantalla de ejecución del programa con el cursor parpadeando y esperando que se introduzca el valor de A. Resulta conveniente que se combine su uso don la sentencia WRITE a fin de escribir un mensaje previo que aclare que es lo que pide el programa, por ejemplo: WRITE(‘INTRODUZCA EL VALOR DE A ‘); READLN(A); CIENCIAS DE LA COMPUTACIÓN MAT 1104 24 5.4 IF THEN ELSE Permite una bifurcación condicional del control del programa, siendo else una opción en la sentencia, su formato es el siguiente: IF (Condición) THEN (Sentencia1) ELSE (Sentencia2); C>0 no si Cuando la condición se evalúa a verdadera se ejecuta la Sentencia1, mientras que cuando la condición es falsa se ejecuta la Sentencia2. Si no existe la opción ELSE y la condición es falsa, el control del programa se transfiere a la siguiente sentencia. Ejemplo. Un programa que permite detectar el mayor de dos números tendría la siguiente forma C:\TURBO\BIN\TURBO.EXE File Edit Search Run Compile Debug Tools Options Windows Help MAYOR .PAS [□] PROGRAM NUMAYOR; VAR A,B:INTEGER; BEGIN WRITELN('A Y B DEBEN SER DIFERENTES'); WRITE('A=');READLN(A); WRITE('B=');READLN(B); IF A>B THEN WRITE('A=',A,' ES MAYOR') ELSE WRITE('B=',B,' ES MAYOR'); READLN; END. 1=[ ] 1:1 F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 Local menu La salida de este programa detecta cual de los números es mayor en caso de ser iguales el programa no puede detectar nada y señala B como mayor. 5.4.1 OPERADORES AND OR Turbo Pascal ofrece la posibilidad de combinar una condición a través de los operadores AND y OR, los cuales tienen su salida por si o por no, de acuerdo a las tablas de verdad del álgebra proposicional de la conjunción y disyunción respectivamente. El operador AND es similar a la conjunción y tiene la siguiente salida CIENCIAS DE LA COMPUTACIÓN MAT 1104 25 A>=B and D>=C si no P=A>=B and V V Q=D>=C V V F F F F V F F F La salida por si (THEN) se efectúa cuando ambas condiciones son verdaderas, en cualquier otro caso el control del programa se desvía a falso (ELSE) El operador OR es similar a la disyunción y tiene la siguiente salida A>=B or D>=C si no P=A>=B V Or V Q=D>=C V V V F F V V F F F La salida por no (ELSE) se efectúa cuando ambas condiciones son falsas, en cualquier otro caso el control del programa se desvía a verdadero (THEN) 5.5 CASE OF N Esta sentencia permite la bifurcación a múltiples opciones en el control del programa, cuando se ejecuta la sentencia solamente una de estas opciones es ejecutada, su formato es el siguiente: CIENCIAS DE LA COMPUTACIÓN MAT 1104 26 Case (llave) of Llave 1: Sentencia 1; Llave 2: Sentencia 2; …………………….. Llave N : Sentencia N; Else (opcional) Sentencia X; End; La llave declarada en la sentencia case, direcciona el control del programa hacia una de las salidas y ejecuta una de las sentencias, si la llave no es identificada en ninguno de los casos se ejecuta la sentencia escrita después de else la cual es opcional, de no existir else se ejecuta la siguiente sentencia. C:\TURBO\BIN\TURBO.EXE File Edit Search Run Compile Debug Tools Options Windows Help [□] LEEDIG .PAS 1=[ ] PROGRAM LEEDIG; VAR N:CHAR; BEGIN WRITE('INTRODUZCA UN DIGITO ');READ(N); CASE N OF 'O':WRITE(' CERO'); '1':WRITE(' UNO'); '2':WRITE(' DOS'); '3':WRITE(' TRES'); '4':WRITE(' CUATRO'); '5':WRITE(' CINCO'); '6':WRITE(' SEIS'); '7':WRITE(' SIETE'); '8':WRITE(' OCHO'); '9':WRITE(' NUEVE') ELSE WRITE('ES OTRO CARACTER'); END;READLN;READLN; END. 1:1 F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 Local menu Este programa permite escribir en forma literal el dígito introducido, cuando no se introduce un dígito el programa escribe el mensaje ‘ES OTRO CARÁCTER’. CIENCIAS DE LA COMPUTACIÓN MAT 1104 5.6 FOR TO DO 27 I=1 → N Sentencias I Esta instrucción tiene por objetivo repetir una sentencia o un grupo de ellas un número determinado de veces. Su formato es el siguiente: FOR ( Valor inicial) TO (Valor final ) DO sentencia1; Mediante estas instrucciones la sentencia1 se repetirá tantas veces como números existan entre el valor inicial y el valor final, por ejemplo; si se desea imprimir los 100 primeros números naturales debe escribirse: FOR I:=1 TO 100 DO WRITE(I:4); El número 4 indica que se dejaran 4 espacios para la impresión de cada número, el diagrama de flujo y la codificación en turbo pascal del programa tendrían la siguiente forma: INICIO I=1 → 100 I I FIN CIENCIAS DE LA COMPUTACIÓN MAT 1104 28 C:\TURBO\BIN\TURBO.EXE File Edit Search Run Compile Debug Tools Options Windows Help [□] NATURALE.PAS .PAS PROGRAM NATURALES; USES CRT; VAR I:INTEGER; BEGIN CLRSCR; FOR I:=1 TO 100 DO WRITE(I:4); WRITELN; END. 1=[ ] 1:1 F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 Local menu El programa ejecutado mostraría lo siguiente: C:\TURBO\BIN\TURBO.EXE 1 2 3 4 5 6 7 8 9 10 11 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 Cuando usted este trabajando el turbo pascal pruebe a cambiar 100 por otro número, también cambie el número por ejemplo por 5 o 6 para ver las diferencias en la ejecución del programa Cuando se desean ejecutar varias sentencias las mismas deben ir precedidas de un BEGIN y terminar con END, Por ejemplo si desearíamos generar números aleatorios entre 0 y 100 e imprimirlos escribimos: FOR I:=1 TO 100 DO BEGIN CIENCIAS DE LA COMPUTACIÓN MAT 1104 29 N:=RANDOM(100); WRITE(N:4); END; La potencia de esta sentencia está en su posibilidad de manejar gran cantidad de datos en forma muy rápida 5.6.1 FOR DOWNTO DO En este caso la opción downto permite variar el ciclo desde un número mayor a uno menor, por ejemplo si desea escribir los números naturales en orden decreciente desde 200 hasta 100 debe escribirse: FOR I:=200 TO 100 DO WRITE(I:4); 5.7 WHILE DO Es una sentencia que también permite manejar ciclos iterativos, a diferencia del FOR, WHILE es mejor cuando el número de iteraciones que se desea realizar es desconocido, su formato es el siguiente WHILE (Condición) DO BEGIN ... ... END; Mientras la condición se evalúe verdadera, se ejecutan las sentencias comprendidas dentro del bucle. Dentro las sentencias que conforman WHILE, debe existir una que permita que la condición se evalúe a falsa en algún momento, esto permitirá salir del bucle while. Ejemplo. Haga un programa que permita determinar cuantos números primos existen entre 10000 y 11000 CIENCIAS DE LA COMPUTACIÓN MAT 1104 30 INICIO BP = 10000 DP = 0 I=1 → BP si BP MOD I 0 DP = DP + 1 si no I CP = CP + 1 DP =2 si no N BP = BP + 1 no N<=20000 si CP FIN C:\TURBO\BIN\TURBO.EXE File Edit Search Run Compile Debug Tools Options Windows Help [□] PRIWHILE .PAS {CUENTA Y MUESTRA NUMEROS PRIMOS ENTRE 10000 Y 20000} 1=[ ] PROGRAM PRIWHILE; VAR I,BP,DP,CP: INTEGER; BEGIN BP:=10000; WHILE BP<=20000 DO BEGIN DP:=0; FOR I:=1 TO BP DO IF BP MOD I =0 THEN DP:=DP+1; IF DP=2 THEN BEGIN WRITE(BP:6); CP:=CP+1; END; BP:=BP+1; END; WRITELN; WRITE('EXISTEN ',CP,' NUMEROS PRIMOS'); END. 1:1 F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 Local menu CIENCIAS DE LA COMPUTACIÓN MAT 1104 31 Este programa mostrará: 10007 10009 10037 ……………………………………19993 19997 EXISTEN 1033 NUMEROS PRIMOS 5.8 REPEAT UNTIL Esta sentencia permite el manejo de ciclos iterativos que es recomendable cuando el número de iteraciones no se conoce, debe tomarse en cuenta que el grupo de sentencias que existen entre REPEAT y UNTIL, se ejecutarán hasta que la condición se evalúe a falsa. Un programa que determina cuantos números primos existen entre 10000 y 20000 será:( El diagrama de flujo es el mismo del programa anterior) C:\TURBO\BIN\TURBO.EXE File Edit Search Run Compile Debug Tools Options Windows Help [□] PRIREPEA.PAS .PAS {CUENTA Y MUESTRA NUMEROS PRIMOS ENTRE 10000 Y 20000} 1=[ ] PROGRAM PRIMOSREPEAT; VAR I,BP,DP,CP: INTEGER; BEGIN BP:=10000; REPEAT DP:=0; FOR I:=1 TO BP DO IF BP MOD I =0 THEN DP:=DP+1; IF DP=2 THEN BEGIN WRITE(BP:6); CP:=CP+1; END; BP:=BP+1; UNTIL BP=20000; WRITELN; WRITE('EXISTEN ',CP,' NUMEROS PRIMOS'); END. 1:1 F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 Local menu Este programa mostrará: 10007 10009 10037 ……………………………………19993 19997 EXISTEN 1033 NUMEROS PRIMOS CIENCIAS DE LA COMPUTACIÓN MAT 1104 5.9 FUNCIONES A través de este primer programa se pretende que el lector analice las diferentes funciones del turbo pascal y sus correspondientes salidas que son mostradas en la pantalla de ejecución del programa. {muestra las funciones en turbo pascal} PROGRAM FUNC; USES CRT;{declara el uso de controladores de pantalla y teclado} VAR X,Y,Z: REAL; A:STRING; B:INTEGER; BEGIN CLRSCR;{limpia la pantalla de ejecución} RANDOMIZE;{inicializa la variable en forma diferente} X:=4.3245; Y:=-7.7898; Z:=8.6666; A:='NOMBRE Y APELLIDO'; WRITELN('X=',X:1:4,' Y=',Y,' Z=',Z); B:=LENGTH(A);{ASIGNA A B EL NÚMERO DE CARACTERES DE A} WRITELN(' B=',B); WRITELN(' ABS(Y)=',ABS(Y),' ABS(X)=',ABS(X)); WRITELN(' e ELEVADO A 2 =EXP(2)=',EXP(2)); WRITELN(' LN(2)=',LN(2)); WRITELN(' 4 ELEVADO A 3/5=',EXP((3/5)*LN(4))); WRITELN(' FRAC(X)=',FRAC(X):3:5,' FRAC(Y)=',FRAC(Y)); WRITELN(' INT(X)=',INT(X),' INT(Y)=',INT(Y)); WRITELN(' ROUND(X)=',ROUND(X),' ROUND(Y)=',ROUND(Y)); WRITELN(' ROUND(Z)=',ROUND(Z)); WRITELN(' TRUNC(X)=',TRUNC(X),' TRUNC(Y)=',TRUNC(Y)); WRITELN(' TRUNC(Z)=',TRUNC(Z)); WRITELN(' RANDOM(1000)=',RANDOM(1000)); WRITELN(' ARCTAN(45)=',ARCTAN(45)); WRITELN(' COS(45)=',COS(45)); WRITELN(' SIN(45)=',SIN(45)); WRITELN(' 46 DIV 5 =',46 DIV 5);{parte entera de la división} WRITELN(' 46 MOD 5 =',46 MOD 5);{fracción de la división} WRITELN(' SQR(7)=',SQR(7));{ELEVA 7 AL CUADRADO} WRITELN(' SQRT(55)=',SQRT(55));{OBTIENE LA RAIZ CUADRADA DE 55} READLN; END. SALIDA O EJECUCIÓN DEL PROGRAMA 32 CIENCIAS DE LA COMPUTACIÓN MAT 1104 33 5.10 PROCEDIMIENTOS Un procedimiento es un subprograma que realiza una tarea específica, pudiendo recibir y devolver datos del programa, esta compuesto por un grupo de sentencias identificadas por un nombre. Los procedimientos constituyen un sector de la parte declarativa del programa, cuando se desea ejecutarlos debe hacerse referencia a ellos en el programa mediante el nombre, pueden ser de dos clases, aquellos que utilizan parámetros formales y que pueden ejecutarse para distintos valores de algunos datos y los que no utilizan parámetros formales en los cuales se omite la lista. El Formato de declaración es el siguiente: PROCEDURE nombre (lista de parámetros formales); Declaraciones locales BEGIN Cuerpo del procedimiento END; Los procedimiento se pueden considerar como subrutinas que permiten que un progre se pueda descomponer en varias partes más pequeñas o trozos de programa, que hacen más fácil la resolución del problema. La división de un programa en varias partes contribuye a mejorar el algoritmo de solución y facilita la resolución, su aplicación puede verse en el capítulo 5 donde muestran aplicaciones de procedimientos. CIENCIAS DE LA COMPUTACIÓN MAT 1104 34 Ejemplo. Haga un programa que utilice procedimientos para sumar dos matrices. CARGAR R SUMAR IMP I=1 → N I=1 → N I=1 → N J=1 → M J=1 → M J=1 → M MAT[I,J] = RANDOM(10) S[I,J] = A[I,J] + B[I,J] A[I,J] J J J I I I FIN FIN FIN Estos son los tres procedimientos que requiere el programa, el programa principal será: INICIO CARGAR(A) IMP (A) CARGAR(B ) IMP (B) SUMAR IMP (S) FIN La codificación en turbo pascal será: PROGRAM SUMATPRO; TYPE MATRIZ=ARRAY[1..100,1..100] OF INTEGER; CIENCIAS DE LA COMPUTACIÓN MAT 1104 VAR I,J,N,M:INTEGER; A,B,S:MATRIZ; PROCEDURE CARGAR(VAR MAT:MATRIZ); BEGIN FOR I:=1 TO N DO FOR J:=1 TO M DO MAT[I,J]:=RANDOM(10); END; PROCEDURE SUMAR; BEGIN FOR I:=1 TO N DO FOR J:=1 TO M DO S[I,J]:=A[I,J]+B[I,J]; END; PROCEDURE IMP(VAR MAT:MATRIZ); BEGIN FOR I:=1 TO N DO BEGIN FOR J:=1 TO M DO BEGIN WRITE(MAT[I,J]:3); END; WRITELN; END; END; BEGIN RANDOMIZE; WRITE('FILAS DE A Y B = ');READLN(N); WRITE('COLUMNAS DE A Y B = ');READLN(M); WRITELN('MATRIZ A');CARGAR(A);IMP(A); WRITELN('MATRIZ B');CARGAR(B);IMP(B); WRITELN('MATRIZ SUMA');SUMAR;IMP(S); READLN; END. 35