Guía de Cibernética y Computación II. Turno matutino UNIDAD 1 LENGUAJE DE PROGRAMACIÓN PASCAL 1 Guía de Cibernética y Computación II. Turno matutino 1. ELEMENTOS DEL LENGUAJE. Las reglas de estructura que se deben seguir siempre que se escriban programas en PASCAL es la siguiente: program identificador {cabecera del programa} uses identificadores label lista de etiquetas {sección de etiquetas} const definición de constantes type declaración de tipos de datos definidos por el usuario var declaración de variables procedure definición de procedimientos function definición de funciones begin sentencias {cuerpo del programa} end. Los identificadores representan los objetos de un programa (constantes, variables, tipos de datos, procedimientos, funciones, unidades, programas y campos de registros). No es más que una secuencia de caracteres que puede ser de cualquier longitud, pero sólo los 63 primeros caracteres son significativos. Un identificador se caracteriza por las siguientes reglas: 1. 2. 3. Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no puede contener espacios en blancos. Letras, dígitos y caracteres subrayados ( _ ) están permitidos después del primer carácter. No se puede utilizar una palabra reservada como identificador; sin embargo, los identificadores estándar se pueden redefinir: 2 Guía de Cibernética y Computación II. Turno matutino Ejemplos: Identificadores válidos Nombre cobra_iva Pagina1 A_d_e Pascal_begin Identificadores No válidos 1Nombre cobra iva La_@beja A&M begin Las palabras reservadas tienen un significado especial y por lo tanto no pueden utilizarse para otros propósitos. No pueden usarse como identificador. Por lo regular, en la unidad del libro las palabras reservadas se han escrito en negritas. A continuación la lista de palabras reservadas en Turbo PASCAL. absolute and array begin case const div do downto else end external file for forward function goto if implementation in inline interface interrupt label mod nil not of or packed procedure program record repeat set shl shr string then to type unit until uses var while with xor Los siguientes cuadros muestran los diferentes tipos de datos en PASCAL. Tipo Byte Integer Longint Shortint Word Tipo entero Rango 0 . . 255 -32768 . . 32767 -247483648..2147483647 -128 . . 127 0 . . 65535 Formato 8 bits sin signo (1 byte) 16 bits con signo (2 bytes) 32 bits con signo (4 bytes) 8 bits con signo (1 byte) 16 bits sin signo (2 bytes) Tipo Real Tipo Real Single Double Extended Comp Rango 2.910-39 .. 1.71038 1.510-45 .. 3.41038 5.010-324.. 1.710308 1.910-4932.. 1.1104932 -263 + 1 .. 263 - 1 Cifras 11-12 7-8 15-16 19-20 19-20 Tamaño y bytes 6 4 8 10 8 3 Guía de Cibernética y Computación II. Turno matutino Tipos caracter (Char) El tipo char es un tipo de datos que puede contener un solo caracter. Un literal char se debe encerrar entre simples apóstrofos (sin embargo, no se puede utilizar apóstrofos cuando se introducen caracteres desde la Terminal). Algunos ejemplos son los siguientes: ‘Z’ ‘x’ ‘$’ ‘3’ ‘<’ ‘¿’ ‘ ‘ ‘12’ ‘^’ ‘_’ ‘-‘ Un caracter se almacena en memoria como un solo byte. Tipos lógicos (boolean) Los valores de tipo lógico pueden tomar sólo dos valores posibles: true (verdadero) y false (falso). Al igual que el tipo char, el tipo boolean es un tipo ordinal, que significa que tiene un número fijo de posibles valores que existen en un orden definido. Ocupa un solo byte en memoria. La relación es: false < true Tipos cadena (string) Un tipo string (cadena) es una secuencia de caracteres de cero o más cararcteres, escrita en una línea sobre el programa y encerrado entre apóstrofos. Ejemplos: ‘ ‘ ‘Laura’ ‘hola, mundo’ ‘;‘ Una cadena sin algo entre los apóstrofos se llama cadena nula o cadena vacía. La longitud de una cadena es el número de caracteres encerrados entre los apóstrofos. En cuanto al orden de evaluación de expresiones aritméticas (la prioridad), al aparecer dos o más operadores, ¿qué operación se realiza primero? Esto se refiere a cuál es el orden de prioridad (jerarquía) de las operaciones aritméticas. Veamos la siguiente tabla que resume las reglas de evaluación de expresiones. 4 Guía de Cibernética y Computación II. Turno matutino 1. Todas las subexpresiones entre paréntesis se evalúan primero. Las subexpresiones con paréntesis anidados se evalúan de dentro-afuera; el paréntesis más interno se evalúa primero. 2. Prioridad de operaciones. Dentro de una misma expresión o subexpresión, los operadores se evalúan en el siguiente orden: *, /, div, mod +, - primero último 3. Regla asociativa izquierda. Los operadores en una misma expresión o subexpresión con igual nivel de prioridad (tal como * y /) se evalúan de izquierda a derecha. EJERCICIOS PROPUESTOS DE LA UNIDAD 1 1. Evaluar: a) Para A =2 y B = 5: 3 * A – 4 * B/A^2; b) 4 / 2 * 3 / 6 + 6 / 2 / 1 / 5 ^ 2 / 4 * 2; c) ((12 + 3) div 2) / (8 – (5 + 1)); d) ((12 + 3) div 2) / (8 – (5 + 1)) / 4 – 4 * 4. 2. Escribir las siguientes expresiones en PASCAL como expresiones algebraicas: a) b) c) d) b *b – 4 * a * c; 3 * x * x * x *x – 5 * x * x * x + x * 12 – 17; (b + d) / (c + 4); (x * x + y * y) / (1/2 * x +3/4 * y); 3. PROGRAMACIÓN. Realizar los siguientes programas en PASCAL. a) Calcular el área de un triángulo en función de las longitudes de sus lados a, b y c: Área = p( p − a )( p − b )( p − c , (fórmula de Herón) (a + b + c ) donde p = (semiperímetro). 2 b) Convertir una temperatura leída en grados Faherenheit a grados centígrados, usando la fórmula C = (5/9) * (F – 32). c) Un sistema de ecuaciones lineales ax + by = c dx + ey = f se puede resolver con las siguientes fórmulas: 5 Guía de Cibernética y Computación II. Turno matutino x= ce − bf ae − bd y= af − cd ae − bd Construir el programa que lea dos conjuntos de coeficientes (a, b, c; d, e y f) y visualice los valores de x e y. UNIDAD 2 ESTRUCTURA DE CONTROL DE SECUENCIA 6 Guía de Cibernética y Computación II. Turno matutino 1. ESTRUCTURAS DE CONTROL DE SECUENCIA La programación estructurada permite la escritura de programas fáciles de leer y modificar. El flujo lógico se rige por las estructuras de control básicas: 1. secuenciales, 2. repetitivas, 3. selección. Antes de entrar a estas estructuras es importante analizar operadores que serán de vital importancia para el manejo, ya sea la bifurcación, o ya sea la repetición. Estos operadores son los operadores relacionales. No son más que las expresiones lógicas que usamos en situaciones en las que se deben proporcionar instrucciones alternativas que pueden o no ejecutarse dependiendo de los datos de entrada, para mostrar el cumplimiento o no de una determinada condición. Operadores relacionales Significado Equivalente matemático Menor que < Mayor que > Mayor o igual que ≥ Menor o igual que ≤ Diferente que ≠ Igual que = Operador < > >= <= <> = La jerarquía de los operadores es la siguiente: OPERADOR PRIORIDAD Not SE EVALÚA EN PRIMER LUGAR *, /, div, mod, and EN SEGUNDO 7 Guía de Cibernética y Computación II. Turno matutino +, -, or EN TERCERO Operadores relacionales EN ÚLTIMO LUGAR IF-THEN-ELSE if expresión lógica then sentencia A else sentencia B. Si la expresión lógica es verdadera se ejecuta la sentencia A y el control del programa pasará a la sentencia inmediatamente al if-then-else (no se ejecuta la sentencia B) sino es verdadera, se ejecuta la sentencia B. Veamos dos programas y se recomienda ejecutarlo (prueba de escritorio). Ejemplo: program Parte_fraccionaria; uses crt; var n:real; begin write(’Deme número: b’); readln(n); if n = trunc(n) then writeln(‘El numero no tiene parte fraccionaria’); end. CASE La sentencia case se utiliza para elegir entre diferentes alternativas. Una sentencia case se compone de varias sentencias simples. Cuando case se ejecuta, una (y sólo una) de las sentencias simples se selecciona y ejecuta. No es más que una estructura de control que permite la selección de un grupo particular de sentencias entre varios grupos posibles. La selección se basa en el valor de una expresión a la que se le denomina selector. 8 Guía de Cibernética y Computación II. Turno matutino La forma general (el formato) de la estructura CASE es: case expresión OF lista de rótulos 1: sentencia 1; lista de rótulos 2: sentencia 2; . . . lista de rótulos n: sentencia n end La expresión puede ser cualquier expresión de tipo simple que no sea real. A continuación se muestra un ejemplo de esta estructura con un bloque de programa. Se supone variable de tipo de char. Case opcion of ‘R’ : writeln(‘ROJO’); ‘B’ : writeln(‘BLANCO’); ‘A’ : writeln(‘AZUL’) end; De este modo se escribirá ROJO si la variable opcion tiene el valor R, BLANCO si vale B y AZUL si su valor es A. No se producirá salida si opcion tiene asignado algún otro carácter distinto de R, B o A. Otro ejemplo es el siguiente: case trunc(x/10) of 1 : y := y + 5; 3, 5 : y := y – 2; 6 : y := 2 * (y +1); 4 :; 9 : y := 0 end En este ejemplo las variables x e y son de tipo real. El valor x/10 se trunca, por lo que se vuelve entero, y éste se utiliza como selector. Trata de deducir el resto. WHILE – DO. El concepto de bucle permite usare repeticiones de una determinada(s) sentencia(s). La estructura while-do es una estructura donde de antemano no se conoce el número de iteraciones y el cuerpo del ciclo se repite mientras se cumple una determinada condición. Por esta razón, a estos ciclos se les conoce también como bucles condicionales. 9 Guía de Cibernética y Computación II. Turno matutino Estructura simple: while expresión lógica do sentencia; condición falsa Estructura compuesta: while expresión lógica do begin sentencia 1; . . . sentencia n end; verdadera Sentencia (s) REPEAT – UNTIL Es una variante de la estructura anterior. Esta sentencia (repeat-until) especifica un bucle condicional que se repite hasta que la condición se hace verdadera. Veamos el diagrama de flujo y el formato de esta estructura: Estructura de repeat-until: Cuerpo del ciclo (sentencias) falsa condición verdadera repeat sentencia 1; . . cuerpo del . bucle o ciclo sentencia n until expresión lógica FOR – DO Cuando se quiere saber con exactitud cuántos ciclos se desea que ejecute la computadora se usa la estructura For – do a diferencia de las dos estructuras anteriores. El formato para esta sentencia es: Para estructura simple: for variable := Vi to Vf do sentencia; Para una sentencia compuesta: for V := Vi to Vf do begin sentencia1; sentencia 2; 10 Guía de Cibernética y Computación II. Turno matutino Los valores Vi y Vf pueden expresarse como constantes, variables o expresiones, por lo que deben ser del mismo tipo que la variable de control. Veamos algunos ejemplos a través de segmentos de programa: EJERCICIOS PROPUESTOS DE LA UNIDAD 2. 1. PROGRAMACIÓN. Realizar los siguientes programas en PASCAL. If–then; if–then–else. a) Programa que pida tres enteros y emita un mensaje que indique si están o no ordenados en forma descendente. b) De tres números enteros indicar cuál es el mayor de los tres. Ciclos a) Calcular la suma de los primeros 250 números pares. b) Se desea calcular, independientemente, la suma de los números pares e impares comprendidos entre 1 y 999, incluyendo estos dos. c) Escribir los n primeros números de la serie de Fibonacci, sabiendo que F1 = 1 y F2 = 1 y que Fn = Fn-1 + Fn-2. d) Realizar un programa que mueva un carácter a lo largo de todo un renglón de izquierda a derecha o viceversa. e) Calcular las siguientes sumas, para una n determinada. 1) 1 + 2) 1 1 1 + + ... + 2 3 n 1 2 3 3 + 2 + 3 + ... + n 2 2 2 2 11 Guía de Cibernética y Computación II. Turno matutino f) Leer una sucesión de números distintos de cero (el último número de la sucesión es – 99) y obtener el número mayor. Como resultado se debe visualizar el número mayor y un mensaje de indicación de número negativo, en caso de que se haya leído un número negativo. Ejemplos de Programas en Pascal que utilizan estructuras alternativas Programa que pide un año y menciona a que siglo pertenece program siglo; uses crt; var r,s,a:integer; begin write('dame un año'); readln(a); s:=a div 100; r:=a mod 100; if r<>0 then s:=s+1; writeln('el siglo al que pertenece es:',s); readkey; end. Programa que menciona si un número introducido por el usuario es múltiplo de 5 o no program MULTIPLO; uses crt; var n,r:integer; begin write('dame un número'); readln(n); 12 Guía de Cibernética y Computación II. Turno matutino r:=n mod 5; if r=0 then writeln(n,' si es múltiplo de 5'); else writeln(n,' no es múltiplo de 5'); readkey; end. Programa que pide un número entero y positivo y lo escribe con letra program letra; uses crt; var a:array[1..5] of integer; n,i:integer; begin clrscr; for i:=1 to 5 do a[i]:=0; write('dame un numero:'); readln(n); i:=1; repeat a[i]:=n mod 10; n:=n div 10; i:=i+1; until n=0; case a[5] of 1:write('diez y '); 2:write('veinti'); 3:write('treinta y '); 4:write('cuarenta y '); 5:write('cincuenta y '); 6:write('sesenta y '); 7:write('setenta y '); 8:write('ochenta y '); 9:write('noventa y '); end; case a[4] of 1:if a[5]=0 then write('mil') else write('uno mil '); 2:write('dos mil'); 13 Guía de Cibernética y Computación II. Turno matutino 3:write('tres mil '); 4:write('cuatro mil '); 5:write('cinco mil '); 6:write('seis mil '); 7:write('siete mil '); 8:write('ocho mil '); 9:write('nueve mil '); end; case a[3] of 1:write(' ciento '); 2:write(' doscientos'); 3:write(' trescientos '); 4:write(' cuatrocientos '); 5:write(' quinientos '); 6:write(' seiscientos '); 7:write(' setecientos '); 8:write(' ochocientos '); 9:write(' novecientos '); end; case a[2] of 1:case a[1] of 0:write('diez'); 1:write('once'); 2:write('doce'); 3:write('trece'); 4:write('catorce'); 5:write('quince') else write('diez y '); end; 2:if a[1]<>0 then write(' venti') else write('veinte'); 3:if a[1]<>0 then write(' treinta y ') else write(' treinta'); 4:if a[1]<>0 then write(' cuarenta y ') else write(' cuarenta'); 5:if a[1]<>0 then write(' cincuenta y ') else write(' cincuenta'); 6:if a[1]<>0 then write(' sesenta y ') else write(' sesenta'); 7:if a[1]<>0 then write(' setenta y ') else write(' setenta'); 8:if a[1]<>0 then write(' ochenta y ') else write(' ochenta'); 9:if a[1]<>0 then write(' noventa y ') else write(' noventa'); end; case a[1] of 1:if a[2]<>1 then write(' uno'); 2:if a[2]<>1 then write(' dos'); 3:if a[2]<>1 then write(' tres'); 4:if a[2]<>1 then write(' cuatro'); 5:if a[2]<>1 then write(' cinco'); 6:write('seis'); 7:write('siete'); 8:write('ocho'); 9:write('nueve'); end; readln; 14 Guía de Cibernética y Computación II. Turno matutino end. Ejercicios que involucran el uso de estructuras alternativas 1. Realiza un programa que convierta una cantidad dada en pesos en dólares. 2. Realiza un programa que pida el nombre del usuario y lo salude. 3. Realiza un programa que obtenga la parte entera y el residuo de una división. 4. Realiza un programa que sume y multiplique 2 números introducidos por el usuario. 5. Realiza un programa que mencione si un número introducido por el usuario es par o impar. 6. Realiza un programa que obtenga el mayor de dos números introducidos por el usuario. 7. Realiza un programa que obtenga el mayor de tres números introducidos por el usuario. 8. Realiza un programa que mencione si un número introducido por el usuario es positivo, negativo o es el cero. 9. Realiza un programa que pida las dimensiones de un triángulo y menciones si es equilátero, isósceles o escaleno. 10. Realiza un programa que pida un número al usuario del 1 al 7 y que muestre el nombre del día que le corresponde. 11. Realiza un programa que mencione si un número de tres dígitos (introducido por el usuario) es capicúa o no. 15 Guía de Cibernética y Computación II. Turno matutino 12. Realiza un programa que muestre un número de tres dígitos (introducido por el usuario) de manera invertida. CUESTIONARIO 1. 2. 3. 4. Da algunos elementos de un programa en pascal. Da algunos ejemplos de palabras reservadas. ¿Cuáles son las reglas para construir identificadores? En pascal, ¿es lo mismo escribir program tarea; que PROGRAM TAREA;? 5. ¿Qué es un comentario en pascal? Proporciona un ejemplo. 6. ¿Cuál es el operador de asignación en pascal? 7. ¿Cuáles son las tres partes en las que se compone un programa en pascal? 8. Proporciona un ejemplo de una cabecera de un programa. 9. ¿Qué función realiza sqrt(n)? 10. ¿Qué función realiza sqr(n)? 11. Investiga de que palabras en ingles proviene sqrt . 12. ¿Qué valor se le asigna a la variable entera x si existe la asignación x:=7 mod 2; ? 13. ¿Qué valor se le asigna a la variable entera x si existe la asignación x:=7 div 2; ? 14. ¿Qué tipos de datos se pueden utilizar con los operadores mod y div? 15. ¿Con que palabras se encuentra acotado el cuerpo del programa? 16. ¿Qué tipos de datos conoces en pascal? 17. ¿Qué tipo de dato numérico puede tomar valores no enteros y enteros? 18. ¿Cómo declararías una constante pi con valor de 3.1416.? 19. ¿Cómo declararías a, b, y c como variables de tipo real? 20. ¿Cuáles son las reglas relativas a los punto y coma? 21. ¿Se puede realizar la siguiente declaración? var begin: real; Justifique su respuesta. 16 Guía de Cibernética y Computación II. Turno matutino 22. ¿En que casos se debe omitir el punto y coma? 23. Menciona 5 funciones predefinidas en pascal y lo que realiza cada una de ellas. 24. Menciona 10 caracteres en pascal y para que sirven. 25. ¿Cuáles son los operadores relacionales? 26. ¿Cuáles son los operadores lógicos? 27. ¿Cuáles son los operadores aritméticos? ALGUNAS RESPUESTAS AL CUESTIONARIO 2. begin ,program, end. 4. si, el compilador de pascal no hace diferencia entre las mayúsculas y las minúsculas 6. := 7. cabecera del programa, sección de declaraciones y el cuerpo del programa 8. program hola; 9. devuelve la raíz cuadrada de n 10. devuelve el cuadrado de n 11. square root (raíz cuadrada) 12. 1 13. 3 14. enteros 15 begin y end. 25. < , > , <= , >= , = , <> 26. and, or y not 27 +, -, *, /, div y mod 17 Guía de Cibernética y Computación II. Turno matutino Ejemplos de Programas en Pascal que utilizan estructuras de control repetitivas Programa en pascal que visualice en pantalla los números pares entre 1 y 25. program pares; uses crt; var num:integer; begin num:=2; clrscr; repeat writeln (num); num:= num + 2; until num= 26; end. program pares; uses crt; var sem:integer; begin clrscr; sem:=1; while sem <= 25 do begin if (sem mod 2)=0 then writeln(sem); sem:=sem + 1; 18 Guía de Cibernética y Computación II. Turno matutino end; end. Programa en pascal que visualice en pantalla los números múltiplos de 5 comprendidos entre 1 y 100. program multiplos; uses crt; var num:integer; begin num:= 5; clrscr; while num <= 100 do begin writeln (num); num:= num + 5; end; end. program multiplos; uses crt; var sem:integer; begin clrscr; for sem:= 1 to 100 do begin if sem mod 5=0 then 19 Guía de Cibernética y Computación II. Turno matutino writeln(sem); end; end. Programa en pascal que sume los números enteros comprendidos entre 1 y 10. program suma; uses crt; var num, x:integer; begin clrscr; num:=1; x:=1; while num <= 10 do begin writeln (x); num:= num + 1; x:= x + num; end; end. Programa en pascal que genere la tabla de multiplicar de un número introducido por el teclado. program tablas; uses crt; var tabla, x, num:integer; begin clrscr; write (’introduzca un numero para hacer su tabla de multiplicar: ’); readln (num); writeln (‘‘); 20 Guía de Cibernética y Computación II. Turno matutino repeat writeln (tabla); x:= x + 1; tabla:= num * x; until x=11; end. program tablas; uses crt; var num,sem:integer; begin clrscr; write(’introduzca un numero entero: ’); readln(num); for sem:=1 to 10 do begin write(num); write(’ *’); write(sem); write(’= ’); writeln(num*sem); end; end. Programa en pascal que realice la pregunta ¿desea continuar s/n? y que no deje de hacerla hasta que el usuario teclee n. program respuesta; uses crt; var respuesta:char; begin clrscr; repeat writeln (’desea continuar: s/n ’); readln (respuesta); until respuesta=’n’; end. program respuesta; uses crt; 21 Guía de Cibernética y Computación II. Turno matutino var respuesta:string; begin clrscr; repeat writeln (’desea continuar: si/no ’); readln (respuesta); until respuesta=’no’; end. Programa en pascal que calcula el factorial de un número. Conocimientos previos: • Elementos básicos de Pascal • Estructuras de control de repetición • Factorial de un número program factorial_n; uses crt; var factorial, x, num, y:real; begin {este programa hace el factorial de un numero} clrscr; write (’introduzca un numero para hacer su factorial: ’); readln (num); writeln (’’); x:=1; while num > 1 do begin x:=x * num; num:=num - 1; end; writeln (x); end. program factorial_n; uses crt; var temp,num,fac:longint; begin clrscr; fac:=1; temp:=num; write(’introduzca un numero -> ’); readln(num); 22 Guía de Cibernética y Computación II. Turno matutino temp:=num; while num>=1 do begin fac:=fac*num; num:=num-1; end; write(’el factorial de ’); write(temp); write(’ es ’); write(fac); end. Programa en pascal que detecte si un número es primo o no. Conocimientos previos: • Elementos básicos de Pascal • Estructuras de control de repetición • Número primo program primo_o_no; uses crt; var num, x,primo:integer; begin clrscr; writeln (’introduzca un numero para comprobar si es primo.’); writeln (’’); x:=1; write (’introduzca el numero: ’); readln (num); writeln (’’); repeat x:= x + 1; primo:= num mod x; writeln (primo); until x = 5; writeln (’’); writeln (’si ninguno de los resultados es 0, el numero es primo.’); writeln (’si alguno es 0, el numero no es primo.’); end. program primo_o_no; uses crt; var i,num,flag:integer; begin clrscr; flag:=0; write(’introduzca un numero -> ’); readln(num); for i:=2 to (num-1) do begin 23 Guía de Cibernética y Computación II. Turno matutino if (num mod i)=0 then flag:=1; end; if flag=1 then begin write(num); write(’ no es un numero primo’); end else begin write(num); write(’ es un numero primo’); end; end. Programa que pide un número entero y positivo y muestra cuantos dígitos tiene y cuanto suman program digitos; uses crt; var i,x,s,n,a:integer; begin clrscr; write(’dame un numero entero y positivo:’); readln(n); a:=n; repeat x:=n mod 10; s:=s+x; i:=i+1; n:=n div 10 until n=0; writeln(’el número de dígitos de ’,a,’ es: ’,i); writeln(’la suma de los dígitos de ’,a,’ es: ’,s); readkey; end. Programa que muestra un número entero y positivo de manera invertida program inversa; uses crt; var a:longint; begin clrscr; write(’Dame una cantidad:’); readln(a); write(’El número invertido es:’); repeat write(a mod 10); a:=a div 10; until ((a div 10)=0); if ((a mod 10))<>0 then write(a mod 10); 24 Guía de Cibernética y Computación II. Turno matutino readkey; end. Ejercicios que involucran estructuras de control repetitivas 1. Realiza un programa que pida el nombre al usuario y muestre su nombre 10 veces. 2. Realiza un programa que muestre los primeros 10 números pares 3. Realiza un programa que muestre los divisores de un número introducido por el usuario. 4. Realiza un programa que imprima el número de divisores de un número introducido por el usuario. 5. Realiza un programa que obtenga el mayor de 10 números. 6. Realiza un programa que obtenga el resultado de elevar un número a otro número b, donde a es real y b es entero 7. Realiza un programa en que convierta un número de base 2 a base 10. 8. Realiza un programa en que simule el movimiento de una palabra de manera horizontal. 9. Realiza un programa que obtenga el n-ésimo término de la sucesión fibonacci 1 donde es un número introducido por el usuario. 10. Realiza un programa que muestre los números primos que hay entre 1 y 2000. 11. Realiza un programa que mencione si un número introducido por el usuario es perfecto 2 o no. 12. Realiza un programa que obtenga los primeros 4 números perfectos. 1 2 La sucesión fibonnaci es 1,1,2,3,5,8,13,21,… Un número n es perfecto cuando la suma de los divisores menores a n es igual a n 25 Guía de Cibernética y Computación II. Turno matutino UNIDAD 3 PROCEDIMIENTOS Y FUNCIONES 26 Guía de Cibernética y Computación II. Turno matutino FUNCIONES EN TURBO PASCAL ESTRUCTURA, DECLARACIÓN Y EMPLEO DE UNA FUNCION Una función es idéntica a un procedimiento con una diferencia: la función devuelve un único valor de tipo simple. La cabecera comienza con la palabra reservada FUCTION seguida de un identificador , a continuación la lista de parámetros formales. Dado que la función devuelve un valor de tipo simple, en la cabecera y separada por dos puntos del cierre del paréntesis, se debe indicar el tipo de dato que devuelve la función. El identificador de la función debe estar situado de por lo menos en una sentencia de asignación y nunca puede figurar a la derecha de una asignación o como componente de una expresión. Ejemplo: Programa que contiene una función que calcula el mayor de dos números. Program ejemplo; Uses crt; Var a,b,:real; function maximo(x,y:real):real; begin if x>y then maximo:=x; else maximo:=y; end; begin write(‘dame un número:’); 27 Guía de Cibernética y Computación II. Turno matutino readln(a); write(‘dame otro número:’); readln(b); writeln(‘el mayor es:’,maximo(a,b) ); readln; end. Investigar 1. Investiga que es la recursividad 2. Investiga cual es la diferencia primordial entre un procedimiento y una función 3. Investiga la definición del factorial de manera recursiva 4. Investiga la definición de número de Fibonacci Ejercicios para que el estudiante utilice funciones para resolverlos 1. Realizar un programa que contenga una función que calcule el factorial de un número n. 2. Realizar un programa que contenga una función que obtenga la media de 3 valores. 3. Realiza un programa que muestre todos los valores de f(x)=(x-3)/(x+6) para x igual a -5, -4, -3,….,5. 4. Realiza un programa que muestre todos los valores de f(x)= x+5 para x igual a 1, 2, 3,4,…,100. 5. Realiza un programa que obtenga la suma de los dígitos de un número entero positivo introducido por el usuario. 28 Guía de Cibernética y Computación II. Turno matutino 6. Realiza un programa que obtenga el resultado de elevar un número a otro número b, donde a es real y b es entero. 7. Realiza un programa que obtenga el área de un cubo. 8. Realiza un programa que obtenga el mayor de tres números 9. Realiza un programa que obtenga la suma de los primeros n términos de la sucesión 2, 4, 6, 8,10, … 10. Realiza un programa que obtenga el número de combinaciones 3 de n elementos tomando r a la vez. 11. Realiza un programa que obtenga el factorial de un número utilizando una función recursiva. 12. Realiza un programa que obtenga el fibonacci de un número utilizando una función recursiva. 13. Realiza un programa que obtenga el resultado de elevar un número real a otro número entero b utilizando una función recursiva. 14. Realiza un programa que obtenga la suma de los primeros n términos de la sucesión 1, 2, 3, …,n. Utiliza una función recursiva Cinco Retos 1. Realiza un programa en pascal que obtenga las tablas de multiplicar en base 16. 2. Realiza un programa que obtenga probabilidades binomiales. 3. Realiza un programa que agrupe por el método de la raíz cuadrada un conjunto de n datos. 4. Realiza un programa que dibuje por medio de gráficos el sistema solar. 5. Realiza un programa que obtenga el determinante de una matriz cuadrada. 3 Consulte la fórmula y una pequeña explicación de esto con algún profesor o libro de estadística 29 Guía de Cibernética y Computación II. Turno matutino UNIDAD 4 ESTRUCTURAS DE DATOS DEFINIDOS POR EL USUARIO 30 Guía de Cibernética y Computación II. Turno matutino Ejemplos de Programas en Pascal que utilizan array Programa en pascal que solicita cinco números, los almacena en un array y luego calcula la media aritmética de esos números program media_5; uses crt; var arr_num:array [1..5] of real; var i, num:integer; var media:real; begin clrscr; writeln (’escriba 5 números para hacer su media aritmética: ’); for i := 1 to 5 do begin readln(num); arr_num[i]:=num; end; for i:=1 to 5 do media:= media + arr_num[i]; media:= media / i; writeln (’la media aritmetica es: ’,media:5:2); end. program media_5; uses crt; var arr_num:array[1..10] of real; var num,suma,media:real; var i:integer; begin clrscr; i:=0; suma:=0; media:=0; while i<5 do 31 Guía de Cibernética y Computación II. Turno matutino begin write(’número ’,i+1,’--->’); readln(num); arr_num[i]:=num; suma:=suma+num; i:=i+1; end; media:=(suma/i); write(’media: ’, media:5:2); end. Programa en pascal que tras asignar los números, 23, 45, 68, 99, 10, 15 y 4 a un array, determine las posiciones del array en las que se encuentran el máximo y el mínimo valor. program max_y_min; uses crt; const arr: array [1..7] of integer=(23,45,68,99,10,15,4); var i, mayor, menor,posi_mayor,posi_menor:integer; begin clrscr; mayor:= arr[1]; menor:= arr[1]; for i:=2 to 7 do begin if arr[i] >= mayor then begin mayor:= arr[i]; posi_mayor:=i; end else continue; end; writeln (’el número mayor es: ’,mayor:3); writeln (’su posición es: ’,posi_mayor:3); writeln (’’); for i:=2 to 7 do begin if arr[i] <= menor then begin menor:= arr[i]; posi_menor:=i; end else continue; end; writeln (’el número menor es: ’,menor:3); writeln (’su posición es: ’,posi_menor:3); 32 Guía de Cibernética y Computación II. Turno matutino end. Método de la burbuja (este programa ordena de manera ascendente un conjunto de números) Conocimientos previos: • Elementos básicos de Pascal • Arreglos • Estructuras de control de repetición • Método de la burbuja program x; uses crt; var i,j,n:integer; a:array[1..60] of string; aux:string; begin write(’dame el número de alumnos:’); readln(n); for i:=1 to n do begin write(’nombre ’,i,’:’); readln(a[i]); end; for i:=1 to n do for j:=i+1 to n do if a[i]>a[j] then begin aux:=a[i]; a[i]:=a[j]; a[j]:=aux; end; for i:=1 to n do writeln(a[i]); readkey end. 33 Guía de Cibernética y Computación II. Turno matutino Ejercicios que involucran arreglos 1. Realiza un programa que mencione si una frase introducida por el usuario es palíndromo 4 o no. 2. Realiza un programa que mencione si un número introducido por el usuario es capicúa 5 o no. 3. Realiza un programa que pida n números al usuario y los muestre después de proporcionarlos, n es un número entero positivo y también es introducido por el usuario. 4. Realiza un programa que ordene un listado de 10 nombres introducidos por el usuario. 5. Realiza un programa que obtenga la mediana 6 de un conjunto de datos. Sugerencia: utiliza el programa del método de la burbuja. 6. Realiza un programa que obtenga la moda 7 de un conjunto de datos. 7. Realiza un programa que obtenga la desviación estándar 8 de un conjunto de datos. 8. Realiza un programa que convierta un número binario introducido por el usuario a base 10. 9. Realiza un programa que convierta un número en base 10 introducido por el usuario a base 2. 10. Realiza un programa que convierta un número de base 10 (este número introducido por el usuario) a cualquier a base n, donde n es entero positivo e introducido por el usuario. 4 Frase que puede leerse de igual forma de izquierda a derecha como de derecha a izquierda. Ejemplo: La ruta natural. 5 Número que puede leerse de igual forma de izquierda a derecha como de derecha a izquierda. Ejemplo: 12321. 6 Dato que divide en dos a un conjunto de datos, mitad de ellos mayor o igual a él y mitad de ellos menor o igual a él. 7 Dato que ocurre con mayor frecuencia 8 Medida de dispersión, consulte un libro de estadística para mayor referencia 34 Guía de Cibernética y Computación II. Turno matutino 11. Realiza un programa que pida un número que pertenezca a base n ( el usuario deberá especificar a que base pertenece) y lo convierta a base 10. 12. Realiza un programa que realiza conversiones de base 8 a base 2 y viceversa. 13. Realiza un programa que realice conversiones de base 16 a base 2 y viceversa. 14. Realiza un programa en Pascal que obtenga la suma de dos números binarios. Ejemplos de Programas en Pascal que utilizan array Programa con parámetros por variable program ejemplo; uses crt; var x,y:real; procedure iguales(var a,b:real); begin a:=b; end; begin clrscr; x:=4; y:=356; iguales(x,y); writeln(x:4:4,’ ’,y:4:4); readkey; end. Del ejemplo, ¿qué realiza el programa? _______________________________________________________________ _______________________________________________________________ Programa que intercambia el valor de dos variables usando un procedimiento program intercambiar; uses crt; var x,y:real; 35 Guía de Cibernética y Computación II. Turno matutino procedure INTERCAMBIO(var a,b:real); var aux:real; begin aux:=a; a:=b; b:=aux; end; begin clrscr; write(’Introducir 2 numeros:’); readln(x,y); INTERCAMBIO(X,Y); writeln(x:3:3,’ ’,y:3:3); readkey; end. Del ejemplo, ¿qué hubiera sucedido si los parámetros a y b no se hubieran declarado por variable? _______________________________________________________________ _______________________________________________________________ Programa que menciona cual es el mayor entre dos números. Este programa utiliza un procedimiento program m; uses crt; var x,y,elmayor:real; procedure MAYOR(a,b:real;var max:real); begin if a>=b then max:=a else max:=b; end; begin clrscr; write(’Introducir 2 numeros:’); readln(x,y); MAYOR(X,Y,ELMAYOR); writeln(’El mayor es ‘, elmayor); end. 36 Guía de Cibernética y Computación II. Turno matutino Investigar 1. Investiga que es la programación modular 2. Investiga que es un procedimiento en Pascal Ejercicios para que el estudiante utilice procedimientos para resolverlos 3. Realizar un programa sume, reste, multiplique o divida 2 números introducidos por el usuario. 4. Realice un programa que mencione si dos números introducidos por el usuario son primos gemelos 9 o no. 5. Realice un programa que mencione si un número es perfecto o no prefecto, primo o no, par o impar, positivo o negativo, capicúa o no. 9 Dos números primos cuya diferencia entre ellos es 2, ejemplo 5 y 7 37 Guía de Cibernética y Computación II. Turno matutino UNIDAD 5 INTRODUCCIÓN A LA PROGRAMACIÓN EN DELPHI 38 Guía de Cibernética y Computación II. Turno matutino . Un objeto representa un ente capaz de ser identificable, o una entidad real o abstracta, con un papel definido. Una clase es un conjunto de objetos que comparten una estructura y comportamiento comunes. Una de las ventajas de la programación orientada a objetos es que permite crear objetos nuevos, que aparte de tener sus propiedades y métodos disponen las del otro objeto llamado padre. A esto se reconoce como herencia. Se dice que el objeto tiene la característica de encapsulación cuando los datos que se declaren en el interior del objeto sólo puedan ser manipulados por los métodos de ese objeto, que estarán precisamente especializados en la manipulación de los miembros del objeto. Los eventos son señales que el entorno recibe desde distintos elementos, como puedan ser del ratón, del teclado o hasta del mismo sistema. Un método es un procedimiento o función que nos permite realizar una determinada acción en el componente, pudiendo necesitar o no el paso de algún parámetro. La siguiente figura pertenece a la ventana principal de Kylix: La siguiente figura pertenece al Object inspector, en la cual se pueden ver y modificar las propiedades y eventos del componente: 39 Guía de Cibernética y Computación II. Turno matutino CUESTIONARIO 1. Todo Objeto tiene: a) Propiedades Eventos y Métodos b) Propiedades Eventos y Características c) Ninguna de las anteriores 2. Las propiedades son: a) Variables pertenecientes a un objeto b) Definición de un evento c) Acción realizada por el usuario final d) Ninguna de las anteriores 3. Los eventos son: a) Señales que el entorno recibe desde distintos elementos b) Señales enviadas por los objetos c) Propiedades de los objetos 4. Investiga que es la programación orientada a objetos. 5. ¿Qué es una clase? 6. ¿Qué es la herencia? 7. ¿Qué es el encapsulamiento? 8. ¿Qué es un método? 9. ¿Qué ocurre si cerramos la ventana principal de Kylix? 10. Da un ejemplo de evento. 11. Da un ejemplo de objeto. 12. Cita 5 propiedades de un formulario. 40 Guía de Cibernética y Computación II. Turno matutino Bibliografía 1. JOYANES, Aguilar Luis. Programación en Turbo Pascal / Borland. Pascal 7, Mc-Graw-Hill, 1998. 2. JOYANES, Aguilar Luis.Pascal y Turbo Pascal. Un enfoque práctico, Mc-Graw-Hill, 1995. 3. PASCUAL, González Francisco. Domine Turbo Pascal 6, Madrid, RAMA, 1992. 41 Guía de Cibernética y Computación II. Turno matutino 42