Pascal Estructuras if Then Else
Transcript of Pascal Estructuras if Then Else
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 1 de 16
Estructuras de Programación
1) Estructura Condicional Simple: if then else { Dados dos números distintos entre sí, informar el mayor de ellos } { SECCION DECLARATIVA } program Ejemplo01; uses crt; var nro1, nro2: integer; { SECCION ALGORÍTMICA } begin { Prólogo } ClrScr; writeln(' *** Buscar el número mayor *** '); writeln; write('Ingresar un numero entero: '); readln(nro1); write('Ingresar otro numero entero distinto: '); readln(nro2); writeln; { Resolución y Epílogo } if nro1 > nro2 then writeln('El mayor es: ', nro1) else writeln('El mayor es: ', nro2); writeln; writeln(' *** Fin del Programa *** '); writeln; writeln('Presione ENTER para salir'); readln; end.
Nunca poner punto y coma
antes de el else
then else
true false
if
?
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 2 de 16
2) Estructuras Condicionales Anidadas: Ejemplo 01: { Dado un número informar si es positivo, negativo o cero } { SECCION DECLARATIVA } program Ejemplo02_1; uses crt; var nro: real; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** Verificar si un número es positivo, negativo o cero *** '); writeln; write('Ingresar un numero: '); readln(nro); writeln; { Resolución y Epílogo } if nro>0 then writeln('El numero ', nro:6:2, ' es positivo') else if nro<0 then writeln('El numero ', nro:6:2, ' es negativo') else writeln('El numero ingresado es cero'); writeln; writeln(' *** Fin del Programa *** '); writeln; writeln('Presione ENTER para salir'); readln; end.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 3 de 16
Ejercicio 02 { Dada una fecha en formato día, mes y año, informar si esa fecha es Navidad. Nota: suponer que se ingresan fechas válidas } { SECCION DECLARATIVA } program Ejemplo02_2; uses crt; var dia, mes: byte, anio: integer; { SECCION ALGORÍTMICA } begin { Prólogo } ClrScr; writeln(' *** Verificar si la fecha es Navidad *** '); writeln; write('Ingresar dia: '); readln(dia); write('Ingresar mes: '); readln(mes); write('Ingresar anio: '); readln(anio); writeln; { Resolución y Epílogo } if mes = 12 then if dia = 25 then begin write('La fecha ',dia,'/',mes,'/',anio); writeln(' corresponde a Navidad'); end else begin write('La fecha ',dia,'/',mes,'/',anio); writeln(' no corresponde a Navidad'); end else begin write('La fecha ',dia,'/',mes,'/',anio); writeln(' no corresponde a Navidad'); end; writeln; writeln(' *** Fin del Programa *** '); writeln; writeln('Presione ENTER para salir'); readln; end.
Si dentro del then o else deben ejecutarse más de una
instrucción, es NECESARIO
encerrarlas entre begin – end
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 4 de 16
Ejemplo 03: { Dados tres números enteros, informarlos ordenados en forma descendente. } { SECCION DECLARATIVA } program Ejemplo02_3; uses crt; var a, b, c: integer; { SECCION ALGORITMICA } begin { Protocolo } ClrScr; writeln('*** Ordenar tres números descendentemente ***'); writeln; write('Ingresar tres números enteros: '); readln(a, b, c); writeln; if a>b then if b>c then writeln(' ',a,' ',b,' ',c) else if a>c then writeln(' ',a,' ',c,' ',b) else writeln(' ',c,' ',a,' ',b) else if b>c then if a>c then writeln(' ',b,' ',a,' ',c) else writeln(' ',b,' ',c,' ',a) else writeln(' ',c,' ',b,' ',a); writeln; writeln(' *** Fin del Programa *** '); writeln; writeln('Presione ENTER para salir'); readln; end.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 5 de 16
3) Estructura Condicional Múltiple: case of { Dado un número de mes, informar su nombre, la cantidad de días que posee y a que cuatrimestre pertenece. Nota: puede haber error en el ingreso del mes } { SECCION DECLARATIVA } program Ejemplo03; uses crt; var mes: shortint; dias: byte; nmes, cuat: string[10]; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** Informar nombre del mes, cantidad de días y cuatrimestre *** '); writeln; write('Ingresar número del mes: '); readln(mes); writeln; { Resolución } case mes of 1: nmes:='Enero'; 2: nmes:='Febrero'; 3: nmes:='Marzo'; 4: nmes:='Abril'; 5: nmes:='Mayo'; 6: nmes:='Junio'; 7: nmes:='Julio'; 8: nmes:='Agosto'; 9: nmes:='Septiembre'; 10: nmes:='Octubre'; 11: nmes:='Noviembre'; 12: nmes:='Diciembre'; end; case mes of 1, 3, 5, 7, 8, 10, 12: dias:=31; 2: dias:=28; 4, 6, 9, 11: dias:=30; else dias:=0; end; case mes of 1..4: cuat:='Primer' ; 5..8: cuat:='Segundo'; 9..12: cuat:='Tercer'; end; writeln;
Variable selectora de tipo de dato:
integer, char o boolean
Los posibles valores de la
variable pueden indicarse como:
Valores enumerados
Rango de valores
Posee un end propio
Si dentro de cada rótulo de selección deben ejecutarse más
de una instrucción, es NECESARIO encerrarlas entre
begin – end
Pero cuando debe ejecutarse una única instrucción, NO es
necesario encerrarla entre begin – end
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 6 de 16
{ Epílogo } if dias <> 0 then begin write(' El numero de mes corresponde a ', nmes); writeln(' tiene ',dias,' dias'); writeln(' y pertenece al ',cuat,' Cuatrimestre del año'); end else writeln('El numero ingresado no corresponde a un mes valido'); writeln; writeln(' *** Fin del Programa *** '); writeln; writeln('Presione ENTER para salir'); readln; end.
variable
v1 v2 v3 v4 v5
Si dentro del then o else deben ejecutarse más de una
instrucción, es NECESARIO encerrarlas entre begin – end
Pero cuando debe ejecutarse una única instrucción, NO es
necesario encerrarla entre begin – end
Variable selectora
Posibles contenidos de
la variable selectora
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 7 de 16
4) Estructura Repetitiva: repeat until { De cada uno de los alumnos de un curso se conoce: matrícula, nombre y las tres notas de sus exámenes, calcular e informar el promedio obtenido por cada alumno Nota: para fin de ingreso de datos preguntar: Desea procesar datos? s/n } { SECCION DECLARATIVA } program Ejemplo04; uses crt; var matr: integer; nom: string[20]; n1, n2, n3: byte; prom: real; resp: char; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; { Desarrollo y Epílogo } repeat write('Ingresar matricula del alumno: '); readln(matr); write('Ingresar nombre: '); readln(nom); write('Ingresar las 3 notas: '); readln(n1,n2,n3); prom:=(n1+n2+n3)/3; writeln; writeln('Alumno: ',nom,' Promedio: ',prom:6:2); writeln; write('Desea procesar datos? s/n '); readln(resp); writeln; until (resp ='n') or (resp ='N'); writeln; writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; end.
Estructura Repetitiva Repeat … until 1- Se ingresa directamente al cuerpo del ciclo, ejecutando las instrucciones que están dentro de él.
2- La condición se evalúa al final, y si esta es falsa se reingresa al ciclo.
3- Solo cuando la condición sea verdadera se puede salir del ciclo de repetición.
4- Esta estructura se utiliza cuando tenemos por lo menos un juego de datos a procesar, por lo tanto se
puede ingresar al ciclo 1 o mas veces.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 8 de 16
5) Estructura Repetitiva: while do Versión 1 { De cada uno de los alumnos de un curso se conoce: matrícula, nombre y las tres notas de sus exámenes, calcular e informar el promedio obtenido por cada alumno Nota: para fin de ingreso de datos preguntar: Desea procesar datos? s/n } { SECCION DECLARATIVA } program Ejemplo05; uses crt; var matr: integer; nom: string[20]; n1, n2, n3: byte; prom: real; resp: char; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; { Desarrollo y Epílogo } write('Desea procesar datos? s/n '); readln(resp); while ( resp = 's') or ( resp='S') do begin writeln; write('Ingresar matricula del alumno: '); readln(matr); write('Ingresar nombre: '); readln(nom); write('Ingresar las 3 notas: '); readln(n1,n2,n3); prom:=(n1+n2+n3)/3; writeln; writeln('Alumno: ',nom,' Promedio: ',prom:6:2); writeln; write('Desea procesar datos? s/n '); readln(resp); end; writeln; writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; end.
Estructura Repetitiva While … do 1- Se ingresa al ciclo evaluando primeramente una condición.
2- Si la condición es verdadera, se ingresa al cuerpo del ciclo de repetición y se ejecutan las instrucciones
que estan dentro de él.
3- Solo cuando la condición sea falsa se puede salir del ciclo de repetición.
4- En consecuencia, a esta estructura se puede ingresar cero, una o varias veces
Si dentro del while deben ejecutarse más de una
instrucción, es NECESARIO encerrarlas entre begin – end
Pero cuando debe ejecutarse una única instrucción, NO es
necesario encerrarla entre begin – end
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 9 de 16
Versión 2 { De cada uno de los alumnos de un curso se conoce: matrícula, nombre y las tres notas de sus exámenes, calcular e informar el promedio obtenido por cada alumno la cantidad de alumnos procesados y el promedio general del curso. Nota: para fin de ingreso de datos ingresar matrícula cero } { SECCION DECLARATIVA } program Ejemplo06; uses crt; var matr: integer; nom: string[20]; n1, n2, n3: byte; prom, suma: real; cant: byte; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; suma:=0; cant:=0; { Desarrollo y Epílogo } write('Ingresar matricula del alumno (cero para terminar): '); readln(matr); while ( matr <> 0) do begin cant:=cant+1; write('Ingresar nombre: '); readln(nom); write('Ingresar las 3 notas: '); readln(n1,n2,n3); prom:=(n1+n2+n3)/3; suma:=suma+prom; writeln; writeln('Alumno: ',nom,' Promedio: ',prom:6:2); writeln; writeln; write('Ingresar matricula del alumno (cero para terminar): '); readln(matr); end; writeln; if cant <> 0 then begin writeln('Cantidad de alumnos procesados: ',cant); writeln('Promedio General del curso: ',(suma/cant):6:2); end else writeln('No se procesaron datos '); writeln; writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; end.
Variable contador:
� Tiene sentido al utilizar estructuras
repetitivas
� Es entera
� Debe inicializarse en cero antes de
entrar al ciclo de repetición
� Se incrementa en 1 dentro del ciclo
� Se informa al salir del ciclo
Variable acumulador:
� Tiene sentido al utilizar estructuras repetitivas
� Es del mismo tipo que la variable cuyo contenido debe acumular
� Debe inicializarse en cero antes de entrar al ciclo de repetición
� Acumula el contenido de una variable dentro del ciclo
� Se informa al salir del ciclo
Validación para evitar división por cero
Marca de fin
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 10 de 16
Indentación Mantener un margen para la secuencia principal del programa y un margen distinto para el cuerpo de cada estructura de programación, hace a la legibilidad y comprensión de un programa y es de aplicación OBLIGATORIA
{ De cada uno de los alumnos de un curso se conoce: nombre y las tres notas de sus exámenes, calcular e informar el promedio obtenido por cada alumno y si está aprobado, desaprobado o recupera, sabiendo que aprueba con promedio mayor o igual a 7 y recupera con promedio entre 4 y 6. Para fin de ingreso de datos ingresar nombre en blanco. } TEXTO SIN INDENTACIÓN : NO SE DISTINGUEN LAS ESTRUCTURAS DE PROGRAMACIÓN, NI LAS
INSTRUCCIONES QUE COMPONEN EL CUERPO DE CADA ESTRUCTURA. ES CLARAMENTE ILEGIBLE.
{ SECCION DECLARATIVA } program Ejemplo09; uses crt; var nom: string[20]; n1, n2, n3: byte; prom: real; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; write('Ingresar nombre: '); readln(nom); while nom<>’’ do begin write('Ingresar las 3 notas: '); readln(n1,n2,n3); { Desarrollo y Epílogo } prom:=(n1+n2+n3)/3; writeln; write('Alumno: ',nom,' Promedio: ',prom:6:2); if (prom<4) then writeln(' *** Desaprobado') else if (prom<7) then writeln(' *** Recupera') else writeln(' *** Aprobado'); writeln; write(‘Ingresar nombre: ’); readln(nom); end; writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; end.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 11 de 16
TEXTO CON INDENTACIÓN : SE DISTINGUE CADA ESTRUCTURA DE PROGRAMACIÓN Y LAS
INSTRUCCIONES QUE SE ENCUENTRAN EN EL CUERPO DE CADA UNA. ES TOTALMENTE LEGIBLE
{ SECCION DECLARATIVA } program Ejemplo09; uses crt; var nom: string[20]; n1, n2, n3: byte; prom: real; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; write('Ingresar nombre ( ENTER para salir ): '); readln(nom); while nom<>’’ do begin write('Ingresar las 3 notas: '); readln(n1,n2,n3); { Desarrollo y Epílogo } prom:=(n1+n2+n3)/3; writeln; write('Alumno: ',nom,' Promedio: ',prom:6:2); if (prom<4) then writeln(' *** Desaprobado') else if (prom<7) then writeln(' *** Recupera') else writeln(' *** Aprobado'); writeln; write('Ingresar nombre ( ENTER para salir ): '); readln(nom); end; writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; end.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 12 de 16
Archivos de Texto: Lectura y Escritura Versión 3 { De cada uno de los alumnos de un curso se conoce: matrícula, nombre y las tres notas de sus exámenes, calcular e informar el promedio obtenido por cada alumno y la cantidad de alumnos procesados. Nota: Los datos se leen desde archivo } { SECCION DECLARATIVA } program Ejemplo07; uses crt; var matr: integer; nom: string[20]; n1, n2, n3: byte; prom: real; cant: byte; notas: text; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; writeln; cant:=0; assign(notas,'datos.txt'); reset(notas); writeln('Matricula Nombre nota1 nota2 nota3 Promedio '); writeln; { Desarrollo y Epílogo } while not EOF(notas) do begin cant:=cant+1; readln(notas,matr,n1,n2,n3,nom); prom:=(n1+n2+n3)/3; writeln; writeln(matr:6,nom:10,n1:7,n2:7,n3:7,prom:9:2); writeln; end; writeln; writeln('cantidad de alumnos procesados: ',cant); writeln; writeln; writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; close(notas); end.
Tipo de dato text define un tipo de archivo
de texto de acceso secuencial
Assign( ) : Procedimiento que relaciona la variable
interna ( tipo text ) con el archivo externo
Reset( ) : Procedimiento que abre un archivo
existente para lectura
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 13 de 16
Versión 4 { De cada uno de los alumnos de un curso se conoce: matrícula, nombre y las tres notas de sus exámenes, calcular e informar el promedio obtenido por cada alumno y la cantidad de alumnos procesados. Nota: Los datos se leen desde archivo y los resultados deben imprimirse en pantalla y en un archivo } { SECCION DECLARATIVA } program Ejemplo08; uses crt; var matr: integer; nom: string[20]; n1, n2, n3: byte; prom: real; cant: byte; notas: text; promedios:text; { SECCION ALGORITMICA } begin { Prólogo } ClrScr; writeln(' *** PROCESAMIENTO DE NOTAS *** '); writeln; writeln; cant:=0; assign(notas,'datos.txt'); reset(notas); assign(promedios,'promedios.txt'); rewrite(promedios); writeln('Matricula Nombre nota1 nota2 nota3 Promedio '); writeln; writeln(promedios,'Matricula Nombre nota1 nota2 nota3 Promedio '); writeln(promedios); { Desarrollo y Epílogo } while not EOF(notas) do begin cant:=cant+1; readln(notas,matr,n1,n2,n3,nom); prom:=(n1+n2+n3)/3; writeln; writeln(matr:6,nom:10,n1:7,n2:7,n3:7,prom:9:2); writeln; writeln(promedios,matr:6,nom:10,n1:7,n2:7,n3:7,prom:9:2); writeln(promedios); end; writeln; writeln('cantidad de alumnos procesados: ',cant); writeln(promedios); writeln(promedios,'cantidad de alumnos procesados: ',cant); writeln; writeln;
Rewrite( ) : Procedimiento que abre un
archivo para escritura, si no existe lo crea.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 14 de 16
writeln(' ** FIN DEL PROGRAMA ** '); writeln; writeln('Presionar ENTER para salir'); readln; close(notas); close(promedios); end. Archivo de Lectura
Archivo de Escritura
Este archivo de texto contiene los datos a procesar por el programa, por lo tanto debe existir. Debemos crearlo antes de correr el programa ( abrir bloc de notas y cargar los datos )
Este archivo de texto se abre para escritura, si no existe lo crea el programa y si existe borra la información que hay en él y escribe la nueva información. Al tener extensión .txt, se puede abrir con el bloc de notas
Es conveniente que el archivo .pas y el o los archivos .txt estén en el mismo directorio o carpeta
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 15 de 16
Archivos de Texto: Agregar datos { De un curso de computación se conoce: cantidad máxima de vacantes,cantidad de inscriptos nuevos, cantidad de inscriptos recursante. Estos datos se encuentran almacenados en un archivo de texto. Diseñar un programa que calcule e informe por pantalla y almacene en un archivo de texto: cantidad de vacantes libres y porcentaje de recursantes inscriptos. Nota: Se sabe que no se cubrieron todas las vacantes } {SECCION DECLARATIVA } Program EjArchivo; uses crt; { Declaración de variables } var cvmax, nuevos, recurs, cvlibres, ctotal: byte; porc : real; { variable tipo archivo de texto } arch: text; { SECCION ALGORITMICA } { parte ejecutable } begin { Prólogo } clrscr; writeln(' *** Ejemplo Lectura / Escritura de Archivo *** ' ); writeln; { Asignación del nombre del archivo a la variable tipo archivo } assign(arch,'vacantes.txt'); { Apertura del archivo de texto para lectura } reset(arch); { Lectura de datos desde archivo de texto } readln(arch); { lee renglón de titulos } readln(arch, cvmax, nuevos, recurs ); { Salida por pantalla de datos le¡dos desde archivo } writeln('Cantidad maxima de vacantes: ', cvmax); writeln('Cantidad de inscriptos nuevos: ',nuevos); writeln('Cantidad de inscriptos recursantes: ',recurs); writeln; { Desarrollo } ctotal := nuevos + recurs; cvlibres := cvmax - ctotal; porc := recurs * 100 / ctotal; { cerrar archivo } close(arch); { Epílogo } { Apertura del archivo de texto para agregar datos } append(arch); { Escritura de datos en el archivo de texto } writeln(arch); writeln(arch,'Cantidad de vacantes libres: ' , cvlibres ); writeln(arch); writeln(arch,'Porcentaje de inscriptos recursantes: ' , porc: 6:2,' %'); writeln; { Salida de datos por pantalla } writeln( 'Cantidad de vacantes libres: ' , cvlibres ); writeln( 'Porcentaje de inscriptos recursantes: ' , porc: 6:2,' %'); { Generación de Pausa } writeln('Presione ENTER para salir del programa'); { cerrar arhivo } close(arch); readln; end.
Universidad de Buenos Aires 75.01 Computación Estructuras de Programación
Preparado por: Ing. Cristina Pérez Berro Página 16 de 16
Ejercitación:
1) Dados dos números, informar el mayor de ellos o si son iguales.
2) Dado un número de mes y el año, informar la cantidad de días que posee ese mes en ese año. Nota: puede haber error en el ingreso del mes. Un año es bisiesto si es divisible por 400 ó si es divisible por 4 pero no por 100. Para fin de ingreso de datos preguntar: Desea procesar datos? s/n
3) Dada una hora en formato hhmmss ( un número entero donde los dos primeros dígitos corresponden a la hora, los dos segundos a los minutos y los dos últimos a los segundos ), separarla en tres variable e informarla como hh:mm:ss
4) Diseñar un programa que lea desde teclado números enteros positivos e informe el factorial de cada uno de ellos. Validar que el número ingresado sea mayor o igual a cero. Para fin de ingreso de datos preguntar: Desea procesar datos s/n ?. Recordar: 0! = 1 1!=1 n!= 1*2*3*4*...n, no existe factorial de números negativos
5) Desarrollar un programa que determine e informe el valor máximo de una lista de n números reales ingresados desde teclado.
6) Diseñar un programa que dado un par de valores enteros a y b, devuelva el producto de (a*b) por sumas sucesivas, la división entera (a div b) por restas sucesiva y el resto de la división entera.
7) Ingresar tres valores que representan los lados de un triángulo, el programa debera verificar si forman un triángulo, en cuyo caso informar de que tipo es o un mensaje indicando que no forman un triángulo. Informar ademas la cantidad de triángulos de cada tipo ( escaleno, equilátero, isósceles) y la cantidad de datos ingresados que no corresponden a un triángulo. Informar de que tipo de triángulo se ingresó menor cantidad.
Nota: Para fin de ingreso de datos: Desea procesar datos s/n? Para que se pueda construir un triángulo los tres segmentos deben cumplir cada uno de ellos con la siguiente condición: cada segmento debe ser menor que la suma de los otros dos y mayor que la diferencia de los otros dos.