FACULTAD DE INGENIERÍA DE LA UNIVERSIDAD NACIONAL DE JUJUY GORRITI 237 - 4600 SAN SALVADOR DE JUJUY – ARGENTINA TEL: 54-88-221577 FAX: 54-88-221579
Introducción a la Informática Resumen teórico práctico 2010 Primera Parte Ing. Samuel, Franco Domínguez
Facultad de Ingeniería de la Universidad Nacional de Jujuy
San Salvador de Jujuy – Argentina
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Contenido Recomendaciones ....................................................................................................................................................... 3 Reglamento general ................................................................................................................................................ 3 Capitulo1 .................................................................................................................................................................... 4 La computadora ...................................................................................................................................................... 4 Arquitectura de una computadora ............................................................................................................................ 4 Generaciones de las Computadoras ......................................................................................................................... 6 Dato e Información ................................................................................................................................................. 8 Sistemas de numeración ........................................................................................................................................ 11 Teorema Fundamental de la Numeración .............................................................................................................. 12 Códigos Alfanuméricos. ........................................................................................................................................ 22 Compuertas Lógicas.............................................................................................................................................. 23 Capitulo 2 ................................................................................................................................................................. 26 Ambiente de un Problema ..................................................................................................................................... 26 Algoritmos y programación ................................................................................................................................... 34 Análisis del problema............................................................................................................................................ 35 Diseño del algoritmo ............................................................................................................................................. 36 La estructura de control secuencial ........................................................................................................................ 37 La estructura de control condicional ...................................................................................................................... 41 Sentencias condicionales simples ...................................................................................................................... 41 Sentencia condicional SEGÚN .......................................................................................................................... 42 Tablas de decisión................................................................................................................................................. 58 La estructura de control iterativa ........................................................................................................................... 62 Estructura de control iterativa Mientras (Exp.Lógica) Hacer…FinMientras ....................................................... 62 Estructura de control iterativa Repetir …HastaQue (Exp. Lógica)...................................................................... 65 Estructura de control iterativa Para…FinPara .................................................................................................. 66 Capitulo 3 ................................................................................................................................................................. 77 Pruebas de software .............................................................................................................................................. 77 Organización ........................................................................................................................................................ 78 Prueba de Unidades............................................................................................................................................... 79 Caja blanca ........................................................................................................................................................... 79 Caja negra............................................................................................................................................................. 82 Pruebas de Integración .......................................................................................................................................... 83 Pruebas de Aceptación .......................................................................................................................................... 83 Aspectos Sicológicos y Organización del Trabajo ................................................................................................. 86 Capitulo 4 ................................................................................................................................................................. 86 Estrategias de resolución de problemas. ................................................................................................................ 87 Diferencia entre ejercicios y problemas ................................................................................................................. 88 Ejemplo: Juego del Nim ........................................................................................................................................ 89 Capitulo 5 ................................................................................................................................................................. 89 Método científico .................................................................................................................................................. 89 Descripciones del método científico ...................................................................................................................... 90 Pensamiento crítico ............................................................................................................................................... 92 Tablas referencia: trampas al pensamiento crítico .................................................................................................. 98 Capitulo 6 ............................................................................................................................................................... 104 Métodos numéricos simples: Iteraciones manuales y automáticas ........................................................................ 104 Capitulo 7 ............................................................................................................................................................... 106 Complejidad ....................................................................................................................................................... 106 Complejidad computacional ................................................................................................................................ 106 La notación O ..................................................................................................................................................... 106 La Complejidad Ciclomática ............................................................................................................................... 107 Cálculo de la Complejidad Ciclomática ............................................................................................................... 108 Ámbito de utilización de la Complejidad Ciclomática ......................................................................................... 108 Ejemplo de cálculo de la complejidad ciclomática ............................................................................................... 108
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 2 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Recomendaciones 1. 2. 3. 4.
El mejor material de estudio es un buen libro. En su defecto, nunca desprecie ningún libro. A falta de libros, pueden usarse apuntes personales. Las transparencias y ejercicios que los profesores emplean en sus clases son mero material auxiliar para facilitar la presentación. Reglamento general -
-
-
-
-
-
-
-
-
-
La información y comunicación de los asuntos referidos a la asignatura se hará mediante la página web oficial de la asignatura http://www.fi.unju.edu.ar/materias/materia/IIII/ El alumno debe estar correctamente inscripto en sección alumnos para poder cursar la asignatura, la cátedra no reconoce ningún derecho adquirido si el alumno no cumplimenta previamente este requisito. El alumno debe inscribirse en una sola comisión de trabajos prácticos al inicio de la cursada. La fecha, lugar y modalidad de las inscripciones a las comisiones se informa por carteleras e informaciones que da la Secretaría Académica. Las comisiones de trabajos prácticos tienen cupo. El detalle de los horarios y profesor responsables de las comisiones se encuentra en el documento HORARIOS. Se dictarán dos clases teóricas por semana que repiten ambas los mismos conceptos y cuyo temario tentativo se encuentra en el documento PLANIFICACIÓN, el dictado es intensivo y comienza en el horario establecido, allí se impartirán los conceptos básicos para resolver los trabajos prácticos, el alumno deberá complementar los conceptos teóricos con la bibliografía obligatoria. Por razones de una distribución equitativa de los recursos, los alumnos deberán asistir a la clase teórica correspondiente a la comisión de trabajo práctico (ver en el documento HORARIOS el cuadro de la distribución de clases teóricas correspondientes a las clases prácticas). La primera semana de clases, se dictarán únicamente las clases de teoría, la semana siguiente darán comienzo también las clases prácticas. El alumno deberá cumplir con el 80% de asistencia a los trabajos prácticos con la correspondiente presentación y aprobación del mismo, para poder rendir cada uno de los parciales. La carpeta de trabajos prácticos es un documento obligatorio del alumno. Es personal y será corregida periódicamente por el profesor de la comisión, la misma deberá tener todos los ejercicios prácticos resueltos en forma prolija y clara, cada hoja deberá tener número de folio, datos y firma el alumno. Si alguna clase práctica cae en un día feriado el alumno perteneciente a dicha comisión deberá ir a cualquier otra comisión para no perder la clase práctica de la semana. La asistencia se computará en la siguiente clase práctica con la presentación resuelta del TP correspondiente. Las clases de consultas son un complemento a las clases prácticas y teóricas semanales. Es fuertemente recomendable la asistencia a una o más consultas para fijar los conceptos dudosos o faltantes del temario semanal. Las fechas y horarios de los exámenes parciales se detalla en el documento HORARIOS, la distribución propuesta es de carácter obligatorio. Para regularizar la asignatura el alumno debe tener dos exámenes parciales (primero y segundo) aprobados ambos con el 60 % de la nota total del examen, el examen flotante es el recuperatorio de uno de los parciales anteriores. Para promocionar la asignatura el alumno debe aprobar primeramente los dos exámenes parciales en primera instancia con nota igual o superior al 70% de la nota total para luego rendir y aprobar un examen integral para promocionados, si este no fuese aprobado la condición del alumno pasa a ser regular. El profesor a cargo podrá establecer otros mecanismos de evaluación (exámenes orales, trabajos de libre elección, ponencias, etc.) específicos para cada caso. Los resultados de los parciales estarán disponibles el lunes de la semana siguiente a la fecha del parcial (excepto el Primer parcial que puede demorar una semana más), los mismos serán publicados en la página web de la facultad. http://www.fi.unju.edu.ar/materias/materia/IIII/ Los exámenes parciales son corregidos por un profesor de la asignatura al azar, los mismos serán mostrados por el profesor que corrigió el examen en la clase de consulta correspondiente a la semana siguiente de la fecha del parcial (excepto el primer parcial, dos semanas siguientes al parcial). El listado final con los resultados de la cursada es enviada a Sección Alumnos de la facultad en un plazo establecido por el calendario académico de ciclo lectivo correspondiente a la finalización de las clases http://www.fi.unju.edu.ar/ el alumno debe verificar sus datos personales como así también sus resultados para su corrección antes del envío de las mismas al Departamento alumnos (Sección alumnos). Una vez que se envía el listado con los resultados a Sección alumnos el profesor de la asignatura ya no puede modificar los datos. El examen final para alumnos regulares es escrito y/u oral y se evalúa con preguntas integradoras para comprobar si se alcanzaron los objetivos de la asignatura. Los turnos de los exámenes finales están detallados en el calendario académico de la facultad. http://www.fi.unju.edu.ar/ . Los alumnos libres deberán presentar una carpeta con todos los trabajos prácticos correctamente resueltos por él y realizar exámenes prácticos integradores de los temas tratados en la asignatura. Aprobados estos rinden el examen final equivalente a la de los estudiantes regulares.
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 3 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Capitulo1 "El cerebro no es un vaso por llenar, sino una lámpara por encender." Plutarco. "Feliz es el hombre que ha hallado sabiduría, y el hombre que consigue discernimiento, porque el tenerla como ganancia es mejor que tener la plata como ganancia; y el tenerla como producto, que el oro mismo. Es más preciosa que los corales, y todos tus otros deleites no pueden ser igualados a ella. Largura de días está en su diestra, en su siniestra hay riquezas y gloria. Sus caminos son caminos de agradabilidad, y todas sus veredas son paz. Es árbol de vida a los que se asen de ella, y los que la mantienen firmemente asida han de ser llamados felices." Proverbios, 3:1118 La computadora Una computadora (del inglés computer, y éste del latín computare -calcular-), también denominada ordenador o computador, es una máquina electrónica que recibe y procesa datos para convertirlos en información útil. Una computadora es una colección de circuitos integrados y otros componentes relacionados que puede ejecutar con exactitud, rapidez y de acuerdo a lo indicado por un usuario o automáticamente por otro programa, una gran variedad de secuencias o rutinas de instrucciones que son ordenadas, organizadas y sistematizadas en función a una amplia gama de aplicaciones prácticas y precisamente determinadas, proceso al cual se le ha denominado con el nombre de programación y al que lo realiza se le llama programador. La computadora, además de la rutina o programa informático, necesita de datos específicos (a estos datos, en conjunto, se les conoce como "Input" en inglés) que deben ser suministrados, y que son requeridos al momento de la ejecución, para proporcionar el producto final del procesamiento de datos, que recibe el nombre de "output". La información puede ser entonces utilizada, reinterpretada, copiada, transferida, o retransmitida a otra(s) persona(s), computadora(s) o componente(s) electrónico(s) local o remotamente usando diferentes sistemas de telecomunicación, pudiendo ser grabada, salvada o almacenada en algún tipo de dispositivo o unidad de almacenamiento. La característica principal que la distingue de otros dispositivos similares, como la calculadora no programable, es que es una máquina de propósito general, es decir, puede realizar tareas muy diversas, de acuerdo a las posibilidades que brinde los lenguajes de programación y el hardware. Arquitectura de una computadora Esquema funcional de una computadora: Esquema de Vonn Newman:
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 4 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Aunque las tecnologías empleadas en las computadoras digitales han cambiado mucho desde que aparecieron los primeros modelos en los años 40, la mayoría todavía utiliza la Arquitectura de von Neumann, publicada a principios de los años 1940 por John von Neumann, que otros autores atribuyen a John Presper Eckert y John William Mauchly. La arquitectura de Von Neumann describe una computadora con 4 secciones principales: la unidad aritmético lógica (ALU por sus siglas del inglés: Arithmetic Logic Unit), la unidad de control, la memoria central, y los dispositivos de entrada y salida (E/S). Estas partes están interconectadas por canales de conductores denominados buses: La memoria es una secuencia de celdas de almacenamiento numeradas, donde cada una es un bit o unidad de información. La instrucción es la información necesaria para realizar lo que se desea con el computador. Las «celdas» contienen datos que se necesitan para llevar a cabo las instrucciones, con el computador. El número de celdas varían mucho de computador a computador, y las tecnologías empleadas para la memoria han cambiado bastante; van desde los relés electromecánicos, tubos llenos de mercurio en los que se formaban los pulsos acústicos, matrices de imanes permanentes, transistores individuales a circuitos integrados con millones de celdas en un solo chip. En general, la memoria puede ser reescrita varios millones de veces (memoria RAM); se parece más a una pizarra que a una lápida (memoria ROM) que sólo puede ser escrita una vez. Memoria central (MC): almacena temporalmente todos los datos y programas que se estén usando en un determinado momento. Necesita corriente eléctrica para funcionar. Memoria auxiliar (MA): son los discos duros, cDs, disquetes, etc que se utilizan para almacenar la información. Esta no se pierde cuando se apaga la PC ya que no necesita corriente para trabajar. Memoria central: RDM (registro de dirección de memoria): contiene la dirección de memoria donde se encuentra o va a ser almacenada la información. RIM (registro de intercambio de memoria): operación de lectura, recibe el dato de memoria señalada por el RDM para enviarlo a la UAL. Operación escrita, se transfiere la posición de memoria indicada por el RDM. SM (selector de memoria) RAM: semiconductor, almacena y lee datos e instrucciones en forma directa. Pierde la información cuando se interrumpe la corriente. Sus posiciones pueden ser escritas y leídas cuantas veces quiera el usuario. ROM: conserva siempre la información almacenada. No acepta la transferencia de datos e instrucciones, es solo de lectura cuyas posiciones fueron escritas por el fabricante. CACHE: almacena temporalmente datos e instrucciones. Tiene una gran velocidad de trabajo y por eso es muy cara. Actúa como memoria intermedia entre la unidad de control de la unidad central de proceso y la memoria principal. VIRTUAL: puede utilizarce como memoria RAM cuando esta se acaba. CELDAS: retienen mientras la computadora está conectada la información depositada en ella. Tienen una dirección que las identifica y permite localizar las distintas posiciones. PALABRA DE MEMORIA: es la cantidad de información que puede introducirce o extraerce de la MC. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 5 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
El procesador (también llamado Unidad central de procesamiento o CPU) consta de:
La unidad aritmético lógica o ALU es el dispositivo diseñado y construido para llevar a cabo las operaciones elementales como las operaciones aritméticas (suma, resta, ...), operaciones lógicas (Y, O, NO), y operaciones de comparación o relacionales. En esta unidad es en donde se hace todo el trabajo computacional.
Un típico símbolo esquemático para una ALU: A y B son operandos; R es la salida; F es la entrada de la unidad de control; D es un estado de la salida. La unidad de control sigue la dirección de las posiciones en memoria que contienen la instrucción que el computador va a realizar en ese momento; recupera la información poniéndola en la ALU para la operación que debe desarrollar. Transfiere luego el resultado a ubicaciones apropiadas en la memoria. Una vez que ocurre lo anterior, la unidad de control va a la siguiente instrucción (normalmente situada en la siguiente posición, a menos que la instrucción sea una instrucción de salto, informando al ordenador de que la próxima instrucción estará ubicada en otra posición de la memoria). Los dispositivos E/S sirven a la computadora para obtener información del mundo exterior y/o comunicar los resultados generados por el computador al exterior. Hay una gama muy extensa de dispositivos E/S como teclados, monitores, unidades de disco flexible o cámaras web. Los diagramas siguientes muestran los niveles del software, o sea la interelación entre el usuario y la computadora. Una comunicación de alto nivel con la computadora se logra con las aplicaciones y lenguajes de de programación, estos ocultan la gran complejidad interna de la computadora.
Generaciones de las Computadoras Primera Generación (1951-1958) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 6 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
En esta generación había una gran desconocimiento de las capacidades de las computadoras, puesto que se realizó un estudio en esta época que determinó que con veinte computadoras se saturaría el mercado de los Estados Unidos en el campo de procesamiento de datos. Esta generación abarco la década de los cincuenta. Y se conoce como la primera generación. Estas máquinas tenían las siguientes características:
Usaban tubos al vacío para procesar información. Usaban tarjetas perforadas para entrar los datos y los programas. Usaban cilindros magnéticos para almacenar información e instrucciones internas. Eran sumamente grandes, utilizaban gran cantidad de electricidad, generaban gran cantidad de calor y eran sumamente lentas. Se comenzó a utilizar el sistema binario para representar los datos. En esta generación las máquinas son grandes y costosas (de un costo aproximado de 10,000 dólares). La computadora más exitosa de la primera generación fue la IBM 650, de la cual se produjeron varios cientos. Esta computadora que usaba un esquema de memoria secundaria llamado tambor magnético, que es el antecesor de los discos actuales. Segunda Generación (1958-1964) En esta generación las computadoras se reducen de tamaño y son de menor costo. Aparecen muchas compañías y las computadoras eran bastante avanzadas para su época como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester. Algunas computadoras se programaban con cinta perforadas y otras por medio de cableado en un tablero. Características de esta generación: Usaban transistores para procesar información. Los transistores eran más rápidos, pequeños y más confiables que los tubos al vacío. 200 transistores podían acomodarse en la misma cantidad de espacio que un tubo al vacío. Usaban pequeños anillos magnéticos para almacenar información e instrucciones. cantidad de calor y eran sumamente lentas. Se mejoraron los programas de computadoras que fueron desarrollados durante la primera generación. Se desarrollaron nuevos lenguajes de programación como COBOL y FORTRAN, los cuales eran comercialmente accsesibles. Se usaban en aplicaciones de sistemas de reservaciones de líneas aéreas, control del tráfico aéreo y simulaciones de propósito general. La marina de los Estados Unidos desarrolla el primer simulador de vuelo, "Whirlwind I". Surgieron las minicomputadoras y los terminales a distancia. Se comenzó a disminuir el tamaño de las computadoras. Tercera Generación (1964-1971) La tercera generación de computadoras emergió con el desarrollo de circuitos integrados (pastillas de silicio) en las que se colocan miles de componentes electrónicos en una integración en miniatura. Las computadoras nuevamente se hicieron más pequeñas, más rápidas, desprendían menos calor y eran energéticamente más eficientes. El ordenador IBM-360 dominó las ventas de la tercera generación de ordenadores desde su presentación en 1965. El PDP-8 de la Digital Equipment Corporation fue el primer miniordenador. Características de está generación: Se desarrollaron circuitos integrados para procesar información. Se desarrollaron los "chips" para almacenar y procesar la información. Un "chip" es una pieza de silicio que contiene los componentes electrónicos en miniatura llamados semiconductores. Los circuitos integrados recuerdan los datos, ya que almacenan la información como cargas eléctricas. Surge la multiprogramación. Las computadoras pueden llevar a cabo ambas tareas de procesamiento o análisis matemáticos. Emerge la industria del "software". Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 7 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Se desarrollan las minicomputadoras IBM 360 y DEC PDP-1. Otra vez las computadoras se tornan más pequeñas, más ligeras y más eficientes. Consumían menos electricidad, por lo tanto, generaban menos calor. Cuarta Generación (1971-1988) Aparecen los microprocesadores que es un gran adelanto de la microelectrónica, son circuitos integrados de alta densidad y con una velocidad impresionante. Las microcomputadoras con base en estos circuitos son extremadamente pequeñas y baratas, por lo que su uso se extiende al mercado industrial. Aquí nacen las computadoras personales que han adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada "revolución informática". Características de esta generación: Se desarrolló el microprocesador. Se colocan más circuitos dentro de un "chip". "LSI - Large Scale Integration circuit". "VLSI - Very Large Scale Integration circuit". Cada "chip" puede hacer diferentes tareas. Un "chip" sencillo actualmente contiene la unidad de control y la unidad de aritmética/lógica. El tercer componente, la memoria primaria, es operado por otros "chips". Se reemplaza la memoria de anillos magnéticos por la memoria de "chips" de silicio. Se desarrollan las microcomputadoras, o sea, computadoras personales o PC. Se desarrollan las supercomputadoras. Quinta Generación (1983 al presente) En vista de la acelerada marcha de la microelectrónica, la sociedad industrial se ha dado a la tarea de poner también a esa altura el desarrollo del software y los sistemas con que se manejan las computadoras. Surge la competencia internacional por el dominio del mercado de la computación, en la que se perfilan dos líderes que, sin embargo, no han podido alcanzar el nivel que se desea: la capacidad de comunicarse con la computadora en un lenguaje más cotidiano y no a través de códigos o lenguajes de control especializados. Japón lanzó en 1983 el llamado "programa de la quinta generación de computadoras", con los objetivos explícitos de producir máquinas con innovaciones reales en los criterios mencionados. Y en los Estados Unidos ya está en actividad un programa en desarrollo que persigue objetivos semejantes, que pueden resumirse de la siguiente manera: Se desarrollan las microcomputadoras, o sea, computadoras personales o PC. Se desarrollan las supercomputadoras. Características de esta generación: Inteligencia artíficial: La inteligencia artificial es el campo de estudio que trata de aplicar los procesos del pensamiento humano usados en la solución de problemas a la computadora. Robótica: La robótica es el arte y ciencia de la creación y empleo de robots. Un robot es un sistema de computación híbrido independiente que realiza actividades físicas y de cálculo. Están siendo diseñados con inteligencia artificial, para que puedan responder de manera más efectiva a situaciones no estructuradas. Sistemas expertos: Un sistema experto es una aplicación de inteligencia artificial que usa una base de conocimiento de la experiencia humana para ayudar a la resolución de problemas. Redes de comunicaciones: Los canales de comunicaciones que interconectan terminales y computadoras se conocen como redes de comunicaciones; todo el "hardware" que soporta las interconexiones y todo el "software" que administra la transmisión. Dato e Información Dato es todo valor o elemento de conocimiento aprehensible y transmitible. En sentido general, la información es un conjunto organizado de datos procesados, que constituyen un mensaje sobre un determinado ente o fenómeno. Los datos se perciben, se integran y generan la información necesaria para producir el conocimiento que es el que finalmente permite tomar decisiones para realizar las acciones cotidianas que aseguran la existencia. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 8 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Desde el punto de vista de la ciencia de la computación, la información es un conocimiento explícito extraído por seres vivos o sistemas expertos como resultado de interacción con el entorno o percepciones sensibles del mismo entorno. En principio la información, a diferencia de los datos o las percepciones sensibles, tienen estructura útil que modificará las sucesivas interacciones del ente que posee dicha información con su entorno.
Entre las múltiples representaciones son importantes las magnitudes digitalizadas y se elige el sistema binario con sus dos estados 1 y 0, el motivo es la facilidad de su manejo.
Informática La Informática es la ciencia aplicada que abarca el estudio y aplicación del tratamiento automático de la información, utilizando dispositivos electrónicos y sistemas computacionales. También está definida como el procesamiento automático de la información. Conforme a ello, los sistemas informáticos deben realizar las siguientes tres tareas básicas: Entrada: Captación de la información digital. Proceso: Tratamiento de la información. Salida: Transmisión de resultados binarios.
Bit Bit es el acrónimo de Binary digit. (dígito binario). Un bit es un dígito del sistema de numeración binario. Mientras que en el sistema de numeración decimal se usan diez dígitos, en el binario se usan sólo dos dígitos, el 0 y el 1. Un bit o dígito binario puede representar uno de esos dos valores, 0 ó 1. Se puede imaginar un bit, como una bombilla que puede estar en uno de los siguientes dos estados:
apagada o encendida El bit es la unidad mínima de información empleada en informática, en cualquier dispositivo digital, o en la teoría de la información. Con él, podemos representar dos valores cuales quiera, como verdadero o falso, abierto o cerrado, blanco o negro, norte o sur, masculino o femenino, rojo o azul, etc. Basta con asignar uno de esos valores al estado de "apagado" (0), y el otro al estado de "encendido" (1). Con un bit podemos representar solamente dos valores, que suelen representarse como 0, 1. Para representar o codificar más información en un dispositivo digital, necesitamos una mayor cantidad de bits. Si usamos dos bits, tendremos cuatro combinaciones posibles: 0 0 - Los dos están "apagados" 0 1 - El primero "apagado" 1 0 - El primero "encendido" 1 1 - Los dos están "encendidos" Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 9 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Con estas cuatro combinaciones podemos representar hasta cuatro valores diferentes, como por ejemplo, los colores rojo, verde, azul y negro. A través de secuencias de bits, se puede codificar cualquier valor discreto como números, palabras, e imágenes. Cuatro bits forman un nibble, y pueden representar hasta 24 = 16 valores diferentes; ocho bits forman un octeto, y se pueden representar hasta 28 = 256 valores diferentes. En general, con un número de bits pueden representarse hasta 2n valores diferentes. Byte Un byte y un octeto no son la misma cosa. Mientras que un octeto siempre tiene 8 bits, un byte contiene un número fijo de bits, que no necesariamente son 8. En los computadores antiguos, el byte podría estar conformado por 6, 7, 8 ó 9 bits. Hoy en día, en la inmensa mayoría de los computadores, y en la mayoría de los campos, un byte tiene 8 bits, siendo equivalente al octeto, pero hay excepciones. En arquitectura de ordenadores, 8 bits es un adjetivo usado para describir enteros, direcciones de memoria u otras unidades de datos que comprenden hasta 8 bits de ancho, o para referirse a una arquitectura de CPU y ALU basadas en registros, bus de direcciones o bus de datos de ese ancho. El término "byte" viene de "bite" (en inglés "mordisco"), como la cantidad más pequeña de datos que un ordenador podía "morder" a la vez. Ejemplo: Excepto para elementos con fotos, los elementos se toman como colecciones de caracteres--letras, números y signos de puntuación--cada uno 1 byte. Un documento formateado ocupa mucho más espacio. Tamaño Capacidad de almacenamiento aproximada 1B Una letra 10 B Una o dos palabras 100 B Una o dos frases 1 kB Una historia muy corta 10 KB Una página de enciclopedia (tal vez con un dibujo simple) 100 KB Una fotografía de resolución mediana 1 MB Una novela 10 MB Dos copias de la obra completa de Shakespeare 100 MB 1 metro de libros en estantería 1 GB Una furgoneta llena de páginas con texto 1 TB 50.000 árboles de papel 10 TB La colección impresa de la biblioteca del congreso de EE. UU. Palabra Una palabra es un grupo de 16 bits, el bit 0 es el bit de más bajo orden y el bit 15 es el de más alto orden. Una palabra se puede dividir en 2 bytes llamados igualmente de bajo y alto orden. También una palabra puede considerarse como un grupo de 4 nibbles. Se considera una palabra doble a un grupo de 32 bits. Un grupo de mayor número de bits simplemente se nombra por su número de bits, ejemplo: palabra de 64 bits, palabra de 128 bits, etc. Unidades Los prefijos usados para medidas de byte normalmente son los mismos que los prefijos del SI utilizados para otras medidas, pero tienen valores ligeramente distintos. Se basan en potencias de 1024 (210), un número binario conveniente, mientras que los prefijos del SI se basan en potencias de 1000 (103), un número decimal conveniente. La tabla inferior ilustra estas diferencias. Ver Prefijo binario para una discusión mayor. Nombre Abrev. bytes
B
Factor binario
Tamaño en el SI
0
10 = 1
10
2 =1
0
kilo
K
2 = 1024
103 = 1000
mega
M
220 = 1 048 576
106 = 1 000 000
giga
G
230 = 1 073 741 824
109 = 1 000 000 000
tera
T
240 = 1 099 511 627 776
1012 = 1 000 000 000 000
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 10 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
peta
P
250 = 1 125 899 906 842 624
1015 = 1 000 000 000 000 000
exa
E
260 = 1 152 921 504 606 846 976
1018 = 1 000 000 000 000 000 000
zetta
Z
270 = 1 180 591 620 717 411 303 424
1021 = 1 000 000 000 000 000 000 000
yotta
Y
280 = 1 208 925 819 614 629 174 706 176 1024 = 1 000 000 000 000 000 000 000 000
Baudio El baudio (en inglés baud) es una unidad de medida, usada en telecomunicaciones, que representa el número de símbolos transmitidos por segundo en una red análoga. Es importante resaltar que no se debe confundir el baud rate o velocidad en baudios con el bit rate o velocidad en bits por segundo, ya que cada evento de señalización (símbolo) transmitido puede transportar uno o más bits. Sólo cuando cada evento de señalización (símbolo) transporta un solo bit coinciden la velocidad de transmisión de datos baudios y en bits por segundo. Las señales binarias tienen la tasa de bit igual a la tasa de símbolos (rb = rs), con lo cual la duración de símbolo y la duración de bit son también iguales (Ts = Tb). n = rb/rs Donde rb: régimen binario o tasa de bits (bit rate) rs: tasa de modulación o tasa de símbolos y n: número de bits por nivel para la codificación de línea Se utilizó originariamente para medir la velocidad de las transmisiones telegráficas, tomando su nombre del ingeniero francés Jean Maurice Baudot, quien fue el primero en realizar este tipo de mediciones. Ejemplos: En el caso de las máquinas teletipo, todavía en uso en algunos medios, se decía que la velocidad de transmisión era normalmente de 50 baudios. En este caso, como los eventos eran simples cambios de voltaje 1-->(+), 0-->(-), cada evento representaba un solo bit o impulso elemental, y su velocidad de transmisión en bits por segundo coincidía con la velocidad en baudios. Sin embargo, en los módems que utilizan diversos niveles de codificación, por ejemplo mediante modulación de fase, cada evento puede representar más de un bit, con lo cual ya no coinciden bits por segundos y baudios. Sistemas de numeración Un sistema de numeración es un conjunto de símbolos y reglas de generación que permiten construir todos los números válidos en el sistema. Un sistema de numeración puede representarse como donde:
es el sistema de numeración considerado (p.ej. decimal, binario, etc.). es el conjunto de símbolos permitidos en el sistema. En el caso del sistema decimal son {0,1,...9}; en el binario son {0,1}; en el octal son {0,1,...7}; en el hexadecimal son {0,1,...9, A, B, C, D, E, F}. son las reglas que nos indican qué números son válidos en el sistema, y cuáles no. En un sistema de numeración posicional las reglas son bastante simples, mientras que la numeración romana requiere reglas algo más elaboradas. Estas reglas son diferentes para cada sistema de numeración considerado, pero una regla común a todos es que para construir números válidos en un sistema de numeración determinado sólo se pueden utilizar los símbolos permitidos en ese sistema. Para indicar en qué sistema de numeración se representa una cantidad se añade como subíndice a la derecha el número de símbolos que se pueden representar en dicho sistema. Ejemplos el número 135(10) es un número válido en el sistema decimal, pero el número 12A(10) no lo es, ya que utiliza un símbolo A no válido en el sistema decimal. el número 35(8) es un número válido en el sistema octal, pero el número 39(8) no lo es, ya que el símbolo 9 no es un símbolo válido en el sistema octal. el número F1E4(16) es un número válido en el sistema hexadecimal, pero el número FKE4(16) no lo es, ya que el símbolo K no es un símbolo válido en el sistema hexadecimal. Las lenguas naturales sin ser sistemas formales son sistemas que generalmente cuentan con un procedimiento para nombrar los numerales. La base de los sistemas encontrados en las lenguas del mundo son la base 10 y la base 20, ya que dichos sistemas se originaron en el contaje de dedos de manos (y a veces también pies). Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 11 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Clasificación Los sistemas de numeración pueden clasificarse en dos grandes grupos: posicionales y no-posicionales: En los sistemas no-posicionales los dígitos tienen el valor del símbolo utilizado, que no depende de la posición (columna) que ocupan en el número. En los sistemas de numeración ponderados o posicionales el valor de un dígito depende tanto del símbolo utilizado, como de la posición que ése símbolo ocupa en el número. Por ejemplo, el sistema de numeración egipcio es no posicional, en cambio el babilónico es posicional. Las lenguas naturales poseen sistemas de numeración posicionales basados en base 10 ó 20, a veces con subsistemas de cinco elementos. Además, en algunas pocas lenguas los numerales básicos a partir de cuatro tienen nombres basados en numerales más pequeños. Sistemas de numeración no posicionales Estos son los más primitivos se usaban por ejemplo los dedos de la mano para representar la cantidad cinco y después se hablaba de cuántas manos se tenía. También se sabe que se usaba cuerdas con nudos para representar cantidad. Tiene mucho que ver con la coordinabilidad entre conjuntos. Entre ellos están los sistemas el antiguo Egipto, el sistema de numeración romana, y los usados en Mesoamérica por mayas, aztecas y otros pueblos. Sistemas de numeración semi posicionales El sistema de los números romanos no es estrictamente posicional. Por esto, es muy complejo diseñar algoritmos de uso general (por ejemplo, para sumar, restar, multiplicar o dividir). Como ejemplo, en el número romano XCIX (99 decimal) los numerales X (10 decimal) del inicio y del fin de la cifra equivalen siempre al mismo valor, sin importar su posición dentro de la cifra. Sistemas de numeración posicionales El número de símbolos permitidos en un sistema de numeración posicional se conoce como base del sistema de numeración. Si un sistema de numeración posicional tiene base b significa que disponemos de b símbolos diferentes para escribir los números, y que b unidades forman una unidad de orden superior. Ejemplo en el sistema de numeración decimal Si contamos desde 0, incrementando una unidad cada vez, al llegar a 9 unidades, hemos agotado los símbolos disponibles, y si queremos seguir contando no disponemos de un nuevo símbolo para representar la cantidad que hemos contado. Por tanto añadimos una nueva columna a la izquierda del número, reutilizamos los símbolos de que disponemos, decimos que tenemos una unidad de segundo orden (decena), ponemos a cero las unidades, y seguimos contando. De igual forma, cuando contamos hasta 99, hemos agotado los símbolos disponibles para las dos columnas; por tanto si contamos (sumamos) una unidad más, debemos poner a cero la columna de la derecha y sumar 1 a la de la izquierda (decenas). Pero la columna de la izquierda ya ha agotado los símbolos disponibles, así que la ponemos a cero, y sumamos 1 a la siguiente columna (centena). Como resultado nos queda que 99+1=100. Como vemos, un sistema de numeración posicional se comporta como un cuentakilómetros: va sumando 1 a la columna de la derecha y, cuando la rueda de esa columna ha dado una vuelta (se agotanlos símbolos), se pone a cero y se añade una unidad a la siguiente columna de la izquierda. Pero estamos tan habituados a contar usando el sistema decimal que no somos conscientes de este comportamiento, y damos por hecho que 99+1=100, sin pararnos a pensar en el significado que encierra esa expresión. Tal es la costumbre de calcular en decimal que la mayoría de la población ni siquiera se imagina que puedan existir otros sistemas de numeración diferentes al de base 10, y tan válidos y útiles como este. Entre esos sistemas se encuentran el de base 2 sistema binario, de base 8 sistema octal y el de base 16 sistema hexadecimal. También los antiguos mayas tuvieron un sistema de numeración posicional el cual ya no se usa. Teorema Fundamental de la Numeración Este teorema establece la forma general de construir números en un sistema de numeración posicional. Primero estableceremos unas definiciones básicas: N: número válido en el sistema de numeración. b: base del sistema de numeración. Número de símbolos permitidos en el sistema. d: un símbolo cualquiera de los permitidos en el sistema de numeración. n: número de dígitos de la parte entera. ,: coma fraccionaria. Símbolo utilizado para separar la parte entera de un número de su parte fraccionaria. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 12 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
k: número de dígitos de la parte decimal. La fórmula general para construir un número (cualquier número) N en un sistema de numeración posicional de base b es la siguiente:
El valor total del número será la suma de cada dígito multiplicado por la potencia de la base correspondiente a la posición que ocupa en el número. Esta representación posibilita la realización de sencillos algoritmos para la ejecución de operaciones aritméticas. El Sistema de Numeración Decimal El sistema de numeración decimal es el más usado, tiene como base el número 10, o sea que posee 10 dígitos (o símbolos) diferentes para representar cualquier cantidad numérica: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 La posición de cada dígito en un número decimal indica la magnitud de la cantidad representada y se le puede asignar un „peso‟. Los „pesos‟ para los números enteros son potencias de 10, que aumentan de derecha a izquierda comenzando por 100 = 1. Por ejemplo el número decimal 72410 puede ser representado como: 72410= 7x102 + 2x101 + 4x100 Para los decimales los pesos son potencias de 10 que aumentan de derecha a izquierda con potencias negativas comenzando por 10 –1 0,2310 = 0x100+2x10-1 + 3x10-2 Sistema Binario El sistema numérico binario es un sistema posicional de base 2, es decir que posee dos símbolos para representar cualquier cantidad numérica: 0 , 1 El equivalente decimal de un número binario se puede obtener a partir del polinomio antes mencionado, de tal forma que: 110102 = 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 0 x 20 = 2610 Ejercicio 1: Convertir a decimal el número 101001012 101001012 = 1x 27+0 .26+1 x 25+0x 24+0x23+1x22+0 x21+1 x20 =16510 Ejercicio 2: Convertir a decimal el número 11,0112 11,0112 = 1 x21 + 1x 20 +0x 2-1+ 1x 2-2 +1x 2-3 = 3,37510 Los dígitos de un número binario se llaman bits. La razón de ser del sistema binario, es que la información que se manipula dentro de un sistema digital se hace de acuerdo a señales eléctricas. Mediante una señal eléctrica alta, se representa el valor „1‟ y mediante una señal eléctrica baja se representa el „0‟. El bit de valor más pequeño (20) se denomina bit menos significativo (LSB Least Significat Bit) y el valor más elevado de un byte (27) se denomina bit más significativo (MSB Most Significat Bit). Existen diferentes formas de codificar la información en el sistema binario, la más usual es la codificación en binario natural, en esta forma de representación cada número es representado por un código de n bits. En la tabla se representan los 16 primeros números binarios: Sistema Numérico Hexadecimal El Sistema Numérico Hexadecimal consta de 16 símbolos para representar cualquier cantidad numérica. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 13 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Donde A equivale a 10 en base 10. B equivale a 11 en base 10. C equivale a 12 en base 10. D equivale a 13 en base 10. E equivale a 14 en base 10. F equivale a 15 en base 10. Este sistema se utiliza para compactar la información binaria, que es engorrosa de manejar. Se utiliza un dígito hexadecimal para representar una cadena de 4 dígitos binarios. Por ejemplo el número (000101011010)2 es más fácil de representar mediante su correspondiente número en base hexadecimal. Compactamos entonces toda esa cadena de información binaria en sólo 4 dígitos de información en base hexadecimal. El proceso para llevar a cabo este cambio es sencillo. De derecha a izquierda de la cadena numérica, se van tomando cadenas de 4 dígitos binarios, y se transforman a su correspondiente dígito hexadecimal. Realizando grupos de 4 bits: 0001 0101 1010 = 15A 16 Decimal
Binario
Octal
Hexadecimal
BCD 8421
BCD exc 3
GRAY
0
0000
00
0
0000
0011
0000
1
0001
01
1
0001
0100
0001
2
0010
02
2
0010
0101
0011
3
0011
03
3
0011
0110
0010
4
0100
04
4
0100
0111
0110
5
0101
05
5
0101
1000
0111
6
0110
06
6
0110
1001
0101
7
0111
07
7
0111
1010
0100
8
1000
10
8
1000
1011
1100
9
1001
11
9
1001
1100
1101
10
1010
12
A
0001 0000
0100 0011
1111
11
1011
13
B
0001 0001
0100 0100
1110
12
1100
14
C
0001 0010
0100 0101
1010
13
1101
15
D
0001 0011
0100 0110
1011
14
1110
16
E
0001 0100
0100 0111
1001
15
1111
17
F
0001 0101
0100 1000
1000
16
10000
20
10
0001 0110
0100 1001
11000
Pasando al sistema decimal tenemos: 15A 16 = 1x162 + 5x161 + 10x160 = 1x256 + 5x16 +10 = 346 10 Sistema Numérico Octal El Sistema Numérico Octal consta de 8 símbolos para representar cualquier cantidad numérica: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7. Al igual que la base hexadecimal, en nuestro caso estos dos sistemas de numeración tienen importancia y se utilizan por cuanto permiten compactar información binaria en forma sencilla, pero en este caso, la compactación es menor. Mientras que en la base hexadecimal con un sólo dígito se puede representar una cadena de 4 dígitos binarios, en la base octal un dígito sólo puede representar 3 dígitos binarios. Los dígitos posibles para la base octal, evidentemente, son los que van del 0 al 7. Cambio de base Como ya se vio anteriormente podemos pasar de una representación de una magnitud en un sistema número b a un sistema de numeración de base 10 por aplicación del polinomio: N = An bn + An-1 bn-1 + … + A1 b1 + A0 b0 + A-1 b-1 + A-2 b-2 + … Ejemplo 1. Convertir el número (11101)2 a base 10. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 14 -
INTRODUCCIÓN A LA INFORMÁTICA
24 1
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
23 22 21 20 1 1 0 1
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
= 1.20 + 0.21 + 1.22 + 1.23 + 1.24 = 1 + 0 + 4 + 8 + 16 = 2910
Ejemplo 2. Convertir el número binario (1111100)2 a base 10. 26 25 24 23 22 21 20 1 1 1 1 1 0 0
= 1.26 +1.25 + 1.24 + 1.23 + 1.22 + 0.21 + 0.20 = 64 + 32 + 16 + 8 + 4 + 0 + 0 = 12410
Ejemplo 3. Convertir el número (29)10 en su equivalente en binario. 29 2 14 2 1 7 2 0 3 2 1 1 1 1
2 0
El número obtenido es (0 1 1 1 0 1) 2 = 29 10 Ejemplo 4. Convertir el número decimal 4573 al sistema hexadecimal 4573 13
16 285 13
16 17 1
16 1
El número obtenido es (4 5 7 3) 10 = 11DD16
Ejemplo 5. Convertir el número decimal 1036 al sistema octal 1036 4
8 129 1
8 16 0
8 2
El número obtenido es (1 0 3 6) 10 = 20148
Ejemplo 6. Convertir el número binario 011100000001,11000100 a hexadecimal y a octal a) Hexadecimal 0111 0000 0001 , 1100 0100 = (7 0 1 , C 4)16 b) Octal 011 100 000 001 , 110 001 000 = (3 4 0 1 , 6 1 0)8 Ejemplo 7. Convertir el número octal 673,12 a binario (6 7 3,12)8 = 110 111 011 , 001 0102 Ejemplo 8. Convertir el número hexadecimal 39,B8 a decimal (39, B8)16 = 3.161 + 9.160 + 11.16-1 + 8.16-2 = 48 + 9 + 0,687 + 0,031 = 57,71810 Ejemplo 9. Convertir el número octal 375,42 a decimal (3 7 5 , 42 )8 = 3 . 82 + 7. 81 + 5 . 80 + 4 . 8-1+ 2 . 8-2 = (229.62) 10 Operaciones con binarios Suma Binaria: la adición binaria se realiza de la misma forma que en el sistema decimal. El dígito menos significativo se opera primero y el más significativo último. Existen cuatro casos cuando se suman cifras binarias (bits) que se Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 15 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
muestran en la tabla de verdad para dos variables binarias a y b. Como se aprecia en la tabla, cuando las dos variables toman el valor „1‟ se produce un acarreo. a 0 0 1 1
b 0 1 0 1
Suma Acarreo 0 0 1 0 1 0 0 1
Ejemplo: Acarreo 1 1 0
1 0 0 1
1 0 1
a b Resultado
Resta Binaria: Esta operación al igual que la suma sigue las mismas reglas de restar que el sistema decimal, tener en cuenta cuando se pide prestado 1, se debe 1: a 0 0 1 1
Resta Prestado 0 0 1 1 1 0 0 0
b 0 1 0 1
Ejemplo: Prestado 1 1 0
1 0 1 1
1 0 0
a b Resultado
Multiplicación Binaria: El proceso es muy simple ya que las cifras seran „0‟ o „1‟: a 0 0 1 1
b 0 1 0 1
Multiplicación 0 0 0 1
Ejemplo:
1 1
0 0 1
1 0 0 0
1 1 1 0 0 1 0
0 0 0 0 0
0 1 0 1
1 1 1
910 1110
0
1
1
9910
División Binaria: El proceso en este caso resulta mas simple que el sistema decimal puesto que cuando se verifica cuantas veces el divisor “cabe en” el dividendo, solo hay dos posibilidades „0‟ o „1‟.
1 0 1
0 0 0 1 0
0
1 0
0 1 1
1 1
1 1 Resultado
1
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 16 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
1 0
1 1 0
1 0
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Resto
0 0 0
1 0 1 0 0 0 1 0 , 1 1 0 0 Resultado 1 0 0 0 0 0 Resto Obsérvese que en el segundo ejemplo se coloco la coma decimal y se agrego un cero para poder continuar con la división. Representación de números con signo Las magnitudes en los sistemas digitales se representan a través de una combinación de bits, en un sistema de 6 bits podríamos representar cantidades que van desde 0000002 a 1111112 (010 a 6310). Si queremos representar números negativos debemos valernos de algún medio de representación para el signo. Esto se lleva a cabo agregando un bit adicional para representar el signo y estableciendo una convención tal como „0‟ equivales a signo „+‟ y „1‟ equivale a signo „-„, entonces en nuestro sistema de seis bits las magnitudes que podemos representar van desde –31 a +31 0 1 1 0 0 1 = Signo
+25
Magnitud 1 0 0 1 1 0 =
-6
El bit de signo se usa para indicar si un número es positivo o negativo, el resto de los bits se usa para representar la magnitud en forma binaria. Para los números negativos, no obstante existen tres formas de representar la magnitud: a) En forma de magnitud verdadera b) En forma de complemento a 1 c) En forma de complemento a 2 Forma de magnitud verdadera: la magnitud se representa en binario natural. Forma de complemento a 1: cuando se representa un número negativo en forma de complemento a 1, el bit de signo se conserva en „1‟ y la magnitud se complementa a 1. Ejemplo: -57 = 1 1 1 1 0 0 1 Forma de magnitud verdadera = 1 0 0 0 1 1 0 Forma de complemento a 1 Bit de signo Forma de complemento a 2: en este caso la magnitud se complementa a 1 y se le suma 1. Ejemplo -57 = 1 1 1 1 0 0 1 Forma de magnitud verdadera = 1 0 0 0 1 1 1 Forma de complemento a 2 Bit de signo Las tres formas de representación se utilizan en los sistemas digitales, algunos almacenan la información en forma de magnitud verdadera y la transforman a forma de complemento antes de realizar una operación aritmética. Ejercicio: represente los siguientes números en formato verdadero y en complemento a 2: 13, -9, -3 Magnitud verdadera 13
0 1 1 0 1
-9 -3
1 1 0 0 1 1 0 0 1 1
Complemento a 2 No corresponde por ser un numero positivo 1 0 1 1 1 1 1 1 0 1
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 17 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Ejercicio: los siguientes números son números binarios en complemento a dos, determine el valor decimal: a) 011002, b) 110102 y c) 100012 a) como el signo es + la magnitud esta expresada en forma verdadera, entonces 011002 = +1210 b) Si complementamos la magnitud C2 = (10102)‟ = 01102 y como el signo se conserva tendremos que 101102 = 610 c) Si complementamos la magnitud C2 = (00012)‟ = 11112 y como el signo se conserva tendremos que 111112 = 1510 Resta con complemento: a = 11012 (13) 10 b = 01112 (7) 10 Representemos los dos números añadiendo un bit de signo (BS) que será 0 si son positivos y 1 si son negativos: BS a = 0 11012 (13) 10 b = 0 01112 (7) 10 Realizaremos las siguientes operaciones (a-b) y (b-a) mediante los dos convenios conocidos, el complemento a uno y el complemento a dos. Complemento a uno: Los números positivos se invierten para obtener los negativos y viceversa. a = 0 11012 (13) 10 b = 0 01112 (7) 10
- a = 1 00102 (-13) 10 - b = 1 10002 (-7) 10
Las operaciones que debemos realizar se harán sumando los números positivos con los negativos representados con el método del complemento a uno. a-b 13 - 7 6
01 1 0 1 +11 0 0 0 10 01 0 1 +1 0 01 1 0 El carry (acarreo) obtenido del resultado de la suma se añade al resultado parcial para obtener el valor total. El valor 01102 es el valor 6 en decimal. b-a 7 0 0 1 11 - 13 +1 0 0 10 -6 1 1 0 01 Vemos que el bit de signo nos da 1; eso nos indica que l resultado es negativo. Para saber el valor real ción, hay que completar a uno el resultado:
de la opera-
1001 → 0110 complemento a uno. Complemento a dos: Sabemos que para cambiar el signo de un número se invierte y después se le suma uno, tendremos: a = 0 11012 (13) 10 - a = 1 00102 + 00012 → - a = 1 00112 b = 0 01112 (7) 10 - b = 1 10002 + 00012 → -b = 1 10012 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 18 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Las operaciones que debemos realizar se harán sumando los números positivos con los negativos representados con el método del complemento a dos. a-b 13 01 1 0 1 - 7 +11 0 0 1 6 10 01 1 0 Con este método, el carry obtenido del resultado de la suma no se utiliza. El 01102 es el número 6 en decimal. b-a 7 0 0 1 11 - 13 +1 0 0 11 -6 1 1 0 10 El bit de signo toma el valor 1, entonces es negativo. Ahora para saber el resultado real de la operación, es decir, convertir 1010 a positivo, habrá que deshacer el complemento a dos. Primero le restamos 1 y luego invertimos el número; nos dará 0110 que con el bit de signo es -6. Sistema binario codificado decimal (BCD) Recuérdese que en este sistema a cada digito decimal se lo representa por un código binario de cuatro bits así: 1510 (0001 0101 )BCD Suma: Consideraremos dos casos a) Cuando el resultado de la suma es menor o igual a 9 (<= 9) 5 0 1 0 1 BCD +3 0 0 1 1 BCD 8 1 0 0 0 BCD 45 +33 78
0 1 0 0 0 1 0 1 BCD 0 0 1 1 0 0 1 1 BCD 0 1 1 1 1 0 0 0 BCD
b) Cuando el resultado de la suma es mayor a 9 (> 9) 6 + 7 13
0 1 1 0 0 1 1 1 1 1 0 1
BCD BCD BCD
código invalido para BCD
Siempre que esto ocurra la suma tiene que ser corregido por la adición de seis (0110) para tomar en cuenta la omisión de los seis códigos no validos ( 1010, 1011, 1100, 1101, 1110 y 1111) 6 + 7 13
0 1 1 0 0 1 1 1 1 1 0 1 + 0 1 1 0 0 0 0 1 0 0 1 1 BCD 1
BCD BCD BCD
código invalido para BCD
BCD
3
Resta: Al igual que la suma se debe salvar el error de los códigos inválidos cuando el resultado es superior a 9, en este caso la corrección se realiza restando seis 7 0 1 1 1 BCD - 6 0 1 1 0 BCD 1 0 0 0 1 BCD 45
0 1 0 0 0 1 0 1
BCD
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 19 -
INTRODUCCIÓN A LA INFORMÁTICA
- 36 9
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
0 0 1 1 0 1 1 0 BCD 0 0 0 0 1 1 1 1 BCD invalido para BCD - 0 1 1 0 BCD 0 0 0 0 1 0 0 1 BCD 0
9
Sistema de numeración hexadecimal (Base = 16) Suma: El procedimiento es igual al decimal, debiéndose recordar que el digito mayor es „F‟ en lugar de „9‟ Ejemplos 5 8 16 + 2 4 16 7 C 16
La suma de 8 + 4 produce 1210 que es C16
1 (acarreo) 5 8 16 Como B16 es 1110 ==> 816 + B16 = 810 + 1110 = 1910 + 4 B 16 y como 1910 = 1 * 161 + 9 * 160 = 1316 A 3 16 1 (acarreo) 3 A F 16 + 2 3 C 16 5 E B 16
Como (F + C)16 es (15 + 12)10 = 2710 = 1B16 Como (1+A+3)16 es (1+10+3)10 = 1410 = E16
Resta: Recuérdese que los números hexadecimales son una forma muy eficaz de representar números binarios. Así, podemos restar números hexadecimales utilizando el mismo procedimiento que se utiliza en los números binarios. El sustraendo se complementa a 2 y luego se sumara al minuendo, cualquier sobrepasamiento se despreciara. Podemos mencionar dos métodos para obtener el complemento a 2 de un número hexadecimal: El primer método es transformando el número hexadecimal en binario, complementar y luego volver a trasformar en hexadecimal. 73A numero en hexadecimal 0111 0011 1010 numero en binario 1000 1100 0110 numero en binario complementado a 2 8C6 numero hexadecimal complementado a 2 El segundo método consiste en restar F a cada digito, luego sumarle 1 F F -7 -3 8 C + 8 C
F -A 5 1 6
numero hexadecimal complementado a 2
Ejemplo: restar 3 A 516 de 59216 1) complementar 3 A 516 C5B16 2) sumar 592 +C5B 11ED Resultado = 1 E D16
Se desprecia el acarreo
Códigos Binarios Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 20 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Entre las formas de representar un número binario hemos visto el sistema binario natural y el binario codificado decimal (BCD). Recordemos que el código BCD cada digito decimal es codificado en su equivalente binario. La ventaja del código BCD es la relativa facilidad de conversión, esta facilidad es especialmente importante desde el punto de vista del hardware y especialmente en aquellos casos donde la salida debe mostrarse en forma de dígitos decimales como ser una calculadora. El código de Exceso 3: se relaciona con el BCD y algunas veces utiliza en lugar de este debido a que posee ventajas en ciertas operaciones aritméticas. El código Exceso 3 se efectúa igual que el BCD excepto que antes de la codificación se le suma 3 al digito decimal. (8)10 1000BCD
(3)10 0011BCD
(8)10 1011EXC3
(3)10 0110EXC3
8 +3 11 1011
3 +3 6 0110
BCD EXCESO 3
En la siguiente tabla se muestran el código BCD y el Exceso 3, nótese que si bien ambos códigos utilizan 10 de los 16 posibles combinaciones binarias, los códigos inválidos no son los mismos. Mientras el BCD considera como inválidos los códigos 1010, 1011, 100, 1101, 1110, 1111; en el exceso 3 los códigos inválidos son 0000, 0001, 0010, 1101, 1110, 1111. Decimal 0 1 2 3 4 5 6 7 8 9
BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Exceso 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100
El código de GRAY Pertenece a una clase de códigos llamado de cambio mínimo en los cuales solo cambia un bit cuando se pasa de una combinación otra. Este código se utiliza generalmente en dispositivos de entrada y salida y especialmente en aquellas situaciones donde se hace necesario efectuar controles sobre el sistema por su facilidad de auto detección de errores. Ejemplo: supongamos un sensor de temperatura como entrada a un sistema de control de un horno, si en una variación de temperatura cambia más de un bit podríamos estar en presencia de un error dado que la temperatura no puede saltar de 12ºC a 14ºC, si o si debe pasar por 13ºC. Decimal 0 1 2 3 4 5
Código Gray 0000 0001 0011 0010 0110 0111
Solo cambia 1 bit entre dos combinaciones consecutivas, en este caso decimos que el código es CONSECUTIVO
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 21 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
6 7
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
0101 0100
Si entre el primer código y el último solo cambia un bit y además el código es consecutivo decimos que el código es cíclico. Códigos Alfanuméricos. En general los sistemas digitales deben poder reconocer código que representen no solo números sino también letras y caracteres especiales. Estos códigos son llamados código alfanuméricos. Un conjunto completo de caracteres incluye: 26 letras minúsculas 26 letras mayúsculas 10 cifras numéricas ~25 caracteres especiales O sea aproximadamente 87 caracteres diferentes Para representar 87 caracteres diferentes se requerirán 7 bits ya que con 7 bits podemos representar 27 = 128 combinaciones posibles. El código ASCII, American Standard Code for Information Interchange, es el código con el cual operan los microcomputadores que trabajan bajo el sistema operativo MS-DOS y Windows. Se compone de un conjunto de caracteres de control, y caracteres imprimibles, numerados del 0 al 255. Ocupa cada uno de ellos un Byte de memoria, es decir ocho bit.
Códigos detectores de errores El proceso de transferencia de información está sujeto a errores que deben detectarse siempre que sea posible. Uno de los métodos más utilizados es el método de paridad. Este método consiste en agregar un bit adicional al código. El bit adicional será “0” o “1” dependiendo de la cantidad de unos que tenga el código. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 22 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
El método de paridad puede controlar: Paridad Par: en este caso el bit de paridad se escoge de manera tal que el número total de unos del código sea par. Si la letra “A” según el código ASCII es (1000001)2 y se agrega un bit de paridad par, el nuevo código para la letra “A” será 0 1000001 Paridad Impar: al igual que la paridad par pero en este caso el bit de paridad se escoge de manera tal que el número total de unos del código sea impar. Para el mismo caso de la letra “A” según el código ASCII es (1000001)2 y se agrega un bit de paridad impar, el nuevo código para la letra “A” será 1 1000001 Debe aclararse que este método no detecta el 100% de los errores ya que si dos bit con condición de paridad o impuridad no se alteraría. Por ello el método se utiliza en aquellos sistemas sonde la probabilidad de error es muy baja. Compuertas Lógicas Son dispositivos que implementan las diferentes operaciones que existen en el álgebra de Boole. Nos permiten obtener resultados, dependiendo de los valores de las señales que le ingresemos. COMPUERTA INVERSOR NOT (No) Negación lógica
SÍMBOLO A
A B
AND (Y) Producto lógico
A B
A B
OR (O) Suma lógica
A B
A B
NAND (No Y)
A B
A B
NOR (No O)
XOR (Oe Exclusiva) Exclusividad lógica
A B
A B
F
FUNCIÓNES LÓGICAS F = A‟
EXPRESIÓN LÓGICA NOT A
F
F
F= AB F= (A‟ + B‟)‟
A AND B
F
F
F=A+B F = (A‟B‟)‟
A OR B
F
F
F = (AB)‟ F = A‟ + B‟
NOT (A AND B)
F
F
F
F = (A + B)‟ F = A‟B‟
F = AB‟ + A‟B
NOT (A OR B)
A XOR B
TABLA DE VERDAD A F 0 1 1
0
A 0 0 1 1
B 0 1 0 1
F 0 0 0 1
A 0
B 0
F 0
0 1
1 0
1 1
1
1
1
A 0
B 0
F 1
0 1 1
1 0 1
1 1 0
A 0
B 0
F 1
0
1
0
1 1
0 1
0 0
A 0 0
B 0 1
F 0 1
1
0
1
1
1
0
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 23 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
A B
XNOR (No Oe Exclusiva)
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
F = (AB‟ + A‟B)‟ F = AB + A‟B‟
F
NOT (A XOR B)
A 0 0 1 1
B 0 1 0 1
F 1 0 0 1
Es necesario aclarar que las computadoras digitales utilizan el sistema de números binarios, que tiene dos dígitos 0 y 1. Un dígito binario se denomina un bit. La información está representada en las computadoras digitales en grupos de bits. Utilizando diversas técnicas de codificación los grupos de bits pueden hacer que representen no solamente números binarios sino también otros símbolos discretos cualesquiera, tales como dígitos decimales o letras de alfabeto. Utilizando arreglos binarios y diversas técnicas de codificación, los dígitos binarios o grupos de bits pueden utilizarse para desarrollar conjuntos completos de instrucciones para realizar diversos tipos de cálculos. La información binaria se representa en un sistema digital por cantidades físicas denominadas señales, Las señales eléctricas tales como voltajes existen a través del sistema digital en cualquiera de dos valores reconocibles y representan una variable binaria igual a 1 o 0. Por ejemplo, de acuerdo a la tecnología utilizada un sistema digital particular puede emplear diferentes voltajes, particularmente para la tecnología TTL una señal de 0 a 0,4 volts representa el binario 0 y de 2,4 a 5 volts representa el binario 1 quedando una franja indeterminada o prohibida. +5V
Salida alta 1 lógico
2,4 V
Estado indeterminado
0,4 V Salida baja 0 lógico
Siempre podemos representar funciones booleanas con compuertas lógicas, podemos observar que la compuerta XOR se puede representar también con la composición de otras compuertas de tal manera que la tabla de verdad sea equivalente, es importante notar la expresión lógica resultante. A B
F
F = A XOR B F = AB‟ + A‟B F = A AND NOT B OR NOT A AND B A B F
A estos circuitos vamos a denominarlos combinacionales, ya que las salidas dependen de las entradas únicamente. Veamos algunos ejemplos: Circuito comparador de un bit: Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 24 -
INTRODUCCIÓN A LA INFORMÁTICA
A
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
B
A>B
A=B
Entradas A B 0 0 0 1 1 0 1 1
A>B 0 0 1 0
Salidas A=B 1 0 0 1
A
A
Las correspondientes funciones lógicas de las salidas serán: A > B: AB‟ A = B: (AB‟ + A‟B)‟ A < B: A‟B Circuito semisumador de dos bits: A B
S
C
Entradas A B 0 0 1 1
0 1 0 1
S (suma) 0 1 1 0
Salidas C (acarreo) 0 0 0 1
Las correspondientes funciones lógicas de las salidas serán: S: AB‟ + A‟B C: AB Circuito semirestador de dos bits: A B
D
Bo
Entradas A B 0 0 1 1
0 1 0 1
Salidas D (resBo (prestata) do) 0 0 1 1 1 0 0 0
Hay otros circuitos en que las salidas dependen de las entradas y también de las salidas anteriores, a estos se los denominan circuitos secuenciales. El estado de las salidas permanece estable, aunque el estímulo exterior haya desaparecido. Esta última característica es la que les confiere la gran importancia que tienen estos circuitos en lógica como elementos de memoria. Entre los más simples están las básculas, flip-flop o biestables. La explicación está fuera de alcance de este documento. Báscula RS (Set Reset) R Entradas Salida Q S R Qn+1 0 0 Qn 0 1 0 1 0 1 Q’ S 1 1 ? Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 25 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Capitulo 2 "La principal meta de la educación es crear hombres capaces de hacer cosas nuevas y no simplemente de repetir lo que han hecho otras generaciones: hombres creadores, inventores y descubridores. La segunda meta de la educación es formar mentes que puedan ser críticas, que puedan verificar y no aceptar todo lo que se les ofrece." Jean Piaget. Si no se aprende, la sinceridad se trueca en grosería; la valentía, en desobediencia; la constancia, en caprichoso empecinamiento; la humanidad, en estupidez; la sabiduría, en confusión; la veracidad, en ruina. Confucio Ambiente de un Problema Lo primero a considerar en el proceso de resolución de problemas es la formalización de su ambiente. Vamos a definir un conjunto de reglas que nos permitirán describir, con precisión y sin ambigüedad, los objetos del universo de un problema. Una primer característica que diferencia entre sí a los objetos es que cada uno tiene un nombre que lo identifica unívocamente, o sea, si queremos citar diferentes objetos, damos una lista de sus nombres o identificadores. Además, cada objeto tiene un uso específico y que no se puede intercambiar. Entonces podemos decir que cada objeto tiene un tipo particular que indica características comunes a todos los estados posibles del objeto. Otra característica importante de los objetos es su valor. Los objetos más simples son los objetos numéricos: enteros y reales; los lógicos y los caracteres. En cada instante, todo objeto del ambiente tiene un valor (Nota: si no se le da algún valor entonces puede tener un valor indeterminado). Para algunos objetos, este valor puede cambiar luego de la ejecución de una acción. También existen objetos cuyos valores nunca cambian. Para resumir, podemos imaginarnos a los objetos de un ambiente, como celdas rotuladas (por el nombre), además la celda tiene un tamaño determinado (según el tipo) y contiene una información (un valor posible del conjunto de valores de un tipo dado): Numero 572
Letra ꞌaꞌ
Precisiones acerca de los Objetos Los objetos se pueden clasificar de la siguiente manera: variables y constantes. Una variable es un objeto del ambiente cuyo valor puede cambiar y que posee además los siguientes atributos: - un nombre que la identifica, - un tipo que describe los valores que puede tomar la variable y las operaciones que con dicha la variable pueden realizarse. Cuando se define una variable, se debe precisar su nombre y su tipo. Definir una variable es crear un objeto para el procesador. En el momento de la creación de una variable, ésta tiene un valor desconocido. Una constante es un objeto cuyo valor no puede cambiar. En la definición de variable hicimos referencia al concepto de tipo. En realidad en la bibliografía puede encontrarse como tipo de datos. Dato es la expresión general que describe los objetos con los cuales opera un procesador. Existen diferentes tipos de datos, nosotros nos ocuparemos en este capítulo de los llamados tipos primitivos y, dentro de ellos, de los más simples: los numéricos (enteros y reales) los lógicos y los caracteres. El tipo entero, consiste de un conjunto finito de valores de los números enteros, la cardinalidad de este conjunto depende de las capacidades del procesador. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 26 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
El tipo real, consiste de un conjunto finito de valores de los números reales, la cardinalidad de este conjunto depende de las capacidades del procesador. Los números reales siempre tienen un punto decimal; las fracciones se guardan como números decimales porque no existe forma de guardar separadamente numeradores y denominadores. El tipo lógico, también llamado tipo booleano, es el conjunto de los valores de verdad: Verdadero (v) y Falso (f). El tipo caracter es el conjunto finito y ordenado de caracteres que el procesador puede reconocer. En general el conjunto de caracteres contiene, entre otros:
las letras mayúsculas del abecedario. las letras minúsculas del abecedario. los dígitos decimales del 0...9. el caracter de espacio blanco, caracteres especiales tales como: *, +, -, _, /,(, ), , , , $, ^, %, $, < ,>, “, .
Una constante de tipo caracter se escribe encerrada entre comillas simples, por ejemplo ꞌaꞌ , ꞌ8ꞌ. Expresiones Un procesador debe ser capaz de manipular los objetos del ambiente de un algoritmo. Es decir, debe ser capaz de calcular expresiones como: 2 + 3, a>b, etc. Luego: Una expresión describe un cálculo a efectuar cuyo resultado es un valor único. Una expresión consta de operadores y operandos. Según el tipo de los objetos que manipula, se clasifican en expresiones: aritméticas, relacionales, lógicas. El resultado de una expresión aritmética es de tipo numérico, el de una expresión relacional y el de una expresión lógica es de tipo lógico. Expresiones Aritméticas Un operando de una expresión aritmética puede ser, por ahora, una constante de tipo numérico, una variable de tipo numérico u otra expresión aritmética, encerrada entre paréntesis. Los operadores aritméticos son: Operador + * / ^
Significado suma resta producto división potencia
Como regla general se considera que si dos operandos tienen el mismo tipo, el resultado también es del mismo tipo. Por ejemplo, la suma de dos números enteros da como resultado otro valor entero. Si uno de los operandos es real el resultado es real. En el caso anterior si sumamos un entero y un real el resultado será real. A continuación se dan las reglas que nos permitirán determinar cómo se evaluará una expresión de dos o más operandos: 1. Todas las operaciones que están encerradas entre paréntesis se evalúan primero, cuando existen paréntesis anidados las expresiones más internas se evalúan primero. 2. Las operaciones aritméticas, dentro de una expresión, se ejecutan con el siguiente orden o precedencia: Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 27 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Orden de precedencia 1
Operadores ^
2
*, /
3
+, -
Significado potenciación (se aplica de derecha a izquierda) multiplicación y división (se aplican de izquierda a derecha) suma y resta (se aplican de izquierda a derecha)
La tabla anterior indica que en una expresión primero se evalúa la potenciación, luego el producto y/o la división, que tienen el mismo nivel de prioridad y, finalmente, la suma y/o resta. Tanto en el caso del producto y/o división como en el de la suma y/o resta cuando en la columna significado se dice “se aplican de izquierda a derecha” implica que si en una expresión aritmética hay seguidas tres operaciones, por ejemplo de producto, se comienza a calcular desde el que se encuentra más a la izquierda. Ejemplo: 6+9*8/2*4-2*3 6 + 72 / 2 * 4 - 2 * 3 6 + 36 * 4 - 2 * 3 6 + 144 - 2 * 3 6 + 144 - 6 150 - 6 144
(6 + 9) * 8 / 2 * (4 - 2) * 3 15 * 8 / 2 * (4 - 2) * 3 15 * 8 / 2 * 2 * 3 120 / 2 * 2 * 3 60 * 2 * 3 120 * 3 360
De la misma manera una fórmula se puede expresar utilizando únicamente paréntesis y los operadores de acuerdo al orden de precedencia para su resolución: 𝑏2 + 𝑎 𝑎𝑐 3 4.5 − 𝑐 − 𝑋+𝑌 567
(b^2+a)/(a*c)/( 3/(X+Y) -(4.5-c^0.5)/567 )
Funciones internas o predefinidas Además de las operaciones básicas como suma, resta, multiplicación, división y potencia, en general, existe otro conjunto de operadores especiales llamados funciones internas que el procesador puede ejecutar, se resuelven primero en orden de precedencia. Por ahora podemos utilizar las siguientes funciones internas aritméticas que el procesador puede interpretar: Nombre función Abs Abs Mod
Tipo arg1
Tipo arg2
Tipo resultado
Significado
entero real entero
entero
entero real entero
valor absoluto valor absoluto resto de la /
Otras funciones internas comunes: Arctan (x) Cos (x) Sen (x) Exp (x) Ln (x) Log 10 (x) Redondeo (x) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 28 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Trunc (x) Cuadrado (x) Raiz (x) Expresión Relacional Concepto de predicado: Dados los valores lógicos verdadero y falso L = {VERDADERO (v), FALSO (f)} y un conjunto E cualesquiera Un predicado es una aplicación de E en el conjunto L Un predicado puede ser verdadero para ciertos elementos de E y falso para otros. Por ejemplo, sea E = {el conjunto de los números naturales} y sobre este conjunto definimos el siguiente predicado P: “x es par”, el predicado P toma el valor verdadero para ciertos valores de x, es decir, para el conjunto {2, 4, 6, ...} mientras que toma el valor falso para otros elementos de E {1, 3, 5, ...}. Si por ejemplo, X e Y son dos variables de tipo entero, podemos definir el predicado P= “X es mayor que Y” denotado como “X > Y” y el conjunto E como el conjunto de pares de números enteros. Para expresar un predicado o condición a menudo se escribe una comparación entre dos valores del mismo tipo, por ejemplo ambos valores de tipo entero, real o caracter. Una comparación tal es llamada predicado elemental o expresión relacional. Para las comparaciones de valores numéricos, caracter y (cadenas de caracteres), los operadores relacionales son: Operador Relacional = < <= > >= <>
Significado igual menor menor o igual mayor mayor o igual distinto
Para la comparación de valores lógicos se usan, sólo, los operadores = y <>. Si A es una variable entera cuyo valor es 3 y tenemos la constante entera 15, la tabla siguiente ejemplifica el cálculo de algunos posibles predicados:
Predicado A >= 15 A = 15 A < 15
Valor FALSO FALSO VERDADERO
Los predicados elementales o expresiones relacionales pueden combinarse, mediante los conectores u operadores lógicos para formar predicados compuestos: Y (conjunción) , O (disyunción) NO (la negación). Para formalizar estos conceptos, sea una condición p y otra q entonces se pueden definir las tablas de verdad para cada operador lógico como sigue: Conjunción (Y lógico) p v
q v
p Yq v
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 29 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
v f f
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
f v f
f f f
Como puede desprenderse de la tabla anterior, la conjunción sólo devuelve un valor de verdad verdadero (V) cuando ambas proposiciones ( p y q) son verdaderas, en cualquier otro caso devuelve falso (F). La disyunción (O inclusivo lógico) Cuando dos condiciones se combinan mediante O la condición resultante es una disyunción. La pregunta es ¿Cuándo una disyunción es verdadera? Cuando una de las proposiciones o las dos son verdaderas. p v v f f
q v f v f
pOq v v v f
q v f v f
p Oe q f v v f
La disyunción exclusiva (Oe exclusivo lógico) p v v f f
Los resultados anteriores pueden generalizarse a condiciones compuestas que contengan más de dos condiciones simples. Negación lógica (NO lógico) La negación se aplica a un predicado (que puede ser simple o compuesto) y su tabla de verdad es la siguiente:
p v f
NO p f v
O sea, que simplemente cambia el valor de verdad del predicado. Es importante notar que una condición que, matemáticamente, se escribe como: A
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Al igual que sucedía con las expresiones aritméticas, si dos operadores de igual prioridad aparecen seguidos la regla de precedencia indica que se evalúan de izquierda a derecha, por ejemplo: p Y q Y r se evaluará como (p Y q ) Y r Ejemplo: Sean X, K y Z tres variables enteras cuyos valores son 1, 3 y 2, respectivamente, y sean los predicados elementales p = “X = 1”, q =“K < 2” y r = “Z = 5”. Veamos, entonces la evaluación de la siguiente condición o predicado compuesto (de ahora en más nos referiremos, cuando hablemos de predicados, a las condiciones). Y sea el siguiente predicado compuesto o expresión lógica: (( X = 1) O (K < 2 )) Y (Z = 5) Entonces para conocer su valor de verdad se puede construir la tabla de verdad correspondiente: p v v v f f f v f
q v v f v f v f f
r v f v v v f f f
pO q v v v v f v v f
(p O q) Y r v f v v f f f f
Para el ejemplo que estamos tratando el resultado final es falso tal cual se señala, remarcado en negrita, en la tabla.. Visto de otra forma más gráfica: (( X = 1) O( K < 2 )) Y (Z = 5) v f v f f
Precedencia de operadores En la siguiente tabla de operadores, la categoría #1 tiene la más alta prioridad de precedencia; la categoría #2 tiene la segunda prelación (jerarquía), y así sucesivamente. Los operadores relacionales tienen la misma prelación. Operadores y Precedencia # Categoría 1. Unarios
2. Algebraicos
3. Relacionales
Operador NO + () ^ *, / +, () = <> > >=
Significado Negación lógica (NOT) + unario - unario Paréntesis Potencia Producto y división (igual jerarquía) Suma y resta (igual jerarquía) Paréntesis Igual Diferente Mayor Mayor o igual
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 31 -
INTRODUCCIÓN A LA INFORMÁTICA
4. Lógicos
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
< <= () No Y O, Oe
Menor Menor o igual Paréntesis Negación lógica Conjunción lógica Disyunción lógica y exclusividad lógica
Concepto de asignación En un ambiente dado, para dar valor a una variable, se utiliza el operador de asignación, cuyo símbolo será La asignación es una operación que coloca un valor en una dirección de la memoria RAM. Utilizaremos como símbolo de asignación (). La dirección de memoria corresponderá a una única variable que se ha definido inicialmente como de un tipo de datos específico y que en la expresión de asignación se coloca al lado izquierdo del símbolo (). El valor que toma la variable es el resultado de la evaluación de la expresión que se coloque al lado derecho del () en la expresión de asignación, tal operación se escribe como: VE en la que: 1. V, es el nombre de la variable a la cual el procesador va a asignarle (darle) el valor de E. 2. , identifica al operador de asignación. 3. E, representa el valor a asignar y puede ser una constante, otra variable, o el resultado de la evaluación de una expresión. Según sea el tipo de V y E, la operación de asignación aritmética se clasifica como entera o real. En particular, diremos que V E es una asignación aritmética entera si: 1. V, es una variable de tipo entero. 2. E, es una constante entera, una variable entera, una expresión entera o una función primitiva que retorna un valor entero. V E es una asignación aritmética real si: 1. V, es una variable de tipo real. 2. E, es una constante real, una variable real, una expresión real o una función primitiva que retorna un valor real. Ejemplos: La acción I 1 significa dar a la variable de nombre I, el valor 1.
Es importante remarcar que el número 1 reemplaza al valor que tuviere I antes de que se ejecute la acción de asignación. Siempre, cuando se asigna a una variable un nuevo valor, el anterior se pierde. La acción A B significa dar a la variable A el valor de la variable B Supongamos, por ejemplo, que el estado del ambiente antes de la ejecución de la acción de asignación anterior era: A contenía el valor 6 y la variable B el valor 7. Gráficamente: A 6
B 7
Luego de la ejecución de la acción primitiva de asignación A B, el resultado es: Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 32 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
A 7
B 7
Note que mientras A pierde su viejo valor B lo mantiene, entonces podemos decir que la asignación es destructiva. La acción A E, con E siendo una expresión, significa dar a la variable A el resultado de la evaluación de la expresión E. Ejemplo: Sea la siguiente acción de asignación SUM 3.5 + 4.0 * (-7.2) Primero se evalúa la expresión, con las reglas dadas para la evaluación de expresiones, luego el resultado - 32.3 se asigna a la variable SUM. La acción I I + x significa incrementar en x el valor de I y guardarlo en la variable I.
donde x puede ser una constante, una variable, el resultado de la evaluación de una expresión o el resultado de la evaluación de una función primitiva. Ejemplo: Sea la siguiente acción de asignación aritmética I I + 1.0 Si antes de ejecutar la acción de asignación el estado del ambiente con respecto a I era que I contenía el valor 5.6, luego de la ejecución de la acción de asignación el estado del ambiente con respecto a I es que esta variable contendrá el valor 6.6. Esquemáticamente: I 5.6 Luego: I 6.6 Asignación caracter V E es una asignación de caracter si: 1. V, es una variable de caracter. 2. E, es una constante de caracter. Asignación Lógica Diremos que V E es una asignación lógica si: 1. V, es una variable lógica. 2. E, es una constante lógica (VERDADERO (v), FALSO (f)), una variable lógica, una expresión relacional o una expresión lógica. Ejemplo: Supongamos que H, T y Q son de tipo lógico, luego de ejecutar las siguientes acciones: H (2 < 5) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 33 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
T H O ( 8 >= 9) Qf Los valores de H, T y Q son v, v, y f respectivamente. Ejemplo: Las siguientes son ejemplos de asignaciones válidas en el ambiente de trabajo: … contador ← 0 fila ← 25 contador ← contador + 1 ValorReal ← 4.5E12 opcion ← 'B' valor ← RaizCuadrada (144) … La abstracción que debe tener de las asignaciones anteriores, y en la memoria RAM, debe ser la siguiente representación gráfica y suponiendo que la variable contador estaba en cero: fila contador ValorReal opcion valor 25 1 4.5e12 „B‟ 12.0 Supongamos que a continuación efectuamos las siguientes operaciones de asignación con las mismas variables anteriores: … fila ← fila + contador contador ← (contador + 1) * fila ValorReal ← - ValorReal opcion ← 'w' valor ← valor * valor … En memoria RAM quedaría: fila contador ValorReal opcion valor 26 52 -4.5e12 „w‟ 144.0 Algoritmos y programación Es un conjunto pre escrito de instrucciones, sentencias, acciones, estructuras o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien lo ejecute. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Características del algoritmo preciso, tiene que indicar el orden de realización en cada paso. definido, es decir, si el algoritmo se prueba dos veces, en estas dos pruebas, se debe obtener el mismo resultado. finito, es decir, que el algoritmo tiene que tener un número determinado de pasos. Debe producir un resultado en un tiempo finito. Tiene principio y fin. sus acciones son primitivas. Si es necesario se recurre al refinamiento sucesivo para que sus acciones sean primitivas. las acciones no son ambiguas para el procesador. Es mejorable o evolutivo. Se pueden hacer varios algoritmos distintos que resuelvan el mismo problema. Resuelve un problema lo más genérico posible. Al modificar los datos se modifican los resultados. El concepto de programación estructurada como un enfoque científico a la programación de computadoras lo introdujeron E.W.Dijkstra y C.A.R.Hoare a Fines de los años sesentas. Mediante el análisis matemático de la estructura de los programas, ellos mostraron que podemos evitar muchos errores de diseño de programas mediante un enfoque sistemático a la programación. Es fundamental en la programación estructurada el diseño adecuado de los algoritmos y el manejo de las estructuras de datos. Teorema Fundamental de la Programación Estructurada, [C. Böhm, G. Jacopini]: “Todo programa propio se puede Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 34 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
escribir utilizando únicamente las estructuras de control secuencial, condicional e iterativa” Un programa propio es aquel que: • Tiene un único punto de entrada y un único punto de salida. • Existen caminos desde la entrada hasta la salida que pasan por todas las partes del programa. • Todas las instrucciones son ejecutables y no existen bucles sin fin. La programación estructurada es una forma de escribir programas de ordenador (programación de computadora) de manera clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN). Ventajas de la programación estructurada 1. Los programas son más fáciles de entender, ya que pueden ser leídos de forma secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los bloques de código para entender la lógica. 2. La estructura del programa es clara, puesto que las instrucciones están más ligadas o relacionadas entre sí. 3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa ("debugging") se facilita debido a la estructura más visible, por lo que los errores se pueden detectar y corregir más fácilmente. 4. Reducción de los costos de mantenimiento de los programas. 5. Programas más sencillos y más rápidos (ya que es más fácil su optimización). 6. Los bloques de código son auto explicativos, lo que facilita la documentación. 7. Los GOTO se reservan para construir las instrucciones básicas. Aunque no se usan de forma directa, por estar prohibida su utilización, están incluidas implícitamente en las instrucciones de selección e iteración. 8. Un programa escrito de acuerdo a estos principios no solamente tendrá una mejor estructura sino también una excelente presentación. 9. La programación estructurada ofrece estos beneficios, pero no se la debe considerar como una panacea ya que el desarrollo de programas es, principalmente, una tarea de dedicación, esfuerzo y creatividad. En realidad, cuando se programa hoy en día (inicios del siglo XXI) se suelen utilizar, tanto las técnicas de programación estructurada como las de programación modular, de forma conjunta y por lo tanto es posible que cuando uno haga referencia a la programación estructurada esté considerando también las técnicas de modularización. Un método un poco más sofisticado es la programación por capas, en la que los módulos tienen una estructura jerárquica en la que se pueden definir funciones dentro de funciones o de procedimientos. Resolución de problemas de programación La resolución de un problema mediante un ordenador consiste en el proceso que a partir de la descripción de un problema, expresado habitualmente en lenguaje natural y en términos propios del dominio del problema, permite desarrollar un programa que resuelva dicho problema. Este proceso exige los siguientes pasos: Análisis del problema. Diseño o desarrollo de un algoritmo. Transformación del algoritmo en un programa (codificación). Ejecución y validación del programa. Los dos primeros pasos son los más difíciles del proceso. Una vez analizado el problema y obtenido un algoritmo que lo resuelva, su transformación a un programa de ordenador es una tarea de mera traducción al lenguaje de programación deseado. Análisis del problema Cuando un usuario plantea a un programador un problema a resolver mediante su ordenador, por lo general ese usuario tendrá conocimientos más o menos amplios sobre el dominio del problema, pero no es habitual que tenga conocimientos de informática. Por ejemplo, un contable que necesita un programa para llevar la contabilidad de una empresa será un experto en contabilidad (dominio del problema), pero no tiene por qué ser experto en programación. Del mismo modo, el informático que va a resolver un determinado problema puede ser un experto programador, pero en principio no tiene por qué conocer el dominio del problema; siguiendo el ejemplo anterior, el informático que hace un programa no tiene por qué ser un experto en contabilidad. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 35 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el programador necesita de la experiencia del experto del dominio para entender el problema. Al final, si se quiere llegar a una solución satisfactoria es necesario que: El problema esté bien definido con el máximo detalle Las especificaciones de las entradas y salidas del problema, deben ser descritas también en detalle: ¿Qué datos son necesarios para resolver el problema? ¿Qué información debe proporcionar la resolución del problema? Diseño del algoritmo Un algoritmo consiste en una especificación clara y concisa de los pasos necesarios para resolver un determinado problema, pero para poder diseñar algoritmos es necesario disponer de una notación, que llamaremos „notación algorítmica‟, que permita: Describir las operaciones puestas en juego (acciones, instrucciones, comandos,...) Describir los objetos manipulados por el algoritmo (datos/informaciones) Controlar la realización de las acciones descritas, indicando la forma en que estas se organizan en el tiempo Para poder describir cualquier tipo de acción de las que intervienen en un algoritmo, diversos autores proponen el uso de un conjunto de construcciones lógicas (secuencia, decisión e iteración) con las que es posible escribir cualquier programa. Lo que sigue a continuación es la descripción de las diferentes construcciones disponibles para el diseño de algoritmos. Acciones elementales Se entiende por acciones elementales aquellas que el ordenador es capaz de realizar y que serán de dos tipos: Aritmético – lógicas: Operaciones que, a partir de unos determinados datos, realizan un cálculo aritmético (suma, resta, multiplicación,...) o un cálculo lógico (mayor que, menor que, igual que,...).Las primeras devuelven un valor numérico (4, -5.67,...) y las segundas un valor lógico (verdadero o falso). De entrada – salida: Acciones que permiten capturar datos para su posterior tratamiento (las de entrada) y guardar los resultados de dicho tratamiento (las de salida). Instrucción de escritura en pantalla Para transferir valores de constantes, variables, expresiones algebraicas, o expresiones delimitadas como cadenas de caracteres de la memoria del computador a la pantalla, emplearemos la instrucción: Escribir , en su forma por defecto. Esta instrucción, Escribir, insertará datos en el flujo de salida hacia la pantalla; es decir despliega o muestras los valores, numéricos o de texto, que se le indiquen, en pantalla. Instrucción de lectura desde teclado Para transferir datos desde el teclado a la memoria RAM de la computadora utilizaremos la instrucción: Leer. La instrucción Leer en tiempo de ejecución detiene al computador y espera a que se digite un valor, el valor, el cual puede ser cualquier secuencia de caracteres ASCII terminados con la tecla de
, será almacenado en la dirección de memoria de la variable que utilice la instrucción, después de esto el control lo devuelve a la siguiente instrucción del programa o algoritmo. Solamente por efectos de presentación en pantalla, debería ir previamente acompañada de una instrucción de impresión en pantalla, para nuestro caso Escribir, donde se le mostrará al usuario lo que debe digitar a continuación, por ejemplo: Escribir 'Digite un número: ' Leer N La instrucción Escribir insertará en el flujo de salida hacia la pantalla la frase que está entre delimitadores y hará que la despliegue. A continuación el algoritmo seguirá secuencialmente en la instrucción del Leer N, el algoritmo se detendrá, se verá el cursor titilando, en espera de que el usuario digite, en este caso números; la entrada se terminará cuando se digite la tecla . Las operaciones de entrada/salida Un algoritmo para que pueda trabajar, entre otras cosas, debe poder operar los datos que se proporcionan mediante un dispositivo de entrada y poder enviar los resultados después de procesados a un dispositivo de salida. En la forma estándar o por defecto el dispositivo o archivo de entrada será el teclado y el dispositivo o archivo de salida la pantalla o monitor. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 36 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
La estructura de control secuencial Las instrucciones se siguen en una secuencia fija. Es decir que las instrucciones se ejecutan de arriba hacia abajo. Instrucción 1 Instrucción 2 … Instrucción n Los algoritmos que tengan únicamente acciones de asignación y acciones de entrada y salida, se denominan lineales o secuenciales. Para el diseño del algoritmo se podrán utilizar las siguientes herramientas: el pseudocódigo, el diagrama estructurado de Nassi - Shneiderman o el diagrama de flujo. Ejemplo: Diseñe un algoritmo que dado el radio R en centímetros calcule la longitud de la circunferencia y el área del circulo.
Pseudocódigo
Algoritmo primero Constante PI = 3.1415 Variable Real: R, L, A Inicio Leer R L ← 2*PI*R A ← PI*R^2 Escribir L, A Fin
Diagrama Nassi-Shneiderman
Diagrama de flujo
Leer R
L ← 2*PI*R
A ← PI*R^2
Escribir L, A
El algoritmo así escrito debe ir documentado en lo que se denomina el ambiente del problema allí se informará de todos los detalles de los objetos del ambiente. Los objetos pueden ser de entrada, de salida, de entrada salida, intermedia o de trabajo de acuerdo a si el objeto está en la entrada, la salida, en el proceso o en una combinación de ellas. También en el ambiente se detalla el tipo de dato del objeto y alguna descripción que ayude a comprender mejor el Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 37 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
problema. Para el ejemplo anterior: Ambiente Objeto PI R
L
A
Descripción Constante numérica real, intermedia, representa el número π Variable numérica real, de entrada, representa el radio del círculo, su unidad es el centímetro. Variable numérica real, de salida, representa la longitud de la circunferencia, su unidad es el centímetro. Variable numérica real, de salida, representa el área del círculo, su unidad es el centímetro cuadrado.
Ejemplos de algoritmos con instrucciones secuenciales El siguiente ejemplo presenta en pantalla un texto compuesto de varias líneas, contiene acciones de salida únicamente. Algoritmo1 Inicio Escribir (" ... Prevalece la superstición patética de que sabiendo más ") Escribir ("y más hechos es posible llegar a un conocimiento de la ") Escribir ("realidad. De este modo se descargan en la cabeza de los ") Escribir ("estudiantes centenares de hechos aislados e inconexos todo ") Escribir ("su tiempo y toda su energía se pierden en aprender cada vez ") Escribir ("más hechos, de manera que les queda muy poco lugar para") Escribir ("ejercitar el pensamiento. Es cierto que el pensar carente ") Escribir ("de un conocimiento adecuado de los hechos sería vacío y ") Escribir ("ficticio pero la 'información' sin teoría puede representar ") Escribir ("un obstáculo para el pensamiento tanto como su carencia. ... ") Escribir (" ") Escribir (" ERICH FROMM ") Escribir (" 'EL MIEDO A LA LIBERTAD' ") Fin Ejemplo de diferentes agrupaciones con paréntesis en expresiones algebraicas escriba expresión algebraica para cada caso y calcúlela manualmente, contiene acciones de salida únicamente. Algoritmo2 Inicio Escribir ("1.0 + 2.0 * 3.0 / 4.0 = ", 1.0 + 2.0 * 3.0 / 4.0) Escribir ("( 1.0 + 2.0 * 3.0 ) / 4.0 = ", (1.0 + 2.0 * 3.0) / 4.0) Escribir ("1.0 + ( 2.0 * 3.0 ) / 4.0 = ", 1.0 + (2.0 * 3.0) / 4.0) Escribir ("( 1.0 + 2.0 ) * 3.0 / 4.0 = ", (1.0 + 2.0) * 3.0 / 4.0) Escribir ("(1.0 + 2.0) * (3.0 / 4.0) = ", (1.0 + 2.0) * (3.0 / 4.0)) Escribir ("1.0 + ( 2.0 * 3.0 / 4.0 ) = ", 1.0 + (2.0 * 3.0 / 4.0) ) Escribir ("1.0 + ( (2.0 * 3.0)/ 4.0) = " , 1.0 + ( (2.0 * 3.0) / 4.0) ) Fin El siguiente algoritmo calcula el volumen de un cilindro, a partir de la lectura del radio de la base y su altura por teclado. Algoritmo3 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 38 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Constante PI = 3.14159 Variable Real: radio, altura, volumen Inicio Escribir (" CALCULO DEL VOLUMEN DE UN CILINDRO ") Escribir ("────────────────────────────────────") Escribir ("Digite el radio de la base del cilindro en centímetros: ") Leer (radio) Escribir ("Digite la altura del cilindro en centímetros: ") Leer (altura) volumen ← PI * radio ^2 * altura Escribir ("El volumen es de ", volumen, " centímetros cúbicos.") Escribir("───────────────────────────────") Fin Se debe digitar por teclado una cantidad en pesos ($) la cual corresponde al Impuesto al Valor Agregado (IVA) cancelado por un cliente en un almacén al cancelar una factura. A continuación digitar por teclado el porcentaje (%) que se aplicó a la factura. Calcular el total cancelado en la factura y cuánto vale en pesos $ el(los) artículo(s) comprado(s), es decir sin IVA.
Ejemplo de operaciones de división en expresiones algebraicas. Algoritmo4 Variable Entero: a, b Inicio Escribir ("Digite un número entero: ") Leer (a) Escribir ("Digite otro número entero: ") Leer (b) Escribir ("División entera = ", a DIV b) Escribir ("División real = ", a / b) Escribir ("Residuo división= ", a MOD b) Fin El siguiente código presenta la evaluación de la expresión algebraica: 2a - 3(b + 2a) + 3X [ X - 2(Y -2) ], los valores reales para X y Y son leídos desde teclado. Los valores para las constantes son: a=2 y b=-3 Algoritmo5 Variables Entero: a = 2, b = -3 Real: x, y Inicio Escribir (" Digite un valor real para X: ") Leer (x) Escribir (" Digite un valor real para Y: ") Leer (y) Escribir ("2a-3(b+2a)+3X[X-2(Y-2)] = ", 2*a-3*(b+2*a)+3*x*(x-2*(y-2)) ) Fin Se lee un número por teclado y se redondea a la decena más próxima. Algoritmo7 Variables Entero: numero Inicio Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 39 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Escribir ("Digite un número entero para redondearlo:") Leer (numero) numero ← numero + 5 numero ← numero DIV 10 numero ← numero * 10 Escribir (numero) Fin El siguiente algoritmo evalúa la expresión cuadrática: Y = ax²-bx+c para valores de los coeficientes: a, b, c, y de la variable x pedidos por teclado. Algoritmo8 Variables Real: a, b, c, x, y Inicio Escribir ("Digite el coeficiente a: ") Leer (a) Escribir ("Digite el coeficiente b: ") Leer (b) Escribir ("Digite el coeficiente c: ") Leer (c) Escribir ("Digite la variable X: ") Leer (x) y←a*x*x-b*x+c Escribir ("El valor de la variable Y es ", y) Fin Se leen cadenas de caracteres desde teclado y luego se muestran en pantalla. Adicionalmente se realiza operación de asignación de cadenas. Algoritmo9 Variables Cadena: nombre1, nombre2 Inicio Escribir ( "Digite una cadena:") LeerCadena (nombre1) Escribir (nombre1) Escribir ( "Digite una cadena: ") LeerCadena (nombre2) Escribir (nombre1, " ", nombre2) nombre1 ← nombre2 Escribir ( "Variable nombre1 = ", nombre1 ) Escribir ( "Variable nombre2 = ", nombre2 ) Fin. Se utilizan funciones matemáticas incorporadas. Algoritmo10 Variables Entero: a, b Real: x Inicio Escribir ("Digite un entero: ") Leer (a) Escribir ("Digite entero negativo: ") Leer (b) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 40 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Escribir ( a, " elevado a la ", b, " es ", a^b ) Escribir ("Valor absoluto de b es ", ABS(b) ) Escribir ("Digite un número real positivo con decimales: ") Leer (x) Escribir ("Raiz cuadrada de x por b más a es igual a ", Raiz(x*b+a)) Escribir ("Seno de x igual a ", Seno(x)) Escribir ("Coseno de x es " , Coseno(x)) Escribir ("Parte Fraccionaria de x es ", Fraccion(x)) Escribir ("Parte entera de x es ", Entera(x)) Fin. Conversión de escala termométrica centígrada a Fahrenheit. Algoritmo11 Variables Real: Centigrados, Fahrenheit Inicio Escribir (" Conversión grados centígrados a fahrenheit ") Escribir (" ───────────────────────────────── ") Escribir ("Digite grados centígrados: ") Leer (Centigrados) Fahrenheit ← 9.0 / 5.0 * Centigrados + 32 Escribir ("La temperatura en fahrenheit es: ", Fahrenheit ) Fin Algoritmo12 Variable Real: IVAenPesos, PorcentajeIVA, TotalFactura, TotalCompraSinIVA Inicio Escribir ("Digite cantidad cancelada por concepto de IVA $:") Leer (IVAenPesos) Escribir ("Digite porcentaje correspondiente al IVA: ") Leer (PorcentajeIVA) TotalFactura ← IVAenPesos / (PorcentajeIVA/100) TotalCompraSinIVA ← TotalFactura - IVAenPesos Escribir ("Total compra sin IVA = ", TotalCompraSinIVA) Escribir ("IVA = ", IVAenPesos) Escribir ("-------------------------------------------") Escribir ("Total Cancelado = ", TotalFactura) Fin La estructura de control condicional En programación, una sentencia condicional es una instrucción o grupo de instrucciones que se pueden ejecutar o no en función del valor de una condición. Los tipos más conocidos de setencias condicionales son el SI..ENTONCES (if..then), el SI..ENTONCES..SI NO (if..then..else) y el SEGÚN (case o switch), aunque también podríamos mencionar al lanzamiento de errores como una alternativa más moderna para evitar el "anidamiento" de sentencias condicionales. Las sentencias condicionales constituyen, junto con los bucles, los pilares de la programación estructurada, y su uso es una evolución de una sentencia en lenguaje ensamblador que ejecutaba la siguiente línea o no en función del valor de una condición. Sentencias condicionales simples La estructura de las sentencias condicionales simples (Si...Entonces…FinSi y Si...Entonces...Si No… FinSi) se mantiene en casi todos los lenguajes de programación, y se representa: Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 41 -
INTRODUCCIÓN A LA INFORMÁTICA
Pseudocódigo
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Diagrama Nassi-Shneiderman
…. Si Entonces Instrucción(es) FinSi ….
Diagrama de flujo
F
Exp.Lógica
V
Instruccione(s)
…. Si Entonces Instrucción(es) Afirmativa(s) SiNo Instrucción(es) Negativa(s) FinSi ….
F
Instruccione(s) Negativa(s)
Exp.Lógica
V
Instruccione(s) Afirmativa(s)
La palabra Entonces (then) en algunos lenguajes es obligatoria (Pascal), en otros no existe (como en C) y en unos terceros es opcional (como Basic o FoxPro). Sentencia condicional SEGÚN Un caso especial de instrucción condicional o alternativa es la estructura alternativa generalizada. Se utiliza cuando el selector es de tipos ordinal como de caracter o enteros y adicionalmente hay múltiples condiciones a cumplir. Esta instrucción proporciona una forma clara de bifurcación múltiple.
Pseudocódigo …. Según Selector hacer v1: Instrucción(es) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 42 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
v1: Instrucción(es) ………………….. vn: Instrucción(es) de otro modo v1: Instrucción(es) Finsegun … Diagrama NS
Diagrama de flujo
Nota: la palabra reservada SiNo, es equivalente a sustituirlo por de otro modo Donde la variable selector es un entero al igual que v1, v2... vn y donde la sentencia que se ejecutará dependerá del valor que tome la variable de selector (que reemplaza la expresión lógica). Si la variable de selector es igual a v1 se ejecutará el Cuerpo de instrucciones1, si es igual a v2 se ejecutará Cuerpo de instrucciones 2 y así sucesivamente. En caso de que no coincida con ninguno de los valores especificados se ejecutará Cuerpo de instrucciones SiNo. Ejemplos de algoritmos con instrucciones condicionales simples El siguiente ejemplo utiliza la instrucción selectiva Si, de la forma más elemental en Decisión simple. Algoritmo SI_1 Variable Entero: numero Inicio Escribir ("Digite un número: ") Leer (numero) Si (numero > 100) entonces Escribir ("Se digitó un número mayor a 100") FinSi Fin El siguiente algoritmo utiliza la instrucción selectiva Si, en decisión simple. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 43 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Algoritmo SI_2 Variables Entero: numero Inicio Escribir ("Digite un número: ") Leer (numero) Si (numero > 100) entonces numero ← numero + 10 Escribir("Se digitó un número mayor a 100 ") Escribir("y a continuación se incrementa en 10 para dar ") FinSi Escribir (numero) Fin. El siguiente algoritmo utiliza la instrucción selectiva Si en su forma completa y de la forma más elemental, es decir sin bloques de código delimitados. Algoritmo SI_3 Variables Entero: numero Inicio Escribir ("Digite un número: ") Leer (numero) Si (numero > 100) entonces Escribir ("Se digitó un número mayor a 100") Si_no Escribir ("Se digitó un número menor o igual a 100") FinSi Fin. siguiente algoritmo permite leer desde el teclado dos números y mostrar comentarios que digan: "los dos son positivos" o "los dos son negativos" o "tienen diferente signo". Algoritmo SI_4 Variables Real: a, b Inicio Escribir ("Digite real: ") Leer (a) Escribir ("Digite real: ") Leer (b) Si ( a > 0 Y b > 0) entonces Escribir("LOS DOS SON POSITIVOS") Si_no Si (a < 0 Y b < 0) entonces Escribir("LOS DOS SON NEGATIVOS") Si_no Escribir("TIENEN DIFERENTE SIGNO") FinSi FinSi Fin. El siguiente algoritmo utiliza la instrucción selectiva Si en su forma completa de decisión múltiple. Algoritmo SI_5 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 44 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Variables Entero: numero Inicio Escribir ("Digite un número: ") Leer (numero) Si (numero > 100) entonces Escribir ("Se digitó un número mayor a 100 ") numero ← numero + 10 Escribir ("y a continuación se incrementa en 10 para dar ") Si_no Escribir ("Se digitó un número menor o igual a 100 ") numero ← numero - 10 Escribir ("y a continuación se decrementa en 10 para dar") FinSi Escribir (numero) Fin. El siguiente algoritmo calcula el número medio entre tres enteros, no es el promedio. Algoritmo SI_6 Variables Entero: a, b, c Inicio Escribir ("Digite entero: ") Leer (a) Escribir ("Digite entero: ") Leer (b) Escribir ("Digite entero: ") Leer (c) Si ( (b
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Escribir (b, " es el del medio") SiNo Escribir (c, " es el del medio") FinSi FinSi Fin. Se desarrolla un algoritmo el cual lee desde teclado los datos de una persona así: nombre, edad, sexo y estado civil. Se debe imprimir el nombre solo si corresponde a un hombre casado menor de 30 años o a una mujer soltera menor de 50 años. Algoritmo SI_8 Variables Entero: Edad Caracter: Sexo, EstadoCivil Caadenar: Nombre Inicio Escribir ("Digite el nombre del encuestado: ") Leer (Nombre) Escribir ("Sexo (M/F): ") Leer (Sexo) Escribir ("Edad: ") Leer (Edad) Escribir ("Estado Civil (Casado, Soltero, Otro): ") Leer (EstadoCivil) Si ( ( Sexo=='M' Y Edad<30 ) O ( Sexo=='F' Y Edad<50 ) ) entonces Escribir (Nombre, " Cumple una de las condiciones") SiNo Escribir ("No cumple ninguna de las condiciones solicitadas") FinSi Fin. Se debe digitar por teclado un entero de hasta cuatro dígitos, con el siguiente limitante, que el usuario debe tener en cuenta al digitar: los dos primeros (00 al 23) significan las horas en un reloj de 24 horas, y los dos de la derecha representan minutos (00 al 59). A continuación se hace aparecer la hora en el formato HH:MM, debiendo aparecer los cuatro dgitos aún cuando seán ceros. Ejemplo: entrada: 904 debe producir en pantalla 09:04. Algoritmo SI_9 Variables Entero: hora, minuto Inicio Escribir ("Digite entero de hasta cuatro dígitos: ") Leer (hora) minuto ← hora MOD 100 hora ← hora / 100 Si ( hora < 10 Y minuto < 10 ) entonces Escribir ("0", hora, ":", "0", minuto) Si_no Si ( hora < 10 Y minuto >= 10 ) entonces Escribir ("0", hora, ":", minuto) Si_no Si ( hora > 10 Y minuto < 10 ) entonces Escribir (hora, ":", "0", minuto) Si_no Si ( hora > 10 Y minuto >= 10 ) entonces Escribir (hora, ":", minuto) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 46 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
FinSi FinSi FinSi FinSi Fin. Dados dos enteros leídos desde teclado, ¿uno es divisor del otro? Algoritmo SI_10 Variables Entero: x, y Inicio Escribir ("Digite separados por un espacio dos números enteros: ") Leer (x, y) Si (x MOD y == 0) entonces Escribir (y, " es divisor de " , x) SiNo Si (y MOD x == 0) entonces Escribir (x, " es divisor de ", y) SiNo Escribir ("No son divisores entre si") FinSi FinSi Fin. Se calcula el valor de Y en función de X, teniendo en cuenta los siguientes intervalos: Y ← X^2 - 4 si X<4 Y ← X^3 + 2X - 31 si X>4 y X<=10 Y ← 3X^2 - 10.5X - 3 si X>10 Algoritmo SI_11 Variables Real: x, y Inicio Escribir ("Digite valor de la variable independiente X: ") Leer (x) Si (x <= 4) entonces y ← x*x - 4 SiNo Si (x <= 10) entonces y ← x^3 + 2*x - 31 SiNo y ← 3*x*x - 10.5*x - 3 FinSi FinSi Escribir ("Variable dependiente Y = ", y) Fin. Un capital Co, está colocado a un tipo de interes I. Al término de dos años, calcular el capital Final Cf y decir si es el doble o mayor del inicial. Sabiendo que Cf = Co (1+i), donde n es el periodo en este caso dos años. Algoritmo SI_12 Variables Real: Co, // capital inicial Cf, // capital Final I // interes Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 47 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Entero: n // número de periodos Inicio Escribir ("Capital inicial $ ") Leer (Co) Escribir ("Interes en % por periodo de tiempo: ") Leer (I) I ← I /100 Cf ← Co * (1+I) * (1+I) Escribir ("Capital Final = $ ", Cf) Si (Cf >= 2*Co) entonces Escribir ("El Capital es mayor o igual al doble " ) SiNo Escribir ("El Capital No se duplicó " ) FinSi Fin. Dados tres valores numéricos por teclado, a, b c: se imprime el mayor, el menor y se calcula su promedio. Algoritmo SI_13 Variables Real: a, b, c, menor, mayor, promedio Inicio Escribir ("Digite valor para a: ") Leer (a) Escribir ("Digite valor para b: ") Leer (b) Escribir ("Digite valor para c: ") Leer (c) Si (a > b Y a > c) entonces Escribir ("Mayor es ", a) SiNo Si (b > a Y b > c) entonces Escribir ("Mayor es ", b) SiNo Escribir ("Mayor es " , c) FinSi FinSi Si (a < b Y a < c) entonces Escribir (" Menor es " , a) SiNo Si (b < a Y b < c) entonces Escribir ("Menor es ", b) SiNo Escribir ("Menor es " , c) FinSi FinSi promedio ← (a + b + c) / 3 Escribir ("Promedio de los tres números = " , promedio) Fin. Dado el número de un mes, digitado desde teclado, y si el año es bisiesto, se determina el nombre y el número de días del mes correspondiente. Algoritmo SI_14 Variables Entero: Mes, NumeroDias Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 48 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Cadena: NombreMes Caracter: Bisiesto Escribir ("Digite el número de un mes(1 - 12): ") Leer (Mes) Si (Mes = 1) entonces NombreMes ← " Enero " NumeroDias ← 31 Si_no Si (Mes = 2) entonces NombreMes ← " Febrero " Escribir ("¿Es el año bisiesto? (S/N): ") Leer (Bisiesto) Si (Bisiesto = 'S' O Bisiesto = 's') entonces NumeroDias ← 29 Si_no NumeroDias ← 28 FinSi Si_no Si (Mes = 3) entonces NombreMes ← " Marzo " NumeroDias ← 31 Si_no Si (Mes = 4) entonces NombreMes ← " Abril " NumeroDias ← 30 Si_no Si (Mes = 5) entonces NombreMes ← " Mayo " NumeroDias ← 31 Si_no Si (Mes = 6) entonces NombreMes ← " Junio " NumeroDias ← 30 Si_no Si (Mes = 7) entonces NombreMes ← " Julio " NumeroDias ← 31 Si_no Si (Mes = 8) entonces NombreMes ← " Agosto " NumeroDias ← 31 Si_no Si (Mes = 9) entonces NombreMes ← " Septiembre " NumeroDias ← 30 Si_no Si (Mes = 10) entonces NombreMes ← " Octubre " NumeroDias ← 31 Si_no Si (Mes = 11) entonces NombreMes ← " Noviembre " NumeroDias ← 30 Si_no Si (Mes = 12) entonces Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 49 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
NombreMes ← " Diciembre " NumeroDias ← 31 Si_no NombreMes ← " Error " FinSi FinSi FinSi FinSi FinSi FinSi FinSi FinSi FinSi FinSi FinSi FinSi Si ( Mes<1 O Mes>12 ) entonces Escribir ("Se equivocó al digitar número del 1 al 12") Si_no Escribir (NombreMes, " tiene ", NumeroDias, " días") FinSi Fin. El siguiente algoritmo permite leer la hora, minutos y segundos en un instante de tiempo y a continuación presenta la hora un segundo después. Algoritmo SI_15 Variables Entero: hora, minuto, segundo Cadena: AmPm Inicio Escribir ("Digite hora(0 -23): ") Leer (hora) Escribir ("Digite minutos (0-59): ") Leer (minuto) Escribir ("Digite segundos (0-59): ") Leer (segundo) Escribir ("Digite AM o PM: ") Leer (AmPm) segundo ← segundo + 1 Si (segundo = 60) entonces segundo ← 0 minuto ← minuto + 1 Si (minuto = 60) entonces minuto ← 0 hora ← hora + 1 Si (hora = 12) entonces Si (AmPm = "AM") AmPm ← "PM" SiNo AmPm ← "AM" FinSi FinSi Si (hora = 13) entonces hora ← 1 FinSi Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 50 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
FinSi FinSi Si ( hora < 10 ) Escribir ( "0" ) FinSi Escribir(hora, ":") Si ( minuto < 10 ) Escribir ( "0" ) FinSi Escribir (minuto, ":") Si ( segundo < 10 ) Escribir ( "0" ) FinSi Escribir (segundo, " ", AmPm) Fin. Una pizzería vende pizzas de tres tamaños: pequeña, mediana y grande. Se determina el precio de venta al público (PVP). El PVP se determina así: + Un costo fijo igual para todos los tamaños + Un costo variable, dependiente del tamaño, el cual se determina multiplicando un factor, obtenido empíricamente, para cada tamaño por su correspondiente costo fijo. ------------------------------------------------------------------= Costo de cada pizza * 20% utilidad sobre cada pizza ------------------------------------------------------------------= Precio de Venta al Público En el algoritmo se lee inicialmente el tamaño de la pizza y a continuación aparece el PVP correspondiente. Se supone un costo fijo de $1000 para cada uno de los tamaños y unos factores para el cálculo del costo variable de: pequeña=1.5, mediana=2.0 y grande=3.0. Algoritmo SI_16 Constante Real: CostoFijo = 1000, FactorPequena = 1.5, FactorMediana = 2.0, FactorGrande = 3.0 Variables Real: CostoVariable, PVP Carácter: Tamaño Inicio Escribir ("Tipos de pizza: Pequeña Mediana Grande") Escribir ("Digite inicial de tamaño de pizza a comprar: ") Leer (Tamaño) Si (Tamaño = 'P' O Tamaño = 'p') entonces CostoVariable ← FactorPequena * CostoFijo SiNo Si (Tamaño = 'M' O Tamaño = 'm') entonces CostoVariable ← FactorMediana * CostoFijo SiNo CostoVariable ← FactorGrande * CostoFijo FinSi FinSi PVP ← (CostoFijo + CostoVariable) * 1.2 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 51 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Escribir ("Precio de Venta al Público = $ " , PVP) Fin. Se lee desde teclado el nombre de un empleado, su salario básico por hora y el número de horas trabajadas durante una semana. Se calcula el salario neto, teniendo en cuenta si el número de horas trabajadas a la semana es mayor a 48, esas horas de más se consideran como extras y tienen un 35% de recargo. Al Final se imprime el nombre y el salario neto a cancelar al empleado. Algoritmo SI_17 Variables Cadena: NombreEmpleado Real: BasicoPorHora, HorasSemanales, HorasExtras, SalarioSemanal Inicio Escribir ("Digite el nombre y apellido del empleado: ") Leer (NombreEmpleado) Escribir ("Digite el salario básico por hora: ") Leer (BasicoPorHora) Escribir ("Digite el número de horas laboradas en esta semana: ") Leer (HorasSemanales) Si (HorasSemanales <= 48) entonces SalarioSemanal ← BasicoPorHora * HorasSemanales SiNo HorasExtras ← HorasSemanales - 48 SalarioSemanal ← BasicoPorHora*48 + HorasExtras*BasicoPorHora*1.35 FinSi Escribir (NombreEmpleado, " devengará esta semana $", SalarioSemanal) Fin. Se desarrolla un algoritmo para leer desde el teclado el nombre de un empleado, su salario básico por mes y el número de horas trabajadas durante un periodo de un mes. Se calcula el salario bruto, la retención en la fuente y el salario neto. Para el cálculo de la retención en la fuente se tiene en cuenta lo siguiente: Para salarios brutos hasta $590,000 no hay retención en la fuente mayores a $590,000 y menores o iguales a $1'000,000 retención del 5% desde $1'00,001 y menores o iguales a $2'000,00 retención del 8% mayores a $2'000,000 retención del 12% Algoritmo SI_18 Variables Carácter: NombreEmpleado Real: BasicoMensual, HorasMensuales, ReteFuente, SalarioBruto, SalarioNeto, BasicoHora Inicio Escribir ("Digite el nombre y apellido del empleado: ") Leer (NombreEmpleado) Escribir ("Digite el salario básico Mensual: ") Leer (BasicoMensual) Escribir ("Digite el número de horas laboradas en este mes: ") Leer (HorasMensuales) BasicoHora ← BasicoMensual / 30 / 8 SalarioBruto ← BasicoHora * HorasMensuales Si (SalarioBruto <= 590000) entonces ReteFuente ← 0 SiNo Si (SalarioBruto <= 100000) entonces ReteFuente ← SalarioBruto*5.0/100 SiNo Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 52 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Si (SalarioBruto <= 200000) entonces ReteFuente ← SalarioBruto*8.0/100 SiNo ReteFuente ← SalarioBruto*12.0/100 FinSi FinSi FinSi SalarioNeto ← SalarioBruto - ReteFuente Escribir ("Nombre Empleado: " , NombreEmpleado) Escribir ("Salario Básico mensual: ", BasicoMensual) Escribir ("Salario Básico por hora: ", BasicoHora) Escribir ("Horas trabajadas en el mes: ", HorasMensuales) Escribir ("Salario Bruto: ", SalarioBruto) Escribir("Retención en la fuente: ", ReteFuente) Escribir ("Salario Neto A cancelar: $ ", SalarioNeto) Fin. Se calcula el jornal a pagar, a destajo, a un trabajador, el cual labora en una empresa que tiene dos turnos: diurno y nocturno. La tarifa por hora diurna es de $1,000 y la nocturna de $1,500. Si es festivo la tarifa se incrementará en $500 el turno diurno y en $1,000 el nocturno. Algoritmo SI_19 Variables Cadena: NombreTrabajador Real: Jornal, Horas Caracter: Turno, Festivo Inicio Escribir ("Digite el nombre y apellido del trabajador: ") Leer (NombreTrabajador) Escribir ("Turno Diurno o Nocturno (D/N): ") Leer (Turno) Escribir ("¿Es festivo? (S/N): ") Leer (Festivo) Escribir ("Número de horas laboradas en el día: ") Leer (Horas) Si (Turno = 'D' O Turno = 'd') entonces Si (Festivo = 'S' O Festivo = 's') entonces Jornal ← Horas * (1000 + 500) SiNo Jornal ← Horas * 1000 FinSi SiNo Si (Festivo = 'S' O Festivo = 's') Jornal ← Horas * (1500 + 1000) SiNo Jornal ← Horas * 1500 FinSi FinSi Escribir ("Jornal a cancelar a ", NombreTrabajador, " $", Jornal) Fin. Se lee el nombre, edad, sexo y estado civil de una persona y luego se muestra en pantalla si esta persona es mujer mayor de 40 años y casada, si es un menor de edad, si es menor de edad casado y si es un hombre mayor de 60 años y soltero. Algoritmo SI_20 Variables Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 53 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Cadena: Nombre Entero: Edad Caracter: Sexo, EstadoCivil Inicio Escribir ("Digite el nombre del encuestado: ") Leer (Nombre) Escribir ("Sexo (M/F): ") Leer (Sexo) Escribir ("Edad: ") Leer (Edad) Escribir ("Estado Civil (Casado, Soltero, Otro): ") Leer (EstadoCivil) Si (Sexo = 'M' Y Edad>60 Y EstadoCivil = 'S') entonces Escribir (Nombre, " hombre solterón mayor de 60 años") Si_no Si ( Sexo = 'F' Y Edad> 40 Y EstadoCivil = 'C' ) entonces Escribir (Nombre, " es una Mujer Casada mayor de 40 años") Si_no Si (Edad < 18) entonces Escribir (Nombre, " es un menor de edad ") Si (EstadoCivil = 'C' O EstadoCivil = 'c') entonces Escribir ("casado") FinSi Si_no Escribir ("No cumple ninguna de las condiciones solicitadas") FinSi FinSi FinSi Fin. Dados los datos A, B y C que representan números enteros diferentes, construir un algoritmo para escribir estos números en forma descendente. Este es un ejemplo de los algoritmos conocidos como de Lógica Pura, ya que poseen muchas decisiones y muchas bifurcaciones. Entradas: A, B y C. Salida: A, B y C ordenados descendentemente. La dinámica del problema es comparar dos números a la vez para conocer cuál es el mayor.
Algoritmo SI_21 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 54 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Variables Real: A, B, C Inicio Leer (A, B, C) Si (A>B) entonces Si (A>C) entonces Si (B>C) entonces Escribir (A, B, C) SiNo Escribir (A, C, B) FinSi SiNo Escribir (C, A, B) FinSi SiNo Si (B>C) entonces Si (A>C) entonces Escribir (B, A, C) SiNo Escribir (B, C, A) FinSi SiNo Escribir (C, B, A) FinSi FinSi Fin. Ejemplos de algoritmos con instrucciones condicionales generalizadas (Según) Dado el número de un día de la semana, hacer aparecer el nombre del día correspondiente. Algoritmo Segun_1 Variable Entero: Dia Inicio Escribir ("Digite el número de un día de la semana(1 - 7): " Leer ( Dia ) Segun (Dia) hacer 1: Escribir ("Es día es LUNES") 2: Escribir ("El día es MARTES") 3: Escribir ("El día es MIERCOLES") 4: Escribir ("El día es JUEVES") 5: Escribir ("El día es VIERNES") 6: Escribir ("El día es SABADO" ) 7: Escribir ("El día es DOMINGO") SiNo Escribir ("ERROR, no es un entero válido") FinSegun Fin. Se digita un número menor o igual a 1000 y a continuación se muestra su representación en números romanos. Algoritmo Segun_2 Variables Entero: numero, unidades, decenas, centenas, resto Cadena: und, dec, cent Inicio Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 55 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Escribir ("Digite número (1 - 1000): ") Leer ( numero ) centenas ← numero DIV 100 resto ← numero MOD 100 decenas ← resto DIV 10 unidades ← resto MOD 10 Segun (centenas) hacer 0: cent ← "" 1: cent ← "C" 2: cent ← "CC" 3: cent ← "CCC" 4: cent ← "CD" 5: cent ← "D" 6: cent ← "DC" 7: cent ← "DCC" 8: cent ← "DCCC" 9: cent ← "CM" 10:cent ← "M" FinSegun Segun (decenas) hacer 0: dec ← "" 1: dec ← "X" 2: dec ← "XX" 3: dec ← "XXX" 4: dec ← "XL" 5: dec ← "L" 6: dec ← "LX" 7: dec ← "LXX" 8: dec ← "LXXX" 9: dec ← "XC" FinSegun Segun (unidades) hacer 0: und ← "" 1: und ← "I" 2: und ← "II" 3: und ← "III" 4: und ← "IV" 5: und ← "V" 6: und ← "VI" 7: und ← "VII" 8: und ← "VIII" 9: und ← "IX" FinSegun Escribir (cent, dec, und) Fin. Dado el número de un mes, digitado desde teclado, y si el año es bisiesto, se determina el nombre y el número de días del mes correspondiente. Algoritmo Segun_3 Variables Entero: Mes, NumeroDias Cadena: NombreMes Caracter: Bisiesto Inicio Escribir ("Digite el número de un mes(1 - 12): ") Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 56 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Leer ( Mes ) Segun (Mes) hacer 1: NombreMes ← " Enero " NumeroDias ← 31 2: NombreMes ← " Febrero " Escribir ("¿Es el año bisiesto? (S/N): ") Leer ( Bisiesto ) Si (Bisiesto == 'S' O Bisiesto == 's') NumeroDias ← 29 SiNo NumeroDias ← 28 FinSi 3: NombreMes ← " Marzo " NumeroDias ← 31 4: NombreMes ← " Abril " NumeroDias ← 30 5: NombreMes ← " Mayo " NumeroDias ← 31 6: NombreMes ← " Junio " NumeroDias ← 30 7: NombreMes ← " Julio " NumeroDias ← 31 8: NombreMes ← " Agosto " NumeroDias ← 31 9: NombreMes ← " Septiembre " NumeroDias ← 30 10: NombreMes ← " Octubre " NumeroDias ← 31 11: NombreMes ← " Noviembre " NumeroDias ← 30 12: NombreMes ← " Diciembre " NumeroDias ← 31 SiNo: NombreMes, " Error " FinSegun Si (NombreMes == " Error " Escribir ("Se equivocó al digitar número del 1 al 12") SiNo Escribir (NombreMes, " tiene ", NumeroDias, " días" ) FinSi Fin. Se lee un número entero entre 1 y 999, y a continuación se redondea a la decena más próxima. Se supone operador para división entera: DIV. Algoritmo Segun_4 Variable Entero: numero, resto, centena, decena, unidad Inicio Escribir ("Digite un número entero para redondearlo:") Leer ( numero ) centena ← numero DIV 100 resto ← numero MOD 100 decena ← resto DIV 10 unidad ← resto MOD 10 Segun (unidad) hacer Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 57 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
0: numero ← centena*100 + decena*10 1: numero ← centena*100 + decena*10 2: numero ← centena*100 + decena*10 3: numero ← centena*100 + decena*10 4: numero ← centena*100 + decena*10 5: numero ← centena*100 + (decena+1)*10 6: numero ← centena*100 + (decena+1)*10 7: numero ← centena*100 + (decena+1)*10 8: numero ← centena*100 + (decena+1)*10 9: numero ← centena*100 + (decena+1)*10 FinSegun Escribir (numero) Fin. Tablas de decisión Una tabla de decisión es una herramienta que me va a servir para representar de manera más fácil la lógica de un problema cuando está es más o menos complicada. Para ello se trata de identificar en el problema las acciones que hay que ejecutar y las condiciones que se tienen que cumplir para ejecutar esas acciones. Una tabla de decisión está compuesta por condiciones, acciones, indicador de condiciones e indicador de acciones. Como se observa la parte de indicadores se divide en columnas, las reglas; son prescripciones que indican qué combinaciones de condiciones producen tales acciones. Las tablas de decisión simples tienen, tienen en el indicador de condiciones, solo valores verdaderos “si” y “no” o, cuando la condición no es relevante un “-“ (da igual). Para el ejemplo las combinaciones de condiciones en la regla 1 son: cuando hay “buen tiempo” y (AND lógico) “el agua tiene la temperatura adecuada para bañarse”, entonces – sigue la acción – “ir a bañarse” e “ir a la cervecería” (en esta secuencia). Condiciones (informaciones lógicas) Indicador de condiciones (valores de las condiciones) Acciones (instrucciones) Indicador de de acciones
1 2 3 Buen tiempo Si Si No El agua tiene la temperatura Si No adecuada para bañarse Ir a bañarse X Ir a la cervecería X X Leer un libro X La regla de decisión es una combinación de un estado en la entrada de condiciones y de una o más acciones asociadas en la parte de la salida de acciones asociadas en la parte de la salida de acciones siendo N el número de condiciones y considerándolas como binarias (SI/NO) habrá un número máximo de 2 elevado a N reglas. Cada regla equivale desde el parte de vista de algoritmos a una estructura si…entonces…finsi, y en cada momento solo se puede cumplir una regla. Las tablas de decisión las podemos usar para controlar la lógica de control de un algoritmo. El siguiente es ejemplo muy general de una tabla de decisión. No es necesario que en el indicador de condiciones aparezcan todas las combinaciones posibles, sino solamente aquellas que sean relevantes. Las restantes se pueden agrupar en una regla general SiNo. Luego se agrega una parte del algoritmo que resolvería la situación.
B1 B2 B3 A1
R1 R2 R3 R4 R5 SiNo Si No No No Si -No -- Si No Si Si -- No Si Si --X X
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 58 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
A2 A3 A4 A5
X X
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
X X
X X
X
X X
Si B1 Y NO B2 entonces A1, A2, A4 finsi Si NO B2 Y NO B3 entonces A1, A3 finsi Si NO B1 Y B2 Y B3 entonces A3 finsi Si NO B1 Y NO B2 Y B3 entonces A1, A3 finsi Si B1 Y B2 entonces A2, A4 finsi Si B2 entonces A5 finsi Realizar el algoritmo correspondiente en pseudocódigo para resolver en todos los casos 𝐹 =
2
𝐴−𝐵 𝐶
, una buena alter-
nativa se encuentra especificada en la siguiente tabla de decisión: Condiciones C1. C < > 0 C2. (A - B) / C >= 0 Acciones A1. Imposible A2. Solución real A3. Solución imaginaria
Reglas de decisión Si Si No No Si No Si No
Condiciones C1. C < > 0 C2. (A - B) / C >= 0 Acciones A1. Imposible A2. Solución real A3. Solución imaginaria
Reglas de decisión Si Si No ---Si No Si ----
X
X
X X
X
----
X X
Ejemplo: Si me hacen precio fijo me compro un corsa, si me hacen precio fijo y me suben el sueldo me compro un familiar, pero si me toca la lotería me compro un BMW. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 59 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
C1: Precio fijo / precio no fijo C2: Salario / no salario C3: Lotería / no lotería A1: No compro un coche A2: Compro un corsa A3: Compro un familiar A4: Compro un BMW
Precio fijo Salario Lotería No coche Corsa Familiar BMW
S S S
S S N
S N S
S N N
N S S
N S N X
N N S
N N N X
X X X
X
X
X
Construcción de tablas Primero localizamos las condiciones en el enunciado, después las acciones y las reglas entre las acciones y las condiciones. Después compruebo que la tabla sea correcta. Que no ocurran: - Redundancias: Poner la misma regla más de una vez. - Completa: Que no falte alguna regla. - Contradictoria: Que la misma acción de lugar a cosas contradictorias. Después se mira a ver si se puede simplificar la tabla, añadiendo si es posible indiferencias (cada una sustituye a 2 reglas). Una tabla se puede simplificar si hay 2 reglas que dan lugar a la misma acción o conjunto de acciones y solo se diferencia en el estado o valor de una de sus condiciones, entonces sustituyo esas 2 reglas por una sola, que tenga para esa condición el valor de indiferencia.
Precio fijo Salario Lotería No coche Corsa Familiar BMW
S
S S N
S N N
N N X
X X X
Conversión de tablas en algoritmos Primero hay que ver si se puede simplificar la tabla. Hay 2 formas de hacer la conversión: - Programación directa: Que cada regla equivale a una sentencia condicional. Es ineficiente, pero es suficiente para el desarrollo de nuestros trabajos prácticos. - Se puede pasar la tabla de decisión a diagrama de flujo o pseucódigo mediante el siguiente el método: 1. Para cada regla al final de su columna ponemos el número de reglas simples a las que equivale. Cada indiferencia de una regla equivale a 2 reglas simples. 2. Para cada condición al final de su fila hallamos un coeficiente que resulta de la suma de los valores de las reglas para las que esa condición valga indiferente, cuanto menor sea ese valor, más importante es esa regla, porque va a tener menos reglas para las que esa condición es indiferente. 3. Elijo la condición con menor valor en su coeficiente, si hay varias condiciones que tienen el mismo valor en su coeficiente y además es el menor, hallo un segundo coeficiente que se obtiene por la diferencia en valor absoluto de la diferencia entre el número de SI y NO en valor absoluto de esas condiciones, y elijo la que tenga la diferencia mayor, y si sigue habiendo empate tomo cualquiera de ellas. 4. Para la regla elegida obtengo otras 2 tablas, que se caracterizan porque no contienen ya a la condición por la que he dividido las tablas, y una tabla contiene las reglas para las que esa condición contiene valor SI, y la otra contiene las reglas para las que la condición es NO, y para las reglas con condición indiferencia las pongo en las 2 taFacultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 60 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
blas, y con las 2 tablas vuelvo a hacer otra vez lo mismo hasta que no se pueda dividir más, y cada vez que se hace una división pongo la condición en el diagrama de flujo o pseudocódigo.
Ejemplo anterior: Precio fijo Salario Lotería No coche Corsa Familiar BMW
S
S S N
S N N
N N X
2 4 0
X X X 4
1
1
2
Lotería: S Precio fijo Salario No coche Corsa Familiar BMW
-
X
Lotería: N Precio fijo Salario No coche Corsa Familiar BMW
S S
S N
N X
0 2
X X 1
1
2
X
2
Precio fijo: N Salario No coche Corsa Familiar BMW
2 Precio fijo: S Salario No coche Corsa Familiar BMW
S
N
0
X X 1
1
… Si lotería = „S‟ Entonces Escribir „BMW‟ sino Si Precio fijo=‟N‟ Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 61 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Entonces Escribir „No coche‟ Sino Si Salario =‟S‟ Entonces Encribir „Familiar‟ Sino Escribir „Corsa‟ Finsi finsi finsi …. La estructura de control iterativa La mayoría de los algoritmos requieren que una determinada cantidad de instrucciones se ejecuten más de una vez, a este conjunto de instrucciones se los denominará cuerpo de instrucciones iterativas o cuerpo de iteración. Las estructuras iterativas a estudiar son Mientras (Exp.Lógica) Hacer…FinMientras, Repetir …HastaQue (Exp. Lógica) y Para…FinPara, con las primeras dos estructuras se pueden resolver todos los problemas que requieran un cuerpo iterativo terminado con una expresión lógica, son contrariamente equivalentes en la finalización del ciclo repetitivo; en cambio la tercer estructura es un caso particular de iteración y es utilizada cuando de antemano se conoce la cantidad de iteraciones que hará el cuerpo iterativo. Conceptos a tener en cuenta: Bucle: Un conjunto de instrucciones que se repiten un número finito de veces. Lleva asociado aparte de las instrucciones una condición que es la que determina cuando se termina un bucle. Ejecución de un bucle (iteración). Los bucles se pueden anidar unos dentro de otros, y puede haber varios bucles al mismo nivel, pero nunca se entrelazan. Contador: Un elemento cuyo valor se incrementa o decrementa en un valor constante en cada iteración de un bucle, y se utiliza para controlar la condición del bucle. Acumulador: Es una variable que también se suele usar en los bucles y que se incrementa o decrementa en cada iteración del bucle, pero no en una cantidad constante. Interruptor (marca, bandera o flag): Es una variable que sirve como indicador de una determinada información y que solo puede tomar uno de dos valores. El valor de la variable tiene asociado un signo y puede variar a lo largo de la ejecución. Estructura de control iterativa Mientras (Exp.Lógica) Hacer…FinMientras Pseudocódigo … Mientras (Exp. Lógica) hacer Instrucción(es) FinMientras …
Diagrama Nassi-Shneiderman
Diagrama de flujo
Falso
Verdad
Instrucción(es)
El ciclo que produce la instrucción Mientras se efectuará, ejecutando las instrucciones que contiene, mientras sea Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 62 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
verdadera la expresión booleana que lo está controlando. La expresión booleana que controla el ciclo debe producir un resultado de verdadero o de falso. En algunos lenguajes de programación un valor numérico de 0 será considerado como falso, y cualquier otro valor numérico como verdadero. Cuando la instrucción Mientras evalúe la expresión booleana que controla el ciclo como falsa, la ejecución lógica del algoritmo continuará secuencialmente después de la instrucción que marca el fin del ámbito de la instrucción, o sea el FinMientras. La instrucción Mientras es una palabra reservada, la cual debe ir seguida de una expresión lógica o relacional encerrada entre paréntesis. La expresión al ser evaluada, si es verdadera decimos que entra la secuencia del algoritmo dentro del ámbito de la instrucción Mientras, y secuencialmente ejecutará el cuerpo de instrucciones repetitivas hasta encontrar el FinMientras, en este momento el flujo del algoritmo "vuelve" trasladándose "arriba" a la instrucción Mientras, nuevamente aquí la expresión es evaluada de nuevo, si es verdadera entra la secuencia otra vez al ámbito de la instrucción, y así sucesivamente hasta que en un momento y dados los cambios ocasionados dentro del ámbito del Mientras, la condición que controla el ciclo se vuelve falsa, en este momento el flujo del algoritmo se traslada después del FinMientras y el algoritmo seguirá secuencialmente debido a esto decimos que la instrucción Mientras termina. Si la instrucción de control no toma nunca el valor de falso se producirá un ciclo infinito. Si al evaluarse la primera vez la condición de control, esta llegare a ser falsa, no se ejecutarían las instrucciones contenidas en el ámbito del Mientras, sino que seguiría secuencialmente el algoritmo después de la instrucción FinMientras. Algoritmo del máximo común divisor Calcular el máximo común divisor entre 225 y 180 Factores primos 225 = 32 . 52 180 = 22 . 32 . 5 mcd (225, 180) = 32 . 5 = 45 Divisores 225 = {1, 3, 5, 9, 15, 25, 45, 75, 225} 180 = {1,2,3,4,5,6,9,10,12,15,18,20,30,36,45,60,90,180} Algoritmo del máximo común divisor 1. Ingresar dos números naturales A y B. 2. Comparar A con B, si son iguales ir a 4, si no lo son continuar. 3. Comparar A con B, en el lugar del mayor se coloca la diferencia del mayor menos el menor, luego volver a 2. 4. Mostrar A o B, es el máximo común divisor. A B 225 180 45 180 45 135 45 90 45 45
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 63 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Resto de división entera Ddo Dsor Resto Cociente Resto = Ddo-Ddo/Dsor*Dsor
Euclides (330 a.C. - 275 a.C.)
Datos de entrada A y B Mientras B ≠ 0 hacer R ← resto de A / B A←B B←R El resultado es A (su último valor).
Calcular el máximo común divisor entre 6936 y 1200
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 64 -
INTRODUCCIÓN A LA INFORMÁTICA
A 6936 5736 4536 3336 2136 936 936 672 408 144 144 24 24 24 24 24
B 1200 1200 1200 1200 1200 1200 264 264 264 264 120 120 96 72 48 24
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
A 6936 6936 1200 936 264 144 120 24
B 1200 1200 936 264 144 120 24 0
R 936 264 144 120 24 0 0
Estructura de control iterativa Repetir …HastaQue (Exp. Lógica) Pseudocódigo
Diagrama Nassi-Shneiderman
Diagrama de flujo
… Repetir Instrucción(es) Hasta que (Exp.Lógica) …
Instrucción(es)
Falso
Exp. lógica Verdad
El ciclo que produce la instrucción Repetir...Hasta, seguirá ejecutando las instrucciones del cuerpo de repetición, siempre que sea falsa la expresión booleana que lo está controlando; en otras palabras: se repetirá hasta que la condición de control (Expresión lógica) se vuelva verdadera; decimos que esta instrucción se sale por abajo. Observe que siempre se ejecutará al menos una vez el cuerpo de acciones repetitivas. Algoritmo que calcula y muestra el promedio de las notas del primer parcial de los alumnos del curso de II. Observe el concepto de acumulador.
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 65 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Estructura de control iterativa Para…FinPara La estructura repetitiva Para variable de control (Vc) desde valor inicial (Vi) hasta valor final (Vf) con paso P hacer … FinPara permite que las instrucciones las cuales contiene en su ámbito (cuerpo de repeticiones), se ejecuten un número de veces determinado, controlado por la variable de control. Pseudocódigo
Diagrama Nassi-Shneiderman
Diagrama de flujo
… Para Vc desde Vi hasta Vf con paso P hacer Instrucción(es) FinPara …
Una variable de control, que llamamos contador, se incrementa o decrementa desde un valor inicial hasta un valor final. Supondremos si es que no se asigna un valor de paso en particular tendremos, un incremento de uno en uno y decrementos de menos uno en menos uno. Es muy importante tener en cuenta que dentro de las instrucciones del cuerpo repetitivo, no debe haber ninguna acción que modifique las variables del encabezado (Vc, Vi, P, Vf). El diagrama de flujo siguiente explica el funcionamiento de la estructura Para FinPara cuando la variable de control va incrementado desde el valor inicial para llegar hasta el valor final, Ud. debería deducir los cambios en las acciones para obtener decremento de la variable de control, observe que la estructura es muy parecida a la estructura iterativa Mientras FinMientras:
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 66 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Vc ← Vi
Vc <= Vf
Falso
Verdad
Instrucción(es)
Vc ← Vc +P
Algoritmo que calcula y muestra la serie telescópica: S = 1+ 2 + 3 + 4 + … + n Algoritmo serie Variable Entero: i, N, S Inicio Leer N S←0 Para i desde 1 hasta N con paso 1 hacer S←S+i FinPara Escribir S Fin.
converge a n(n+1)/2
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 67 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Ejercicio: diseñar un algoritmo que calcule y muestre la serie. Realizar la traza. S = 1 + 3 + 5 + 7 +..... hasta que la acumulación de términos sea mayor que X. hasta el n-ésimo término. hasta que el n-ésimo término sea mayor que Q. Proceso serie Escribir 'ingrese el valor a superar por la acumulacion'; Leer X; s <- 0; i <- 0; Mientras s <= X Hacer i <- i + 1; s <- s + (2*i-1); FinMientras Escribir 'serie= ', s,' termino= ',i; FinProceso x 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
s ----0 0 0 0 1 1 1 4 4 4 9 9 9 16 16 16 25
i --------0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5
s <= x ------------V V V V V V V V V V V V V V F
Proceso serie Escribir 'ingrese el numero de terminos '; Leer n; s <- 0; Para i <- 1 Hasta n con Paso 1 Hacer s <- s + (2*i-1); FinPara Escribir 'serie=', s; FinProceso Proceso serie Escribir 'ingrese el valor a superar por el termino'; Leer Q; s <- 0; Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 68 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
i <- 1; T <- (2*i-1); Mientras T <= Q Hacer s <- s + T; i <- i + 1; T <- (2*i-1); FinMientras Escribir 'serie= ', s,' termino= ',i-1; FinProceso
Ejercicio: Diseñar un algoritmo que calcule y muestre la división entera de dos números enteros mediante restas sucesivas. Realizar la traza. Ejemplos de la Estructura de control iterativa Mientras (Exp.Lógica) Hacer…FinMientras A continuación se presenta un algoritmo para sumar los 100 primeros números: Algoritmo Mientras_1 Variables Entero: numero = 0, suma = 0 Inicio Mientras (numero < 100) hacer numero ← numero + 1 suma ← suma + numero FinMientras Escribir ("Sumatoria del 1 al 100 = " , suma) Fin. Se presenta la serie de los números pares entre 2 y 100: Algoritmo Mientras_2 Variables Entero: x = 0, suma = 0 Inicio Mientras (x < 100 ) hacer x←x+2 Escribir (x, " ") suma ← suma + x FinMientras Escribir ("LA SUMA DE LOS NUMEROS PARES ES: ", suma) Fin. Se presenta la serie de los primeros 100 números impares en pantalla y se efectúa su sumatoria: Algoritmo Mientras_3 Variables Entero: i=0, impar, suma = 0 Inicio Mientras (i < 100 ) hacer i←i+1 impar ← i * 2 - 1 Escribir (impar, " ") suma ← suma + impar FinMientras Escribir ("LA SUMA DE LOS ANTERIORES IMPARES ES: ", suma) Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 69 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Fin. Serie de los n primeros términos de la serie: 1*2*3 + 2*3*4 + 3*4*5 + 4*5*6 … Algoritmo Mientras_4 Variables Entero: i=0, n=0 Real: suma=0 Inicio Escribir ("Digite el valor de N: ") Leer (n) Mientras( i
S = - 1 + 2 - 3 + 4 -5 ...
Algoritmo Mientras_5 Variables Entero: i=0, n Real: suma=0 Inicio Escribir ("Ingrese un número:") Leer (n) Mientras ( i < n ) hacer i←i+1 Si (i MOD 2 = 0) entonces Escribir ( i) suma ← suma + i SiNo Escribir (-i) suma ← suma - i FinSi FinMientras Escribir (" Sumatoria = ", suma) Fin. Se calcula la siguiente serie:
S = - 2 + 4 - 6 +8 - 10 + 12 - 14 ...
Algoritmo Mientras_6 Variables Entero: n, suma=0, termino, i=0, potencia Inicio Escribir ("Digite la cantidad de términos en la serie: ") Leer (n) Mientras ( i < n ) hacer i←i+1 Si (i MOD 2 = 0) entonces termino ← 2 * i SiNo termino ← 2 * (-i) FinSi Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 70 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
suma ← suma + termino Escribir ( termino ) FinMientras Escribir ("LA SUMA ES: ", suma) Fin. Se imprimen en pantalla los números primos entre 2 y 2000 Algoritmo Mientras_7 Constante Entero: Verdad=1, Falso=0 Variables Entero: n=2, divisor, EsPrimo Inicio Escribir ("NUMEROS PRIMOS ENTRE 2 Y 2000") Escribir ( n ) // El 2 es el único primo que es par n←1 Mientras (n < 2000) hacer n←n+2 // se generan solo números impares EsPrimo ← Verdad divisor ← 3 Mientras ( ( divisor <= RaizCuadrada(n) ) Y EsPrimo ) hacer Si (n MOD divisor = 0) entonces EsPrimo ← Falso SiNo divisor ← divisor + 2 FinSi FinMientras Si (EsPrimo) entonces Escribir ( n ) FinSi FinMientras Fin. Descomposición de un número en sus factores primos: Algoritmo Mientras_8 Variables Entero: numero, impar = 3 Inicio Escribir ("Digite un Número para calcularle sus factores primos: ") Leer (numero) Mientras ( (numero MOD 2) = 0 ) hacer Escribir ( 2 ) numero ← numero / 2 FinMientras Mientras (impar <= (RaizCuadrada(numero) + 1) ) hacer Mientras (numero MOD impar = 0 ) hacer Escribir ( impar ) numero ← numero / impar FinMientras impar ← impar + 2 FinMientras Si ( numero > 1 ) entonces Escribir ( numero ) FinSi Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 71 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Fin. Algoritmo de Euclides sobre el máximo común divisor entre dos números m y n. Algoritmo Mientras_9 Variables Entero: m, n, aux, diferencia Inicio Escribir ("Digite m: ") Leer (m) Escribir ("Digite n: ") Leer (n) Mientras (m <> n) hacer Si (m < n) entonces aux ← m m←n n ← aux FinSi diferencia ← m - n m←n n ← diferencia FinMientras Escribir ("M.C.D. = " , m) Fin. Encontrar raíces de función entre intervalos dados por error y ensayo: Evaluar la función: 𝑦 = 𝑥 3 − 9𝑥 2 + 23𝑥 − 15 entre el intervalo a = - 1 y b = 7 con incrementos de x leído por teclado. Algoritmo Mientras_10 Variables Real: a, b, x, y, DeltaX Inicio Escribir ("Digite valor inicial intervalo (Xo): ") Leer (a) Escribir ("Digite valor final intervalo (Xf): ") Leer (b) Escribir ("Digite incremento en X: ") Leer (DeltaX) x←a Escribir ("───────────────────────────") Escribir (" X Y ") Escribir ("───────────────────────────") Mientras (x <= b) hacer y ← x^3 - 9*x^2 + 23*x - 15 Si (y = 0) entonces Escribir (" ", x, " ", y, " Raiz exacta") Si_no Escribir (" ", x, " ", y) FinSi x ← x + DeltaX FinMientras Escribir ("───────────────────────────") Fin. Leer un número en cualquier base, desde el 2 al 9, y obtener una respuesta en base diez. No hace validaciones de si el número es de esa base o no. Ejemplo: convertir el número 1110 en base 2 a base 10 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 72 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
1110 => en decimal: 0*20 + 1*21 + 1*22 + 1*23 = 0 + 2 + 4 + 8 = 14 Para esto se debe descomponerse el número en sus dígitos dividiendo sucesivamente entre 10, así: 1110 │ 10 0 ├──── 111 │ 10 1 ├──── 11 │ 10 1 ├──── 1 │ 10 ├──── 0 ← se hacen divisiones entre 10 hasta obtener un cociente de cero. Algoritmo Mientras_11 Variables Entero: numero, base_origen, cociente, digito, decimal, potencia Inicio Escribir ("Digite número en base del 2 al 9(cero para terminar): ") Leer (numero) Mientras ( numero > 0 ) hacer Escribir ("base del número digitado: ") Leer (base_origen) potencia ← 1 cociente ← numero / 10 digito ← numero MOD 10 decimal ← digito * potencia Mientras (cociente > 0) hacer digito ← cociente MOD 10 cociente ← cociente / 10 potencia ← potencia * base_origen decimal ← decimal + potencia * digito FinMientras Escribir ("en base 10 = ", decimal) Escribir ("Digite número en base del 2 al 9 (cero para terminar): ") Leer (numero) FinMientras Fin. Sume los N primeros términos de la siguiente serie: Algoritmo Mientras_12 Variables Real suma = 0, termino Entero: i = 0, N Inicio Leer (N) Mientras (i < N) hacer i←i+1 termino ← 1 / (2*i-1)^2 Escribir (termino) suma ← suma + termino FinMientras Escribir ("Sumatoria = " , suma) Fin. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 73 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Ejemplos de la Estructura de control iterativa Repetir …HastaQue (Exp. Lógica) A continuación se presenta un algoritmo para sumar los 10 primeros números: Algoritmo Repetir_1 Variables Entero: numero, suma Inicio numero ← 0 suma ← 0 Repetir numero ← numero + 1 suma ← suma + numero Hasta que numero = 10 Escribir ("Sumatoria del 1 al 10 = ", suma) Fin. Algoritmo de Euclides sobre el Máximo Común Divisor. Algoritmo Repetir_2 Variables Entero: m, n, aux, resto Inicio Escribir ( "Digite m: " ) Leer ( m ) Escribir ( "Digite n: " ) Leer ( n ) Repetir Si (m < n) aux ← m m←n n ← aux FinSi resto ← m - n m←n n ← resto Hasta que m = n Escribir ( "El m.c.d = ", m ) Fin. El siguiente algoritmo efectúa una división utilizando solo la operación de resta. Algoritmo Repetir_3 Variables Entero: D, d, m, s, r, c Caracter: opcion Inicio Repetir Escribir ( "Digite un número entero: " ) Leer ( D ) Escribir ( "Digite otro entero, menor al anterior: " ) Leer ( d ) Si (d <> 0) c←0 m←D s←d Mientras (m >= 0) c←c+1 r←m Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 74 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
m←m-s FinMientras Escribir ( "C = ", c-1, " R = ", r SiNo Escribir ( "Error" ) FinSi Escribir ( "Desea continuar?(S/N): " ) Leer ( opcion ) Hasta que ( opcion = 'N' O opcion = 'n') Fin. Efectúe la prueba de ejecución manual al siguiente algoritmo: Algoritmo Repetir_4 Variables Entero: e1, e2 Inicio Escribir ( "Digite enteros mayores a cero. (Iguales para términar)" Repetir Repetir Escribir ( "Primer entero: ") Leer ( e1 ) Hasta que (e1 > 0) Repetir Escribir ( "Segundo entero: ") Leer ( e2 ) Hasta (e2 > 0) Si (e2 > e1) e2 ← e2 - e1 SiNo Si (e1 > e2) e1 ← e1 - e2 FinSi Escribir ( "Primer entero = ", e1, "Segundo entero = ", e2 Hasta (e1 = e2) Fin. Ejemplos de la Estructura de control iterativa Para…FinPara Efectúe la prueba de ejecución en forma manual del siguiente algoritmo. Algoritmo PARA_01 Variables Entero: N, i Real: suma = 0 Inicio Escriba("Introducir un número entero: ") Leer ( N ) Para i desde 1 hasta N hacer Escribir ( i ) suma ← suma + i FinPara Escribir ("La suma del 1 al ", N, " es ", suma) Fin. Efectúe prueba de ejecución manual del siguiente algoritmo. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 75 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Algoritmo PARA_2 Variables Entero: i, j, N, termino=0 Inicio Leen (N) // Pruebe con N=6 Para i desde 1 hasta N hacer Para j desde i hasta N hacer termino ← termino + i Escribir ( termino ) FinPara FinPara Fin. Se calcula la siguiente serie: S = 1 + 2 + 3 - 4 + 5 + 6 + 7 - 8 + ... Algoritmo PARA_3 Variables Entero: n, suma=0, i=1 Inicio Escribir ("DIGITE UN VALOR PARA N:") Leer (n) Para i desde 1 hasta N hacer Si ( i % 4 = 0 ) Escribir ( -i ) suma ← suma - i SiNo suma ← suma + i Escribir ( i ) FinSi FinPara Escribir ("Sumatoria = ", suma) Fin. Obtenga la sumatoria de los N primeros términos de la siguiente serie: 1+
1 1 1 +3+ +5+ … 2! 4! 6!
Algoritmo PARA_4 Variables Entero: N, Factorial=1, i Real SumatoriaSerie=0 Inicio Escribir ("n = ") Leer (N) Para i desde 1 hasta N hacer SumatoriaSerie ← SumatoriaSerie + i Factorial ← Factorial * i i←i+1 Si (i <= N ) entonces Factorial ← Factorial * i SumatoriaSerie ← SumatoriaSerie + 1.0 / Factorial FinSi FinPara Escribir ("Sumatoria Serie = ", SumatoriaSerie) Fin. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 76 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Un número es perfecto si la suma de sus divisores excepto él mismo es igual al propio número. Por ejemplo: Numero Divisores
6 28 36 1 1 1 2 2 2 3 4 4 7 6 14 12 18 Sumatoria 6 28 52 De lo anterior se deduce que el 6 y el 28 son números perfectos, el 36 no lo es. Algoritmo PARA_5 Variables Entero: numero, i, suma Inicio Escribir ("Ingrese un número mayor de 200… ") Leer (numero) Escribir ("ESPERE UN MOMENTO... ") Para i desde 1 hasta numero hacer suma ← 0 i←1 Mientras ( i <= (numero / 2) ) hacer Si (numero MOD i = 0) entonces suma ← suma + i FinSi i←i+1 FinMientras Si (suma = numero) entonces Escribir (numero) FinSi FinPara Fin.
Capitulo 3 "El gran peligro de hoy, son las consignas, las opiniones colectivas, las corrientes de pensamiento hechas a medida. Debemos estar en condiciones de resistir, de criticar, de distinguir entre lo probado y lo que no ha sido comprobado. Por ello necesitamos alumnos activos, que puedan aprender pronto a descubrir por sí mismos, en parte mediante su actividad, espontánea y en parte por medio de materiales que les proporcionamos; que aprendan pronto a determinar qué es verificable y qué es simplemente lo primero que se les viene a la mente." Jean Piaget. "Por la ignorancia nos equivocamos, y por las equivocaciones aprendemos." Proverbio Romano. Pruebas de software “El testing puede probar la presencia de errores pero no la ausencia de ellos” Edsger Dijkstra Una de las últimas fases del ciclo de vida antes de entregar un programa para su explotación, es la fase de pruebas. Una de las sorpresas con las que suelen encontrar los nuevos programadores es la enorme cantidad de tiempo y esfuerzo que requiere esta fase. Se estima que la mitad del esfuerzo de desarrollo de un programa (tanto en tiempo como en gastos) se va en esta fase. Si hablamos de programas que involucran vidas humanas (medicina, equipos nucleares, etc) el costo de la fase de pruebas puede fácilmente superar el 80%. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 77 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Pese a su enorme impacto en el coste de desarrollo, es una fase que muchos programadores aún consideran clasificable como un arte y, por tanto, como difícilmente conceptualizable. Es muy difícil entrenar a los nuevos programadores, que aprenderán mucho más de su experiencia que de lo que les cuenten en los cursos de programación. Aún siendo una tarea abocada al fracaso, voy a intentarlo. ¿Qué es probar? Como parte que es de un proceso industrial, la fase de pruebas añade valor al producto que se maneja: todos los programas tienen errores y la fase de pruebas los descubre; ese es el valor que añade. El objetivo específico de la fase de pruebas es encontrar cuantos más errores, mejor. Es frecuente encontrarse con el error de afirmar que el objetivo de esta fase es convencerse de que el programa funciona bien. En realidad ese es el objetivo propio de las fases anteriores (¿quién va a pasar a la sección de pruebas un producto que sospecha que está mal?). Cumplido ese objetivo, lo mejor posible, se pasa a pruebas. Esto no obsta para reconocer que el objetivo último de todo el proceso de fabricación de programas sea hacer programas que funcionen bien; pero cada fase tiene su objetivo específico, y el de las pruebas es destapar errores. Probar un programa es ejercitarlo con la peor intención a fin de encontrarle fallos. Por poner un ejemplo duro, probar un programa es equivalente a la actividad de ciertos profesores para los que examinar a un alumno consiste en poner en evidencia todo lo que no sabe. Esto es penoso cuando se aplica a personas; pero es exactamente lo que hay que hacerle a los programas. La Prueba Exhaustiva es Imposible La prueba ideal de un sistema sería exponerlo en todas las situaciones posibles, así encontraríamos hasta el último fallo. Indirectamente, garantizamos su respuesta ante cualquier caso que se le presente en la ejecución real. Esto es imposible desde todos los puntos de vista: humano, económico e incluso matemático. Dado que todo es finito en programación (el número de líneas de código, el número de variables, el número de valores en un tipo, etc etc) cabe pensar que el número de pruebas posibles es finito. Esto deja de ser cierto en cuanto entran en juego bucles, en los que es fácil introducir condiciones para un funcionamiento sin fin. Aún en el irrealista caso de que el número de posibilidades fuera finito, el número de combinaciones posibles es tan enorme que se hace imposible su identificación y ejecución a todos los efectos prácticos. Probar un programa es someterle a todas las posible variaciones de los datos de entrada, tanto si son válidos como si no lo son. Imagínese hacer esto con un compilador de cualquier lenguaje: ¡habría que escribir, compilar y ejecutar todos y cada uno de los programas que se pudieran escribir con dicho lenguaje! Sobre esta premisa de imposibilidad de alcanzar la perfección, hay que buscar formas humanamente abordables y ecónomicamente aceptables de encontrar errores. Nótese que todo es muy relativo y resbaladizo en este área. Organización Hay multitud de conceptos (y palabras clave) asociadas a las tareas de prueba. Clasificarlas es difícil, pues no son mutuamente disjuntas, sino muy entrelazadas. En lo que sigue intentaremos la siguiente estructura para la presentación: Fases de prueba: UNIDADES Planteamientos: o CAJA BLANCA Cobertura: de segmentos de ramas de condición/decisión de bucles o CAJA NEGRA Cobertura de requisitos INTEGRACIÓN ACEPTACIÓN La prueba de unidades se plantea a pequeña escala, y consiste en ir probando uno a uno los diferentes módulos que constituyen una aplicación. Las pruebas de integración y de aceptación son pruebas a mayor escala, que puede llegar a dimensiones industriales cuando el número de módulos es muy elevado, o la funcionalidad que se espera del programa es muy compleja. Las pruebas de integración se centran en probar la coherencia semántica entre los diferentes módulos, tanto de semántica estática (se importan los módulos adecuados; se llama correctamente a los procedimientos proporcionados por cada módulo), como de semántica dinámica (un módulo recibe de otro lo que esperaba). Normalmente estas pruebas se van realizando por etapas, englobando progresivamente más y más módulos en cada prueba. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 78 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Las pruebas de integración se pueden empezar en cuanto tenemos unos pocos módulos, aunque no terminarán hasta disponer de la totalidad. En un diseño descendente (top-down) se empieza a probar por los módulos más generales; mientras que en un diseño ascendente se empieza a probar por los módulos de base. El planteamiento descendente tiene la ventaja de estar siempre pensando en términos de la funcionalidad global; pero también tiene el inconveniente de que para cada prueba hay que "inventarse" algo sencillito (pero fiable) que simule el papel de los módulos inferiores, que aún no están disponibles. El planteamiento ascendente evita tener que escribirse módulos ficticios, pues vamos construyendo pirámides más y más altas con lo que vamos teniendo. Su desventaja es que se centra más en el desarrollo que en las espectativas finales del cliente. Estas clasificaciones no son las únicas posibles. Por ejemplo, en sistemas con mucha interacción con el usuario es frecuente codificar sólo las partes de cada módulo que hacen falta para una cierta funcionalidad. Una vez probada, se añade otra funcionalidad y así hasta el final. Esto da lugar a un planteamiento más "vertical" de las pruebas. A veces se conoce como "codificación incremental". Por último, las pruebas de aceptación son las que se plantea el cliente final, que decide qué pruebas va a aplicarle al producto antes de darlo por bueno y pagarlo. De nuevo, el objetivo del que prueba es encontrar los fallos lo antes posible, en todo caso antes de pagarlo y antes de poner el programa en producción. Prueba de Unidades ¿Cómo se prueban módulos sueltos? Normalmente cabe distinguir una fase informal antes de entrar en la fase de pruebas propiamente dicha. La fase informal la lleva a cabo el propio codificador en su despacho, y consiste en ir ejecutando el código para convencerse de que "básicamente, funciona". Esta fase suele consistir en pequeños ejemplos que se intentan ejecutar. Si el módulo falla, se suele utilizar un depurador para observar la evolución dinámica del sistema, localizar el fallo, y repararlo. En lenguajes antiguos, poco rigurosos en la sintaxis y/o en la semantica de los programas, esta fase informal llega a ser muy dura, laboriosa, y susceptible de dejar pasar grandes errores sin que se note. En lenguajes modernos, con reglas estrictas, hay herramientas que permiten análisis exhaustivos de los aspectos estáticos de la semántica de los programas: tipado de las variables, ámbitos de visibilidad, parámetros de llamada a procedimientos, etc etc Hay asimismo herramientas más sofisticadas capaces de emitir "opiniones" sobre un programa y alertar de construcciones arriesgadas, de expresiones muy complicadas (que se prestan a equivocaciones), etc. etc. A veces pueden prevenir sobre variables que pueden usarse antes de tomar algún valor (no inicializadas), variables que se cargan pero luego no se usan, y otras posibilidades que, sin ser necesariamente errores en sí mismas, sí suelen apuntar a errores de verdad. Más adelante, cuando el módulo parece presentable, se entra en una fase de prueba sistemática. En esta etapa se empieza a buscar fallos siguiendo algún criterio para que "no se escape nada". Los criterios más habituales son los denominados de caja negra y de caja blanca. Se dice que una prueba es de caja negra cuando prescinde de los detalles del código y se limita a lo que se ve desde el exterior. Intenta descubrir casos y circunstancias en los que el módulo no hace lo que se espera de él. Por oposición al término "caja negra" se suele denominar "caja blanca" al caso contrario, es decir, cuando lo que se mira con lupa es el código que está ahí escrito y se intenta que falle. Quizás sea más propio la denominación de "pruebas de caja transparente". Caja blanca Sinónimos: pruebas estructurales pruebas de caja transparente En estas pruebas estamos siempre observando el código, que las pruebas se dedican a ejecutar con ánimo de "probarlo todo". Esta noción de prueba total se formaliza en lo que se llama "cobertura" y no es sino una medida porcentual de ¿cuánto código hemos cubierto? Hay diferentes posibilidades de definir la cobertura. Todas ellas intentan sobrevivir al hecho de que el número posible de ejecuciones de cualquier programa no trivial es (a todos los efectos prácticos) infinito. Pero si el 100% de cobertura es infinito, ningún conjunto real de pruebas pasaría de un infinitésimo de cobertura. Esto puede ser muy interesante para los matemáticos; pero no sirve para nada. Cobertura de segmentos A veces también denominada "cobertura de sentencias". Por segmento se entiende una secuencia de sentencias sin puntos de decisión. Como el ordenador está obligado a ejecutarlas una tras otra, es lo mismo decir que se han ejecutado todas las sentencias o todos los segmentos.
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 79 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
El número de sentencias de un programa es finito. Basta coger el código fuente e ir contando. Se puede diseñar un plan de pruebas que vaya ejercitando más y más sentencias, hasta que hayamos pasado por todas, o por una inmensa mayoría. En la práctica, el proceso de pruebas termina antes de llegar al 100%, pues puede ser excesivamente laborioso y costoso provocar el paso por todas y cada una de las sentencias. A la hora de decidir el punto de corte antes de llegar al 100% de cobertura hay que ser precavido y tomar en consideración algo más que el índice conseguido. En efecto, ocurre con harta frecuencia que los programas contienen código muerto o inalcanzable. Puede ser que este trozo del programa, simplemente "sobre" y se pueda prescindir de él; pero a veces significa que una cierta funcionalidad, necesaria, es inalcanzable: esto es un error y hay que corregirlo. Cobertura de ramas La cobertura de segmentos es engañosa en presencia de segmentos opcionales. Por ejemplo: IF Condicion THEN EjecutaEsto; END; Desde el punto de vista de cobertura de segmentos, basta ejecutar una vez, con éxito en la condición, para cubrir todas las sentencias posibles. Sin embargo, desde el punto de vista de la lógica del programa, también debe ser importante el caso de que la condición falle (si no lo fuera, sobra el IF). Sin embargo, como en la rama ELSE no hay sentencias, con 0 ejecuciones tenemos el 100%. Para afrontar estos casos, se plantea un refinamiento de la cobertura de segmentos consistente en recorrer todas las posibles salidas de los puntos de decisión. Para el ejemplo de arriba, para conseguir una cobertura de ramas del 100% hay que ejecutar (al menos) 2 veces, una satisfaciendo la condición, y otra no. Estos criterios se extienden a las construcciones que suponen elegir 1 de entre varias ramas. Por ejemplo, el CASE. Nótese que si lograramos una cobertura de ramas del 100%, esto llevaría implícita una cobertura del 100% de los segmentos, pues todo segmento está en alguna rama. Esto es cierto salvo en programas triviales que carecen de condiciones (a cambio, basta 1 sóla prueba para cubrirlo desde todos los puntos de vista). El criterio también debe refinarse en lenguajes que admiten excepciones (por ejemplo, Ada). En estos casos, hay que añadir pruebas para provocar la ejecución de todas y cada una de las excepciones que pueden dispararse. Cobertura de condición/decisión La cobertura de ramas resulta a su vez engañosa cuando las expresiones booleanas que usamos para decidir por qué rama tirar son complejas. Por ejemplo: IF Condicion1 OR Condicion2 THEN HazEsto; END; Las condiciones 1 y 2 pueden tomar 2 valores cada una, dando lugar a 4 posibles combinaciones. No obstante sólo hay dos posibles ramas y bastan 2 pruebas para cubrirlas. Pero con este criterio podemos estar cerrando los ojos a otras combinaciones de las condiciones. Consideremos sobre el caso anterior las siguientes pruebas: Prueba 1: Condicion1 = TRUE Prueba 2: Condicion1 = FALSE Prueba 3: Condicion1 = FALSE Prueba 4: Condicion1 = TRUE
y y y y
Condicion2 = FALSE Condicion2 = TRUE Condicion2 = FALSE Condicion2 = TRUE
Bastan las pruebas 2 y 3 para tener cubiertas todas las ramas. Pero con ellos sólo hemos probado una posibilidad para la Condición1. Para afrontar esta problemática se define un criterio de cobertura de condición/decisión que trocea las expresiones booleanas complejas en sus componentes e intenta cubrir todos los posibles valores de cada uno de ellos. Nótese que no basta con cubrir cada una de las condciones componentes, si no que además hay que cuidar de sus posibles combinaciones de forma que se logre siempre probar todas y cada una de las ramas. Así, en el ejemplo anterior no basta con ejecutar las pruebas 1 y 2, pues aun cuando cubrimos perfectamente cada posibilidad de cada condición por separado, lo que no hemos logrado es recorrer las dos posibles ramas de la decisión combinada. Para ello es necesario añadir la prueba 3. El conjunto mínimo de pruebas para cubrir todos los aspectos es el formado por las pruebas 3 y 4. Aún así, nótese que no hemos probado todo lo posible. Por ejemplo, si en el programa nos colamos y ponemos AND donde queríamos poner OR (o viceversa), este conjunto de pruebas no lo detecta. Sólo queremos decir que la cobertura es un criterio útil y práctico; pero no es prueba exhaustiva. Cobertura de bucles Los bucles no son más que segmentos controlados por decisiones. Así, la cobertura de ramas cubre plenamenFacultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 80 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
te la esencia de los bucles. Pero eso es simplemente la teoría, pues la práctica descubre que los bucles son una fuente inagotable de errores, todos triviales, algunos mortales. Un bucle se ejecuta un cierto número de veces; pero ese número de veces debe ser muy preciso, y lo más normal es que ejecutarlo una vez de menos o una vez de más tenga consecuencias indeseables. Y, sin embargo, es extremadamente fácil equivocarse y redactar un bucle que se ejecuta 1 vez de más o de menos. Para un bucle de tipo WHILE hay que pasar 3 pruebas 1. 0 ejecuciones 2. 1 ejecución 3. más de 1 ejecución Para un bucle de tipo REPEAT hay que pasar 2 pruebas 1. 1 ejecución 2. más de 1 ejecución Los bucles FOR, en cambio, son muy seguros, pues en su cabecera está definido el número de veces que se va a ejecutar. Ni una más, ni una menos, y el compilador se encarga de garantizarlo. Basta pues con ejecutarlos 1 vez. No obstante, conviene no engañarse con los bucles FOR y examinar su contenido. Si dentro del bucle se altera la variable de control, o el valor de alguna variable que se utilice en el cálculo del incremento o del límite de iteración, entonces eso es un bucle FOR con trampa. También tiene "trampa" si contiene sentencias del tipo EXIT (que algunos lenguajes denominan BREAK) o del tipo RETURN. Todas ellas provocan terminaciones anticipadas del bucle. Estos últimos párrafos hay que precisarlos para cada lenguaje de programación. Lo peor son aquellos lenguajes que permiten el uso de sentencias GOTO. Tampoco conviene confiarse de lo que prometen lenguajes como MODULA-2, que se supone que prohiben ciertas construcciones arriesgadas. Los compiladores reales suelen ser más tolerantes que lo que anuncian los libros. Si el programa contiene bucles LOOP, o simplemente bucles con trampa, la única cobertura aplicable es la de ramas. El riesgo de error es muy alto; pero no se conocen técnicas sistemáticas de abordarlo, salvo reescribir el código. Y en la práctica ¿qué hago? Tanta definición acaba resultando un tanto académica e inútil. En la práctica de cada día, se suele procura alcanzar una cobertura cercana al 100% de segmentos. Es muy recomendable (aunque cuesta más) conseguir una buena cobertura de ramas. En cambio, no suele hacer falta ir a por una cobertura de decisiones atomizadas. ¿Qué es una buena cobertura? Pues depende de lo crítico que sea el programa. Hay que valorar el riesgo (o coste) que implica un fallo si éste se descubre durante la aplicación del programa. Para la mayor parte del software que se produce en Occidente, el riesgo es simplemente de imagen (si un juego fallece a mitad, queda muy feo; pero no se muere nadie). En estas circunstancias, coberturas del 60-80% son admisibles. La cobertura requerida suele ir creciendo con el ámbito previsto de distribución. Si un programa se distribuye y falla en algo grave puede ser necesario redistribuirlo de nuevo y urgentemente. Si hay millones de clientes dispersos por varios paises, el coste puede ser brutal. En estos casos hay que exprimir la fase de pruebas para que encuentre prácticamente todos los errores sin pasar nada por alto. Esto se traduce al final en buscar coberturas más altas. Es aún más delicado cuando entramos en aplicaciones que involucran vidas humanas (aplicaciones sanitarias, centrales nucleares, etc) Cuando un fallo se traduce en una muerte, la cobertura que se busca se acerca al 99% y además se presta atención a las decisiones atómicas. También se suele perseguir coberturas muy elevadas (por encima del 90%) en las aplicaciones militares. Esto se debe a que normalmente van a ser utilizadas en condiciones muy adversas donde el tiempo es inestimable. Si un programa fallece, puede no haber una segunda oportunidad de arrancarlo de nuevo. La ejecución de pruebas de caja blanca puede llevarse a cabo con un depurador (que permite le ejecución paso a paso), un listado del módulo y un rotulador para ir marcando por dónde vamos pasando. Esta tarea es muy tediosa, pero puede ser automatizada. Hay compiladores que a la hora de generar código máquina dejan incrustado en el código suficiente código como para poder dejar un fichero (tras la ejecución) con el número de veces que se ha ejecutado cada sentencia, rama, bucle, etc. Limitaciones Lograr una buena cobertura con pruebas de caja blanca es un objetivo deseable; pero no suficiente a todos los efectos. Un programa puede estar perfecto en todos sus términos, y sin embargo no servir a la función que se pretende. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 81 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Por ejemplo, un Rolls-Royce es un coche que sin duda pasaría las pruebas más exigentes sobre los últimos detalles de su mecánica o su carrocería. Sin embargo, si el cliente desea un todo-terreno, difícilmente va a comprárselo. Por ejemplo, si escribimos una rutina para ordenar datos por orden ascendente, pero el cliente los necesita en orden decreciente; no hay prueba de caja blanca capaz de detectar la desviación. Las pruebas de caja blanca nos convencen de que un programa hace bien lo que hace; pero no de que haga lo que necesitamos. Caja negra Sinónimos: pruebas de caja opaca pruebas funcionales pruebas de entrada/salida pruebas inducidas por los datos Las pruebas de caja negra se centran en lo que se espera de un módulo, es decir, intentan encontrar casos en que el módulo no se atiene a su especificación. Por ello se denominan pruebas funcionales, y el probador se limita a suministrarle datos como entrada y estudiar la salida, sin preocuparse de lo que pueda estar haciendo el módulo por dentro. Las pruebas de caja negra están especialmente indicadas en aquellos módulos que van a ser interfaz con el usuario (en sentido general: teclado, pantalla, ficheros, canales de comunicaciones, etc etc) Este comentario no obsta para que sean útiles en cualquier módulo del sistema. Las pruebas de caja negra se apoyan en la especificación de requisitos del módulo. De hecho, se habla de "cobertura de especificación" para dar una medida del número de requisitos que se han probado. Es fácil obtener coberturas del 100% en módulos internos, aunque puede ser más laborioso en módulos con interfaz al exterior. En cualquier caso, es muy recomendable conseguir una alta cobertura en esta línea. El problema con las pruebas de caja negra no suele estar en el número de funciones proporcionadas por el módulo (que siempre es un número muy limitado en diseños razonables); sino en los datos que se le pasan a estas funciones. El conjunto de datos posibles suele ser muy amplio (por ejemplo, un entero). A la vista de los requisitos de un módulo, se sigue una técnica algebraica conocida como "clases de equivalencia". Esta técnica trata cada parámetro como un modelo algebraico donde unos datos son equivalentes a otros. Si logramos partir un rango excesivamente amplio de posibles valores reales a un conjunto reducido de clases de equivalencia, entonces es suficiente probar un caso de cada clase, pues los demás datos de la misma clase son equivalentes. El problema está pues en identificar clases de equivalencia, tarea para la que no existe una regla de aplicación universal; pero hay recetas para la mayor parte de los casos prácticos: si un parámetro de entrada debe estar comprendido en un cierto rango, aparecen 3 clases de equivalencia: por debajo, en y por encima del rango. si una entrada requiere un valor concreto, aparecen 3 clases de equivalencia: por debajo, en y por encima del rango. si una entrada requiere un valor de entre los de un conjunto, aparecen 2 clases de equivalencia: en el conjunto o fuera de él. si una entrada es booleana, hay 2 clases: si o no. los mismos criterios se aplican a las salidas esperadas: hay que intentar generar resultados en todas y cada una de las clases. Ejemplo: utilizamos un entero para identificar el día del mes. Los valores posibles están en el rango [1..31]. Así, hay 3 clases: 1. números menores que 1 2. números entre 1 y 31 3. números mayores que 31 Durante la lectura de los requisitos del sistema, nos encontraremos con una serie de valores singulares, que marcan diferencias de comportamiento. Estos valores son claros candidatos a marcar clases de equivalencia: por abajo y por arriba. Una vez identificadas las clases de equivalencia significativas en nuestro módulo, se procede a coger un valor de cada clase, que no esté justamente al límite de la clase. Este valor aleatorio, hará las veces de cualquier valor normal que se le pueda pasar en la ejecución real. La experiencia muestra que un buen número de errores aparecen en torno a los puntos de cambio de clase de equivalencia. Hay una serie de valores denominados "frontera" (o valores límite) que conviene probar, además de los elegidos en el párrafo anterior. Usualmente se necesitan 2 valores por frontera, uno justo abajo y otro justo encima. Limitaciones Lograr una buena cobertura con pruebas de caja negra es un objetivo deseable; pero no suficiente a todos los efectos. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 82 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Un programa puede pasar con holgura millones de pruebas y sin embargo tener defectos internos que surgen en el momento más inoportuno (Murphy no olvida). Por ejemplo, un PC que contenga el virus Viernes-13 puede estar pasando pruebas de caja negra durante años y años. Sólo falla si es viernes y es día 13; pero ¿a quién se le iba a ocurrir hacer esa prueba? Las pruebas de caja negra nos convencen de que un programa hace lo que queremos; pero no de que haga (además) otras cosas menos aceptables. Pruebas de Integración Las pruebas de integración se llevan a cabo durante la construcción del sistema, involucran a un número creciente de módulos y terminan probando el sistema como conjunto. Estas pruebas se pueden plantear desde un punto de vista estructural o funcional. Las pruebas estructurales de integración son similares a las pruebas de caja blanca; pero trabajan a un nivel conceptual superior. En lugar de referirnos a sentencias del lenguaje, nos referiremos a llamadas entre módulos. Se trata pues de identificar todos los posibles esquemas de llamadas y ejercitarlos para lograr una buena cobertura de segmentos o de ramas. Las pruebas funcionales de integración son similares a las pruebas de caja negra. Aquí trataremos de encontrar fallos en la respuesta de un módulo cuando su operación depende de los servicios prestados por otro(s) módulo(s). Según nos vamos acercando al sistema total, estas pruebas se van basando más y más en la especificación de requisitos del usuario. Las pruebas finales de integración cubren todo el sistema y pretenden cubrir plenamente la especificación de requisitos del usuario. Además, a estas alturas ya suele estar disponible el manual de usuario, que también se utiliza para realizar pruebas hasta lograr una cobertura aceptable. En todas estas pruebas funcionales se siguen utilizando las técnicas de partición en clases de equivalencia y análisis de casos límite (fronteras). Pruebas de Aceptación Estas pruebas las realiza el cliente. Son básicamente pruebas funcionales, sobre el sistema completo, y buscan una cobertura de la especificación de requisitos y del manual del usuario. Estas pruebas no se realizan durante el desarrollo, pues sería impresentable de cara al cliente; sino una vez pasadas todas las pruebas de integración por parte del desarrollador. La experiencia muestra que aún despues del más cuidadoso proceso de pruebas por parte del desarrollador, quedan una serie de errores que sólo aparecen cuando el cliente se pone a usarlo. Los desarrolladores se suelen llevar las manos a la cabeza: "Pero, ¿a quién se le ocurre usar así mi programa?" Sea como sea, el cliente siempre tiene razón. Decir que los requisitos no estaban claros, o que el manual es ambiguo puede salvar la cara; pero ciertamente no deja satisfecho al cliente. Alegar que el cliente es un inútil es otra tentación muy fuerte, que conviene reprimir. Por estas razones, muchos desarrolladores ejercitan unas técnicas denominadas "pruebas alfa" y "pruebas beta". Las pruebas alfa consisten en invitar al cliente a que venga al entorno de desarrollo a probar el sistema. Se trabaja en un entorno controlado y el cliente siempre tiene un experto a mano para ayudarle a usar el sistema y para analizar los resultados. Las pruebas beta vienen despues de las pruebas alfa, y se desarrollan en el entorno del cliente, un entorno que está fuera de control. Aquí el cliente se queda a solas con el producto y trata de encontrarle fallos (reales o imaginarios) de los que informa al desarrollador. Las pruebas alfa y beta son habituales en productos que se van a vender a muchos clientes. Algunos de los potenciales compradores se prestan a estas pruebas bien por ir entrenando a su personal con tiempo, bien a cambio de alguna ventaja económica (mejor precio sobre el producto final, derecho a mantenimiento gratuito, a nuevas versiones, etc etc). La experiencia muestra que estas prácticas son muy eficaces. Otros tipos de pruebas Recorridos (walkthroughs) Quizás es una técnica más aplicada en control de calidad que en pruebas. Consiste en sentar alrededor de una mesa a los desarrolladores y a una serie de críticos, bajo las órdenes de un moderador que impida un recalentamiento de los ánimos. El método consiste en que los revisores se leen el programa línea a línea y piden explicaciones de todo lo que no está meridianamente claro. Puede que simplemente falte un comentario explicativo, o que detecten un error auténtico o que simplemente el código sea tan complejo de entender/explicar que Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 83 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
más vale que se rehaga de forma más simple. Para un sistema complejo pueden hacer falta muchas sesiones. Esta técnica es muy eficaz localizando errores de naturaleza local; pero falla estrepitosamente cuando el error deriva de la interacción entre dos partes alejadas del programa. Nótese que no se está ejecutando el programa, sólo mirándolo con lupa, y de esta forma sólo se ve en cada instante un trocito del listado. Aleatorias (random testing) Ciertos autores consideran injustificada una aproximación sistemática a las pruebas. Alegan que la probabilidad de descubrir un error es prácticamente la misma si se hacen una serie de pruebas aleatoriamente elegidas, que si se hacen siguiendo las instrucciones dictadas por criterios de cobertura (caja negra o blanca). Como esto es muy cierto, probablemente sea muy razonable comenzar la fase de pruebas con una serie de casos elegidos al azar. Esto pondrá de manifiesto los errores más patentes. No obstante, pueden permanecer ocultos errores más sibilinos que sólo se muestran ante entradas muy precisas. Si el programa es poco crítico (una aplicación personal, un juego, ...) puede que esto sea suficiente. Pero si se trata de una aplicación militar o con riesgo para vidas humanas, es de todo punto insuficiente. Solidez (robustness testing) Se prueba la capacidad del sistema para salir de situaciones embarazosas provocadas por errores en el suministro de datos. Estas pruebas son importantes en sistemas con una interfaz al exterior, en particular cuando la interfaz es humana. Por ejemplo, en un sistema que admite una serie de órdenes (commands) se deben probar los siguientes extremos: órdenes correctas, todas y cada una órdenes con defectos de sintaxis, tanto pequeñas desviaciones como errores de bulto órdenes correctas, pero en orden incorrecto, o fuera de lugar la orden nula (línea vacia, una o más) órdenes correctas, pero con datos de más provocar una interrupción (BREAK, ^C, o lo que corresponda al sistema soporte) justo después de introducir una orden. órdenes con delimitadores inapropiados (comas, puntos, ...) órdenes con delimitadores incongruentes consigo mismos (por ejemplo, esto] Aguante (stress testing) En ciertos sistemas es conveniente saber hasta dónde aguantan, bien por razones internas (¿hasta cuantos datos podrá procesar?), bien externas (¿es capaz de trabajar con un disco al 90%?, ¿aguanta una carga de la CPU del 90?, etc etc) Prestaciones (performance testing) A veces es importante el tiempo de respuesta, u otros parámetros de gasto. Típicamente nos puede preocupar cuánto tiempo le lleva al sistema procesar tantos datos, o cuánta memoria consume, o cuánto espacio en disco utiliza, o cuántos datos transfiere por un canal de comunicaciones, o ... Para todos estos parámetros suele ser importante conocer cómo evolucionan al variar la dimensión del problema (por ejemplo, al duplicarse el volumen de datos de entrada). Conformidad u Homologación (conformance testing) En programas de comunicaciones es muy frecuente que, además de los requisitos específicos del programa que estamos construyendo, aparezca alguna norma más amplia a la que el programa deba atenerse. Es frecuente que organismos internacionales como ISO y el CCITT elaboren especificaciones de referencia a las que los diversos fabricantes deben atenerse para que sus ordenadores sean capaces de entenderse entre sí. Las pruebas, de caja negra, que se le pasan a un producto para detectar discrepancias respecto a una norma de las descritas en el párrafo anterior se denominan de conformidad u homologación. Suelen realizarse en un centro especialmente acreditado al efecto y, si se pasan satisfactoriamente, el producto recibe un sello oficial que dice: "homologado". Interoperabilidad (interoperability tesing) En el mismo escenario del punto anterior, programas de comunicaciones que deden permitir que dos ordenadores se entiendan, aparte de las pruebas de conformidad se suelen correr una serie de pruebas, también de caja negra, que involucran 2 o más productos, y buscan problemas de comunicación entre ellos. Regresión (regression testing) Todos los sistemas sufren una evolución a lo largo de su vida activa. En cada nueva versión se supone que o bien se corrigen defectos, o se añaden nuevas funciones, o ambas cosas. En cualquier caso, una nueva versión exige una nueva pasada por las pruebas. Si éstas se han sistematizado en una fase anterior, ahora pueden volver a pasarse automáticamente, simplemente para comprobar que las modificaciones no provocan errores donFacultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 84 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
de antes no los había. El mínimo necesario para usar unas pruebas en una futura revisión del programa es una documentación muy muy clara. Las pruebas de regresión son particularmente espectaculares cuando se trata de probar la interacción con un agente externo. Existen empresas que viven de comercializar productos que "graban" la ejecución de una prueba con operadores humanos para luego repetirla cuantas veces haga falta "reproduciendo la grabación". Y, obviamente, deben monitorizar la respuesta del sistema en ambos casos, compararla, y avisar de cualquier discrepancia significativa. Mutación (mutation testing) Es una técnica curiosa consistente en alterar ligeramente el sistema bajo pruebas (introduciendo errores) para averiguar si nuestra batería de pruebas es capaz de detectarlo. Si no, más vale introducir nuevas pruebas. Todo esto es muy laborioso y francamente artesano. Depuración (debugging) Casi todos los compiladores suelen llevar asociada la posibilidad de ejecutar un programa paso a paso, permitiéndole al operador conocer dónde está en cada momento, y cuánto valen las variables. Los depuradores pueden usarse para realizar inspecciones rigurosas sobre el comportamiento dinámico de los programas. La práctica demuestra, no obstante, que su uso es tedioso y que sólo son eficaces si se persigue un objetivo muy claro. El objetivo habitual es utilizarlo como consecuencia de la detección de un error. Si el programa se comporta mal en un cierto punto, hay que averiguar la causa precisa para poder repararlo. La causa a veces es inmediata (por ejemplo, un operador booleano equivocado); pero a veces depende del valor concreto de los datos en un cierto punto y hay que buscar la causa en otra zona del programa. En general es mala idea "correr al depurador", tanto por el tiempo que se pierde buceando sin una meta clara, como por el riesgo de corregir defectos intermedios sin llegar a la raiz del problema. Antes de entrar en el depurador hay que delimitar el error y sus posibles causas. Ante una prueba que falla, hay que identificar el dominio del fallo, averiguar las características de los datos que provoca el fallo (y comprobar experimentalmente que todos los datos con esas características provocan ese fallo, y los que no las tienen no lo provocan). El depurador es el último paso para convencernos de nuestro análisis y afrontar la reparación con conocimiento de causa. Plan de Pruebas Un plan de pruebas está constituido por un conjunto de pruebas. Cada prueba debe dejar claro qué tipo de propiedades se quieren probar (corrección, robustez, fiabilidad, amigabilidad, ...) dejar claro cómo se mide el resultado especificar en qué consiste la prueba (hasta el último detalle de cómo se ejecuta) definir cual es el resultado que se espera (identificación, tolerancia, ...) ¿Cómo se decide que el resultado es acorde con lo esperado? Las pruebas angelicales carecen de utilidad, tanto si no se sabe exactamente lo que se quiere probar, o si no está claro cómo se prueba, o si el análisis del resultado se hace "a ojo". Estas mismas ideas se suelen agrupar diciendo que un caso de prueba consta de 3 bloques de información: 1. El propósito de la prueba 2. Los pasos de ejecución de la prueba 3. El resultado que se espera Y todos y cada uno de esos puntos debe quedar perfectamente documentado. Las pruebas de usar y tirar más vale que se tiren directamente, aún antes de usarlas. Cubrir estos puntos es muy laborioso y, con frecuencia, tedioso, lo que hace desagradable (o al menos muy aburrida) la fase de pruebas. Es mucho más divertido codificar que probar. Tremendo error en el que, no obstante, es fácil incurrir. Respecto al orden de pruebas, una práctica frecuente es la siguiente: 1. Pasar pruebas de caja negra analizando valores límite. Recuerde que hay que analizar condiciones límite de entrada y de salida. 2. Identificar clases de equivalencia de datos (entrada y salida) y añadir más pruebas de caja negra para contemplar valores normales (en las clases de equivalencia en que estos sean diferentes de los valores límite; es decir, en rangos amplios de valores).
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 85 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
3. Añadir pruebas basadas en "presunción de error". A partir de la experiencia y el sentido común, se aventuran situaciones que parecen proclives a padecer defectos, y se buscan errores en esos puntos. Son pruebas del tipo "¡Me lo temía!" 4. Medir la cobertura de caja blanca que se ha logrado con las fases previas y añadir más pruebas de caja blanca hasta lograr la cobertura deseada. Normalmente se busca una buena cobertura de ramas (revise los comentarios expuestos al hablar de caja blanca). Aspectos Sicológicos y Organización del Trabajo Parecen tonterías; pero pueden cambiar radicalmente el éxito de una fase de pruebas: 1. Probar es ejercitar un programa para encontrarle fallos. Jamás se debería probar un programa con el ánimo de mostrar que funciona; ese no es el objetivo. 2. Un caso de prueba tiene éxito cuando encuentra un fallo. Lo gracioso no es encontrar un caso en el que el programa funciona perfectamente. Eso es, simplemente, lo normal. 3. Las pruebas debe diseñarlas y pasarlas una persona distinta de la que ha escrito el código; es la única forma de no ser "comprensivo con los fallos". Hacer una "obra maestra" cuesta mucho esfuerzo y requiere gran habilidad. Encontrarle fallos a una "obra maestra" cuesta aún más esfuerzo y exige otro tipo de habilidad. 4. Las pruebas no pueden esperar a que esté todo el código escrito para empezar a pasarlas. Deben irse pasando pruebas según se va generando el código para descubrir los errores lo antes posible y evitar que se propaguen a otros módulos. En realidad el nombre "fase de pruebas" es engañoso, pues hay muchas actividades que se desarrollan concurrentemente o, al menos, no se necesita cerrar una fase antes de pasar a la siguiente. Algunos autores llegan al extremo de afirmar que "primero hay que probar y luego codificar". Frase graciosa que se plasma en aspectos más concretos como que el programa se escriba pensando en que hay que probarlo. 5. Si en un módulo (o sección de un programa, en general) se encuentran muchos fallos, hay que insistir sobre él. Es muy habitual que los fallos se concentren en pequeñas zonas. Hay mil causas para que ocurra este efecto: o código escrito por un programador malo o código muy difícil o código mal o insuficientemente especificado o código escrito en un mal día, con prisas, ... Además, cuanto más se parchea un trozo de código, tanto más ruinoso queda y susceptible a derrumbamientos. A la larga hay que acabar tirándolo y empezando de nuevo. 6. Si se detecta un fallo aislado, puede bastar una corrección aislada. Pero si se detectan muchos fallos en un módulo, lo único práctico es desecharlo, diseñarlo de nuevo, y recodificarlo. La técnica de ir parcheando hasta que se pasan una serie de pruebas es absolutamente suicida y sólo digna del avestruz. 7. Las pruebas pueden encontrar fallos; pero jamás demostrar que no los hay. Es como las bruxas: nadie las ha visto; pero haberlas, haylas. Ningún programa (no trivial) se ha probado jamás al 100%. 8. Las pruebas también tienen fallos. Los errores son propios de los humanos: todo el mundo se equivoca. Si una prueba falla, hay que revisar tanto lo que se prueba como lo que lo prueba. No obstante, la experiencia muestra que (casi siempre) hay más fallos el probado que en el probador. Conclusiones Probar es buscarle los fallos a un programa. La fase de pruebas absorbe una buena porción de los costes de desarrollo de software. Además, se muestra renuente a un tratamiento matemático o, simplemente, automatizado. Su ejecución se basa en metodología (reglas que se les dan a los encargados de probar) que se va desarrollando con la experiencia. Es tediosa, es un arte, es un trabajo que requiere una buena dosis de mala intención, y provoca difíciles reacciones humanas. Aunque se han desarrollado miles de herramientas de soporte de esta fase, todas han limitado su éxito a entornos muy concretos, frecuentemente sólo sirviendo para el producto para el que se desarrollaron. Sólo herramientas muy generales como analizadores de complejidad, sistemas de ejecución simbólica y medidores de cobertura han mostrado su utilidad en un marco más amplio. Pero al final sigue siendo imprescindible un artista humano que sepa manejarlas.
Capitulo 4 Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 86 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
“Si la injusticia forma parte de la necesaria fricción de toda máquina de gobierno, que siga, que siga. Quizá llegue a suavizarse con el desgaste; la maquina, ciertamente lo hará. Si la injusticia tiene una polea, un muelle o una palanca exclusivos, puede que quizá podáis considerar si el remedio no será peor que la enfermedad; pero si es de naturaleza tal, que requiere de vosotros como agentes de injusticia para otros, entonces os digo: Romped la ley. Que vuestra vida sea una contraficción que detenga la máquina. Lo que hay que hacer, en todo caso, es no prestarse a servir al mismo mal que se condena.” THOREAU, HENRY DAVID Del Deber de la Desobediencia Civil. “Es útil haber visto este material previamente, aún cuándo no se lo pueda dominar en la primera vez. Es parte de nuestra psicología el hecho de que aprendemos por aproximaciones. Además, el conocimiento en determinado nivel solo es comprendido plenamente cuando se lo usa en un subsiguiente nivel de mayor profundidad. Por tanto, el estudiar algunas cosas más arduas, aún cuando solo se obtenga una comprensión limitada de ellas, hace posible comprender plenamente las cosas más fáciles." Serge Lang "Calculo I". Estrategias de resolución de problemas. Una estrategia es un conjunto de acciones que se llevan a cabo para lograr un determinado fin. Proviene del griego ΣΤΡΑΤΗΓΙΚΗΣ Stratos = Ejército y Agein = conductor, guía. Un problema es una situación, cuantitativa o de otra clase, a la que se enfrenta un individuo o un grupo, que requiere solución, y para la cual no se vislumbra un medio o camino aparente y obvio que conduzca a la misma. Krulik y Rudnik, 1980. “Tener un problema significa buscar de forma consciente una acción apropiada para lograr un objetivo claramente concebido, pero no alcanzable de manera inmediata”. Polya, (1961). “Para que una situación constituya un problema para una persona, debe estar enterada de la existencia de la situación, reconocer que debe ejecutar algún tipo de acción ante ella, desear o necesitar actuar, hacerlo y no estar capacitado, al menos en lo inmediato, para superar la situación”. Teaching and learning Mathematics, F. Bell, (1978). Estrategia de resolución de problemas I: 1. Entender el problema. 2. Configurar un plan. 3. Ejecutar el plan. 4. Mirar hacia atrás • Si no consigues entender un problema, dibuja un esquema. • Si no encuentras la solución, haz como si ya la tuvieras y mira qué puedes deducir de ella (razonando hacia atrás a la inversa). • Si el problema es abstracto, prueba a examinar un ejemplo concreto. • Intenta abordar primero un problema más general (es la “paradoja del inventor”: el propósito más ambicioso es el que tiene más posibilidades de éxito). George Polya Estrategia de resolución de problemas II: 1. Detectar el problema. 2. Formular el enunciado. 3. Generar alternativas. 4. Ejecutar la mejor alternativa. 5. Evaluar los resultados. 6. Obtener conclusiones. 7. Mirar hacia atrás. Schoenfeld (1985) en su libro “Mathematical Problem Solving”, considera insuficientes las estrategias planteadas por Polya para la resolución de problemas, sostiene que este proceso es más complejo e involucra más elementos, inclusive de carácter emocional-afectivo, psicológico, sociocultural, entre otros. Establece, por tanto, la existencia de cuatro aspectos que intervienen en el proceso de resolución de problemas: los recursos (entendidos como conocimientos previos, o bien, el dominio del conocimiento), las heurísticas (estrategias cognitivas), el control (estrategias metacognitivas) y el sistema de creencias. Los recursos, refieren al conocimiento matemático que el individuo es capaz de brindar en la resolución de un problema. Las estrategias heurísticas son reglas o planteamientos generales que ayudan en el Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 87 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
abordaje de un problema; este aspecto fue ampliamente considerado por Polya en su libro “Matemáticas y razonamientos plausibles”. La manera en que los individuos utilizan la información y las estrategias heurísticas que poseen para resolver un problema, es lo que Schoenfeld denomina control, éste involucra conductas de interés tales como: planificar, seleccionar metas y submetas y monitoreo constante durante el proceso de resolución. Finalmente, Schoenfeld establece un aspecto transversal en la resolución de problemas y lo denomina sistema de creencias. Éste consiste en el conjunto de ideas o percepciones que los estudiantes poseen a cerca de la matemática y su enseñanza. Diferencia entre ejercicios y problemas Ejercicio Comprensión Se entiende de inmediato en qué consiste la cuestión y cuál es el medio para resolverlo. Objetivos Es que el alumno aplique de forma mecánica conocimientos y algoritmos ya adquiridos y fáciles de identificar. Aplicación Son cuestiones cerradas. Motivación
No suele implicar la afectividad.
Tiempo
Exige poco tiempo y éste se puede prever de antemano. Abundan.
Textos
Problema No se sabe a primera vista cómo atacarlo y resolverlo; a veces ni siquiera se ve claro en qué consiste el problema.
Es que el alumno busque, investigue, utilice la intuición, profundice en el conjunto de conocimientos y experiencias anteriores y elabore una estrategia de resolución. Están abiertos a posibles variantes y generalizaciones y a nuevos problemas. Supone una fuerte inversión de energías y de afectividad. A lo largo de la resolución se suelen experimentar sentimientos de ansiedad, de confianza, de frustración, de entusiasmo, de alegría, etc. Exige un tiempo que es imposible de prever de antemano. Son escasos.
Ley de Weiler: Nada es imposible para la persona que no tiene que hacerlo. Ley de Howe: Todo individuo tiene un plan que no funciona. Ley 90/90: El primer 10% de la tarea requiere el 90% del tiempo. El 90% restante ocupa el 10% que queda. Ley de Gordon: Si no vale la pena realizar un proyecto, no vale la pena realizarlo bien. Ley de Slack: Lo mínimo con que se conforme será lo máximo que puede esperar obtener. Sherlock Holmes (citado en El Tratado Naval de Arthur Conan Doyle): “¿Ve usted alguna pista?” “Me ha proporcionado usted siete, pero naturalmente deberé probarlas antes de poder decir si sirven de algo.” „¿Seguramente sospecha de alguien? ” “Sospecho de mí mismo.” “¿Cómo?” “Sospecho que estoy sacando conclusiones con demasiada premura.” Ejemplo: La herencia del Hacendado Un campesino hacendado tenía tres hijos, a quienes les dejó al morir una herencia de 17 caballos, con un testamento en el que dejaba impuesto que debían repartírselos, pero sin matar ninguno de ellos, para poder cumplir esta petición del padre debían hacerlo de la siguiente manera: el mayor recibiría la mitad; el segundo la tercera parte y el menor la novena parte. Los hijos de este campesino, discutían acaloradamente, al querer cumplir la voluntad del padre, y se dieron cuenta que no había más remedio que descuartizar algunos. Sin embargo en ese momento pasaba un viejo a caballo, quien habiendo escuchado la discusión, propuso resolver el problema. ¿Como lo hizo? Solución Si sumamos una mitad, una tercera parte y una novena parte, no se obtiene el total de los 17 caballos (debería ser 17/17) Efectivamente: 1/2 + 1/3 + 1/9 = (9+6+2)/18 = 17/18 El número 17 (primo) no es múltiplo común de 2, 3 y 9. Se debe hacer el reparto sin matar ningún caballo. Evidentemente, el problema no tiene solución tal y como se presenta. Sin embargo, el viejo, intentó dar una solución lo mas aproximada posible y que dejase contentos a los hijos. Se dio cuenta que añadiendo otro caballo se obtenía un número Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 88 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
(18) múltiplo de 2, 3 y 9 que permitía hacer el reparto exacto y además le permitía recuperar el caballo añadido (la suma de las tres fracciones era 17/18, de 18 caballos se repartían 17. Ejemplo: Cuatro amigos cercanos, Ávidos pescadores para más señas además de ser propietarios de caballos, deciden bautizar sus barcas de pesca con los nombres de los caballos de sus amigos. No hay dos barcas con el mismo nombre. A partir de los enunciados a continuación conteste:¿Cuál es el nombre de cada caballo(uno se llama spike) y qué nombre recibió cada barca? 1) La barca de pesca de Jake recibió el nombre del caballo de Jay 2) El caballo de Jeb se llama King 3) La barca de pesca de Joe se llama Ace 4) La barca de pesca de Jeb no se llama Beau Ejemplo: Juego del Nim Este juego consiste en que sobre una mesa hay n fósforos que dos jugadores van quitando de 1, 2 o 3 a la vez. El objetivo para ganar es que el jugador contrario tenga que levantar el último fósforo de la mesa. En este algoritmo los dos jugadores serán un humano y su contrincante: la computadora. El humano elije cuántos fósforos hay al inicio sobre la mesa, y además es quién comienza jugando. Queremos conseguir que la computadora gane al humano. Para ello deberemos definir un heurístico que le permita calcular a la computadora cuántos fósforos debe tomar en cada turno para que el humano termine levantando el último fósforo.
Capitulo 5 "Uno de los defectos de la educación superior moderna es que hace demasiado énfasis en el aprendizaje de ciertas especialidades, y demasiado poco en un ensanchamiento de la mente y el corazón por medio de un análisis imparcial del mundo." Bertrand Russell. (Frases de Bertrand Russell). Con el verdadero maestro el discípulo aprende a aprender, no a recordar y obedecer. La compañía del noble, no modela sino que libera. Nisargadatta Método científico El método científico (del griego: -meta = hacia, a lo largo- -odos = camino-; y el latín scientia = conocimiento; camino hacia el conocimiento) presenta diversas definiciones debido a la complejidad de una exactitud en su conceptualización: "Conjunto de pasos fijados de antemano por una disciplina con el fin de alcanzar conocimientos válidos mediante instrumentos confiables", "secuencia estándar para formular y responder a una pregunta", "pauta que permite a los investigadores ir desde el punto A hasta el punto Z con la confianza de obtener un conocimiento válido". Así el método es un conjunto de pasos que trata de protegernos de la subjetividad en el conocimiento. El método científico está sustentado por dos pilares fundamentales. El primero de ellos es la reproducibilidad, es decir, la capacidad de repetir un determinado experimento, cualquier lugar y por cualquier persona. Este pilar se basa, esencialmente, en la comunicación y publicidad de los resultados obtenidos. El segundo pilar es la falsabilidad. Es decir, que toda proposición científica tiene que ser susceptible de ser falsada (falsacionismo). Esto implica que se pueden diseñar experimentos que en el caso de dar resultados distintos a los predichos negarían la hipótesis puesta a prueba. La falsabilidad no es otra cosa que el modus tollendo tollens del método hipotético deductivo experimental. Según James B. Conant no existe un método científico. El científico usa métodos definitorios, métodos clasificatorios, métodos estadísticos, métodos hipotético-deductivos, procedimientos de medición, etcétera. Según esto, referirse a el método científico es referirse a este conjunto de tácticas empleadas para constituir el conocimiento, sujetas al devenir histórico, y que pueden ser otras en el futuro.1 Ello nos conduce tratar de sistematizar las distintas ramas dentro del campo del método. Modus tollendo tollens En lógica, el modus tollendo tollens (en latín, modo que negando niega), también llamado modus tollens y generalmente abreviado MTT o MT, es una regla de inferencia que tiene la siguiente forma: Si A, entonces B Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 89 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
No B Por lo tanto, no A Por ejemplo, un razonamiento que sigue la forma del modus tollens podría ser: Si está soleado, entonces es de día. No es de día. Por lo tanto, no está soleado. Otra manera de presentar el modus tollens es:
Falsacionismo El modus tollens es central al modelo falsacionista de la ciencia propuesto por Karl Popper en su libro La lógica de la investigación científica. Según Popper, la ciencia nunca puede confirmar definitivamente una hipótesis, pero sí puede refutarla definitivamente deduciendo una consecuencia observable de la misma y mostrando que dicha consecuencia no se cumple. Este procedimiento de refutación sigue la forma de un modus tollens: La hipótesis H implica la consecuencia observable O. La consecuencia observable O no es el caso. Por lo tanto, la hipótesis H tampoco es el caso. La validez de este razonamiento contrasta con la invalidez de los intentos de confirmación de una hipótesis: La hipótesis H implica la consecuencia observable O. La consecuencia observable O es el caso. Por lo tanto, la hipótesis H también es el caso. Este razonamiento es un caso de afirmación del consecuente, y por lo tanto no es un razonamiento válido. En consecuencia, mientras las refutaciones tienen la forma de un argumento deductivamente válido, las confirmaciones tienen la forma de un argumento deductivamente inválido, y a lo sumo tienen la fuerza de un razonamiento inductivo. Descripciones del método científico Por proceso o "método científico" se entiende aquellas prácticas utilizadas y ratificadas por la comunidad científica como válidas a la hora de proceder con el fin de exponer y confirmar sus teorías. Las teorías científicas, destinadas a explicar de alguna manera los fenómenos que observamos, pueden apoyarse o no en experimentos que certifiquen su validez. Sin embargo, hay que dejar claro que el mero uso de metodologías experimentales, no es necesariamente sinónimo del uso del método científico, o su realización al 100%. Por ello, Francis Bacon definió el método científico de la siguiente manera: 1. Observación: Observar es aplicar atentamente los sentidos a un objeto o a un fenómeno, para estudiarlos tal como se presentan en realidad, puede ser ocasional o causalmente. 2. Inducción: La acción y efecto de extraer, a partir de determinadas observaciones o experiencias particulares, el principio particular de cada una de ellas. 3. Hipótesis: Planteamiento mediante la observación siguiendo las normas establecidas por el método científico. 4. Probar la hipótesis por experimentación. 5. Demostración o refutación (antítesis) de la hipótesis. 6. Tesis o teoría científica (conclusiones). Así queda definido el método científico tal y como es normalmente entendido, es decir, la representación social dominante del mismo. Esta definición se corresponde sin embargo únicamente a la visión de la ciencia denominada positivismo en su versión más primitiva. Empero, es evidente que la exigencia de la experimentación es imposible de aplicar a áreas de conocimiento como la vulcanología, la astronomía, la física teórica, etcétera. En tales casos, es suficiente la observación de los fenómenos producidos naturalmente, en los que el método científico se utiliza en el estudio (directo o indirecto) a partir de modelos más pequeños, o a partes de este. Por otra parte, existen ciencias no incluidas en las ciencias naturales, especialmente en el caso de las ciencias humanas y sociales, donde los fenómenos no sólo no se pueden repetir controlada y artificialmente (que es en lo que consiste un experimento), sino que son, por su esencia, irrepetibles, por ejemplo la historia. De forma que el concepto de método científico ha de ser repensado, acercándose más a una definición como la siguiente: "proceso de conocimiento caracterizado por el uso constante e irrestricto de la capacidad crítica de la razón, que busca establecer la explicación de un fenómeno ateniéndose a lo previamente conocido, resultando una explicación plenamente congruente con los datos de la observación". Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 90 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Así, por método o proceso científico se entiende aquellas prácticas utilizadas y ratificadas por la comunidad científica como válidas a la hora de proceder con el fin de exponer y confirmar sus teorías, como por ejemplo los Postulados de Koch para la microbiología. Las teorías científicas, destinadas a explicar de alguna manera los fenómenos que observamos, pueden apoyarse o no en experimentos que certifiquen su validez. El método científico como método para la eliminación de falacias y prejuicios El método científico envuelve la observación de fenómenos naturales, luego, la postulación de hipótesis y su comprobación mediante la experimentación. Pues bien, los prejuicios cognitivos no son más que hipótesis, inducciones o construcciones mentales que han sido sesgadas positiva o negativamente por el cerebro. Asimismo cuando se realizan afirmaciones o se argumenta y estos prejuicios cognitivos salen a la luz se convierten en falacias. El prejuicio cognitivo o proceso mental con el que se sesgan las creencias no se puede eliminar pues es un aspecto fisiológico intrínseco a la psique del ser humano y que además parece estar extendido evolutivamente ya que cumple su función en la asociación y reconocimiento de objetos cotidianos, véase por ejemplo pareidolia. Lo que es posible es compensar el sesgo o modificar las propias creencias mediante el método científico como mecanismo para descartar hipótesis que son falsas. De esta forma, el sesgo se situaría en dirección a hipótesis que son menos falsas hasta nuevas revisiones en busca de factores desconocidos o nueva información. La ciencia no pretende ser ni absoluta, ni autoritaria, ni dogmática. Todas las ideas, hipótesis, teorías; todo el conocimiento científico está sujeto a revisión, a estudio y a modificación. El conocimiento que tenemos representa las hipótesis científicas y teorías respaldadas por observaciones y experimentos (método empírico). Para no caer en el prejuicio cognitivo es necesario, por tanto, la experimentación, el no hacerlo llevaría a la misma negligencia puesto que la verdad de una aseveración según el método científico recae en la fuerza de sus evidencias comprobadas por experimentación. Después de llevar a cabo la experimentación se analiza los resultados y se llega a una conclusión. Si los resultados respaldan la hipótesis, ésta adquiere validez; si los resultados la refutan, ésta se descarta o se modifica presentando nuevas formas para refutarla. El método científico es también afectado naturalmente por los prejuicios cognitivos ya que los efectos asociativos de nuestra mente son los que permiten, al mismo tiempo, lanzar el mayor número de hipótesis. Sin embargo, el método, si es bien ejecutado en sus últimos y más importantes pasos, permite desecharlas. El primer paso en el método científico de tipo empírico es la observación cuidadosa de un fenómeno y la descripción de los hechos, es aquí donde entran en juego los prejuicios. Después, el científico trata de explicarlo mediante hipótesis las cuales, ya están sesgadas por los prejuicios en la percepción de los acontecimientos o en las propias creencias. Sin embargo, solamente las ideas que puedan comprobarse experimentalmente están dentro del ámbito de la ciencia lo que permite desechar muchas teorías. Si las hipótesis enunciadas fueran invalidadas deberían predecir las consecuencias en el experimento y además debería ser posible repetirlas. De esta forma, mediante la experimentación, la repetición y supervisión del experimento por parte de personas que pudieran tener otros sesgos cognitivos se minimizan los errores del experimento, los errores en la interpretación de los resultados o errores en estadísticas que harían a la teoría una falsa o imprecisa creencia. Por eso, en ciencia se usa la revisión por pares, a mayor número de revisiones menor probabilidad de sesgo o de falsa interpretación de los datos experimentales, con lo que el trabajo es considerado más riguroso o estable. Un proceso así aunque mucho menos riguroso se puede observar en el pensamiento crítico cuando éste requiere de investigación activa propia para el esclarecimiento de argumentos y comprobación de las fuentes de información. En el pensamiento crítico se toman decisiones en función de la carga de la prueba que se hayan realizado sobre las fuentes y los argumentos y la información que se obtiene puede llegar a ser indirecta (de ahí la falta de rigurosidad). En el método científico no solo debe ser el hecho probado por la experimentación directa sino que debe ser posible repetirlo. El problema con los prejuicios cognitivos es que normalmente se aplican a conceptos que cambian con regularidad quizás a una velocidad mayor de lo que es posible medirlo mediante pruebas o experimentación, además no son uniformes y poseen excepciones, estos prejuicios se basan por tanto en probabilidades y no en afirmaciones certeras. El método científico por lo menos permite ponderar estas probabilidades, realizar estadísticas y revisar la propia seguridad en las afirmaciones. De esta forma debería eliminar la posición de certeza o del perfecto conocimiento del funcionamiento del mundo (otro sesgo extendido). El método científico, por tanto, se convierte en el método maestro para probar hipótesis y desechar las falsas. A esto se refería Einstein cuando dijo "No existe una cantidad suficiente de experimentos que muestren que estoy en lo correcto; pero un simple experimento puede probar que me equivoco.". De otra forma, sin el método científico, las presunciones o prejuicios quedarían fijas cuando las circunstancias cambian, sujetas a nuestras propias interpretaciones de la realidad.
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 91 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Pensamiento crítico El pensamiento crítico se propone analizar o evaluar la estructura y consistencia de los razonamientos, particularmente opiniones o afirmaciones que la gente acepta como verdaderas en el contexto de la vida cotidiana. Tal evaluación puede basarse en la observación, en la experiencia, en el razonamiento o en el método científico. El pensamiento crítico se basa en valores intelectuales que tratan de ir más allá de las impresiones y opiniones particulares, por lo que requiere claridad, exactitud, precisión, evidencia y equidad. Tiene por tanto una vertiente analítica y otra evaluativa. Aunque emplea la lógica, intenta superar el aspecto formal de esta para poder entender y evaluar los argumentos en su contexto y dotar de herramientas intelectuales para distinguir lo razonable de lo no razonable, lo verdadero de lo falso. El pensamiento crítico se encuentra muy ligado al escepticismo y al estudio y detección de las falacias. Introducción Hay muchas definiciones de pensamiento crítico o razonamiento crítico. Desde un punto de vista práctico, puede ser definido de la siguiente forma: El pensamiento crítico es un proceso mediante el cual se usa el conocimiento y la inteligencia para llegar, de forma efectiva, a la posición más razonable y justificada sobre un tema, y en la cual se procura identificar y superar las numerosas barreras u obstáculos que los prejuicios o sesgos introducen. No todo el mundo valora la necesidad de un razonamiento crítico. Con frecuencia, ser metódicamente objetivo es visto como algo frío, estéril y aburrido sobre todo para los que siguen políticas del estilo "Tened fe y dejad que vuestros sentimientos os guíen a la verdad" o "No dejes que los hechos o detalles interrumpan el camino hacia una historia interesante". Esto es así porque hoy en día muchos sobreviven justamente de la manipulación y de la llamada a las necesidades primarias del ser humano. Véase Pirámide de Maslow. Sin embargo, cuando la verdad es requerida no se puede caer en las falacias o en lo que nos gustaría creer para protegernos porque la verdad de aquel que gusta del razonamiento crítico es preferible a una mentira feliz. La inteligencia y el conocimiento que se posean no implican forzosamente que se pueda tener un razonamiento o pensamiento crítico. Hasta el mayor de los genios puede tener las más irracionales creencias o las más disparatadas opiniones. La teoría acerca del pensamiento crítico, trata sobre cómo se debería usar la inteligencia y el conocimiento para alcanzar puntos de vista más racionales y objetivos con los datos que se poseen. Opiniones y creencias basadas en un razonamiento crítico pueden estar mejor cimentadas comparadas con aquellas formuladas a través de procesos menos racionales. Al mismo tiempo, los buenos pensadores críticos están normalmente mejor equipados para tomar decisiones y resolver problemas comparados con aquellos que carecen de esta habilidad aprendida. El razonamiento crítico también es más que pensar lógicamente o analíticamente. También se trata de pensar de forma más racional y objetiva. Existe una importante diferencia. Lógica y análisis son esencialmente conceptos filosóficos y matemáticos respectivamente, mientras que el pensar racionalmente y objetivamente son conceptos más amplios que abrazan los campos de la psicología y la sociología que tratan de explicar los complejos efectos de los demás sobre nuestros propios procesos mentales. En teoría para poder ser un buen pensador crítico se deberían seguir y desarrollar los siguientes cinco pasos, que serán desarrollados: Paso 1: Adoptar la actitud de un pensador crítico. Paso 2: Reconocer y evitar las barreras y sesgos cognitivos principales. Véase Lista de prejuicios cognitivos. Paso 3: Identificar y caracterizar argumentos. Paso 4: Evaluar las fuentes de información. Paso 5: Evaluar los argumentos. Lo que el pensamiento crítico no es 1. El pensamiento crítico no es pensar de forma negativa o con predisposición a encontrar fallos o defectos. Es un proceso o procedimiento neutro y sin sesgo para evaluar opiniones y afirmaciones tanto propias como de otras personas. 2. El pensamiento crítico no trata de hacer personas que piensen de la misma forma, ya que si bien, pueden aplicar el mismo procedimiento éstos podrían diferir en sus prioridades, principios y lista de valores que, como se observa en la figura 1, afectan al razonamiento. Es decir, muchos podrían contar información o experiencias nuevas que otros no cuentan, para que aplicando el mismo principio, se lleguen a conclusiones totalmente diferentes. Adicionalmente, siempre habrá diferencias en la percepción y las necesidades emocionales básicas que harán definitivamente imposible que todos piensen de la misma forma, a pesar de la ponderación objetiva que haga el razonamiento crítico, pues ésta sigue tratándose de información extra. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 92 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
3. El pensamiento crítico no trata de cambiar la propia personalidad, incrementa la objetividad consciente, pero se siguen sintiendo los prejuicios habituales. 4. El pensamiento crítico no es una creencia. El pensamiento crítico puede evaluar la validez de las creencias, pero no es una creencia en sí, es un procedimiento. 5. El pensamiento crítico no reemplaza o minimiza los sentimientos o emociones. Sin embargo, algunas decisiones emocionales que son también decisiones críticas, tales como decidir casarse o tener hijos, son observados desde múltiplos puntos de vista. 6. El pensamiento crítico no favorece ni representa específicamente a la Ciencia. Sus argumentos pueden ser usados para favorecer opiniones contrarias a las comúnmente aceptadas por el marco científico, como en el caso del diseño inteligente. 7. Los argumentos basados en el pensamiento crítico no son necesariamente siempre los más persuasivos. Con gran frecuencia los argumentos más persuasivos son aquellos destinados a recurrir a las emociones más básicas como el miedo, placer y necesidad más que a los hechos objetivos. Por esta razón, es común encontrar en los argumentos más persuasivos de muchos políticos, telepredicadores o vendedores una intencionada falta de objetividad y razonamiento crítico. Paso 1: Adoptar la actitud de un pensador crítico El primer paso para llegar a ser un hábil y diestro pensador crítico es desarrollar una actitud que permita la entrada de más información y permita detenernos a pensar. Estas actitudes señalan las siguientes características: Las primeras dos características pueden parecer contradictorias, pero no lo son. El pensador crítico debe querer investigar puntos de vista diferentes por sí mismo, pero al 1) Mente abierta mismo tiempo reconocer cuándo dudar de los méritos de sus propias investigaciones. No debería ser ni dogmático, doctrinal u ortodoxo ni ingenuo o crédulo. Se trata de 2) Escepticismo sano examinar el mayor número de ideas y puntos de vista diferentes; darle la oportunidad 3) Humildad intelectual de ser escuchadas hasta el fondo y luego razonar cuáles son los puntos buenos y malos 4) Libertad de pensamiento de cada uno de los lados. Aceptar el hecho de que podamos estar equivocados una vez los argumentos estén sobre la mesa y mantener el objetivo final de conseguir la verdad 5) Una alta motivación o lo más cercano a ésta que la información que hemos dejado entrar o se nos ha presentado nos permite. Demasiado escepticismo, o también pseudoescepticismo, conducirá a la paranoia y a ideas de conspiración; nos llevará a dudar de todo y al final no conseguir nada, mientras que creer todo sin un juicio o mediante el prejuicio o sesgo cognitivo básico de nuestro cerebro nos llevará a ser un público voluble. Tener humildad intelectual significa poder ser capaz de dar una oportunidad a las opiniones y nuevas evidencias o argumentos incluso si dichas pruebas o indagaciones nos llevan a descubrir defectos en nuestras propias creencias. Véase Método socrático El pensador crítico debe poder ser independiente y ser un libre pensador. Es decir, no depender o tener miedo a indagar sobre algo que pueda perjudicarlo en demasía. Las presiones sociales a la estandarización y al conformismo pueden llegar a hacernos caer en la comodidad o en el propio deseo de creer o pertenencia al grupo. Esto puede ser muy difícil o casi imposible para algunos. Uno debe preguntarse si el miedo a represalias simplemente al qué dirán motiva nuestras propias opiniones o creencias y si es así tener la fuerza para al menos temporalmente acallarlas hasta que se tenga la libertad de realizar una objetiva y detallada evaluación de la misma. Finalmente, se debe tener una natural curiosidad y motivación para avanzar en el propio conocimiento sobre una materia. La única forma de evitar tener un conocimiento básico sobre algo es estudiarlo hasta alcanzar el suficiente nivel de entendimiento necesario antes de realizar cualquier juicio. Características
Paso 2: Reconocer y evitar las barreras o prejuicios del pensamiento crítico Cada día de nuestras vidas se está expuesto a variables que bloquean nuestra habilidad a pensar con claridad, precisión y equidad. Algunas de estas barreras surgen de las limitaciones humanas naturales e inintencionadas, mientras otras están claramente calculadas y manipuladas. Algunas son obvias pero la mayoría de éstas son sutiles y capciosas. Sin embargo, si después de estar armado con la actitud apropiada del Paso 1, el pensador crítico tendría ahora que entender cómo reconocer y evitar (al menos mitigar) la máscara de engaño o embaucamiento que se tiene en la vida diaria. Estas barreras pueden ser divididas en cuatro categorías, que serán presentadas en cuatro tablas diferentes al final del artículo, algunas de éstas pueden verse también en la lista de prejuicios cognitivos: Tabla 1: Limitaciones humanas básicas Tabla 2: Uso del lenguaje Tabla 3: Falta de lógica y percepción Tabla 4: Trampas y escollos psicológicos y sociales Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 93 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Cada una de las tablas muestra: 1. Una lista de las barreras u obstáculos al entendimiento aplicables a la categoría 2. Una concisa definición del obstáculo 3. Un ejemplo ilustrativo 4. sugerencias para evitar o superar los obstáculos al entendimiento La tabla 1 o de limitaciones humanas básicas se aplica a cada uno, incluyendo los más hábiles pensadores críticos. Esas limitaciones recuerdan que no se es perfecto y que el entendimiento que se tiene de los hechos, percepciones, memoria, sesgos imposibilita el entendimiento del mundo con total objetividad y claridad. Lo mejor que podemos hacer es adquirir un adecuado y suficiente conocimiento del tema. El uso del lenguaje o la tabla 2 es muy importante para el pensamiento crítico. La correcta elección de las palabras puede llevar a la verdad, o a la verdad a medias, al desconcierto, a la confusión o al propio engaño. Desde carteles publicitarios que garantizan la pérdida de peso a políticos asegurando la prosperidad para todos, un pensador crítico debe aprender a reconocer cuando las palabras no están encaminadas a comunicar ideas o sentimientos sino más bien a controlar lo que pensamos, sentimos, nuestra intención o elección y por tanto nuestro comportamiento. Paso 3: Identificar y caracterizar los argumentos En el centro de todo pensador crítico reside la habilidad de reconocer, construir y evaluar argumentos. La palabra argumento puede ser desorientadora para algunos. No significa polemizar, reñir o discrepar, incluso aunque la palabra sea usada con frecuencia informalmente en ese contexto. En el contexto del pensador crítico, un argumento significa presentar una razón que soporte, respalde o apoye una conclusión, es decir: Ejemplo de un argumento: Ejemplos No creas en Pedro porque
él es un político
Conclusión
Indicador Razón
Él es peligroso
ya que
Conclusión
Indicador Razón
viene de un país problemático
Debe haber una o más razones y una o más conclusiones en cada argumento. Dependiendo del uso y el contexto, decir razón es sinónimo de decir: premisa, evidencia, datos, proposiciones, pruebas y verificaciones. Y también dependiendo de su uso y el contexto decir conclusiones es también decir, acciones, veredictos, afirmaciones, sentencias y opiniones. Un pensador crítico debe aprender a tomar y rescatar los argumentos de la comunicación verbal o escrita. Algunas veces los argumentos llevarán indicadores como ya que, porque, debido a, por, por esta razón, como es indicado por, para separar la conclusión de las razones. En otros casos, los argumentos tendrán indicadores como por consiguiente, por eso, de esta forma, así, por tanto para separar la razón de las conclusiones. En otros no habrá indicador y el contexto indicará si la frase lleva la intención de razón o conclusión o ninguna de ellas. En general hay tres tipos de indicadores:
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 94 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
1. Indicadores de posición o conclusión: Son los indicadores que señalan cuál es la posición, postura o idea principal a defender o argumentar. Algunos de estos indicadores son: por consiguiente, así, de esta forma, consecuentemente, con esto se muestra, esto implica. Por ejemplo, Sólo entraron parejas de personas, por consiguiente debe haber un número par de personas. 2. Indicadores de razón: Son los indicadores que señalan cuál es la razón o justificación que apoya la posición u otras razones anteriores. Porque, puesto que, dado que, a causa de, como se puede ver de, debido a, ya que. 3. Indicadores de objeción: Son los indicadores que señalan una oposición o pensamiento en contra de una posición, una razón o una anterior objeción en caso de oponerse a una anterior objeción de denomina refutación o impugnación. Pero, aunque, sin embargo, son de este tipo. Se puede ver un ejemplo más elaborado: Rosa fue la oficial de seguridad que estaba en servicio cuando los diamantes fueron robados. Muchas personas consideran que ella es digna de confianza, porque ella ha trabajado en el puesto durante más de diez años sin problemas. Sin embargo, Rosa pudo haber sido tentada a robar los diamantes, ya que ella ha estado teniendo estos últimos meses dificultades, porque ella juega al póker online cada noche. María dice que Rosa no lo hizo, pero es la mejor amiga de Rosa. La caja fuerte no estaba forzada, por consiguiente el ladrón tuvo que haber usado la llave adecuada. Consecuentemente Rosa robó los diamantes, ya que sólo ella tenía acceso a las llaves. En lógica, se designa como inducción a un tipo de razonamiento que va de lo particular a lo general (concepción clásica) o bien a un tipo de razonamiento en donde se obtienen conclusiones tan sólo probables (concepción más moderna). La inducción matemática es un caso especial, donde se va de lo particular a lo general y, no obstante, se obtiene una conclusión necesaria. Una pluma y un elefante caen con igual aceleración en el vacío, por lo que se induce o se generaliza que todas las masas caen con igual aceleración en el vacío. Típicamente, el razonamiento inductivo se contrapone al razonamiento deductivo, que va de lo general a lo particular y sus conclusiones son necesarias (véase inductivismo razonamiento inductivo). La lógica formal divide el argumento en inductivos y deductivos. Mientras que el pensamiento crítico es una aplicación informal de la lógica, el pensador crítico debería al menos comprender las diferencias fundamentales entre las dos formas. Si una cosa sigue necesariamente a otra esto implica un argumento deductivo. En otras palabras, un argumento deductivo existe cuando B puede estar lógicamente y necesariamente inferido de A. Por ejemplo, si uno hace la siguiente afirmación: "Todos los solteros no están casados (A) y "Pedro es un soltero (B)" Entonces uno puede alcanzar mediante deducción la conclusión necesaria de que Pedro debe no estar casado. Sin embargo, la mayoría de los argumentos que uno se puede encontrar en la vida diaria son inductivos. Al contrario de los argumentos deductivos, los argumentos inductivos no son blanco o negro, porque estos no prueban sus conclusiones con un necesariamente. En lugar de eso, ellos están basados en fundamentos razonables para su conclusión. Un pensador crítico debería entender que no importa como de fuerte es la evidencia que sostenga a un argumento inductivo ya que nunca probará su conclusión mediante un necesariamente o con una absoluta certeza. Es decir, el argumento inductivo solo prueba con cierto grado de probabilidad. Los argumentos presentados en la corte por los abogados son buenos ejemplos de argumentos inductivos, donde un individuo debe ser considerado culpable más allá de la duda razonable o equivalentemente mediante motivos razonables. Siempre será posible encontrar posibles argumentos inducFacultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 95 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
tivos que tengan razones lógicas y que al mismo tiempo lleven a conclusiones erróneas. Como dice el dicho: el camino hacia el infierno está empedrado de buenas intenciones. Por ejemplo, incluso si un jurado encuentra a un individuo culpable más allá de la duda razonable, siempre hay una posibilidad de que el individuo no haya cometido el crimen. El pensador crítico debería evaluar o tasar la coherencia o fuerza convincente de los argumentos inductivos en términos de grado de certidumbre en lugar de absolutos "verdad o mentira", "bien o mal", "blanco o negro". Esto se aplica también a cualquier decisión si o no, ninguno o también a ser realizada. Un razonamiento inductivo que se aplica en los juzgados es, por ejemplo, "En las pruebas forenses con ADN se muestra que Pedro tocó la camisa de Pilar", entonces es probable que Pedro fuera quien cometió el crimen. Sin embargo, existe la duda razonable que puede ser explotada por el defensor. Por ejempl, puede que las muestras estén contaminadas mediante otra persona, que las muestras fueran de otro día, o que simplemente Pedro si se encontrara con Pilar pero que no cometiera el crimen. Paso 4: Evaluar las fuentes de información La mayoría de los argumentos hacen referencia a datos para sostener sus conclusiones. Pero un argumento es tan fuerte como lo son las fuentes o datos a los que se refiere. Si los hechos que sostienen un argumento son erróneos, entonces el argumento será también erróneo. Un pensador crítico deberá aproximarse lógicamente a la evaluación de validez de los datos. Al margen de nuestras propias y personales experiencias, los hechos son normalmente recibidos a través de fuentes de información como los testimonios visuales de otras personas o personas que dicen ser expertos. Estas fuentes son citadas típicamente en los medios o publicadas en libros. En una sociedad donde el entretenimiento y la diversión se han convertido en los fines a largo plazo, es con frecuencia difícil encontrar información sin sesgo o objetiva respecto a un tema. Por ejemplo, los medios de masa han encontrado una forma de expresión que se vende muy bien y es el ¿y si?, es decir, se atreven a aventurar situaciones hipotéticas sin pruebas o ningún tipo de dato no con la intención de mostrar los datos realmente probables sino porque dicha situación sería de gran interés emocional (respecto a sus necesidades humanas básicas) para el público si bien por la conmoción posible, por la alevosía, entusiasmo o gracia que provoca. Por ejemplo. ¿y si el presidente hizo algo horrible?, ¿y si el secretario estaba realizando algún acto criminal? Es usual ver periodistas reputados publicando especulaciones incendiarias como si se trataran de importantes noticias o hechos o políticos igualmente manipulando y distorsionando según los intereses de su partido. ¿Cómo uno puede evitar las especulaciones, distorsiones, comentarios desorientadores, exageraciones en debates, discursos, televisión, radio, periódicos, revistas e internet para dilucidar cuál es realmente la correcta? Incluso algunas editoriales reputadas parecen estar más interesadas en la venta de libros o periódicos más que en confirmar la verdad que publican. Así que como saber ¿de qué fuente de información fiarse? No solamente los medios de comunicación distorsionan y manipulan. En muchos casos los políticos también manipulan, distorsionan y mienten. En muchos casos, en connivencia con algunos medios de comunicación (que en muchos casos apoyan a un pártido político determinado). No hay una respuesta simple, un pensador crítico debería buscar fuentes de información que sean creíbles, precisas y sin sesgo. Esto dependerá de variables como calidad o calificaciones de las fuentes, integridad y reputación. Véase también Lista de prejuicios cognitivos o Argumentum ad verecundiam Ir al principio. Para evaluar o tasar estas condiciones, el pensador crítico debe buscar respuestas en los siguientes tipos de pregunta: 1. ¿Tiene la fuente de información la adecuada capacitación, aptitudes o nivele de entendimiento sobre la materia como para afirmar una conclusión? 2. ¿Tiene la fuente de información reputación por exactitud y veracidad? 3. ¿Tiene la fuente de información un motivo para ser inexacta o altamente sesgada? 4. ¿Existe alguna razón para cuestionarse la honestidad o integridad de la fuente? Si alguna de las respuestas es no para alguna de las dos primeras preguntas y si para las dos últimas, el pensador crítico debería dudar aceptar los argumentos de dichas fuentes para encontrar otra información. Esto puede requerir investigación adicional para buscar fuentes de información confiables. Las fuentes de información normalmente también citan encuestas y estadísticas, que son usados como argumentos que soportan las conclusiones. Es realmente muy fácil, extremadamente fácil, confundir a las personas con los números. Ya que la correcta aplicación de la estadística y de los números para que sirvan a los argumentos se escapa de la finalidad de este artículo, es importante que el pensador crítico se eduque en los principios fundamentales de probabilidad y estadística. Uno no necesita ser un profesional en matemáticas para entender esos principios. Algunos libros excelentes para el hombre de la calle son How to lie with statistics por Darrel Huff y Innumeracy: Mathematical illiteracy and its consequences por John Allen Paulos. Existen un pocas formas de realizar bien las muestras de población y muchas formas de realizar mal las muestras de población, cálculos e informes, ya que muchas veces se ocultan datos que especifican mucho la población. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 96 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Paso 5: Evaluación de los argumentos El último paso para el razonamiento crítico, es la evaluación de los argumentos, este es por sí mismo un proceso de tres pasos para determinar si: 1. Las presunciones, conjeturas, supuestos o asunciones están garantizadas 2. El razonamiento llevado a cabo es relevante y suficiente 3. Existe información que ha sido omitida Asunciones: Las asunciones o suposiciones son esencialmente razones implícitas en un argumento que son garantizadas como verdaderas. Usando el argumento anterior de ejemplo, "No creas en Pedro porque él es un político". La suposición implícita es que los políticos no pueden ser creídos. El primer paso para evaluar los argumentos es determinar si éstos son suposiciones o conjeturas y si dichas asunciones están garantizadas o no. Una asunción garantiza o certificada es aquella que cumple: 1. Es conocida de ser verdadera 2. Es razonable aceptarla sin requerir otro argumento que la soporte Una suposición o asunción no está garantizada si falla en el cumplimiento de cualquiera de los dos criterios anteriores. Concerniente al primer criterio, puede ser necesario para el pensador crítico realizar investigación independiente para clarificar o verificar que es "conocida como verdadera". Si el pensador crítico, a pesar de dicha investigación, es incapaz de realizar una decisión acerca de la verdad, él o ella no deberían arbitrariamente asumir que la suposición está no garantizada véase argumentum a silentio o Ad ignorantiam. Con respecto al segundo criterio, un pensador crítico normalmente evalúa la sensatez, juicio o sentido común de una suposición en función de tres factores: El propio conocimiento y experiencia del pensador crítico La fuente de información para la asunción El tipo de afirmación que se ha realizado Si un argumento tiene una asunción no garantizada, injustificada o sin base, y si ésta asunción es necesaria para validar la conclusión del argumento, el pensador crítico tiene un buen motivo para cuestionar la validez del argumento entero. Muchas de los obstáculos para el entendimiento que hay en las tablas resumen (tablas 3 y 4) son la base para muchas suposiciones sin base. Razonamiento: El segundo paso para evaluar los argumentos es evaluar o tasar la relevancia y suficiencia de un razonamiento o evidencia para soportar la conclusión de un argumento. Es útil pensar en la relevancia como una medida de calidad del razonamiento y la suficiencia como una medida de la cantidad de razonamiento llevada a cabo. Los buenos argumentos deberían tener ambas, calidad (ser relevante) y cantidad (ser suficiente) Normalmente es más fácil (aunque no siempre) extraer del razonamiento lo que es relevante que determinar si el razonamiento es suficiente. Así pues, ¿cómo puede uno evaluar la suficiencia del razonamiento de una evidencia que apoye una conclusión?. El término duda razonable, es usado en los juicios y puede considerarse una buena línea directiva. Pero de nuevo, ¿cómo puede uno determinar la duda razonable? Desafortunadamente, no hay una respuesta sencilla, pero existen varios criterios. 1. Es importante mantener una actitud de pensador crítico del paso 1 y estar alerta de los obstáculos y trampas del pensamiento crítico del paso 2. 2. Preguntarse asimismo el propósito o las consecuencias que podría tener un argumento realizado. Esto normalmente determinará cuantas pruebas o evidencias serán necesarias. Un móvil o un motivo puede ayudarnos a esclarerecer por donde se debe buscar información nueva. 3. Estar alerta de los estándares actuales de evidencia para un sujeto. Por ejemplo, no puede juzgar la suficiencia de una evidencia para una afirmación científica a menos que tú conozcas los métodos y estándares para la verificación de similares afirmaciones científicas. 4. La suficiencia de una evidencia debería estar en proporción a la fuerza con la que una conclusión ha sido afirmada. Esto es, evidencia que no es suficiente para apoyar una conclusión fuerte (ejemplo conclusión fuerte: Pedro definitivamente compró la pintura) puede ser suficiente para apoyar a una conclusión débil (ejemplo: Pedro, pudo haber comprado la pintura). En estos ejemplos, si las evidencias se limitan a una fotografía de Pedro en la tienda el mismo día que la pintura fue comprada, esta evidencia no debería ser suficiente para probar una conclusión fuerte, pero si ser suficiente para probar una conclusión débil. Cuando se evalúan múltiples pruebas, tanto los pro como los contra, ¿cómo puede uno valorar el peso de la evidencia para determinar si un argumento es convincente?. Otra vez, no hay una respuesta rápida. Para ser equitativos, a más confiable es la fuente del paso 4, mayor peso debería darse a la evidencia. Adicionalmente para ser equitativos, a mayor peso que se haya dado a una evidencia (que se contradice con otra), debería también proporcionarse o requerirse mayor número de evidencias en términos de relevancia y suficiencia para validar el arguFacultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 97 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
mento. Muchas de las trampas u obstáculos al entendimiento listadas en las tablas 3 y 4 o en lista de prejuicios cognitivos dan ejemplos de razonamientos insuficientes o irrelevantes. Omisión: Un argumento convincente es aquel que está completo, es decir, en el que está presente todas las evidencias o razonamientos relevantes y no solo las evidencias que apoyen el argumento en una determinada dirección. Argumentos que omiten pruebas relevantes pueden parecer más fuertes de lo que realmente son. Este es el paso final para la evaluación de los argumentos es tratar de determinar si evidencias o pruebas importantes han sido omitidas o eliminadas. Algunas veces esto pasa sin intención o descuido o ignorancia, pero con demasiada frecuencia es un acto intencionado. Como es normalmente improductivo o sin sentido reunir a los argumentadores o debatidores y preguntarles si han omitido datos, el mejor modus operandi del pensador crítico es buscar argumentos que se opongan al tema en cuestión, con lo cual dicha búsqueda revelará con suerte dichas omisiones. Es muy raro ver a una persona que activamente busca puntos de vista opuestos y los trata seriamente. Es muy raro porque precisamente es lo que un pensador crítico hace. Lista de comprobación para un argumento Una vez entendidos los cinco pasos anteriores es un pensador crítico podría usar adicionalmente una lista rápida para evaluar argumentos importantes. Estas preguntas deberían responderse usando la política de los cinco pasos. 1. ¿Existe alguna ambigüedad, punto oscuro o debilidad que bloquea mi entendimiento o comprensión del argumento? 2. ¿Acaso el argumento en cuestión abraza o cae en alguna de las falacias o trampas al entendimiento de lista de prejuicios cognitivos o tablas del 1 al 4? 3. ¿Es el lenguaje usado excesivamente emocional o manipulador (véase recurrir a las emociones o tabla 2? 4. ¿He separado el razonamiento (evidencias) y asunciones o hechos relevantes de la información irrelevantes, situaciones imaginarias presentadas o hipótesis, ejemplos imaginarios, o información de fondo no contrastada? 5. ¿He determinado cuales asunciones están garantizadas y cuáles no? 6. ¿Puedo listar las razones o evidencias para un argumento y alguno de sus subargumentos? 7. ¿He evaluado la verdad, relevancia, equidad, justicia, integridad, plenitud, significancia y suficiencia de las pruebas que apoyan la conclusión? 8. ¿Necesito información adicional para realizar un juicio razonable sobre un argumento porque pueden haber omisiones u otras razones? 9. Tablas referencia: trampas al pensamiento crítico Tabla 1: Barreras debidas a las limitaciones del ser humano Trampa/Obstáculo
Definición
Ejemplo
Consejo Pmto. Crítico
Sesgo de confirmación y pensamiento selectivo
El proceso mediante el cual uno tiende a notar y mirar y dar más valor a los hechos, evidencias o pruebas que confirman las propias creencias y a obviar, ignorar o desvalorar las evidencias que las contradicen
Si uno cree que hay más asesinatos con luna llena entonces tenderá a leer o percibir más las noticias de asesinatos que ocurren en luna llena y tiende a descartar los asesinatos que ocurren en otras circunstancias.
Lo mejor es obtener evaluar objetivamente toda la información relevante y ponerse en la postura contraria del caso antes de realizar un juicio de valor.
Sesgo de memoria, Confabulación
Esta trampa se produce cuando uno desconoce que con frecuencia la memoria es manufacturada para llenar los espacios vacíos en nuestras historias, es decir, que la memoria de los hechos, con el tiempo puede ser inconscientemente reemplazada por fantasía
Los oficiales policiales no deberían mostrar una foto de un posible asaltante o agresor a un testigo antes de una previa alineación con otros sospechosos, o la memoria real del testigo puede ser inconscientemente reemplazada
Poner más seguridad y confianza en los hechos probados que en las memorias, recuerdos recolectados o testimonios de otros. Conocer tus propias limitaciones de memoria.
Ignorancia
Uno puede estar convencido que Se produce cuando existe una falta de coun "mago" tiene el poder de hacer nocimiento esencial de fondo o de inforlevitar objetos, pero no ve o sabe mación sobre un tema cuando se realiza de la fina cuerda que tiene atados un juicio de valor a ellos
Realizar las indagaciones o investigaciones apropiadas en los múltiples puntos de vista existentes sobre el tema para obtener todas las evidencias pertinentes antes de hacer un juicio de valor o lanzar conclusiones.
Percepción selectiva
Se produce cuando uno está desprevenido Mirando hacia las estrellas por la o es inconsciente de que nuestra propias noche y percibir que ellas están limitaciones de percepción pueden llevar- tan cerca como la luna y los pla-
Reconocer que "mirar" no es siempre "creer" porque nuestros sensores y la percepción o interpretación por parte del ce-
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 98 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
nos a desorientarnos sobre la realidad
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
netas. O mirar la luna y pensar que esta nos sigue
rebro subsiguiente tienen limitaciones Ilusiones ópticas. Conocer cuándo y cómo verificar tus observaciones con otras fuentes.
Sesgos personales y prejuicios
Se produce cuando uno está desprevenido o es inconsciente de que cada uno de nosotros tiene sus propios sesgos y prejuicios, resultado de nuestras propias y únicas experiencias vividas y el punto de vista del mundo, lo cual hace difícil permanecer objetivo y pensar de forma crítica
Algunas personas tienen prejuicios en contra de las afirmaciones realizadas por los científicos porque desde su punto de vista éstas parecen demasiado frías o impersonales
Resistir a tus propios prejuicios mediante una focalización en los hechos, las fuentes y el razonamiento que apoya los argumentos.
Barreras físicas y emocionales
Se produce cuando uno está desprevenido o es inconsciente de que uno al tener estrés, fatiga, drogas y limitaciones de este tipo, puede influir y afectar severamente a nuestra habilidad para pensar con claridad y crítica
Los controladores aéreos suelen tener dificultades para tomar buenas decisiones después de largas horas de trabajo
Limitar o restringirse de hacer decisiones críticas cuando se esté extremadamente exhausto, estresado o mentalmente/físicamente indispuesto.
Se produce cuando uno está desprevenido o es inconsciente de que uno suele basar en testimonios, anécdotas vividas de otros Las dramáticas historias de las vila construcción de sus propias creencias, Evidencia testimonial siones del "hombre de la nieve" incluso aunque éstas sean conocidas cono prueban su existencia mo inherentemente subjetivas (falsa vivencia), inexactas, increíbles, sesgadas e incluso ocasionalmente fraudulentas
Resistirse a realizar juicios de valor basados solo en testimonios. Afirmaciones extraordinarias generalmente requieren también evidencias y pruebas extraordinarias
Tabla 2: Barreras debidas al uso del lenguaje Trampa/Obstáculo
Ambigüedad
Definición
Ejemplo
De la frase, "Experto en mentiras testificó Se produce cuando una palabra o exen el juicio" ¿es el experto un mentiroso o presión puede ser entendida en más de es una persona que es capaz de saber un sentido cuando alguien miente?
Consejo Pmto. Crítico Si el significado pretendido de una palabra o expresión ambigua no puede ser determinado, evite realizar juicios de valor.
Se produce cuando se usa una expreExpresiones cerradas o Expresiones como "Como todo el mundo sión que evita que uno pueda llegar a inamovibles o dadas sabe" o "El sentido común nos dice" o cuestionarse la validez de los argupor hecho "Como siempre", "cómo es evidente" mentos
Evitar o descartar las expresiones cerradas y centrarse en los hechos y el razonamiento que soportan los argumentos.
Referirse a la política de asesinatos en masa o magnicidio como "limpieza étnica" o al homicidio accidental de personas inocentes como "daño colateral". Usando el contexto militar, frases como "neutralice toda oposición" más que mate o asesine (negativa)
Observar más allá del contenido emocional y reconocer el contenido cognitivo o basado en los hechos de las palabras y expresiones eufemísticas.
Eufemismos y doble moralidad
Se produce cuando se pretenden usar palabras o expresiones inofensivas para desorientarnos, evadirnos, o evitar enseñarnos la verdadera, cruda y desagradable realidad
Se produce cuando se usa lenguaje específico o técnico para hacer parecer lo simple mucho más complejo, Jerga, argot o lenguaje hacer parecer lo trivial mucho más técnico profundo, o lo insignificante importante, de forma intencionada y para impresionar a los demás
Referirse a una familia como "un conjunto limitado de individuos que juegan cada Reconocer el contenido basado en uno su papel" o a un desalojado o sin te- hechos de las expresiones o palabras cho como a un "miembro de la sociedad en jerga. sin un objetivo" Llamar a un detergente "Diver" o "Genial" (connotaciones positivas) y no "Rutinol" o "Tristón" (connotaciones negativas). En el contexto político, "Lo haremos por el pueblo, para que todo el mundo pueda conseguir lo que quiera, para que se sientan orgullosos, dignos de pertenecer a este gran País"
Contenido emotivo
Se produce cuando se usa intencionadamente palabras para alimentar y avivar los sentimientos sobre un tema sesgando o creando prejuicios en los otros de forma positiva o negativa. La finalidad habitual es para ganar influencia o poder
Implicación falsa
Es un lenguaje que es claro y preciso La industria de la alimentación inteligen- Entender no solo los hechos sino pero desorientador porque sugiere al- temente expresa el contenido de grasas también su relevancia y contexto. Se
Aprender a reconocer y distinguir el contenido emotivo del lenguaje. Tratar de concentrarse en el razonamiento y el contenido real o basado en los hechos del lenguaje cuando se esté evaluando los argumentos.
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 99 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
go falso
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
como un porcentaje del peso del producto recomienda entender o saber interno de calorías. Esto es un 2% "leche baja pretar estadísticas. en grasas" en realidad tiene un 31% de grasa cuando la grasa es medida como porcentaje de calorías
Galimatías
Es el uso de lenguaje no técnico pero confuso para desorientar o embaucar
Una compañía usa lenguaje intimidatorio y lánguido para simplemente expresar Reconocer los hechos en el contenique si tu orden de pago es devuelta, endo de las expresiones con galimatías. tonces el recibo de pago también es anulado
Andarse con rodeos o palabras evasivas
Es el uso del lenguaje que parece llevarnos a un punto de vista particular o en un sentido pero debido a sus palabras permite negar esa intención y retirarse
La afirmación del presidente Clinton de que no había tenido "una relación sexual" con Mónica Lewinsky y que después explicó que "realizar una felación" no es mantener una relación sexual
Juicios de valor
Distinguir entre lo que es un hecho y lo que es una opinión en cada arguRealizar opiniones o juicios de valor mento. En este ejemplo un hecho como si pensáramos que son hechos El presidente se mostró con motivo orgu- pudo haber sido que el presidente se para que la audiencia no tenga porqué lloso al firmar el tratado de paz. mostrara orgulloso por la firma pero preocuparse por realizar su propio juila coletilla con motivo viene de una cio opinión personal que no ha sido argumentada.
Comparaciones sin sentido o absurdas
Una afirmación de un anuncio sobre una batería solo dice: "Hasta un 30% más de Se trata de realizar una comparación duración" sin embargo, no dice, que "du- Evitar realizar juicios si no se está que implica que algo es superior pero rará" un 30% más ya que la palabra has- completamente seguro sobre lo que al mismo tiempo se puede negar que ta permite todo un recorrido y si lo hicie- está siendo comparado lo sea ra no dice sobre qué se produce el incremento del 30%
Vaguedad o indefinición
Si alguien necesita cobrar mañana y el Se trata de un lenguaje que es menos Estar alerta de las consecuencias de prestamista dice, "Te pagaré pronto" la preciso que lo que el contexto requieusar afirmaciones imprecisas o varespuesta del prestamista es, en ese caso o re gas. contexto, demasiado vaga.
Estar atento de rodeos o palabras evasivas no claras que eliminen los detalles que evidencien o determinen con claridad los hechos de un argumento.
Tabla 3: Barreras debidas a fallos en la lógica o percepción (Falacias y sesgos lista de prejuicios cognitivos) Trampa/Obstáculo
Definición
Ejemplo Algunos investigadores rechazan "los comentarios hostiles" del adversario y alegan que éstos modifican los instrumentos de medida o estropean las pruebas
Consejo Pmto. Crítico
Ad Hoc
Una nueva hipótesis o parche, que no puede ser independientemente testado, es usado para explicar los hechos que refutan una afirmación o teoría haciéndola no falsificable
Poner poca seguridad o confianza o reservarse los juicios de valor sobre afirmaciones que no pueden ser probadas independientemente por cualquiera.
Apofenia y superstición
Irracionalmente se cree que como uno siempre lleva su sombrero mientras ve Es la percepción errónea de una conexión Reconocer la diferencia entre causa y el fútbol, cuando no lo lleva se percibe entre eventos que en realidad no están reefecto en contra de coincidencias que hay casualmente otras jugadas: se lacionados irrelacionadas. asocia que el sombrero puede influir en el juego
Argumentum ad ignorantiam
Creer que debe haber vida en Marte porque nadie ha probado que no hay vida en él. No creer en Plutón porque Es una falacia lógica que afirma que algo nadie te ha probado que existe. Creer es verdad por el mero hecho de no haber en Dios porque nadie puede probar que sido probado como falso no existe. Creer en los extraterrestres porque nadie puede probar que no existen
No creer en una proposición simplemente porque no puede ser probada como falsa. La creencia se debe apoyar o basar en los argumentos no en el subjetivo conocimiento que tenga uno o la humanidad sobre algo. En caso de no tener información la mejor postura es abstenerse a hacer juicios de valor o agnosticismo, Véase lista de prejuicios cognitivos.
Razonamiento circu- Es una forma falaz de razonamiento en el Un hombre afirma que los fenómenos Reconocer cuando un argumento lar que uno asume como verdadero algo que paranormales existen porque él ha teni- asume un lema como verdad sin Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 100 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
al mismo tiempo intenta probar
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
do experiencias que pueden únicamente ser descritas como paranormales. Es decir, si se asume que únicamente puede ser descrito como algo paranormal evidentemente se asume la existencia o lo que se intenta justificar. Ej. Los saltadores del circo llevan cables sujetos porque es imposible que éstos salten sin temor en el circo sin llevar cables. Estos razonamientos se usan también el el método socrático pero conscientes de la premisa supuesta y para encontrar hipótesis falsas
haber argumentado y al mismo tiempo se trata probar ese mismo lema. Si esto ocurre hay que buscar por explicaciones alternativas.
Es la impresión errónea de que algunos eventos totalmente aleatorios ocurren de forma agrupada o serial y no totalmente aleatoria
En algunos experimentos paranormales la búsqueda de agua con una varita: éste sistema puede encontrar agua por probabilidad sobre un largo periodo de tiempo y asumirse que esto prueba que la vara funciona
Entender los principios básicos de probabilidad y estadística. Reconocer cuando los números están siendo usados correctamente y objetivamente y cuando están desviados o usados incorrectamente.
Falsa analogía
Hacer analogías ilógicas para apoyar la validez de una afirmación particular
Argumentar que está mal que dos niños compartan la misma cama porque las camas dobles o convivencia de criminales en las penitenciarías puede conducir a un mal comportamiento
Aprender a reconocer los fallos en las asunciones y errores de contexto que se encuentran detrás de las falsas analogías.
Efecto Forer
Es la tendencia a aceptar descripciones de personalidad vagas que pueden ser aplicables a cualquiera como únicamente aplicables a uno mismo (horóscopo, carta astral, quiromancia)
Las cartas astrales o los horóscopos tratan a las personas de un signo específico con calificativos que serían aplicables a cualquier individuo. Este efecto funciona en conjunción con el autoengaño y Pensamiento mágico
Evaluar de forma crítica si las descripciones personales son únicamente verdaderas para ti o podrían ser aplicables para la mayoría de las personas.
Esta falacia se basa en creer que un suceso con probabilidades fijas, como el lanzamiento de una moneda, puede increFalacia del jugador o mentar o decrementar sus posibilidades falacia de Gambler en función de los resultados más recientes. Es decir, pensar que algunos sistemas tienen memoria cuando no lo tienen.
El concepto equivocado de tomar números de lotería que no han sido todavía resultado ganadores puesto que esto incrementará nuestras probabilidades de ganar]
Aprender a reconocer y distinguir entre eventos que tienen una probabilidad fija o una probabilidad variable a parámetros
Ilusión de serie o falacia del francotirador
Comparación irrelevante
Estar seguro de estar comparando "manzanas con manzanas", es decir, Realizar la afirmación: "Para una oficique si la finalidad de la comparación na la impresora A es mejor pues hace Realizar una comparación que es irrelees ver qué manzana es mejor, pues mejores copias que la impresora B, vante, inapropiada o entre objetos de difeentonces hacer que la comparación cuando se ignora un hecho importante rentes niveles o clases tenga sentido. El problema normalcomo que la impresora B también permente viene de no tener claro o bien mite enviar fax, copiar y escanear definido la finalidad de la comparación.
Ley de los grandes números
Un error que se produce al entender que en una muestra lo suficientemente grande muchas aparentemente improbables coinDecir que el número 11 es especial por cidencias son de hecho probables coinciel 11 de septiembre puede ser rebatido dencias, es decir, probables de ocurrir. matemáticamente o estadísticamente Esto se debe al propio efecto foco osesgo de confirmación en la percepción e interpretación de los datos.
Entender los principios básicos de probabilidad y estadística. Reconocer cuando los números están siendo usados correctamente y objetivamente.
Aprender a reconocer cuando los argumentos están soportados por razones irrelevantes. Este tipo de falacia es muy importante por lo común y generalizada que está. Esta falacia evita tener claros los motivos, incluso para la propia persona, por lo que se hacen las cosas. Es usual verla con el auto-engaño.
Non sequitur
Las razones dadas para soportar una afirmación son irrelevantes o no correladas
Decir: "Tengo miedo al agua así que mi deporte será el puenting" o "me gusta conducir por eso me compro un Toyota". En cualquiera de los casos comprarse un Toyota o hacer puenting no depende directamente de la razón dada ya que hay muchos más coches o deportes que se han descartado
Pareidolia
Un tipo de error de confusión en la per-
La mayoría de los avistamientos OVNI, Reconocer que una vaga percepción
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 101 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
cepción debida a la natural asociación e Bigfoot, Elvis o también las asociacioinstinto social de reconocimiento de ex- nes a caras en las nubes u otros objetos presiones faciales y objetos comunes que se produce cuando al introducir un estímulo vago éste se percibe como algo claro, distintivo o altamente significante. Pueden estar provocados por sesgos de memoria (errores en la red neuronal bayesiana de asociación que nos hacen creer haber visto algo que realmente no vimos), por sesgos de confirmación, o por sesgos naturales de asociación
de un evento extraño puede tener múltiples explicaciones y no únicamente la primera asociación natural. Buscar explicaciones alternativas que sean más probables que emocionantes.
Post hoc ergo propter hoc
Tratar de identificar, el porqué, las causas posibles conocidas o los mecanismos que las producen, de los Es el error cometido al pensar que cuando Creer que tocar los tambores durante efectos observados, empezando con una cosa A viene tras otra B, la primera A un eclipse hará que el sol vuelva al cie- aquellos mecanismos que son más es necesariamente la causa del segundo lo probables. En su defecto, aplicar evento B prueba y error y método científico que aporten nuevas excepciones, variables desconocidas y datos.
Falacia pragmática
Esta falacia se produce cuando se afirma que algo es verdad porque "funciona", incluso aunque la causalidad entre algo y un resultado no esté demostrada. En ingeniería se usa mucho esta falacia por el esfuerzo o energía que permite ahorrar "Si funciona no lo toques". Es un caso especial de Cum hoc, ergo propter hoc
Creer que si se reza mucho lloverá. Y continuar haciéndolo a pesar de que el hecho de que llueva es altamente probable y puede deberse a muchos otros factores. O después de usar un cinturón magnético curativo notar que los dolores de espalda desaparecen incluso cuando esto puede ser debido por otras razones
Tratar de identificar el porqué o los posibles mecanismos que causan los efectos observados, empezando con los más probables y no con los más atractivos emocionalmente.
Falacia regresiva
Si a alguien le duele el cuello y este dolor fluctúa, la persona tratará de probar nuevos remedios cuando el dolor es mayor. Es decir, se encuentra en la Se produce al obviar la natural e inevita- cúspide del dolor. Cuando aplique el ble fluctuación probabilística debido a va- remedio y de forma natural el dolor riables desconocidas de las cosas cuando mengue lo asociará al nuevo remedio se trata de hallar la causa efecto. Es un erróneamente. Igualmente la gente trata caso especial también de Cum hoc, ergo de invertir en la bolsa sólo cuando ésta propter hoc está muy bien, pero cuando ésta vuelve a la normalidad lo achacan a su mala suerte. El problema está en no tener suficiente información o estadística extensa
Tratar de identificar y entender los patrones de comportamiento o realizar una estadística correcta antes de realizar juicios de los eventos observados.
Falacia del efecto dominó o pendiente deslizante
Un argumento que asume que una cascada de elementos adversos o propicios sucederá con el primer movimiento, sin ofrecer prueba de ello
Debido a que los inspectores han regulado y controlado dónde fumar en Evaluar la lógica o los argumentos público, al final se acabará en un conque sostienen que la cascada de eventrol cerrado de todas las cosas de nuestos sucederá. tra vida privada. Véase lista de prejuicios cognitivos para más información
Tabla 4: Barreras o trampas debidas a fallos psicológicos o sociológicos (Falacias y lista de prejuicios cognitivos) Trampa/Obstáculo
Definición
Ejemplo
Ad Hominem
No deberías creer ni una sola palabra de mi opoCriticar a la persona que realinente porque él está enza el argumento y no el argufadado porque yo siemmento en sí mismo pre termino primero en la pole
Argumentum ad verecundiam o apelar a la autoridad
Procurar que una afirmación controvertida sea aceptada bajo la base de que está realizada por una persona admirada,
Consejo Pmto. Crítico Centrarse en las razones y hechos que soportan un argumento y no en la persona que los realiza. Independientemente, verificar los hechos aportados si la fuente es cuestionable. Pero nunca desechar la información, aún menos si no se ha trabajado antes con las fuentes y se desconozce su fidelidad y la única referencia es a través de otros.
Como el papa piensa que Reconocer que cualquier intento de apelar a la autoridad es la pena capital está moirrelevante a la hora de dar una base lógica sólida o hechos ralmente justificada enque apoyen ciertamente un argumento. tonces debe estar moral-
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 102 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
respetada, conocida o importante.
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
mente justificada
Falacia Una falacia o sofisma es, según la definición de Irving Copi, un razonamiento lógicamente incorrecto, aunque psicológicamente pueda ser persuasivo. Cabe aclarar que un razonamiento falaz no necesariamente posee una conclusión falsa; así como un razonamiento correcto o válido no necesariamente tiene una conclusión verdadera. Los razonamientos falaces no son "falaces" por arribar a una conclusión falsa, sino por un error en su procedimiento. Podría decirse que una falacia es un razonamiento en que la conclusión no se deriva estrictamente de las premisas, aunque parece hacerlo. Ejemplos de razonamientos falaces Se ilustran errores comunes en un razonamiento. Cabe destacar que la crítica de un razonamiento no tiene relación con la validez de su conclusión. La conclusión puede ser válida, mientras que el razonamiento en sí mismo puede no serlo. Juan está enamorado. A Juan le gusta Carla. Por tanto, Juan está enamorado de Carla. Pero Carla no de Juan. La mejor forma de mostrar que el raciocinio anterior no es válido es usar diagramas de Venn. En terminología lógica, el raciocinio no es válido ya que al menos ante una interpretación de los predicados no preserva su validez. Desafortunadamente, pocos razonamientos falaces son tan claros como el ejemplo anterior. Muchos de ellos involucran causalidad, que no es una parte de la lógica formal. Otras utilizan estratagemas psicológicas como el uso de relaciones de poder entre el orador y el interlocutor, llamamientos al patriotismo, la moralidad o el ego para establecer las premisas intermedias (explícitas o implícitas) necesarias para el razonamiento. De hecho, las falacias se encuentran muy a menudo en presunciones no formuladas o premisas implícitas que no son siempre obvias a primera vista. Primer ejemplo 1. Germán es un buen jugador de tenis. 2. Por tanto, Germán es 'bueno', esto es, bueno moralmente. Aquí el problema se encuentra en que la palabra 'bueno' es una palabra ambigua, lo que quiere decir es que tiene diferentes significados. En la premisa, se afirma que Germán es bueno en una actividad particular, en este caso tenis. En la conclusión, se afirma que Germán es bueno moralmente. Éstos son claramente significados distintos de la palabra 'bueno'. Aunque la premisa sea cierta, la conclusión puede ser falsa: Germán puede ser el mejor jugador de tenis del mundo y al mismo tiempo ser malvado. Segundo ejemplo Una variante humorística de la falacia de la ambigüedad: 1. Una hamburguesa es mejor que nada. 2. Nada es mejor que la felicidad eterna. 3. Por tanto, una hamburguesa es mejor que la felicidad eterna. Este razonamiento tiene la apariencia de una inferencia que aplica transitividad en la relación «es mejor que», que en principio es posible, el problema está dado por el significado de nada. En este caso, es un ejemplo de ambigüedad semántica. En: "Una hamburguesa es mejor que nada". La palabra nada significa: la ausencia absoluta de cualquier ser o cosa. En cambio, en: "No hay nada mejor que la felicidad eterna". La palabra nada significa: no existe cosa que [sea mejor que felicidad eterna]. No hay que pensar en "ninguna cosa" como un objeto en si, sino como la abstracción de la "no existencia". Tercer ejemplo Ejemplos cotidianos: 1. El oro brilla. 2. Esta daga brilla. 3. Por lo tanto, esta daga es de oro. Este es un ejemplo de falacia de afirmación de consecuente. Esta falacia tiene la forma: 1. P es Q 2. M es Q 3. Por lo tanto, M es P Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 103 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Por definición, cuando un razonamiento es correcto y sus premisas son verdaderas, entonces su conclusión es verdadera. En este caso, tenemos que las premisas son verdaderas y la conclusión no necesariamente verdadera, ya que la daga puede ser de oro (siendo verdadera) o de otro material brillante como por ejemplo el hierro (siendo falsa). Por tanto, el argumento es incorrecto. La manera de saberlo es empleando contraejemplos que lleven al límite estas estructuras falaces. Prejuicio cognitivo Un prejuicio cognitivo (del inglés cognitive bias, „predisposiciones cognitivas‟) es una distorsión cognitiva que afecta al modo en el que los humanos percibimos la realidad. Algunos de estos procesos han sido verificados empíricamente en el campo de la psicología, otros están siendo considerados como categorías generales de prejuicios. Véase lista de prejuicios cognitivos. Toma de decisiones y predisposiciones conductuales
En un experimento ideado por Wolfgang Köhler, se pide al sujeto que diga cuál de estas figuras se llama booba y cuál kiki. El 98% de los sujetos le asigna el nombre booba a la figura de la derecha, quizá porque los labios se redondean para producir el sonido o porque en el alfabeto romano, las letras b, o y a tienen una forma más redondeada que k e i (puntiagudas).
Capitulo 6 Se necesitan dos años para aprender a hablar y sesenta para aprender a callar. Leo Buscaglia "Uno de los defectos de la educación superior moderna es que hace demasiado énfasis en el aprendizaje de ciertas especialidades, y demasiado poco en un ensanchamiento de la mente y el corazón por medio de un análisis imparcial del mundo." Bertrand Russell Métodos numéricos simples: Iteraciones manuales y automáticas Ej1. Se arroja una piedra desde un edificio con una velocidad inicial 0. Se desea calcular la altura total h del edificio conociendo el tiempo de caída libre en segundos. Utilizar la fórmula del MA caída libre h = 1 / 2 * g * t ^ 2. Pseudocódigo Algoritmo ej11 Variables Real: t, g, h Inicio Escribir 'Ingrese el tiempo de caída libre:' Leer t g ← 9.8 h←1/2*g*t^2 Escribir 'altura total=', h Fin.
Pascal program ej12; var t, g, h: real; begin write ('Ingrese el tiempo de caída libre'); readln (t); g := 9.8; h := 1 / 2 * g * t *t; writeln ('altura total=', h); end.
Lenguaje C #include main () { float t, g=9.8, h; printf( "Ingrese el tiempo de caída libre: " ); scanf( "%f", &t ); h = 1 / 2 * g * t *t; printf( "altura total= %f\n", h ); }
Ej2. De acuerdo a l ejercicio anterior, informar si el edificio en un rascacielos o no lo es, se hace la suposición que un piso mide 3 metros y un rascacielos tiene más de 30 pisos. Pseudocódigo Algoritmo ej21 Variables Real: t, g, h, pisos Inicio Escribir 'Ingrese el tiempo de caída libre:' Leer t
Pascal program ej22; var t, g, h, pisos: real; begin write ('Ingrese el tiempo de caída libre'); readln(t);
Lenguaje C #include main () { float t, g=9.8, h; printf( "Ingrese el tiempo de caída libre: " ); scanf( "%f", &t );
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 104 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
g ← 9.8 h←1/2*g*t^2 pisos ← h/3 si pisos>30 entonces Escribir 'Rascacielos de ', pisos, ' pisos' sino Escribir 'Edificio de ', pisos, ' pisos' finsi Escribir 'altura total= ', h Fin.
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
g :=9.8; h := 1 / 2 * g * t *t; pisos ← h/3; if pisos>30 then writeln ('Rascacielos de ', pisos, ' pisos') else writeln ('Edificio de ', pisos, ' pisos'); writeln ('altura total=', h); end.
h = 1 / 2 * g * t *t; pisos ← h/3; if (pisos>30) printf( "Rascacielos de %f pisos\n ", h ); else printf( "Edificio de %f pisos\n ", h ); printf( "altura total= %f\n", h ); }
Ej 3. Dado la altura del edificio H en metros, determinar el tiempo de caída de la piedra, sin despejar de la fórmula, proponiendo valores a t (iterando con t) hasta encontrar la altura con una buena aproximación (1%). Realice dos algoritmos, el primero que encuentre el tiempo en forma manual, el segundo de manera automática. Nota: se puede proponer el tiempo de caída desde una altura máxima para todos los rascacielos. Manual Algoritmo ej31 Variables Real: t, g, H, h_c caracter: Opcion Inicio Escribir 'Ingrese la altura del edificio:' Leer H g ← 9.8 Repetir Escribir 'Proponer valor de tiempo:' Leer t h_c ← 1 / 2 * g * t ^ 2 ErA ← H – h_c Escribir 'Error absoluto:', ErA Escribir '¿Mas iteraciones? S/N:' Leer Opcion Hasta que Opcion ='N' Escribir 'tiempo de caída= ', t Fin.
Automático Algoritmo ej32 Variables Real: t, g, H, hmedio, ErRP, ErRC, tmax, tmin, tmedio Inicio Escribir 'Ingrese la altura del edificio y error Rel propuesto:' Leer H, ErRP Escribir 'tiempo máximo de caída:' Leer tmax tmin ← 0 g ← 9.8 Repetir tmedio ← (tmin + tmax) / 2 hmedio ← 1 / 2 * g * tmedio ^ 2 ErRC ← Abs ((H – hmedio)/H) *100 si hmedio > H entonces tmax ← tmedio sino tmin ← tmedio finsi Hasta que ErRC < ErRP Escribir 'tiempo de caída= ', tmedio Fin.
Ej. 4. Encontrar la raíz de la ecuación cúbica x^3 - 6x^2 + x – 56 = 0. La raíz debe estar en un intervalo [a, b] donde e signo de f (a) es distinto del signo de f (b). Para nuestro ejemplo el intervalo puede ser [0,20] y error deseado menor a 1%. Rta: 7 Manual Algoritmo ej41 Variables Real: a, b, f caracter: Opcion Inicio {Reescribimos la ecuación f = x^3 - 6x^2 + x = 56 }' Repetir Escribir 'Proponer valor de x:' Leer x f ← x^3 - 6x^2 + x ErA ← f - 56 Escribir 'Error absoluto:', ErA Escribir '¿Mas iteraciones? S/N:' Leer Opcion Hasta que Opcion ='N' Escribir 'Raíz aproximada = ', x Fin.
Automático Algoritmo ej42 Variables Real: a, b, m, m1, m2, ErRP, ErRC, fm Inicio Escribir 'Ingrese intervalo a y b y error propuesto' Leer a, b, ErRP m ← (a + b) / 2 Repetir fa ← a^3 – 6 * a^2 + a - 56 fm ← m^3 – 6 * m^2 + m - 56 si fa*fm > 0 entonces a←m sino b←m finsi m1 ← m m ← (a + b) / 2
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 105 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
m2 ← m ErRC ← Abs ((m1 –m2)/m1) *100 Hasta que ErRC < ErRP Escribir 'Raíz aproximada= ', m Fin.
Capitulo 7 Una opinión equivocada puede ser tolerada donde la razón es libre de combatirla. Thomas Jefferson He aprendido que los errores pueden ser tan buenos profesores como el éxito. Séneca Complejidad Complejidad es la cualidad de lo que está compuesto de diversos elementos. En términos generales, la complejidad tiende a ser utilizada para caracterizar algo con muchas partes que forman un conjunto intrincado. Etimología: Desde un punto de vista etimológico, la palabra complejidad es de origen latino, proviene de complectere, cuya raíz plectere significa trenzar, enlazar. El agregado del prefijo “com” añade el sentido de la dualidad de dos elementos opuestos que se enlazan íntimamente, pero sin anular su dualidad. De allí que “complectere” se utilice tanto para referirse al combate entre dos guerreros, como al entrelazamiento de dos amantes. La complejidad y sus implicaciones son las bases del denominado pensamiento complejo de Edgar Morin. Complejidad computacional La teoría de la complejidad computacional es la rama de la teoría de la computación que estudia, de manera teórica, los recursos requeridos durante el cómputo de un algoritmo para resolver un problema. Los recursos comúnmente estudiados son el tiempo (mediante una aproximación al número y tipo de pasos de ejecución de un algoritmo para resolver un problema) y el espacio (mediante una aproximación a la cantidad de memoria utilizada para resolver un problema). Se pueden estudiar igualmente otros parámetros, tales como el número de procesadores necesarios para resolver el problema en paralelo. La teoría de la complejidad difiere de la teoría de la computabilidad en que ésta se ocupa de la factibilidad de expresar problemas como algoritmos efectivos sin tomar en cuenta los recursos necesarios para ello. Los problemas que tienen una solución con orden de complejidad lineal son los problemas que se resuelven en un tiempo que se relaciona linealmente con su tamaño. Hoy en día las computadoras resuelven problemas mediante algoritmos que tienen como máximo una complejidad o coste computacional polinómico, es decir, la relación entre el tamaño del problema y su tiempo de ejecución es polinómica. Éstos son problemas agrupados en la clase P. Los problemas que no pueden ser resueltos por nuestras computadoras (las cuales son Máquinas Determinísticas), que en general poseen costes factorial o combinatorio pero que podrían ser procesados por una máquina no-determinista, están agrupados en la clase NP. Estos problemas no tienen una solución práctica, es decir, una máquina determinística (como una computadora actual) no puede resolverlos en un tiempo razonable. La notación O Un problema dado puede verse como un conjunto de preguntas relacionadas, donde cada pregunta se representa por una cadena de caracteres de tamaño finito. Por ejemplo, el problema factorización entera se describe como: Dado un entero escrito en notación binaria, retornar todos los factores primos de ese número. Una pregunta sobre un entero específico se llama una instancia. por ejemplo, "Encontrar los factores primos del número 15" es una instancia del problema factorización entera. La complejidad temporal de un problema es el número de pasos que toma resolver una instancia de un problema, a partir del tamaño de la entrada utilizando el algoritmo más eficiente a disposición. Intuitivamente, si se toma una instancia con entrada de longitud n que puede resolverse en n² pasos, se dice que ese problema tiene una complejidad en tiempo de n². Por supuesto, el número exacto de pasos depende de la máquina en la que se implementa, del lenguaje utilizado y de otros factores. Para no tener que hablar del costo exacto de un cálculo se utiliza la notación O. Cuando un problema tiene costo en tiempo O(n²) en una configuración de computador y lenguaje dado, este costo será el mismo en todos los computadores, de manera que esta notación generaliza la noción de coste independientemente del equipo utilizado. Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 106 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Ejemplos Extraer cualquier elemento de un vector. La indexación en un vector o array lleva el mismo tiempo sea cual fuere el índice que se quiera buscar, por tanto es una operación de complejidad constante O(1). Buscar en un diccionario tiene complejidad logarítmica. Se puede iniciar la búsqueda de una palabra por la mitad del diccionario. Inmediatamente se sabe si se ha encontrado la palabra o, en el caso contrario, en cuál de las dos mitades hay que repetir el proceso (es un proceso recursivo) hasta llegar al resultado. En cada (sub)búsqueda el problema (las páginas en las que la palabra puede estar) se ha reducido a la mitad, lo que se corresponde con la función logarítmica. Este procedimiento de búsqueda (conocido como búsqueda binaria) en una estructura ordenada tiene complejidad logarítmica O(ln n). El proceso más común para ordenar un conjunto de elementos tiene complejidad cuadrática. El procedimiento consiste en crear una colección vacía de elementos. A ella se añade, en orden, el menor elemento del conjunto original que aún no haya sido elegido, lo que implica hacer un recorrido completo del conjunto original (O(n), siendo n el número de elementos del conjunto). Este recorrido sobre el conjunto original se realiza hasta que todos sus elementos están en la secuencia de resultado. Se puede ver que hay que hacer n selecciones (se ordena todo el conjunto) cada una con un coste n de ejecución: el procedimiento es de orden cuadrático O(n²). Hay que aclarar que hay diversos algoritmos de ordenación con mejores resultados. La Complejidad Ciclomática La Complejidad Ciclomática (Cyclomatic Complexity) es una métrica del software que proporciona una medición cuantitativa de la complejidad lógica de un programa. Es una de las métricas de software mas ampliamente aceptada, ya que ha sido concebida para ser independiente del lenguaje. Esta métrica, propuesta por Thomas McCabe en 1976, se basa en el diagrama de flujo determinado por las estructuras de control de un determinado código. De dicho análisis se puede obtener una medida cuantitativa de la dificultad de de crear pruebas automáticas del código y también es una medición orientativa de la fiabilidad del mismo. El nombre “Complejidad Ciclomática” puede resultar engañoso para un programador ya que la idea de esta métrica no es contar los bucles (for, while, do…) en el código de un programa sinó en el resultado de contar el número de ciclos diferentes que se siguen en un fragmento de código de un programa habiendo creado una rama imaginaria desde el nodo de salida al nodo de entrada del diagrama de flujo correspondiente a este fragmento de código. Un nombre más adecuado podría ser Complejidad Condicional ya que el cálculo de esta métrica se ajusta más al hecho de buscar condiciones que contar ejecuciones de predicados dentro de bucles. El resultado obtenido en el cálculo de la complejidad ciclomática define el número de caminos independientes dentro de un fragmento de código y determina la cota superior del número de pruebas que se deben realizar para asegurar que se ejecuta cada sentencia al menos una vez. La medida resultante puede ser utilizada en el desarrollo, mantenimiento y reingeniería para estimar el riesgo, costo y estabilidad. Algunos estudios experimentales indican la existencia de distintas relaciones entre la métrica de McCabe y el número de errores existentes en el código fuente, así como el tiempo requerido para encontrar y corregir esos errores. Una vez calculada la complejidad ciclomática de un fragmento de código, se puede determinar el riesgo que supone utilizando los rangos definidos en la siguiente tabla: Complejidad Ciclomática Evaluación del Riesgo 1-10 Programa Simple, sin mucho riesgo Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 107 -
INTRODUCCIÓN A LA INFORMÁTICA
11-20 21-50 50
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Más complejo, riesgo moderado Complejo, Programa de alto riesgo Programa no testeable, Muy alto riesgo
A partir del análisis de muchos proyectos McCabe encontró que un valor 10 es un límite superior práctico para el tamaño de un módulo. Cuando la complejidad supera dicho valor se hace muy difícil probarlo, entenderlo y modificarlo. La limitación deliberada de la complejidad en todas las fases del desarrollo ayuda a evitar los problemas asociados a proyectos de alta complejidad. El límite propuesto por McCabe sin embargo es fuente de controversias. Algunas organizaciones han utilizado el valor 15 con bastante éxito. Cálculo de la Complejidad Ciclomática Para poder dar una definición acabada de la complejidad ciclomática, es necesario primero introducir una sencilla notación para la representación del flujo de control, denominada Grafos de Flujo de Control de un programa. M = Complejidad ciclomática. E = Número de aristas del grafo. Una arista conecta dos vértices si una sentencia puede ser ejecutada inmediatamente después de la primera. N = Número de nodos del grafo correspondientes a sentencias del programa. P = Número de componentes conexos correspondientes a las diferentes subrutinas, funciones o métodos. Definidos estos conceptos, la Complejidad Ciclomática puede calcularse de la siguiente manera: M=E−N+P Una versión simplificada para el cálculo de la Complejidad Ciclomática es la siguiente: M = Número de condiciones + 1 Ámbito de utilización de la Complejidad Ciclomática La complejidad ciclomática puede ser aplicada en varias áreas incluyendo: • Análisis de riesgo en desarrollo de código: Mientras el código esta en desarrollo, su complejidad puede ser medida para estimar el riesgo inherente. • Análisis de riesgo de cambio durante la fase de mantenimiento: La complejidad del código tiende a incrementarse a medida que es mantenido durante el tiempo. Midiendo la complejidad antes y después de un cambio propuesto, puede ayudar a decidir cómo minimizar el riesgo del cambio. • Planificación de Pruebas: El análisis matemático ha demostrado que la complejidad ciclomática indica el número exacto de casos de prueba necesarios para probar cada punto de decisión en un programa. • Reingeniería: Provee conocimiento de la estructura del código operacional de un sistema. El riesgo involucrado en la reingeniería de una pieza de código está relacionado con su complejidad. Ejemplo de cálculo de la complejidad ciclomática Antes de mostrar exactamente la forma en que el cálculo se puede hacer, vamos a observar algunas cosas en relación con cualquier programa. Di que está desarrollando un programa para dar el máximo común divisor entre dos números. Una fórmula simple es el algoritmo de Euclides, que puede describirse como sigue: Dados dos números naturales a y b, compruebe si b es igual a cero. Si es así, a es el mayor divisor común entre los mismos, de lo contrario, repetir el proceso usando b y el resto de la división de a por b. Este algoritmo puede ser expresado por el siguiente programa en Ruby (note que no es Ruby idiomático): require "test/unit" def euclid(m, n) if n > m r=m m=n n=r end r=m%n while r != 0 m=n n=r Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 108 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
r=m%n end n end class EuclidTest < Test::Unit::TestCase SETS = [[5, 10, 5], [2, 6, 2], [11, 7, 1], [80, 64, 16], [2, 2, 2]] def test_euclid SETS.each do |set| assert_equal set[2], euclid(set[0], set[1]) end end end Si el programa de arriba se ejecuta, correrá el caso de prueba justo debajo de la función que verificará si la misma es correcta. Usted puede agregar un mayor número de casos al conjunto SETS, si lo desea. La función de Euclides se pueden describir por un simple grafo que conecta los caminos entre las diversas declaraciones que contiene. Este grafo se muestra a continuación:
Sobre la base de este grafo, podemos definir la complejidad ciclomática de un programa de la siguiente manera: CC = A - N + 2C En esta fórmula: CC es la complejidad ciclomática A es el número de aristas del grafo N es el número de nodos en el grafo C es el número de componentes conectados Debido a que esta es una función simple con un solo punto de entrada y salida, el número de componentes es 1 y la fórmula puede reducirse a: CC = A - N + 2 Si la función posee múltiples puntos de salida, entonces, la complejidad ciclomática sería definida como: CC = A - N + C + R En esta fórmula, R es el número de declaraciones de salida (en Ruby, el número de returns). Volviendo al grafo que se muestra en la figura, vemos que tiene 11 nodos y 12 aristas, que nos da una complejidad ciclomática de 12-11 + 2, es decir, 3. Otra forma muy sencilla para descubrir la complejidad ciclomática es contar el número de loops cerrados en el grafo (que son formados por condicionales y loops) y añadir el número de puntos de salida. En el grafo anterior, tenemos 2 bucles cerrados (los if y while) y un punto de salida, resultando el mismo valor 3 para la complejidad de la función. Una cosa interesante es que la complejidad sigue siendo la misma cuando la sintaxis de un lenguaje se pone en cuestión sin cambiar la semántica del programa. Tomemos, por ejemplo, la versión idiomática del algoritmo en Ruby: def euclid(m, n) m, n = n, m if n > m m, n = n, m % n while m % n != 0 n end El grafo generado en este caso es: Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 109 -
INTRODUCCIÓN A LA INFORMÁTICA
FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE JUJUY
RESUMEN TEÓRICO-PRÁCTICO: PRIMERA PARTE
Note que, aunque el número de nodos y aristas ha cambiado, la relación entre ellos no ha cambiado y la complejidad sigue siendo las misma. Pruebas En general, el valor de complejidad ciclomática establece un límite superior en la cantidad de pruebas necesarias para cubrir todos los caminos decisorios del código en cuestión. Este es un límite superior, ya que no todos los caminos son necesariamente realizables. De eso se infiere que cuanto menor es la complejidad, menor es la cantidad de pruebas necesarias para el método en cuestión. Este hecho conduce a otra curiosidad: romper un método en varios reduce la complejidad de los métodos, pero aumenta la complejidad general del código y, de forma general, mantiene la comprobabilidad del programa completo en el mismo nivel.
Facultad de Ingeniería de la Universidad Nacional de Jujuy Gorriti 237 - 4600 San Salvador de Jujuy – Argentina Tel: 54-88-221577 Fax: 54-88-221579 Introducción a la Informática http://www.fi.unju.edu.ar/materias/materia/IIII/ SFD pág. - 110 -