SENTENCIAS EN TURBO PASCAL

Anuncio
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
Descargar