Universidad Católica Boliviana “San Pablo” Facultad de Ciencias Exactas e Ingeniería Ingeniería de Sistemas GUIA DE ESTUDIO INF-101 INTRODUCCION A LA PROGRAMACION DOCENTES MSc. Ing. Orlando Rivera Jurado MSc. Ing. Jheser Guzmán Illanes 1-2010 INF-101 Introducción a la Programación 1-2010 El desarrollo de algoritmos es un tema fundamental en el diseño de programas, por lo cual el alumno debe adquirir adecuada base que le permitan desarrollar de manera más fácil y rápida programas de computadora. Estos apuntes servirán de apoyo a la cátedra de la materia “Introducción a la Programación”, que se dicta en el primer semestre para todas las carreras de Ingeniería de la facultad de Ciencias Exactas e Ingeniería de la Universidad católica Boliviana “San Pablo”, permitiendo al estudiante facilitar el proceso de desarrollo de su capacidad analítica y creadora, para de esta manera mejorar su destreza en la elaboración de algoritmos que sirven como base para la construcción de programas en distintos lenguajes de programación. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 2 INF-101 Introducción a la Programación 1-2010 Tema #1 – Introducción a la Informática 1.1 Definición y origen del término informática A lo largo de la historia el hombre ha necesitado transmitir y tratar información de forma continua. Aun están en el recuerdo las señales de humo y los destellos de espejos que fueron utilizados hace varios años, y más recientemente los mensajes de transmitidos a través de cables utilizando el código Morse o la propia voz por medio del teléfono o radio. La informática nace de la idea de ayudar al hombre en aquellos trabajos rutinarios y repetitivos, generalmente de cálculo y gestión, donde es frecuente la repetición de tareas. La idea es que una maquina puede realizarlos mejor, aunque siempre bajo la supervisión del hombre. El término informática nació en Francia el año 1962, y adoptado formalmente en España en 1968 como INFORmación autoMÁTICA. También es reconocido el término con el nombre de “Ciencias de la Computación”. Para poder definir a la Informática, debemos conocer previamente los siguientes términos: La ciencia (del latín scientia 'conocimiento') se define como el conjunto de conocimientos obtenidos mediante la observación y el razonamiento, sistemáticamente estructurados y de los que se deducen principios y leyes generales. La información es un fenómeno que proporciona significado o sentido a las cosas. En sentido general, la información es un conjunto organizado de datos procesados, que constituyen un mensaje sobre un determinado ente o fenómeno. La INFORMATICA es la ciencia que estudia el tratamiento automático y racional de la información. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 3 INF-101 Introducción a la Programación 1-2010 1.2 Elementos y conceptos fundamentales Desde el punto de vista informático, el elemento físico utilizado para el tratamiento de la información es el computador, computadora u ordenador, que puede ser definido de la siguiente manera (Figura 1.1): Computadora (Ordenador) es una maquina compuesta de elementos físicos, en su mayoría de origen electrónico, capaz de realizar una gran variedad de trabajos a gran velocidad y con gran precisión, siempre que se le den instrucciones adecuadas. Figura 1.1: Computadora (ordenador) El conjunto de órdenes que se dan a una computadora para realizar un proceso determinado se denomina programa, mientras que el conjunto de uno o varios programas más la documentación correspondiente para realizar un determinado trabajo, se denomina aplicación informática (Figura 1.2). Figura 1.2: Aplicación informática Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 4 INF-101 Introducción a la Programación 1-2010 Al conjunto de operaciones que se realizan sobre una información se le denomina tratamiento de la información. Estas operaciones siguen una división lógica que se representa en el Esquema 1.1. ENTRADA PROCESO SALIDA Esquema 1.1: Tratamiento de la información ENTRADA: Es el conjunto de operaciones cuya misión es tomar los datos del exterior y enviarlos a la computadora; en ocasiones es necesario realizar operaciones de depuración y validación de datos. PROCESO: Operaciones que trabajan con los datos de entrada para obtener resultados. Estas operaciones son llamadas procesos o algoritmos, y consiste generalmente en una combinación adecuada de operaciones de origen aritmético y test de tipo lógico. SALIDA: Son operaciones que proporcionan los resultados de un proceso a las personas correspondientes. La informática está sustentada en tres pilares básicos, que son: Elemento físico (HARDWARE). Elemento lógico (Software). Elemento humano (Personal informático). Actualmente se utiliza el término firmware para denominar cierta parte del software que las computadoras traen pregrabadas desde su fabricación y que puede estar en memorias de solo lectura (ROM – Read Only Memory) o incorporada en su propia circuitería. El programa más conocido de este tipo es el que entra en funcionamiento cuando se enciende una computadora y que permite el arranque de la misma; se denomina arrancador o bootstrap. 1.3 Esquema básico del elemento físico (HARDWARE) El hardware es el elemento físico de un sistema informático, es decir, todos los materiales que lo componen, como la propia computadora, dispositivos externos, los cables, los soportes de la información y en definitiva todos aquellos elementos que tienen entidad física. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 5 INF-101 Introducción a la Programación 1-2010 Esquema 1.2: Esquema básico del Hardware Central Process Unit – CPU (Unidad Central de Proceso): Es el elemento principal o centro neurálgico de una computadora y su misión consiste en coordinar y realizar todas las operaciones del sistema informático. Consta de los siguientes elementos: Procesador: Es el elemento encargado del control y ejecución de las operaciones y está formado por: Unidad de Control (CU – Control Unit): Es la parte del procesador encargada de gobernar al resto de las unidades, además de interpretar y ejecutar las instrucciones controlando su secuencia. Unidad Aritmético Lógica (ALU – Arithmetic Logic Unit): Es la parte del procesador encargada de realizar todas las operaciones elementales de tipo aritmético lógica. Memoria Central (CM – Central Memory): También denominada memoria interna o principal (main memory), es el elemento de la CPU encargado de almacenar los programas y los datos y los elementos necesarios para que el sistema informático realice un determinado trabajo. Es importante decir que para que un programa pueda ser ejecutado en una computadora tiene que estar en esta memoria, así como los datos que necesiten ser procesados en ese momento. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 6 INF-101 Introducción a la Programación 1-2010 La memoria interna consta de dos aéreas de memoria: Memoria RAM (Random Access Memory): Recibe el nombre de memoria principal o memoria del usuario, en ella se almacena información mientras la computadora está encendida. Cuando se apaga o se reinicia la computadora, la información se pierde, por lo que se dice que la memoria RAM es una memoria volátil. Memoria ROM (Read Only Memory): Es una memoria estática que no puede cambiar, la computadora puede leer los datos almacenados en la memoria ROM, pero no se pueden introducir datos en ella, o cambiar los datos que ahí se encuentran; por lo que se dice que esta memoria es de solo lectura. Los datos de la memoria ROM están grabados en forma permanente y son introducidos por el fabricante de la computadora. Elementos de Entrada: sirven para introducir datos (información) en la computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacena en la memoria central o interna. Ejemplos: Teclado, Scanner, mouse, trackball, joystick, lápiz óptico, etc. Elementos de Salida: Muestran la información procesada y cumplen la finalidad esperada por una persona. Los dispositivos más comunes son: el monitor, la impresora, plotter, etc. Memoria Auxiliar (memoria externa): Es donde se almacenan todos los programas o datos que el usuario desee. Los dispositivos de almacenamiento o memorias auxiliares (externas o secundarias) más comúnmente utilizados son: Discos magnéticos, discos ópticos y dispositivos extraíbles (flash drives). Adicionalmente debemos en la actualidad añadir a los Dispositivos de Comunicación de datos, puesto que forman parte de un Sistema de Procesamiento de Información, tales como modems, concentradores, routers, switches, etc. 1.4 Esquema básico del elemento lógico (SOFTWARE) El Software es la parte lógica que dota al equipo físico de capacidad para realizar cualquier tipo de trabajo. Un elemento lógico, para estar presente en un sistema informático, debe almacenarse en un soporte físico. Estos soportes son la memoria central y auxiliar. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 7 INF-101 Introducción a la Programación 1-2010 El elemento lógico de un sistema informático puede clasificarse como aparece representado en: Software de base (Sistema Operativo - OS): Es el soporte lógico que controla el funcionamiento del equipo físico, ocultando los detalles del hardware y haciendo sencillo el uso de la computadora. Figura 1.3: Sistemas Operativos (GNU/Linux, Mac OS X y Windows Vista) Los componentes de un Sistema Operativo son: Programas de control: Tiene el objetivo de controlar todo el elemento físico. Interfaces del usuario. Administración de recursos. Administración de tareas. Administración de Archivos. Servicios de soporte. Utilidades: Ayudan al usuario a realizar trabajos típicos con el elemento físico, como dar formato a discos, manejo de archivos, etc. Software de aplicación: está compuesto por el conjunto de programas que ha sido diseñado para que la computadora pueda desarrollar un trabajo. Pertenece a este determinado grupo de denominados paquetes de software, que consisten en un conjunto de programas que nos permiten editar texto, guardar datos, obtener informes, hacer cálculos, comunicarnos entre usuarios y algunos trabajos típicos en el uso de computadoras. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 8 INF-101 Introducción a la Programación 1-2010 1.5 Esquema básico del elemento humano (Personal Informático) El elemento humano es el más importante de los que constituyen la informática. Sin personas estas maquinas serian totalmente inútiles. Personal informático: conjunto de personas que desarrollan las distintas funciones relacionadas con el uso de las computadoras de la empresa. Usuario: Personas que utilizan en última instancia la computadora y el software de aplicación como herramienta para desarrollar su trabajo o ayudarse en su actividad. Gerencia de Sistemas Desarrollo de Sistemas Produccion Seguridad de Informacion Inteligencia de Negocios Telecomunicaciones Administradores de proyectos Help Desk Redes de Datos Analisis de Sistemas Operaciones Telefonia (VoIP) Desarrolladores Servidores Figura 1.4: Organigrama del Departamento de Sistemas 1.6 Historia de la computación Uno de los primeros dispositivos mecánicos para contar fue el ábaco, cuya historia se remonta a las antiguas civilizaciones griega y romana. Este dispositivo es muy sencillo, consta de cuentas ensartadas en varillas que a su vez están montadas en un marco rectangular. Al desplazar las cuentas sobre varillas, sus posiciones representan valores almacenados, y es mediante dichas posiciones que este representa y almacena datos. A este dispositivo no se le puede llamar computadora por carecer del elemento fundamental llamado programa. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 9 INF-101 Introducción a la Programación 1-2010 Figura 1.5: Abaco chino Otro de los inventos mecánicos fue la Pascalina inventada por Blaise Pascal (1623 - 1662) de Francia y la de Gottfried Wilhelm von Leibniz (1646 - 1716) de Alemania. Con estas máquinas, los datos se representaban mediante las posiciones de los engranajes, y los datos se introducían manualmente estableciendo dichas posiciones finales de las ruedas, de manera similar a como leemos los números en el cuenta kilómetros de un automóvil. Figura 1.6: Maquina aritmética de Blaise Pascal La primera computadora fue la máquina analítica creada por Charles Babbage, profesor matemático de la Universidad de Cambridge en el siglo XIX. La idea que tuvo Charles Babbage sobre un computador nació debido a que la elaboración de las tablas matemáticas era un proceso tedioso y propenso a errores. En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de diferencias, un dispositivo mecánico para efectuar sumas repetidas. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 10 INF-101 Introducción a la Programación 1-2010 Figura 1.7: Maquina analítica de Babbage Mientras tanto Charles Jacquard (francés), fabricante de tejidos, había creado un telar que podía reproducir automáticamente patrones de tejidos leyendo la información codificada en patrones de agujeros perforados en tarjetas de papel rígido. Al enterarse de este método Babbage abandonó la máquina de diferencias y se dedico al proyecto de la máquina analítica que se pudiera programar con tarjetas perforadas para efectuar cualquier cálculo con una precisión de 20 dígitos. La tecnología de la época no bastaba para hacer realidad sus ideas. Figura 1.8: Telar de Joseph M. Jacquard Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 11 INF-101 Introducción a la Programación 1-2010 En 1944 se construyó en la Universidad de Harvard, la Mark I, diseñada por un equipo encabezado por Howard H. Aiken. Esta máquina no está considerada como computadora electrónica debido a que no era de propósito general y su funcionamiento estaba basado en dispositivos electromecánicos llamados relevadores. En 1947 se construyó en la Universidad de Pennsylvania la ENIAC (Electronic Numerical Integrator And Calculator) que fue la primera computadora electrónica, el equipo de diseño lo encabezaron los ingenieros John Mauchly y John Eckert. Esta máquina ocupaba todo un sótano de la Universidad, tenía más de 18 000 tubos de vacío, consumía 200 KW de energía eléctrica y requería todo un sistema de aire acondicionado, pero tenía la capacidad de realizar cinco mil operaciones aritméticas en un segundo. Figura 1.9: La computadora ENIAC El proyecto, auspiciado por el departamento de Defensa de los Estados Unidos, culminó dos años después, cuando se integró a ese equipo el ingeniero y matemático húngaro John von Neumann (1903 - 1957). Las ideas de von Neumann resultaron tan fundamentales para su desarrollo posterior, que es considerado el padre de las computadoras. La EDVAC (Electronic Discrete Variable Automatic Computer) fue diseñada por este nuevo equipo. Tenía aproximadamente cuatro mil bulbos y usaba un tipo de memoria basado en tubos llenos de mercurio por donde circulaban señales eléctricas sujetas a retardos. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 12 INF-101 Introducción a la Programación 1-2010 La idea fundamental de Von Neumann fue: permitir que en la memoria coexistan datos con instrucciones, para que entonces la computadora pueda ser programada en un lenguaje, y no por medio de alambres que eléctricamente interconectaban varias secciones de control, como en la ENIAC. 1.7 Generaciones de las computadoras Todo este desarrollo de las computadoras suele divisarse por generaciones y el criterio que se determinó para determinar el cambio de generación no está muy bien definido, pero resulta aparente que deben cumplirse al menos los siguientes requisitos: Forma en que están construidas. Forma en que el ser humano se comunica con ellas. 1.7.1 Primera generación (1940 - 1952) La constituyen todas aquellas computadoras diseñadas a base de válvulas al vacio como principal elemento de control y cuyo uso fundamental fue la realización de aplicaciones en los campos científico y militar. Utilizaban como lenguaje de programación el lenguaje de máquina y como únicas memorias para conservar información las tarjetas perforadas, la cinta perforadora y las líneas de mercurio. Figura 1.10: Computador que utiliza válvulas al vacio. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 13 INF-101 Introducción a la Programación 1-2010 1.7.2 Segunda generación (1952 - 1964) Al sustituirse la válvula de vacio por el transistor, comenzó la llamada segunda generación de computadores. En ella, las maquinas ganaron potencia y fiabilidad, perdiendo tamaño, consumo y precio, lo que las hacía mucho mas practicas y asequibles. Los campos de aplicación en aquella época fueron, además del científico y militar, el administrativo y gestión; es decir, las computadoras empezaron a utilizarse en empresas que se dedicaban a los negocios. Comenzaron además a utilizarse los llamados lenguajes de programación evolucionados, que hacían más sencilla la programación; entre ellos podemos citar el Ensamblador y algunos de los denominados de alto nivel, como FORTRAN, COBOL y ADGOL. Asimismo, comenzaron a utilizarse como memoria interna los núcleos de ferrita y el tambor magnético, como memoria externa la cinta magnética y los tambores magnéticos. Figura 1.11: Computador de transistores. 1.7.3 Tercera generación (1964 - 1971) En esta generación el elemento más significativo es el circuito integrado aparecido en 1964, que consistía en el encapsulamiento de una gran cantidad de componentes discretos. (Resistencias, condensadores, diodos y transistores), conformando uno o varios circuitos con una función determinada, sobre una pastilla de silicona o plástico. La miniaturización se extendió a todos los circuitos de la computadora, apareciendo las minicomputadoras. Se utilizaron tecnologías SSI y MSI. Asimismo, el software evoluciono de forma considerable con un gran desarrollo de los sistemas operativos, en los que se Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 14 INF-101 Introducción a la Programación 1-2010 incluyo la multiprogramación, el tiempo real y el modo interactivo. Comenzaron a utilizarse las memorias de semiconductores y los discos magnéticos. Figura 1.12: Computador basado en circuitos integrados. 1.7.4 Cuarta generación (1971 - 1981) En 1971 aparece el microprocesador, consistente en la integración de toda la CPU de una computadora en un solo circuito integrado. La tecnología utilizada es LSI que permitió la fabricación de microprocesadores y computadoras personales (PC), así como las computadoras mono-pastilla. Se utilizo además el diskette (floppy disk) como unidad de almacenamiento externo. Aparecieron una gran cantidad de lenguajes de programación de todo tipo y las redes de transmisión de datos (teleinformática) para la interconexión de computadoras. Figura 1.13: Computador de cuarta generación. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 15 INF-101 Introducción a la Programación 1-2010 1.7.5 Quinta generación (1981 a la actualidad) En 1981 los principales países productores de nuevas tecnologías (fundamentalmente Estados Unidos y Japón) anunciaron una nueva generación, cuyas características principales iban a ser: Utilización de componentes a muy alta escala de integración (VLSI). Computadoras con Inteligencia Artificial. Utilización de lenguaje natural (lenguajes de quinta generación). Interconexión entre todo tipo de computadoras, dispositivos y redes (redes integradas). Integración de datos, imágenes y voz (entornos multimedia). Figura 1.14: Computador de quinta generación. 1.8 Tipos de computadoras Dentro de la evolución de las computadoras, han surgido diferentes equipos con diferentes tamaños y características según su tipo de labor. Los computadores son utilizados desde las plantas nucleares como controladores de labores de alto riesgo hasta la simple tarea de calentar la comida con el microondas. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 16 INF-101 Introducción a la Programación 1-2010 1.8.1 Súper - Computadoras Es una maquina diseñada especialmente para cálculos que precisan una gran velocidad de proceso. Generalmente poseen un gran número de procesadores que trabajan en paralelo, con lo que se consiguen realizar billones de operaciones por segundo. Figura 1.15: Súper - computador. 1.8.2 Macro Computadoras – Main Frame Es una maquina diseñada principalmente para dar servicio a grandes empresas y organizaciones. Su potencia de cálculo es inferior a la anterior, cifrándose en la ejecución de varios millones de operaciones por segundo. Una de sus características principales es la de soportar un gran número de terminales o estaciones de trabajo. Además pueden intervenir en procesos distribuidos en los que se conectan dos o más computadoras en paralelo, de tal forma que se reparten todo el trabajo a realizar. Figura 1.16: Macro - computador. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 17 INF-101 Introducción a la Programación 1-2010 1.8.3 Mini Computadoras Son maquinas de tipo medio, es decir, su capacidad de proceso es menor a las anteriores y por tanto pueden controlar un menor número de terminales. Figura 1.17: Mini - computador. 1.8.4 Micro Computadoras Se trata de una maquina cuyo funcionamiento interno se basa en el uso del microprocesador, y con él se consigue una serie de prestaciones, que en potencia, manejabilidad, portabilidad, precio, etc.., cubren la gama más baja de necesidades en el mundo de la informática. Hoy se puede decir que el mundo de la microinformática o el de las microcomputadoras es el más importante y también el más popular. Dentro de las microcomputadoras se pueden distinguir dos grupos importantes. Estación de trabajo (workstation): Es una microcomputadoras de gran potencia que se utiliza para trabajos de ingeniería o similares y permite la conexión a través de una red con una computadora de mayor potencia. Computadora personal (PC – Personal Computer): Es una microcomputadora fácil de usar y con grandes prestaciones. Generalmente posee un solo puesto de trabajo, aunque puede tener varios. Actualmente la mayor gama de equipos Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 18 INF-101 Introducción a la Programación 1-2010 hardware y de aplicaciones software que existen en el mercado pertenecen al grupo de computadoras personales. Figura 1.18: Micro – computador (Computadora Personal). Computadora Portátil: (también laptop, término proveniente del inglés) es una pequeña computadora personal móvil, que pesa normalmente entre 1 y 3 kg. Las computadoras portátiles son capaces de realizar la mayor parte de las tareas que realizan las computadoras de escritorio, con la ventaja de que son más pequeñas, más livianas y tienen la capacidad de operar por un período determinado sin estar conectadas a la electricidad. Figura 1.19: Laptop (Computadora Portátil). Netbook: Son una nueva clase de portátiles que eliminan la unidad de CD, y a veces otros componentes como tarjeta gráfica, con el fin de reducir el tamaño físico de las máquinas (y en ocasiones el costo), capaces de entrar en el bolsillo de un pantalón, como en el caso de los VAIO serie P. Su capacidad de procesamiento Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 19 INF-101 Introducción a la Programación 1-2010 es notablemente menor que las portátiles normales, por eso necesitan sistemas operativos diseñados específicamente, además del uso de almacenamiento remoto. Figura 1.20: Netbook. PDA (Personal Digital Assistent): es un computador de mano originalmente diseñado como agenda electrónica (calendario, lista de contactos, bloc de notas y recordatorios) con un sistema de reconocimiento de escritura. Hoy día estos dispositivos, pueden realizar muchas de las funciones de una computadora de escritorio (ver películas, crear documentos, juegos, correo electrónico, navegar por Internet, reproducir archivos de audio, etc.) pero con la ventaja de ser portátil. Los últimos años se combinaron las funciones de la telefonía celular con la de los PDA, obteniendo así los denominados Smartphones. NOTA: Los PDA son la evolución tecnológica de las denominadas Palmtops que solamente realizaban funciones muy básicas (block de notas, lista de contactos, etc.). Figura 1.21: Palmtop, PDA y Smartphone . Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 20 INF-101 Introducción a la Programación 1-2010 Tema #2 – Unidades funcionales de la computadora 2.1 Introducción El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones: La Unidad Central de Proceso (CPU – Central Process Unit). La Memoria central (CM – Central Memory). Las unidades de entrada / salida (I/O – Input/Output). Estos componentes se comunican entre sí mediante el bus de sistema y los controladores. La placa base, placa madre, tarjeta madre o board (en inglés motherboard, mainboard) es una tarjeta de circuito impreso a la que se conectan las demás partes de la computadora. Tiene instalados una serie de circuitos integrados, entre los que se encuentra el Chipset que sirve como centro de conexión entre el procesador, la memoria central, los buses de expansión y otros dispositivos de entrada/salida. Figura 2.1: Tarjeta madre (motherboard). Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 21 INF-101 Introducción a la Programación 1-2010 2.2 La Unidad Central de Proceso (CPU) La CPU o Procesador central es el verdadero cerebro de la computadora. Su misión consiste en controlar y coordinar o realizar todas las operaciones del sistema. Para ello extrae, una a una, las instrucciones del programa que se tiene alojado en la memoria central, las analiza y emite las órdenes necesarias para su completa realización. Físicamente está formado por circuitos de naturaleza electrónica que en una microcomputadora se encuentran integrados en una pastilla o chip denominado microprocesador. Figura 2.2: Microprocesador. Los microprocesadores más conocidos son los de la familias x86 (32 bits) o x64 (64 bits) de las marcas Intel, AMD, y Motorola. La CPU está compuesta por las siguientes unidades: Unidad de Control (CU – Control Unit) Unidad Aritmético Lógica (ALU - Arithmetic Logic Unit). 2.2.1 Unidad de Control (CU) Es el centro nervioso de la computadora ya que desde ella se controlan y gobiernan todas las operaciones. Para realizar su función, consta de las siguientes partes: Contador de programa (PC – Program Counter): Contiene la dirección de memoria con la siguiente instrucción. Registro de instrucción (IR – Instruction Register): Contiene la instrucción que se está ejecutando. Decodificador: Se encarga de extraer el código de operación de la instrucción en curso, lo analiza y emite las señales necesarias al resto de elementos para su ejecución atraves del secuenciador. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 22 INF-101 Introducción a la Programación 1-2010 Reloj (Clock): Proporciona una sucesión de impulsos o ciclos a intervalos constantes, que marcan los instantes en que han de comenzar los distintos pasos de que consta cada instrucción. Frecuencia Abreviatura Hertz Kilo Hertz Mega Hertz Giga Hertz Tera Hertz Hz KHz MHz GHz THz Nro. ciclos / segundo 1 1.000 1.000.000 1.000.000.000 1.000.000.000.000 Secuenciador: En este dispositivo se generan ordenes muy elementales (microordenes) que, sincronizadas por los impulsos de reloj, hacen que vaya ejecutando poco a poco la instrucción que está cargada en el IR. 2.2.2 Unidad Aritmético Lógica (ALU) Esta unidad es la encargada de realizar las operaciones elementales de tipo aritmético (sumas, restas, productos y divisiones) y de tipo lógico (comparaciones AND, OR, NOT, NOR, NAND, XOR). Para comunicarse con las otras unidades funcionales utiliza el denominado bus de datos y para realizar su función necesita los siguientes elementos: Circuito operacional. Registros de entrada. Registro acumulador. Registro de estado. 2.2.3 La memoria central La memoria central interna es la unidad donde están almacenados las instrucciones y los datos necesarios para poder realizar un determinado proceso. Está constituida por multitud de celdas o posiciones de memoria, numeradas de forma consecutiva, capaces de retener, mientras la computadora este conectada, la información depositada en ella. La memoria interna consta de dos áreas de memoria: La memoria RAM (RAM – Random Access Memory): Recibe el nombre de memoria principal o memoria de usuario, en ella se almacena información solo mientras la computadora está encendida. Cuando se apaga el computador o Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 23 INF-101 Introducción a la Programación 1-2010 arranca nuevamente la computadora, la información se pierde, por lo que se dice que la memoria RAM es una memoria volátil. Figura 2.3: Memoria RAM. La memoria ROM (Read Only Memory): Es una memoria estática que no puede cambiar, la computadora puede leer los datos almacenados en la memoria ROM, pero no se pueden introducir datos en ella, o cambiar los datos que ahí se encuentran; por lo que se dice que esta memoria es de solo lectura. Los datos de la memoria ROM están grabados en forma permanente y son introducidos por el fabricante de la computadora. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 24 INF-101 Introducción a la Programación 1-2010 Tema #3 – Soporte de la información y unidades de Entrada/Salida 3.1 Introducción Como se vio en el tema 2, el núcleo principal de una computadora es la CPU; ahora bien, para el funcionamiento de esta es necesario que los datos y la información este soportados en un elemento físico al que al que la propia computadora tenga acceso; estos elementos son los denominados soportes de la información; asimismo es necesario disponer de dispositivos conectados a la computadora capaces de leer en estos soportes de información y escribirla en ellos según se trate de realizar operaciones de lectura o escritura. A estos dispositivos se les denomina unidades de entrada y/o salida (unidades E/S). Un soporte de información es un medio físico que permite almacenar datos de forma que una computadora pueda manejarlos o proporcionarlos a las personas de manera inteligibles. Una unidad de entrada/salida es un dispositivo físico capaz de comunicar información entre el usuario y la computadora o capaz de manejar un soporte de información. Los soportes de la información se pueden clasificar por su naturaleza física en: Soportes perforados. Soportes magnéticos. Soportes ópticos. Otros soportes. Por su parte los periféricos podemos clasificarlos según funciones que realizan en los siguientes grupos. Unidades de entrada: Son las unidades que realizan la función de introducir información de la memoria central para su tratamiento como por ejemplo Teclado, ratón, scanner, etc. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 25 INF-101 Introducción a la Programación 1-2010 Unidades de salida: Son unidades que realizan la función de extraer la información de la memoria central al exterior como por ejemplo Monitor, impresora, etc. Unidades de Entrada/Salida: Realizan las dos funciones, introducir información en memoria central extraerla de memoria central como por ejemplo Discos duros, cintas, diskettes, modem, etc. También existe otra clasificación de los periféricos dependiendo de la localización de los mismos respecto a la CPU en que están conectados, y tenemos: Unidades locales: Situados cerca del ordenador, sin sobrepasar unos límites (unos pocos metros) como por ejemplo una red local (LAN). Unidades remotas: Están lejos del ordenador, conectados a través de una red de telecomunicación como por ejemplo una red extensa (WAN) 3.2 Unidad métrica de almacenamiento de información El sistema binario es el sistema de numeración que utilizan internamente los circuitos digitales que configuran el hardware de las computadoras actuales. Cada cifra digito de un número representado en este sistema se denomina bit (contracción de Binary Digit). Para la medida de cantidades de información representadas en binario se utilizan una serie de múltiplos de bit que poseen nombre propio; estos son los siguientes: Bit (b): Digito binario (1 o 0). Nibble o cuarteto: Es el conjunto de cuatro bits (1001). Bytes u Octeto (B): Es el conjunto de 8 bits (11110000). Kilo Bytes (KB): Es el conjunto de 1024 Bytes (210 Bytes). Mega Bytes (MB): Es el conjunto de 1024 KBytes (220 Bytes). Giga Bytes (GB): Es el conjunto de 1024 MBytes (230 Bytes). Tera Bytes (TB): Es el conjunto de 1024 GBytes (240 Bytes). Peta Bytes (PB): Es el conjunto de 1024 PBytes (250 Bytes). Exa Bytes (EB): Es el conjunto de 1024 EBytes (260 Bytes). Zeta Bytes (ZB): Es el conjunto de 1024 ZBytes (270 Bytes). Yotta Bytes (YB): Es el conjunto de 1024 YBytes (280 Bytes). Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 26 INF-101 Introducción a la Programación 1-2010 3.3 Medios almacenamiento 3.3.1 Medios perforados Los medios perforados fueron los primeros en utilizarse; su primera aplicación fue la de soportar la información sobre estampados de tejidos en el telar de Joseph Marie Jacquard y la aplicación más consistente fue la de soportar la información del censo de Estados Unidos en la maquina censadora de Herrman Holerith. La forma de grabación de datos en estos elementos se realizaba a través de perforaciones en un soporte generalmente de papel, en el que quedaban permanentemente sin posibilidad de modificación, por lo que eran soportes de información que no podían volverse a modificar (solo lectura). Figura 3.1: tarjetas perforadas. 3.3.2 Medios magnéticos Los medios magnéticos son los que se basan en las propiedades magnéticas de algunos materiales para el registro de la información. Comenzaron a utilizarse a partir de la aparición de memorias de bases de núcleos de ferrita (utilizadas como memoria central). Más tarde surgieron otros medios magnéticos más apropiados para el almacenamiento masivo debido fundamentalmente a la densidad de grabación que permitían y por ellos a la importante reducción del tamaño del soporte. Como ejemplos de dispositivos de almacenamiento masivo magnéticos tenemos: Tambor magnético. Cinta magnética (Casettes). Discos flexibles (Diskettes). Discos duros (HDD – Hard Disk Drive). Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 27 INF-101 Introducción a la Programación 3.3.2.1 1-2010 Unidad de Disco Duro Un disco duro o disco rígido (en inglés Hard Disk Drive) es un dispositivo no volátil, que conserva la información aun con la pérdida de energía, que emplea un sistema de grabación magnética digital. Dentro de la carcasa hay una serie de platos metálicos apilados girando a gran velocidad. Sobre los platos se sitúan los cabezales encargados de leer o escribir los impulsos magnéticos. Figura 3.2: Disco Duro. Hay distintos estándares para comunicar un disco duro con la computadora (Interfaces), entre los cuales tenemos los siguientes: Integrated Drive Electronics (IDE, también llamado PATA o solamente ATA). Serial ATA (SATA). SCSI generalmente usado en servidores. Fiber Cable (FC) exclusivo para servidores. Figura 3.3: Interfaces IDE y SATA de un Disco Duro. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 28 INF-101 Introducción a la Programación 1-2010 Tal y como sale de fábrica, el disco duro no puede ser utilizado por un sistema operativo. Antes se deben definir en él un formato de bajo nivel, una o más particiones y luego hemos de darles un formato que pueda ser entendido por nuestro sistema. Estructura de un Disco Duro Dentro de un disco duro hay uno o varios platos (entre 2 y 4 normalmente, aunque hay hasta de 6 ó 7 platos), que son discos (de aluminio o cristal) concéntricos y que giran todos a la vez. El cabezal (dispositivo de lectura y escritura) es un conjunto de brazos alineados verticalmente que se mueven hacia dentro o fuera según convenga, todos a la vez. En la punta de dichos brazos están las cabezas de lectura/escritura, que gracias al movimiento del cabezal pueden leer tanto zonas interiores como exteriores del disco. Hay varios conceptos para referirse a zonas del disco: Plato: cada uno de los discos que hay dentro del disco duro. Cara: cada uno de los dos lados de un plato. Cabeza: número de cabezales; Pista: una circunferencia dentro de una cara; la pista 0 está en el borde exterior. Cilindro: Conjunto de varias pistas; son todas las circunferencias que están alineadas verticalmente (una de cada cara). Sector: Cada una de las divisiones de una pista. Cluster: La unión de varios sectores de una pista. Su tamaño estándar actual es de 512 Bytes. Figura 3.4: Pista (A), Sector (B), Sector de una Pista (C) y Cluster (D). Un master boot record (MBR) es el primer sector ("sector cero") de un dispositivo de almacenamiento de datos. A veces, se emplea para el arranque del sistema operativo con Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 29 INF-101 Introducción a la Programación 1-2010 bootstrap, otras veces es usado para almacenar una tabla de particiones y, en ocasiones, se usa sólo para identificar un dispositivo de disco individual, aunque en algunas máquinas esto último no se usa y es ignorado. En la Pista Cero (Pista 0) se encuentra el direccionamiento lógico de los archivos almacenados en un disco magnético. 3.3.3 Medios Ópticos Los medios ópticos son aquellos que se basan en propiedades ópticas generalmente relacionadas con la reflexión de la luz. En la actualidad se están utilizando como elementos reconocedores de estas propiedades dispositivos basados en rayos láser. Los soportes ópticos son documentos de papel, cartulina o plástico sobre los que se escriben caracteres normalizados o marcas fácilmente reconocibles tanto por las máquinas como por las personas. Dichos caracteres o marcas pueden ser escritos de forma automática por máquinas de escribir o impresoras de computadora o también de forma manual. 3.3.3.1 Discos Ópticos El soporte de información en disco óptico, también denominado disco compacto (compact disc-CD), aparece como consecuencia de su alta difusión en el mundo de la música y la imagen, donde recibe el nombre de compact-disk o video-disk, y se utiliza en este ámbito para el registro de señales analógicas digitalizadas, tanto musicales como de vídeo, con una alta calidad y densidad de grabación. Por lo tanto, y debido a sus características, el disco óptico configura un soporte de información de alta densidad y por ello de alta capacidad de almacenamiento de datos sensiblemente superior a la de discos magnéticos y que puede oscilar entre varios cientos de megabytes y un gigabyte por cara del disco. La información se registra, en el caso más general, en una superficie donde se genera minúsculas perforaciones denominadas pits. Capaces de ser detectadas mediante la incisión sobre ellas de un rayo láser que será reflejado de distinta forma si existe o no dicha perforación. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 30 INF-101 Introducción a la Programación 1-2010 Figura 3.5: Unidad de lectura de Blu-Ray Disc. 3.4 Terminales de Pantalla El monitor o pantalla de computadora, aunque también es común llamarlo "pantalla", es un dispositivo de salida que, mediante una interfaz, muestra los resultados del procesamiento de una computadora. Los primeros monitores surgieron en el año 1981 y eran monitores monocromáticos (de un solo color). Poco después y en el mismo año salieron los monitores CGA (Color Graphics Adapter) fueron comercializados en 1981 al desarrollarse la primera tarjeta gráfica a partir del estándar CGA de IBM. Tres años más tarde surgió el monitor EGA (Enhaced Graphics Adapter) estándar desarrollado por IBM para la visualización de gráficos, este monitor aportaba más colores (16 colores) y una mayor resolución. En 1987 surgió el estándar VGA (Video Graphics Array) fue un estándar muy acogido y dos años más tarde se mejoró y rediseñó para solucionar ciertos problemas que surgieron, desarrollando así SVGA (Super VGA), que también aumentaba colores y resoluciones, para este nuevo estándar se desarrollaron tarjetas graficas de fabricantes hasta día de hoy conocidos como NVIDIA GeForce o ATI entre otros. Figura 3.6: Tarjeta de Video ATI. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 31 INF-101 Introducción a la Programación 1-2010 3.4.1 Tipos de monitores Figura 3.7: Monitor CRT y LCD. 3.4.1.1 Monitores CRT Los primeros monitores eran monitores de tubo de rayos catódicos (CRT), completamente analógicos, realizaban un barrido de la señal a lo largo de la pantalla produciendo cambios de tensión en cada punto, generando así imágenes. 3.4.1.2 Monitores LCD Más tarde surgieron los monitores planos de cristal liquido, que empezaban a ser digitalanalógicos, internamente trabajaban en digital y exteriormente les llegaban las señales en analógico, actualmente la fuente de datos puede ser también digital. Se adaptan bastante mal a resoluciones no nativas de la pantalla. Son ligeros y planos. 3.4.1.3 Monitores plasma No mucho más tarde que los LCD se desarrollaron la tecnología del plasma, que parecía iba a desbancar al LCD, sin embargo actualmente siguen ambas tecnologías vivas. En el presente se están desarrollando monitores de unas 30 pulgadas de plasma, normalmente estos monitores tienden a ser más grandes que los LCD ya que contra más grandes son estos monitores mejor es la relación tamaño-calidad/precio. 3.4.1.4 Monitores LEDs Se están investigando tecnologías usando LEDs para desarrollar monitores OLED, completamente flexibles, económicos y con poco consumo, podrían ser una revolución dentro de los monitores, por sus propiedades, actualmente se desarrollan los primeros prototipos para PDA y dispositivos móviles. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 32 INF-101 Introducción a la Programación 1-2010 3.5 Terminales de Teclado Un teclado (keyboard en ingles) es un periférico o dispositivo que consiste en un sistema de teclas, como las de una máquina de escribir, que permite introducir datos u órdenes a una computadora o dispositivo digital. Sobre la distribución de los caracteres en el teclado surgieron dos variantes principales: la francesa AZERTY y la alemana QWERTY. Ambas se basaban en cambios en la disposición según las teclas más frecuentemente usadas en cada idioma. Figura 3.8: Teclado QWERTY inalámbrico. 3.6 Dispositivos de comunicación de datos Adicionalmente debemos en la actualidad añadir a los dispositivos de comunicación de datos, puesto que forman también parte de un Sistema de Procesamiento de la información. Entre estos tenemos: Routers. Switches. Hubs. Repetidores. Módems. Tarjetas de red. Una red de computadoras, también llamada red de ordenadores o red informática, es un conjunto de equipos (computadoras y/o dispositivos) conectados por medio de cables, señales, ondas o cualquier otro método de transporte de datos, que comparten información (archivos), recursos (CD-ROM, impresoras, etc.), servicios (acceso a internet, e-mail, chat, juegos), etc. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 33 INF-101 Introducción a la Programación 1-2010 Las redes de computadoras se pueden clasificar en las siguientes según el área geográfica que abarcan: PAN (Personal Area Network): Redes de Área personal. Ej.: Interconexión entre un mouse o teclado inalámbrico a un computador mediante tecnología bluetooth o infrarroja. LAN (Local Area Network): Redes de Área Local. Ej.: La red de computadoras de un laboratorio o centro de computo de una universidad, La conexión de red de un café internet, o la interconexión de una área de trabajo en una empresa. CAN (Campus Area Network): Redes de Área de Campus. Ej.: Red que interconecta varias unidades de una empresa. Red que interconecta los laboratorios, y áreas administrativas de una universidad. MAN (Metropolitan Area Network): Redes de Área Metropolitana. Ej.: Red que interconecta los cajeros automáticos de un banco con sus agencias distribuidas por una ciudad. WAN (Wide Area Network): Red de Área Extensa. Ej.: red que interconecta las redes de computadoras de ciudades, países y continentes (Internet). SAN (Storage Area Network): Red de Área de Almacenamiento. Ej.: Discos Duros interconectados entre sí que almacenan información de varios servidores. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 34 INF-101 Introducción a la Programación 1-2010 Tema #4 – Sistemas Operativos y Traductores 4.1 Introducción Un Sistema operativo (SO) es un programa informático que actúa de interfaz entre los dispositivos de hardware y el usuario. Es responsable de gestionar, coordinar las actividades y llevar a cabo el intercambio de recursos de un computador. Actúa como estación para las aplicaciones que se ejecutan en la máquina. Cuando se aplica voltaje al procesador de un dispositivo electrónico, éste ejecuta un reducido código en lenguaje ensamblador localizado en una dirección concreta en la ROM, que a su vez ejecuta una rutina con la que se inicializa el hardware que acompaña al procesador. Un sistema operativo se puede encontrar en la mayoría de los aparatos electrónicos que utilicen microprocesadores para funcionar, ya que gracias a éstos podemos entender la máquina y que ésta cumpla con sus funciones (teléfonos móviles, reproductores de DVD, auto-radios, computadoras, radios, etc). Figura 4.1: Interacción entre el SO y las otras partes. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 35 INF-101 Introducción a la Programación 1-2010 4.2 Funciones básicas Un Sistema operativo (SO) desempeña 5 funciones básicas en la operación de un sistema informático: Interfaces del usuario: Es la parte del sistema operativo que permite comunicarse con él, de tal manera que se puedan cargar programas, acceder archivos y realizar otras tareas. Existen tres tipos básicos de interfaces: las que se basan en comandos, las que utilizan menús y las interfaces gráficas de usuario. Administración de recursos: Sirven para administrar los recursos de hardware y de redes de un sistema informático, como la CPU, memoria, dispositivos de almacenamiento secundario y periféricos de entrada y de salida. Administración de archivos: Un sistema de información contiene programas de administración de archivos que controlan la creación, borrado y acceso de archivos de datos y de programas. También implica mantener el registro de la ubicación física de los archivos en los discos magnéticos y en otros dispositivos de almacenamiento secundarios. Administración de tareas: Los programas de administración de tareas de un sistema operativo administran la realización de las tareas informáticas de los usuarios finales. Los programas controlan qué áreas tienen acceso al CPU y por cuánto tiempo. Las funciones de administración de tareas pueden distribuir una parte específica del tiempo del CPU para una tarea en particular, e interrumpir al CPU en cualquier momento para sustituirla con una tarea de mayor prioridad. Servicios de soporte: Los servicios de soporte de cada sistema operativo dependerán de la implementación particular de éste con la que estemos trabajando. Entre las más conocidas se pueden destacar las implementaciones de Unix, desarrolladas por diferentes empresas de software, los sistemas operativos de Apple Inc., como Mac OS X para las computadoras de Apple Inc., los sistemas operativos de Microsoft, y las implementaciones de software libre, como GNU/Linux o BSD producidas por empresas, universidades, administraciones públicas, organizaciones sin fines de lucro y/o comunidades de desarrollo. Estos servicios de soporte suelen consistir en: Actualización de versiones. Mejoras de seguridad. Inclusión de alguna nueva utilidad. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 36 INF-101 Introducción a la Programación 1-2010 Controladores para manejar nuevos periféricos. Corrección de errores de software. Figura 4.2: Estimación del uso de Sistemas Operativos (Fuente: W3conter). No todas las utilidades de administración o servicios forman parte del sistema operativo, además de éste, hay otros tipos importantes de software de administración de sistemas, como los sistemas de administración de base de datos o los programas de administración de redes. El soporte de estos productos deberá proporcionarlo el fabricante correspondiente (que no tiene porque ser el mismo que el del sistema operativo). 4.3 Programas de proceso Los programas de proceso están enfocados preferentemente para ayudar al programador en la puesta a punto de programas, llegando incluso a proporcionarle pseudo-programas estándares semi-escritos, que completados con pocas instrucciones mas quedan perfectamente listos para su ejecución. Todo sistema operativo posee en su entorno un conjunto de programas para este fin. Existen dos tipos de programas de proceso, los programas traductores y los programas de servicio. 4.3.1 Programas traductores Los programas traductores son meta-programas que toman como entrada un programa escrito en lenguaje simbólico alejado de la maquina denominado programa fuente y Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 37 INF-101 Introducción a la Programación 1-2010 proporcionan como salida otro programa equivalente escrito en un lenguaje comprensible por el hardware de la computadora denominado programa objeto. Existen 3 tipos de programas traductores: a) Programas ensambladores: Son programas traductores que transforman programas fuente escritos en lenguajes simbólicos de bajo nivel (denominados lenguajes ensambladores o assemblers), en programas objeto, escritos en lenguaje de máquina y ejecutables directamente por el hardware de la computadora. Figura 4.3: Programa en lenguaje ensamblador. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 38 INF-101 Introducción a la Programación 1-2010 b) Programas compiladores: Son programas traductores encargados de transformar programas fuente escritos en lenguaje simbólico de alto nivel, en programas objeto escritos en lenguaje de máquina. La traducción no suele ser directa, apareciendo un paso intermedio situado en un nivel similar al de ensamblador. Una característica fundamental de este tipo de traductores es que se realiza la traducción completa, y en el caso de no existir errores se pasa a la creación del programa objeto. La traducción del programa fuente se efectúa, además, de forma que cada instrucción del programa fuente se transforma en una o más instrucciones en el programa objeto. Turbo C C/C++ Pascal Basic Figura 4.4: El IDE Codeblocks que utiliza el compilador GNU GCC (Lenguaje C/C++). c) Programas Interprete: Son programas traductores que transforman programas fuente escritos en lenguaje de alto nivel en programas objeto escritos en lenguaje maquina. En estos programas interpretes la traducción se realiza de forma que después de transformar una instrucción del programa fuente en una o varias Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 39 INF-101 Introducción a la Programación 1-2010 instrucciones en lenguaje maquina no se espera a traducir la siguiente instrucción, sino que inmediatamente se ejecuta. Como ejemplo tenemos los siguiente: Perl PHP Java ASP Python C# J# 4.3.2 Programas de servicio Los programas de servicio son un grupo de programas que realizan funciones útiles para él para el sistema o para el usuario (comúnmente llamados utilidades). Teniendo en cuenta el campo de actuación de los programas de servicio, se pueden clasificar en dos grupos. a) Programas de manipulación de datos: Son aquellos que liberan al programador de trabajos engorrosos, ya que realizan de forma automática alguna de las siguientes funciones: Transferencia de informaciones o archivos entre soportes. Recodificación (transcodificación) o transformación de informaciones. Recodificación de la información en archivos. Ordenación de datos en archivos. b) Programas de servicio del sistema: Tienen como misión la generación del sistema operativo completo sobre la computadora, la presentación de los programas y la creación y mantenimiento de las bibliotecas de programas. 4.4 Proceso de compilación Por ser los compiladores el tipo de traductores más utilizado en la actualidad, desarrollamos el proceso de compilación, que consiste en la traducción de un programa fuente escrito en lenguaje de alto nivel en su correspondiente programa objeto escrito en lenguaje máquina, dejándolo listo para la ejecución con poca o ninguna preparación adicional. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 40 INF-101 Introducción a la Programación 1-2010 Para ejecutar la compilación de un programa, éste debe estar en memoria central simultáneamente con el compilador. El resultado de la compilación puede dar lugar a la que se denomina listado de compilación, que nos permite ver dichos errores para volver al programa editor, corregirlos y empezar de nuevo el proceso de compilación. Obtenido el programa objeto es necesario someterlo a un proceso de montaje donde se enlazan los distintos módulos, en caso de programas que poseen subprogramas. Además se incorporan las denominadas rutinas de librería en caso de solicitarlas el propio programa. Como ya hemos mencionado, este montaje lo realiza un programa denominado montador que también recibe el nombre de editor de enlace o linker. Programa fuente EDITOR Listado de compilación COMPILADOR SI Errores? NO Programa Objeto MAPA Editor de enlace LINKER LIBRERIAS Programa Ejecutable Figura 4.5: Proceso de compilación. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 41 INF-101 Introducción a la Programación 1-2010 Tema #5 – La Información y su representación 5.1 Introducción Los sistemas de numeración son las distintas formas de representar la información numérica. Se nombran haciendo referencia a la base, que representa el número de dígitos diferentes para representar todos los números. El sistema habitual de numeración para las personas es el Decimal, cuya base es diez y corresponde a los distintos dedos de la mano, mientras que el método habitualmente utilizado por los sistemas electrónicos digitales es el Binario, que utiliza únicamente dos cifras para representar la información: el 0 y el 1. 5.2 Clasificación de los sistemas de numeración Para simplificar, dividiremos a todos los sistemas en dos tipos. 5.2.1 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. Figura 5.1: Sistemas de numeración egipcio y azteca. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 42 INF-101 Introducción a la Programación 1-2010 5.2.2 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. 5.2.3 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. Figura 5.2: Sistemas de numeración romano. 5.3 Sistemas Decimal Desde hace bastante tiempo, el hombre ha utilizado como sistema para contar el denominado Sistema Decimal, que derivo del sistema numérico indo-arábico, posiblemente se adopto este sistema por contar con diez dedos en las manos. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 43 INF-101 Introducción a la Programación 1-2010 Figura 5.3: Sistemas decimal. 5.4 Teorema Fundamental de la Numeración (TFN) Este teorema establece la forma general de construir números en un sistema de numeración posicional. Primero estableceremos unas definiciones básicas: Por ejemplo si tenemos el número 153,6 utilizando e sistema octal (base ocho), el paso a decimal se haría: 1 * 82 + 5*81 + 3 * 80 + 6*8-1 = 64 + 40 + 3 +6/8 = 107,75 5.5 Sistema binario Los números binarios son los que utilizan las computadoras para almacenar información. Debido a ello hay términos informáticos que se refieren al sistema binario y que se utilizan continuamente. Son: Bit (b): Digito binario (1 o 0). Nibble o cuarteto: Es el conjunto de cuatro bits (1001). Bytes u Octeto (B): Es el conjunto de 8 bits (11110000). Kilo Bytes (KB): Es el conjunto de 1024 Bytes (210 Bytes). Mega Bytes (MB): Es el conjunto de 1024 KBytes (220 Bytes). Giga Bytes (GB): Es el conjunto de 1024 MBytes (230 Bytes). Tera Bytes (TB): Es el conjunto de 1024 GBytes (240 Bytes). Peta Bytes (PB): Es el conjunto de 1024 PBytes (250 Bytes). Exa Bytes (EB): Es el conjunto de 1024 EBytes (260 Bytes). Zeta Bytes (ZB): Es el conjunto de 1024 ZBytes (270 Bytes). Yotta Bytes (YB): Es el conjunto de 1024 YBytes (280 Bytes). Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 44 INF-101 Introducción a la Programación 1-2010 5.5.1 Operaciones aritméticas binarias 5.5.1.1 Suma Binaria Los números binarios se suman en forma análoga que los de base decimal, es decir de derecha a izquierda, arrastrando el acarreo (1) a la columna inmediata de la izquierda. Las condiciones para la suma 0+0=0 1+0=1 0+1=1 1 + 1 = 0 con 1 de acarreo Ejemplo (suma de 31, en binario 10011, y 28, en binario, 11100). El resultado es: Acarreo 5.5.1.2 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 Resta Binaria El concepto es parecido sólo que en el caso de la resta es importante tener en cuenta el signo. Semejante a la sustracción decimal con la excepción que trabajamos con base 2 (en la base decimal cuando tenemos 0-N prestamos 10 unidades al dígito de la izquierda). Las reglas para la resta son las siguientes: 0-0 =0 1-1 =0 1-0 =1 0 - 1 = 1 (con préstamo del digito que está a la izquierda) Ejemplo: 1100101 0111011 -----------------0101010 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 45 INF-101 Introducción a la Programación 1-2010 Este es el denominado “método directo”, sin embargo es posible efectuar esta operación mediante el denominado “complemento a 2”, que consiste en complementar (cambiar los ceros por unos y viceversa) al segundo término sustraendo, luego se ambos suman ambos términos y a este resultado se agrega un uno (1), finalmente del resultado final se desprecia el primer digito. Veamos el ejemplo anterior: 1100101 0 1 1 1 0 1 1 complementamos en 1 esta cifra y obtenemos: 1100101 1000100 -----------------10101001 + 1 ------------------(1) 0 1 0 1 0 1 0 El primer (1) se desprecia de valor final y el resultado es 0 1 0 1 0 1 0. 5.6 Sistema hexadecimal Es un sistema que se utiliza mucho para representar números binarios. Un problema (entre otros) de los números binarios es que ocupan mucho espacio para representar información. El sistema hexadecimal es la forma de representar números en base 16. de modo que en los dígitos del 0 al 9 se utilizan los mismos símbolos que en el sistema decimal y a partir del 10 se utiliza la letra A y así hasta la letra F que simboliza el 15. Así el número hexadecimal CA3 sería: C * 162 + A * 161 + 3 * 160 = 12 * 256 + 10 * 16 + 3 = 3235 Como se observa pasar de hexadecimal a decimal es complejo. La razón del uso de este sistema es porque tiene una equivalencia directa con el sistema binario. De hecho en una cifra hexadecimal caben exactamente 4 bits. Por ello la traducción de hexadecimal a binario se basa en esta tabla: Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 46 INF-101 Introducción a la Programación HEX 0 1 2 3 4 5 6 7 8 9 A B C D E F 1-2010 BIN 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Así el número hexadecimal C3D4 sería el binario 1100 0011 1101 0100. Y el binario 0111 1011 1100 0011 sería el hexadecimal 7BC3. 5.7 Conversiones 5.7.1 CASO A: Método directo para la conversión de números en Base 10 a base X (Divisiones sucesivas). En este caso se aplican divisiones sucesivas para la parte entera del número, y multiplicaciones sucesivas para la parte fraccionaria. Para ello, se siguen los siguientes pasos. Parte entera 1) Si el numero es entero, se divide el numero entre la base. 2) Se debe seguir realizando las divisiones hasta que el cociente sea menor a la base destino. 3) Se copia el resultado de derecha a izquierda el último de los cocientes y los residuos. Parte fraccionaria 4) La base fraccionaria se debe multiplicar por la base destino. 5) Se debe copiar la parte de cada multiplicación al resultado. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 47 INF-101 Introducción a la Programación 1-2010 6) Las multiplicaciones se detienen cuando se repite una serie, o cuando se trunca en 0. También se detiene el proceso cuando se determina el número de dígitos a llegar. Nº Decimal Base Cociente Resto 107 2 53 1 53 2 26 1 26 2 13 0 13 2 6 1 6 2 3 0 3 2 1 1 Cuando tengamos un número con decimales seguiremos el siguiente procedimiento: multiplicaremos por 2 la parte decimal y se toma como dígito binario su parte entera. El proceso se repite con la fracción decimal resultante del paso anterior, hasta obtener una fracción decimal nula, o bien hasta obtener el número de cifras binarias que se desee. Ejemplo: 107,645. Como anteriormente convertimos 107 a binario, el resultado de la conversión quedaría así: 1101011, 101001012 10710= 11010112 Fracción Multiplicado Resultado decimal por: Dígito binario 0,645 2 1,290 1 0,290 2 0,580 0 0,580 2 1,160 1 0.160 2 0,320 0 0,320 2 0.64 0 0.64 2 1.28 1 0.28 2 0.56 0 0.56 2 1.12 1 5.7.2 CASO B: Método directo para la conversión de números en Base X a base 10 (TFN). El Teorema Fundamental de la Numeración nos permite convertir un número de cualquier base a base decimal. Por ejemplo para el número binario 10011011011 el paso sería (los ceros se han ignorado): Ej: 1 * 210 + 1 * 27 + 1*26 + 1* 24 + 1*23 + 1*21 + 1*20 = 1243 Ej Sea el número binario: 1001,11 1 * 23 + 1*20 + 1* 2-1 + 1 * 2-2 = 8 + 1 + 0,5 + 0,25 = 9, 75 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 48 INF-101 Introducción a la Programación 1-2010 5.7.3 CASO C: Método directo para la conversión de números de sistema octal a binario y binario a octal. Si la conversión es de octal a binario cada cifra se sustituirá por su equivalente binario. Tendremos en cuenta la siguiente tabla para hacer la conversión de modo más rápido: Carácter octal Nº binario 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 Ejemplo: 55,358 Resultado: 101 101, 011 1012 Si la conversión es de binario a octal se realiza de modo contrario a la anterior conversión, agrupando los bits enteros y los fraccionarios en grupos de 3 a partir de la coma decimal. Si no se consiguen todos los grupos de tres se añadirán, los ceros que sean necesarios al último grupo, veámoslo con un ejemplo: Agrupación Equivalente octal Ejemplo: 11011111,111112 Resultado: 237,768 010 2 011 3 Observa como ha sido necesario añadir un cero en la última agrupación de la parte entera y otro en la parte fraccionaria para completar los grupos de 3 dígitos. 111 7 , , 111 7 110 6 5.7.4 CASO D: Método directo para la conversión de números de sistema hexadecimal a binario y binario a hexadecimal. La conversión entre binario y hexadecimal es igual al de la conversión octal y binario, pero teniendo en cuenta los caracteres hexadecimales, ya que se tienen que agrupar de 4 en 4. La conversión de binario a hexadecimal se realiza según el ejemplo siguiente: Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 49 INF-101 Introducción a la Programación Sistema binario Sistema Hexadecimal 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 1-2010 Ejemplo: 1011111,1100012 Agrupando obtenemos el siguiente resultado: 0101 1111, 1100 01002 Sustituyendo según la tabla logramos la conversión esperada: 5F, C416 La conversión de hexadecimal a binario simplemente sustituiremos cada carácter por su equivalente en binario, por ejemplo: 69DE16= 0110 1001 1101 11102 5.8 Ejercicios Propuestos. 1. Convertir de binario a decimal a) 110012 b) 10110110112 Solución: 2510 Solución: 73110 2. Convertir de decimal a binario a) 86910 b) 842610 Solución: 11011001012 Solución: 100000111010102 3. Convertir de binario a octal a) 1110101012 b) 11011, 012 Solución: 7258 Solución: 33,28 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 50 INF-101 Introducción a la Programación 1-2010 4. Convertir de octal a binario a) 20668 b) 142768 Solución: 0100001101102 Solución: 0011000101111102 5. Convertir de binario a hexadecimal a) 1100010002 b) 100010,1102 Solución: 18816 Solución: 22,C 6. Convertir de hexadecimal a binario a) 86BF16 b) 2D5E16 Solución: 10000110101111112 Solución: 00101101010111102 7. Convertir de octal a decimal a) 1068 b) 7428 Solución: 7010 Solución: 48210 8. Convertir de decimal a octal: a) 23610 b) 5274610 Solución: 3548 Solución: 1470128 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 51 INF-101 Introducción a la Programación 1-2010 Tema #6 – Algoritmos 6.1 Concepto de algoritmo Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea o resolver un problema. De un modo más formal, un algoritmo es una secuencia finita de operaciones realizables, no ambiguas, cuya ejecución da una solución de un problema en un tiempo finito. El término algoritmo no está exclusivamente relacionado con la matemática, ciencias de la computación o informática realidad, en la vida cotidiana empleamos algoritmos en multitud de ocasiones para resolver diversos problemas. Algunos ejemplos son el uso de una lavadora (se siguen las instrucciones), la preparación de una plato especial o el mismo lenguaje humano que "transforma" nuestros pensamientos en sonidos y hace que otro humano nos pueda entender. También existen ejemplos de índole matemática, como el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para calcular el máximo Común divisor de dos enteros positivos, o incluso el método de Gauss para resolver Sistemas Lineales de Ecuaciones. La resolución de un problema exige el diseño de un algoritmo que resuelva el problema propuesto. Problema Diseno del algoritmo Programa de computadora Figura 6.1: Resolución de un problema. Los pasos para la resolución de un problema son: 1. Diseño del algoritmo que describe la secuencia ordenada de pasos (sin ambigüedades) que conducen a la solución de un problema dado. (Análisis del programa y desarrollo del algoritmo.) 2. Expresar el algoritmo como un programa en un lenguaje de programación adecuado. (Fase de codificación) Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 52 INF-101 Introducción a la Programación 3. 1-2010 Ejecución y validación del programa por la computadora. Para llegar a la realización de un programa es necesario el diseño previo de un algoritmo, de modo que sin este no es posible generar un programa basado en computadora. Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como de la computadora que los ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferente de programación y ejecutarse en una computadora distinta; sin embargo, el algoritmo será siempre el mismo. Así, por ejemplo, en una analogía con la vida diaria, una receta de un plato de cocina se puede expresar en español, inglés o francés, pero cualquiera que sea el lenguaje, los pasos para la elaboración del plato se realizarán sin importar el idioma del cocinero. En la ciencia de la computación y en la programación, los algoritmos son más importantes que los lenguajes de programación o las computadoras. Un lenguaje de programación es tan solo un medio para expresar un algoritmo y una computadora es sólo un procesador para ejecutarlo. Tanto el lenguaje de programación como la computadora son los medios para obtener un fin: conseguir que el algoritmo se ejecute y se efectúe el proceso correspondiente. Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy importante será el diseño de algoritmos. A la enseñanza y práctica de esta tarea se dedica gran parte de este texto. El diseño de la mayoría de los algoritmos requiere creatividad y conocimientos de técnicas de la programación. En esencia, la solución de un problema se puede expresar mediante un algoritmo. 6.2 Características de los algoritmos Las características fundamentales que debe cumplir todo algoritmo son: Un algoritmo debe ser preciso e indicar el orden de realización. Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea debe tener un número finito de pasos. La definición de un algoritmo debe describir tres partes: Entrada, proceso y salida. En el algoritmo de receta de cocina citado anteriormente se tendrá: Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 53 INF-101 Introducción a la Programación 1-2010 Entrada: Ingredientes y utensilios empleados Proceso: Elaboración de la receta en la cocina. Salida: Terminación del plato (por ejemplo, pollo al horno). Ejemplo 1 Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario, rechazará el pedido. Redactar el algoritmo correspondiente. Los pasos del algoritmo son: 1) 2) 3) 4) 5) Inicio. Leer el pedido. Examinar la ficha del cliente Si el cliente es solvente, aceptar pedido; en caso contrario, rechazar pedido Fin 6.3 Resolución de problemas La principal razón para que las personas aprendan a programar en general y los lenguajes de programación en particular, es utilizar la computadora como una herramienta para la resolución de problemas. Ayudado por una computadora, la resolución de un problema se puede dividir en tres fases importantes: • Análisis del problema. • Diseño o desarrollo del algoritmo. • Resolución del algoritmo en la computadora. El Análisis del problema requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo detalle. Una vez analizado el problema, se debe desarrollar el algoritmo (procedimiento paso a paso para solucionar el problema dado). Por último, para resolver el algoritmo mediante una computadora, se necesita codificar el algoritmo en un lenguaje de programación C, C/++, JAVA, etc., es decir, convertir el algoritmo en programa, ejecutarlo y comprobar que el programa soluciona verdaderamente el problema. Las fases del proceso de resolución de un problema mediante computadora se indican en la figura 6.2. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 54 INF-101 Introducción a la Programación 1-2010 Resolucion de un problema Analisis del problema Diseno del algoritmo Resolucion del problema en computadora Figura 6.2: Etapas en la resolución de un problema en computadora. 6.3.1 Análisis del problema El propósito del análisis de un problema, es ayudar al programador para llegar a una cierta comprensión de la naturaleza del problema. El problema debe estar bien definido para así llegar a una solución satisfactoria. Para poder definir con precisión el problema, se requiere que las especificaciones de entrada y salida sean descritas con detalle. Una buena definición del problema, junto con una descripción detallada de las especificaciones de entrada y salida, son los requisitos más importantes para llegar a una solución eficaz. El análisis del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se solicita. La segunda lectura deberá servir para resolver a las preguntas: ¿Qué información debe proporcionar la resolución del problema? ¿Qué datos se necesitan para resolver el problema? La respuesta a la primera pregunta indicará los resultados deseados a las salidas del problema. La respuesta a la segunda pregunta indicará que datos se proporcionan a las entradas del problema. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 55 INF-101 Introducción a la Programación 1-2010 Analisis del Problema Definicion del problema Especificacion de Entradas Especificacion de Salidas Figura 6.3: Etapas en el Análisis del Problema. Ejemplo 2 Leer el radio de un círculo e imprimir su superficie y la longitud de la circunferencia. Las entradas de datos en este problema se concentran en el radio del círculo. Dado que el radio puede tomar cualquier valor dentro del rango de los números reales, el tipo de datos radio debe ser real. Las salidas serán dos variables: superficie y circunferencia, que también serán de tipo real. • • • Entradas: Radio del circulo (variable RADIO). Salidas: Superficie del circulo (variable Área). Circunferencia del circulo (variable Circunferencia). Variables: Radio, Área y circunferencia (tipo real). 6.3.2 Diseño del algoritmo Una computadora no tiene capacidad para solucionar problemas más que cuando se le proporcionan los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la maquina, constituyen, como ya conocemos, el algoritmo. La información proporcionada al algoritmo, constituye su entrada y la información producida por el algoritmo constituye su salida. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 56 INF-101 Introducción a la Programación 1-2010 El aspecto más importante del algoritmo es la elaboración del proceso o los procesos que a partir de los datos de entrada, se debe en base a ellos producir la salida deseada. Cuando los problemas son complejos se pueden resolver más eficazmente con la computadora, cuando se rompen en sub problemas que sean más fáciles de solucionar que el original. Normalmente los pasos diseñados en el primer esbozo del algoritmo son incompletos e indicaran solo unos pocos pasos. Tras esta primera descripción, estos se amplían en una descripción más detallada con más pasos específicos. Por lo tanto el algoritmo elaborado será: INICIO • • • • Leer radio Calcular superficie : Superficie=3.1416 * radio^2 Calcular circunferencia : Circunferencia = 2 * 3.1416 * radio Escribir resultados: Imprimir Circunferencia, Superficie FIN Como ya se ha comentado anteriormente, el sistema para describir (“escribir”) un algoritmo consiste en realizar una descripción paso a paso con un lenguaje natural del citado algoritmo. Recordemos que un algoritmo es un método o un conjunto de reglas para solucionar un problema. En cálculos elementales estas reglas tienen las siguientes propiedades: • • • Deben de estar seguidas de algunas secuencias definidas de pasos hasta que se obtenga un resultado coherente, Sólo puede ejecutarse una operación a la vez. El flujo de control usual de un algoritmo es secuencial Consideremos el algoritmo que responde a la pregunta: ¿Qué hacer para ver la película Tiburón? La respuesta es muy sencilla y puede ser descrita en forma de algoritmo, general de modo similar a: • • • • Ir al cine Comprar una entrada Ver la película Regresar a casa Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 57 INF-101 Introducción a la Programación 1-2010 El algoritmo consta de cuatro acciones básicas, cada una de las cuales debe ser ejecutada antes de realizar la siguiente. En términos de computadora, cada acción se codificará en una o varias sentencias que ejecutan una tarea particular. El algoritmo descrito es muy sencillo; sin embargo, como ya se ha indicado en párrafos anteriores, el algoritmo general se descompondrá en pasos más simples en un procedimiento denominado refinamiento sucesivo, ya que cada acción puede descomponerse a su vez en otras acciones simples. Así, un primer refinamiento del algoritmo ir al cine se puede describir de la forma siguiente: 1. Inicio 2. Ver la cartelera de cines en el periódico 3. Si no proyectan “Tiburón” entonces 3.1 Elegir otra actividad 3.2 Bifurcar al paso 7 si_no 3.3 ir al cine. Fin_si 4.Si hay cola 4.1 ponerse en ella 4.2 mientras haya personas delante hacer 4.2.1 avanzar en la cola fin_mientras fin_si 5. Si hay localidades entonces 5.1 comprar una entrada 5.2 pasar a la sala. 5.3 localizar la(s) butaca(s) 5.4 mientras proyectan la película hacer 5.4.1 ver la película fin_mientras 5.5 abandonar el cine si_no 5.6 refunfuñar fin_si 6. volver a casa 7. fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 58 INF-101 Introducción a la Programación 1-2010 En el algoritmo anterior existen diferentes aspectos a considerar. En primer lugar, ciertas palabras reservadas se han escrito deliberadamente en negrita (mientras, si no, etc.). Estas palabras describen las estructuras de control fundamentales y procesos de toma de decisión en el algoritmo. La capacidad de decisión permite seleccionar alternativas de acciones a seguir o bien la repetición una y otra vez de operaciones básicas, como por ejemplo: Si proyectan la película seleccionada ir al cine si_no ver la televisión, ir al fútbol o leer el periódico. Que tiene un carácter estrictamente decisional mientras haya personas en la cola, ir avanzando repetidamente hasta llegar a la taquilla. Que tiene un carácter repetitivo. 6.3.3 Resolución de problema de computadora Una vez que el algoritmo está diseñado y representado gráficamente mediante una herramienta de programación (diagrama de flujo o pseudocódigo) se debe pasar a la fase de resolución práctica del problema con la computadora. Esta fase se descompone a su vez en las siguientes subfase: 1) Codificación del algoritmo en un programa en base a un lenguaje de programación (C, C++, Pascal, Java. etc). 2) Ejecución del programa. 3) Comprobación del programa. En el diseño del algoritmo éste describe en una herramienta de programación tal como un diagrama de flujo o pseudocódigo .Sin embargo, el programa que implementa el algoritmo debe ser escrito en un lenguaje de programación y siguiendo las reglas gramaticales o sintaxis del mismo .La fase de conversión del algoritmo en un lenguaje de programación se denomina codificación, ya que el algoritmo escrito en un lenguaje específico de programación se denomina código. Tras la codificación del programa, deberá ejecutarse en una computadora y a continuación de comprobar los resultados pasar a la fase final de documentación. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 59 INF-101 Introducción a la Programación 1-2010 6.4 Técnicas para la formulación de algoritmos Las dos herramientas utilizadas comúnmente para diseñar algoritmos son: • • Diagrama de Flujo Pseudocódigo 6.4.1 Diagramas de Flujo Un diagrama de flujo es la representación gráfica de un algoritmo. También se puede decir que es la representación detallada en forma gráfica de cómo deben realizarse los pasos en la computadora para producir resultados. Esta representación gráfica se da cuando varios símbolos (que indican diferentes procesos en la computadora), se relacionan entre sí mediante líneas que indican el orden en que se deben ejecutar los procesos. Los símbolos utilizados han sido normalizados por el instituto norteamericano de normalización (ANSI). Simbolo Descripcion Indica el inicio y el final del diagrama. Indica la entrada por teclado. Símbolo de proceso, indica la asignación de un valor en la memoria y/o la ejecución de una operación aritmética. Símbolo de decisión indica la realización de una comparación de valores. Se utiliza para representar subprogramas. Conector dentro de página. Conector fuera de página. Indica salida por impresora. Indica salida por impresora. Indica salida en la pantalla o monitor Representa a un ciclo repetitivo. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 60 INF-101 Introducción a la Programación 1-2010 6.4.2 Recomendaciones para el diseño de diagramas de flujo • • • • • • Se deben usar solamente líneas de flujo horizontal y/o vertical. Se debe evitar el cruce de líneas utilizando los conectores. Se deben usar conectores solo cuando sea necesario. No deben quedar líneas de flujo son conectar. Se deben trazar los símbolos de manera que se puedan leer de arriba hacia abajo y de izquierda a derecha. Todo texto escrito dentro de un símbolo deberá ser escrito claramente, evitando el uso de muchas palabras. 6.5 Pseudocódigo Mezcla de lenguaje de programación y español (o ingles o cualquier otro idioma) que se emplea, dentro de la programación estructurada, para realizar el diseño de un programa. En esencial, el pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos. Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución a un problema determinado. El pseudocódigo utiliza palabras que indican el proceso a realizar. Ejemplo: Suponga que un individuo desea invertir su capital en un banco y desea saber cuánto dinero ganara después de un mes si el banco paga a razón de 2% mensual. Inicio Leer cap_inv gan = cap_inv * 0.02 Imprimir gan Fin 6.5.1 Ventaja de utilizar Pseudocódigo a Diagramas de Flujo • • • • Ocupa menos espacio en una hoja de papel Permite representar en forma fácil operaciones repetitivas complejas Es muy fácil pasar de pseudocódigo a un programa en algún lenguaje de programación. Si se siguen las reglas se puede observar claramente los niveles que tiene cada operación. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 61 INF-101 Introducción a la Programación 1-2010 Tema #7 – Entidades Primitivas para el desarrollo de algoritmos 7.1 Tipos de datos Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable. Figura 7.1: Tipos de datos simples. Datos Numéricos: Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los reales. Este tipo de datos permiten realizar operaciones aritméticas comunes. Datos Lógicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparación entre otros datos (numéricos o alfanuméricos). Datos Alfanuméricos (Cadenas): Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas. Ejemplo: “Universidad Católica Boliviana” “2007” Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 62 INF-101 Introducción a la Programación 1-2010 7.2 Expresiones Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. Por ejemplo: a + (b + 3) / c Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las expresiones en: Aritméticas Relaciónales Lógicas 7.3 Operadores y operandos Los operadores son elementos que relacionan de forma diferente, los valores de una o más variables y/o constantes. Es decir, los operadores nos permiten manipular valores. Tipos de Operadores Aritméticos Relaciónales Lógicos 7.3.1 Operadores aritméticos Los operadores aritméticos permiten la realización de operaciones matemáticas con los valores (variables y constantes). Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real. Operando (Operador) Operando Valor (Constante o variable) Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 63 INF-101 Introducción a la Programación + * / Mod 1-2010 Suma Resta Multiplicación División Modulo (residuo de la división entera) Ejemplos: Expresión Resultado ----------------------------------------7/2 3.5 12 mod 7 5 4 +2*5 14 7.3.1.1 Prioridad de ejecución en operadores aritméticos Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con paréntesis anidados se evalúan de dentro a fuera, el paréntesis más interno se evalúa primero. Dentro de una misma expresión los operadores se evalúan en el siguiente orden. 1 ^ Exponenciación 2 *, /, mod Multiplicación, división, modulo. 3 +, - Suma y resta. Los operadores en una misma expresión con igual nivel de prioridad se evalúan de izquierda a derecha. Ejemplos: 4 + 2 * 5 = 14 23 * 2 / 5 = 9.2 3 + 5 * (10 - (2 + 4)) = 23 3.5 + 5.09 - 14.0 / 40 = 5.09 2.1 * (1.5 + 3.0 * 4.1) = 28.98 4 + 10 46 / 5 = 9.2 3 + 5 * (10 - 6) = 3 + 5 * 4 = 3 + 20 = 23 3.5 + 5.09 - 3.5 = 8.59 - 3.5 = 5.09 2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98 7.3.2 Operadores relacionales Se utilizan para establecer una relación entre dos valores. Compara estos valores entre si y esta comparación produce un resultado de certeza o falsedad (verdadero o falso). Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 64 INF-101 Introducción a la Programación 1-2010 Los operadores relaciónales comparan valores del mismo tipo (numéricos o cadenas y tienen el mismo nivel de prioridad en su evaluación. Los operadores relaciónales tiene menor prioridad que los aritméticos. > < >= <= <> = Mayor que Menor que Mayor o igual que Menor o igual que Diferente Igual Ejemplos: Si los valores de las siguientes variables fueran: a = 10 b = 20 c = 30 entonces las siguientes expresiones tendrían los siguientes valores de verdad: a+b>c a-b<c a-b=c a*b<>c Falso Verdadero Falso Verdadero Ejemplos no lógicos: a<b<c 10 < 20 < 30 T < 30 (no es lógico porque tiene diferentes operandos). 7.3.3 Operadores lógicos Estos operadores se utilizan para establecer relaciones entre valores lógicos, estos valores pueden ser resultado de una expresión relacional. And Or Not Y O Negación Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 65 INF-101 Introducción a la Programación 1-2010 Operador AND Operando 1 Operador T AND T AND F AND F AND Operando 2 T F T F Resultado T F F F Operador OR Operando 1 T T F F Operando 2 T F T F Resultado T T T F Operador OR OR OR OR Operador NOT Operando Operador T NOT F NOT Resultado F T Ejemplos: (a < b) and (b < c) (10<20) and (20<30) T and T T 7.3.3.1 Prioridad en operadores lógicos Los operadores lógicos se ejecutan según el siguiente orden de prioridad. Not And Or 7.3.4 Prioridad de todos los operadores Estos operadores se ejecutan según el siguiente nivel de prioridad. 1.- ( ) 2.- ^ 3.- *, /, Mod, Not 4.- +, -, And 5.- >, <, > =, < =, < >, =, Or Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 66 INF-101 Introducción a la Programación 1-2010 Ejemplos: a = 10 b = 12 c = 13 d =10 1) ((a > b) or (a < c)) and ((a = c) or (a > = b)) F T F F T F F 2) ((a > = b) or (a < d)) and (( a > = d) and (c > d)) F F T T F T F 3) not (a = c) and (c > b) F T T T 7.4 Identificadores o variables Los identificadores representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar una posición en la memoria de la computadora, que nos permite accesar a su contenido. Ejemplo: Nombre Num_hrs Calif2. 7.4.1 Reglas para formar un identificador Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no deben contener espacios en blanco. Letras, dígitos y caracteres como la subraya (_) están permitidos después del primer carácter. La longitud de identificadores puede ser de hasta 8 caracteres. 7.5 Constantes y Variables Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Ejemplo: Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 67 INF-101 Introducción a la Programación 1-2010 pi = 3.1416 Variable: Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede cambia durante la ejecución del programa. Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo. Ejemplo: área = pi * radio ^ 2 Las variables son: el radio, el área y la constate es pi. 7.6 Constantes y Variables 7.6.1 Por su Contenido Variable Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal. Ejemplo: iva=0.15 pi=3.1416 costo=2500 Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos. Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras, números y caracteres especiales). Ejemplo: letra=’a’ apellido=’lopez’ dirección=”Av. Los leones # 900” Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 68 INF-101 Introducción a la Programación 1-2010 7.6.2 Por su Uso Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa. Ejemplo: suma=a+b/c Contadores: Se utilizan para llevar el control del número de ocasiones en que se realiza una operación o se cumple una condición. Con los incrementos generalmente de uno en uno. Ejemplo: C=C+1 MN = MN + 1 Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente. Ejemplo: S=S+X SUM = SUM + ( X / 2) Multiplicadores: Forma que toma una variable y que sirve para llevar el producto acumulativo de una serie de valores que se van leyendo o calculando progresivamente. Ejemplo: C=C+1 M = M * C/ 2 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 69 INF-101 Introducción a la Programación 1-2010 PROBLEMAS RESUELTOS ALGORITMOS BASICOS: 1.- Diseñar un algoritmo que permita convertir coordenadas polares en rectangulares, los valores de entrada son el radio (r) y el ángulo (a). X = R * cos(A) Y = R * sen(A) Datos de entrada: R: Variable que representa al radio A: Angulo que previamente debe convertirse en radianes Datos de salida: X : Coordenada rectangular x Y : Coordenada rectangular y Inicio R,A A = A * 3.1416 / 180 X = R * cos (A) Y = R * sin (A) X,Y Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 70 INF-101 Introducción a la Programación 1-2010 2.- Obtener el volumen de una esfera de radio variable Dato de Entrada: RADIO: variable donde el dato de entrada se almacena Dato de Salida: VOL: variable que almacena el resultado Inicio RADIO VOL = 3.1416* RADIO ^ 3 VOL fin 3.- Convertir grados Fahrenheit en grados centígrados Inicio Gf Gf = (Gf – 32) * 0,556 Gf Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 71 INF-101 Introducción a la Programación 1-2010 4.- Convertir segundos en horas, minutos y segundos Variable de entrada: Seg : Representa los segundos que el usuario ingresa Variables de salida: Hra, Min y Seg: Análisis: La función trunc permite truncar la parte decimal de un número, y la función mod permite obtener el residuo de un cociente entre dos números. Inicio Seg Hra = trunc (Seg / 3600) Min = trunc(Seg mod 3600 /60) Seg = (Seg mod 3600 ) mod 60 Hra, Min, Seg Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 72 INF-101 Introducción a la Programación 1-2010 5.- Determinar el mayor y el menor valor, a partir de dos números que se leen desde el teclado. Variables de entrada: A, B : Los números que el usuario deberá ingresar Variables de salida: Mayor , Menor : Que corresponden los valores solicitados La función abs permite obtener el valor absoluto de un valor numérico Inicio A,B Mayor = (A + B) + abs(A-B) ) /2 Menor = (A + B) - abs(A-B) ) /2 Mayor, Menor Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 73 INF-101 Introducción a la Programación 1-2010 Tema #8 – Algoritmos decisionales 6.- Escriba un algoritmo para leer un número entero y determinar si es un número par o impar Inicio Num No Si Num mod 2 = 0 “Es impar” “Es Par” Fin 7.- Escriba un programa para leer dos números enteros distintos entre si y determine cual es el mayor y el menor valor. Inicio N,M No Si N>M M, “ es el mayor” N, “ es el mayor” N, “ es el menor” M, “ es el menor” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 74 INF-101 Introducción a la Programación 1-2010 8.- Escriba un algoritmo para leer un número entero y determine si es un número positivo, negativo o cero. Inicio N si no N =0 si no N>0 “Es Cero” “Es positivo” “Es negativo” Fin 9.- Dados viceversa dos números N y M, determinar si N es múltiplo de M o Inicio N,M no si N mod M = 0 no si M mod N= 0 “no son múltiplos” M, “ es múltiplo de “, N N, “ es múltiplo de “, M Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 75 INF-101 Introducción a la Programación 1-2010 10.- Elabore un diagrama de flujo para resolver ax2 + bx + c = 0 en el caso de raíces reales. Los datos son: a, b, c. Puede usar las operaciones que necesite. Asegúrese que el resultado sea válido. Análisis del problema: Si a <> 0 se presentan tres casos: Primero con dos soluciones dadas con la fórmula que da la solución de la ecuación de segundo grado cuando el discriminante es positivo. Segundo con una solución dada por la fórmula cuando el discriminante es cero. Tercero con dos soluciones complejas, dadas por la fórmula cuando el discriminante es negativo. Inicio A,B,C D=B*B–4*A*C no si D>0 si no X1 =(-B+sqrt(D)) / 2*A D<0 X1 = -B / 2*A “Soluciones imaginarias” X2 =(-B-sqrt(D)) / 2*A X2 = -B / 2*A X1, X2 X1 , X2 Inicio Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 76 INF-101 Introducción a la Programación 1-2010 11.- Escribir un algoritmo para leer un número y determinar si el mismo es un entero positivo par, positivo impar, negativo par o negativo impar o es cero. Inicio N no si N>0 no si no N < 0 si N mod 2=0 “Positivo impar” “Cero” no “Positivo par” si N mod 2=0 “Negativo impar” “Negativo par” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 77 INF-101 Introducción a la Programación 1-2010 12.- Leer tres números enteros y determinar si forman un triangulo isósceles, equilátero o escaleno. Un triangulo equilátero es aquel que tiene los 3 lados iguales, el triangulo escaleno tiene los 3 lados diferentes, y un triangulo isósceles (dos lados iguales y uno desigual, analice en este tipo los 3 casos posibles). Inicio A,B,C no si A=B no si no A=C no B=C si “Triangulo isósceles” B =C “Triangulo escaleno” si “Triangulo isósceles” “Triangulo equilátero” “Triangulo isósceles” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 78 INF-101 Introducción a la Programación 1-2010 13.- Dado un número, determinar si es entero o fraccionario. Inicio N no N mod 1 = 0 si N, “ es un numero fraccionario” N, “ es un numero entero” Fin 14.- Escribir un algoritmo en el que dado un número entero determinar si se encuentra en el intervalo cerrado 51 - 100. Inicio N no si N>=51 and N<=100 “Se encuentra en el intervalo cerrado” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 79 INF-101 Introducción a la Programación 1-2010 15.- Escriba un algoritmo para leer 3 números enteros distintos entre si e imprimirlos en orden ascendente. Inicio A,B,C no si A<B no si si A< C no si A<B C,B,A C,A,B B<C no B, A , C si A<C B,C,A A,B,C A, C , B Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 80 INF-101 Introducción a la Programación 1-2010 16.- Escribir un programa que lea el salario de un empleado e incremente este salario según la escala: Salario < 500 Salario >= 500 pero menor a 1000 Salario >= 1000 15 % de incremento 10% de incremento 5% de incremento El programa debe mostrar el salario anterior y el salario nuevo. Inicio Sal si Sal < 500 Inc = 15 no si Sal < 1000 Inc = 10 nono Inc = 5 Salinc = Sal * Inc /100 + Sal “Salario original:”, Sal “Salario nuevo:”, Salinc Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 81 INF-101 Introducción a la Programación 1-2010 17.- A un trabajador se le paga según las horas que trabaja en el día una tarifa de pago por hora. Si la cantidad de horas trabajadas es mayor a 8, la tarifa se incrementa en un 100%, calcular el pago total del trabajador. Variables de Entrada: HT: Representa las horas trabajadas PH: Representa el pago por hora Variables de Salida: PT: Representa el pago total Se consideran horas extras aquellas que exceden a las ocho normales de trabajo. Inicio HT, PH no si HT > 8 PE = (HT – 8) * 2* PH PT= PH * HT PT = PE+ PH* 8 PT Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 82 INF-101 Introducción a la Programación 1-2010 18. Escribir un D.F que permita el pago de comisiones por ventas efectuadas por un vendedor, según la siguiente escala: Venta < 100 Bs. 1% de comisión 100<= Venta < 500 5% de comisión 500<= Venta < 1000 7 % de comisión Venta >= 1000 10 % de comisión Determinar el valor que se paga en comisiones a un determinado vendedor. Inicio V si V < 100 no si si V < 500 no si si V < 1000 CO = 1 CO = 5 CO = 7 no si CO = 10 VCOM = V * CO/100 VCOM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 83 INF-101 Introducción a la Programación 1-2010 19.- Escribir un programa que calcule el tiempo de vuelo de una aeronave, considerando como datos de entrada la hora de salida, el minuto de salida, la hora de llegada y el minuto de llegada. Variables de entrada: HS: Hora de Salida, MS: Minuto de salida, HL: Hora de llegada, ML: Minuto de llegada Variables de Salida: TVH: Tiempo de vuelo en horas, TVM : Tiempo de vuelo en minutos Inicio HS, MS, HL, ML si HS < HL and MS <=ML no TVH = HL – HS TVM = ML - MS si HS < HL and MS > ML no TVH = (HL – HS) -1 TVM= 60 – (MS-ML) si HS > HL and MS <= ML no TVH = 24-(HS-HL) TVM = ML - MS TVH = 24-(HS-HL) -1 TVM = 60 – (MS-ML) TVH , TVM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 84 INF-101 Introducción a la Programación 1-2010 Tema #9 – Algoritmos repetitivos - decisionales 20.- Generar la serie: 1, 2, 3, 4, 5, …… 100 Análisis: La variable K es el denominado contador que permite generar la serie a partir de un valor inicial (0), que es el primer paso en el algoritmo, luego se establece la condición para que el proceso de conteo se detenga, en este caso : K <= 100, es decir que el proceso debe continuar mientras se cumpla esta condición, el contador K debe ir incrementándose en 1 (K = K + 1) , expresión que permite que una variable vaya cambiando continuamente (aumentado en 1) hasta que K llegue a 100, por cada termino que asume el contador este se imprime por pantalla, cuando esto se cumpla el ciclo repetitivo se “rompe” y el proceso concluye. Inicio K=0 K <= 100 K=K+1 K Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 85 INF-101 Introducción a la Programación 1-2010 21.- Generar la serie: 50, 48, 46, 44, ……….. 2 En este caso la serie va decrementado en 2, por lo tanto el primer paso es establecer el valor inicial de 50 a la variable C, luego se establece el limite del proceso mediante la condición (mientras K sea mayor o igual 2 ) , cuando la variable C llega a 2 este valor aun se imprime por la condición igual , pero luego al restar en dos, la variable C se convierte en 0, por lo que la condición ya no se cumple y el ciclo termina. Inicio C = 50 C>=2 C C=C-2 Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 86 INF-101 Introducción a la Programación 1-2010 22.- Escribir un programa que permita generar la serie: 1 , 2 , 4 , 8 ,16 ,32 .... para N términos Esta serie se puede expresar como la base de números binarios, es decir: 20, 21, 22, 23, 24, 25, …………..2N-1 Por lo que se puede utilizar una variable que actué como contador para representar los exponentes, a partir del primer exponente (0) y el valor final (N-1), puesto que el enunciado indica para N términos, por lo que la condición solo estable por menor (<). Inicio N C=0 C<N R=2^C R C=C+1 Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 87 INF-101 Introducción a la Programación 1-2010 23.- Obtener la serie: 1 , 2 , 4 , 7 , 11 , 16 ..... para n términos Inicio N C=0 K=1 C< N K C=C+1 K=K+C Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 88 INF-101 Introducción a la Programación 1-2010 24.- Mediante una algoritmo determine si un numero es perfecto o no. En caso de serlo o no imprima el mensaje respectivo. (Un numero perfecto es el que sumados sus divisores reproduce el mismo numero) Ej: 6 divisores: 1, 2 ,3 suma: 1+2+3 = 6 Inicio N SUM = 0 D =1 , N/2 ,1 si N mod D = 0 SUM = SUM + D no no si SUM = N N, “ no es un numero perfecto” N, “ Es un numero perfecto” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 89 INF-101 Introducción a la Programación 1-2010 25. Leer dos números enteros y obtener el cociente y su residuo mediante restas sucesivas Inicio A,B no si A>B no A>B si A=B A= A-B COC = 0 COC = 1 RES = A RES = 0 “El cociente es = “,COC “ El residuo es = “,RES C= C+1 COC = C RES = A Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 90 INF-101 Introducción a la Programación 1-2010 26.- Escribir un programa que obtenga la suma de la serie: 2 – 4 + 6 – 8 + .... para n términos Inicio N C=0 SIG = 1 C<N C=C+1 S = S + (2*C ) * SIG SIG = - SIG S FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 91 INF-101 Introducción a la Programación 1-2010 27. Dado un número, mostrar cada uno de sus dígitos en forma separada Inicio V V>0 D = V mod 10 D V = V / 10 Fin 28.- Determinar el MCD (Máximo Común Divisor) entre dos números enteros Inicio A,B A!=B no si A>B B=B-A A=A-B “El MCD DE “, A , “ Y ”, B, “ ES: “, B Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 92 INF-101 Introducción a la Programación 1-2010 29.- Leer n números enteros y determinar cual es el mayor valor. Inicio K AUX = 0 C=0 C< K NUM C=C+1 si AUX < NUM AUX = NUM no “El mayor valor es: “, AUX FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 93 INF-101 Introducción a la Programación 1-2010 30.- Leer un grupo de números desde el teclado y determinar la cantidad de números que terminen en 2, el proceso debe detenerse cuando el usuario pulse un cero. Inicio N C= 0 N>0 D = N mod 10 si D= 2 C=C+1 no N C Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 94 INF-101 Introducción a la Programación 1-2010 31.- En el intervalo de 1 a n, obtener la sumatoria de todos los números que sean múltiplos de 3 y 5 a la vez. Inicio N SUM = 0 K=1,N,1 K mod 3 = 0 si SUM = SUM + K and K mod 5 =0 no SUM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 95 INF-101 Introducción a la Programación 1-2010 32.- Escriba un algoritmo que lea un número entero y obtenga la suma de sus dígitos Inicio N SUM = 0 N>0 DIG = N mod 10 SUM = SUM + DIG N = TRUNC (N / 10) “La suma de sus dígitos es:”, SUM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 96 INF-101 Introducción a la Programación 1-2010 33.- Escriba un algoritmo para leer un número entero y determinar la cantidad de dígitos que este tiene. Inicio NUM K=0 NUM > 0 K=K+1 NUM = trunc (NUM/10) “La cantidad de dígitos es “, K Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 97 INF-101 Introducción a la Programación 1-2010 34.- Dado un número, verificar si es primo. Análisis: Debemos considerar en principio un criterio básico para determinar las propiedades de un número primo, tomaremos en cuenta que un número primo es aquel que tiene solo dos divisores: el número mismo y el uno. Por tanto el algoritmo esta orientado a contar la cantidad de divisores que tiene el número en cuestión, si tiene solo dos divisores el número es primo, de no ser cierta esta condición el número no es primo. Inicio N CD = 0 C=1 C<=N no si N mod C = 0 CD = CD + 1 C=C+1 no N, “ no es primo si CD = 2 N, “ es primo” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 98 INF-101 Introducción a la Programación 1-2010 35.- Escribir un D.F para calcular el promedio de pulsaciones de un grupo de n personas a deben por cada 10 segundos de ejercicio, la formula es: # pulsaciones = (220 - edad)/10 Inicio N CP = 0 SUM = 0 CP < N EDAD NP = (220 – EDAD) / 10 SUM = SUM + NP CP = CP + 1 PROM = SUM / N “El promedio es : “, PROM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 99 INF-101 Introducción a la Programación 1-2010 36.- Escribir un programa que convierta un número en base n a base 10, emplear el teorema fundamental de la numeración: Ej: Convertir 1010 2 base 10 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 10 Inicio NUM, BASE SUM = 0 C=0 NUM > 0 DIG = NUM mod 10 SUM = SUM + DIG * BASE ^ C C=C + 1 NUM = NUM / 10 SUM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 100 INF-101 Introducción a la Programación 1-2010 37.- Escriba un algoritmo para leer un número entero y determinar si es capicúa Inicio A C=A SUM = 0 C>0 DIG = C mod 10 SUM = SUM*10 + DIG C = trunc (C / 10) no “El numero no es capicúa” si A = SUM “El numero es capicúa” Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 101 INF-101 Introducción a la Programación 1-2010 38.- Determine la suma y la cantidad de múltiplos de m en el intervalo de 1 a n Inicio N,M CM = 0 SM = 0 I=1,N,1 si I mod M = 0 no CM = CM + 1 SM = SM + 1 “La cantidad de múltiplos es: “, CM, “ y la suma de estos es: “, SM Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 102 INF-101 Introducción a la Programación 1-2010 39.- Leer dos números enteros y mostrar sus divisores comunes Inicio N ,M no L=M si N>M L=N D=1,L,1 si N mod D = 0 and “Divisor común: “, D M mod D =0 no Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 103 INF-101 Introducción a la Programación 1-2010 40.- Obtener la sumatoria de la serie: 1 + 1 + 2 + 3 + 5 + 8 +13 ….. para n términos. (Serie de Fibonacci). Inicio N A=1 B=1 S=A+B J = 1 , N-2 , 1 C=A+B S=S+C A=B B= C “La sumatoria es = “, S Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 104 INF-101 Introducción a la Programación 1-2010 41.- Generar n números al azar entre 10 y 99 y determinar la cantidad de números que terminan en cero. La función RANDOM genera números al azar. La formula para el uso del RANDOM es: RANDOM (Limite superior – Limite inferior +1) + limite inferior Inicio N CC = 0 K=1,N,1 R = RANDOM(90) + 10 D = R mod 10 si D=0 CC = CC + 1 no CC Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 105 INF-101 Introducción a la Programación 1-2010 42.- Escribir un algoritmo para simular el lanzamiento de una moneda un cierto número de veces y determinar cuantas veces salió 'cara' y cuantas 'sello INICIO V CC = 0 CS = 0 J=1,V,1 R = RANDOM * (2) si R=0 CC = CC + 1 no CS = CS + 1 “CARA SALIO: “, CC , “ VECES” “SELLO SALIO: “, CS, “ VECES” FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 106 INF-101 Introducción a la Programación 1-2010 43.- Dado un número, obtener su factorial Por definición: o N ! = N * N -1 * N -2 * N -3 * ….* 1 N! = 1 * 2 * 3 *……* N Los multiplicadores a diferencia de los sumadores se inician en 1 (elemento neutro de la multiplicación), luego la expresión F = F *C permite acumular los valores que se generan en el ciclo (PARA) desde el valor inicial (1) hasta el valor final (R). INICIO R F=1 C=1,R,1 F=F*C “El factorial de “, R, “ es : “, F FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 107 INF-101 Introducción a la Programación 1-2010 44.- Leer los salarios de un grupo de empleados y determine el promedio de salarios y el porcentaje de empleados que están por debajo de 1000 Bs, detenga el proceso cuando ingrese un salario igual a cero. INICIO SSAL = 0 CSAL = 0 CAUX = 0 SAL SAL > 0 CSAL = CSAL + 1 SSAL =SSAL + SAL SAL < 1000 si CAUX = CAUX + 1 no SAL PROM = SAL / CSAL PORC = CAUX*100 / CSAL “PROMEDIO DE SALARIOS : “, PROM “PORCENTAJE DE SALARIOS < A 1000 : “, PORC FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 108 INF-101 Introducción a la Programación 1-2010 45.- Mediante un algoritmo determine si dos números son “amigos” (dos números son amigos si la suma de sus divisores del primero es igual segundo y viceversa). Imprimir un mensaje en cada caso. Ej: 220 y 284 INICIO N,M SUM1= 0 C = 1 , N/2 ,1 si N mod C = 0 SUM1 = SUM1 + C no SUM2= 0 K = 1 , M/2, 1 si M mod K =0 SUM2 = SUM2 + K no “No son números amigos” no N = SUM2 si si and “Son números amigos” M = SUM1 FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 109 INF-101 Introducción a la Programación 1-2010 46.- Escribir un programa para calcular el cos(x), mediante la siguiente serie: (detener el proceso cuando el valor absoluto de un término sea menor a 0.001) x2 cos( x) 1 2! x4 4! x6 6! ..... INICIO X S=1 SIG = 1 DEN = 2 0 X = XT*=3.1416 /180 abs(T- S ) > 0.001 F=1 T= S M = 1 , DEN,1 F=F*M S = S + (X ^ D / F ) * SIG D=D+2 SIG = - SIG “El valor de la serie es: “, S FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 110 INF-101 Introducción a la Programación 1-2010 47.- Escribir un algoritmo para determinar si un numero entero de 3 dígitos es un cubo perfecto, (este es un numero en que la suma de sus dígitos elevados al cubo es igual al numero), imprima un mensaje según el caso. Ej: 153 = 13+53+33 INICIO C=1,9,1 D=0,9,1 U = 0, 9 , 1 X = C * 100 + D * 10 + U Y = C*C*C + D*D*D + U*U*U si X=Y no “CUBO PERFECTO: “, X FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 111 INF-101 Introducción a la Programación 1-2010 48. Determinar cuantas veces aparece un digito dado (leído desde el teclado) dentro de un número entero. EJ: Numero = 42232 Digito = 2 Frecuencia = 3 Inicio N, DIG CD = 0 N>0 D = N mod 10 no si DIG = D CD = CD + 1 “La frecuencia es de : ”, CD Fin Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 112 INF-101 Introducción a la Programación 1-2010 49. Dado un número N, mostrar por pantalla los dígitos primos sin importar el orden. INICIO N N > 0 K = N mod 10 F=0 D = 1 , K /2 , 1 si K mod D = 0 F=F+1 no si F=1 K no N = N / 10 FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 113 INF-101 Introducción a la Programación 1-2010 50.- Obtener el valor de la serie : 1! – 2! + 3! – 4! + 5! - ….. para n términos INICIO N SUM = 0 SIG = 1 C=1,N,1 M =1 F = 1, C. 1 M=M*F SUM = SUM + M * SIG SIG = - SIG SUM FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 114 INF-101 Introducción a la Programación 1-2010 51.- Generar las secuencias: 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5 INICIO C = 5 , 1, -1 D = 1 , C, 1 D FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 115 INF-101 Introducción a la Programación 52.- 1-2010 Generar : 1 2 2 3 3 4 4 5 5 ............ ............. n ........... 3 4 5 4 5 5 INICIO N X=1,N,1 Y = 1, X , 1 X FIN Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 116 INF-101 Introducción a la Programación 1-2010 PROBLEMAS PROPUESTOS - ALGORITMOS 1.- Elabore un diagrama de flujo que teniendo como datos de entrada el radio y la altura de un cilindro calcule el área total y el volumen del cilindro. 2.- Escriba un algoritmo que permita efectuar la conversión de coordenadas rectangulares en coordenadas polares. 3.- Convertir grados Centígrados en grados Fahrenheit 4.- Un sistema de ecuaciones lineales: ax + by = c dx + ey = f Se puede resolver con las siguientes fórmulas: x ce bf ae bd y af cd ae bd Elabore un algoritmo que lea dos conjuntos de coeficientes (a, b, c, d, e, f) y visualice los valores de x e y. 5.- Intercambiar el contenido de 2 variables. 6.- Una persona recibe un préstamo de $10,000.00 de un banco y desea saber cuánto pagará de interés al terminar el mes si el banco le cobra una tasa del 2% mensual. a) b) Resuelva este caso particular. Generalice este problema para un monto cualquiera de capital y para una tasa cualquiera. 7.- Dado un tiempo en segundos, calcular los segundos restantes que le correspondan para convertirse exactamente en minutos. 8.- Convertir horas en formato 24 horas a formato 12 horas, para lo cual debe leer las horas y minutos, además de una variable que indique si es PM o es AM. (Sug. 1: AM, 2 : PM) Ej: Sea la hora : 14:45 La entrada será: 14 por la hora , 45 por los minutos y 2 por ser PM La salida será: 2 : 45 pm Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 117 INF-101 Introducción a la Programación 1-2010 9.- Escribir un programa que acepte dos números enteros diferentes entre si y los devuelva ordenados del mayor al menor 10.- Escriba un programa para determinar el cuadrante en el que se encuentra un par ordenado de valores. 11.- Leer 3 números enteros y determinar si forman un triangulo 12.- Escriba un algoritmo para determinar el numero mayor, de tres números enteros distintos entre si, desde el teclado. 13.- Leer 4 números enteros y determinar si forman un cuadrado, un rectángulo, un trapecio o un polígono irregular. 14.- Leer cuatro coordenadas (X,Y) , y determine si forman un cuadrado o un rectángulo. Ej: X1,Y1 X2,Y2 X3,Y3 X4,Y4 15.- Dados 4 números enteros que se lean desde el teclado determinar el mayor y el menor valor, los números deben ser distintos entre si. 16.- Una agencia automotriz ofrece planes de crédito para la adquisición de los diferentes modelos de automóviles. Si el automóvil vale más de $25,000 la agencia solicita un 35% de adelanto y el resto debe cubrirse en 24 mensualidades sin intereses. Si el automóvil tiene un valor máximo de $25,000 se requiere un adelanto del 25% y el resto se debe pagar en 18 mensualidades sin intereses. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 118 INF-101 Introducción a la Programación 1-2010 La agencia desea saber, en base al precio de un automóvil que un determinado cliente elija, cuál es el monto del adelanto y cuál es el número y el monto de las mensualidades que éste debe cubrir. 17.- Escribir un algoritmo que permita emitir la factura correspondiente a una compra de un artículo determinado, del que se adquieren una o varias unidades. El IVA es del 15% y si el precio bruto (precio venta mas IVA) es mayor de 50 Bs. se debe realizar un descuento del 5%. 18.- Escribir un algoritmo para leer tres números enteros distintos entre si e imprimir el numero intermedio (el que no es mayor ni menor) 19.- Realizar un algoritmo que me permita ingresar la hora, minutos y segundos y que indique a cuantos segundos equivalen. 20.- Determinar si un año es bisiesto (verificar las condiciones) 21.- Un caminante observa la posición en la que se encuentra (X y Y mediante un GPS) a cada trecho. Cuánto caminó en total y cuál fue el trecho más largo ? 22.- Elabore un diagrama de flujo que calcule el área de un triángulo mediante la formula: Área p( p a) * ( p b)( p c) donde p es el semiperímetro, p = (a + b + c) / 2, siendo a, b, c los tres lados del triángulo. Para que el triángulo exista debe cumplirse que los lados sean todos positivos, y además que la suma de dos lados cualesquiera sea mayor que el otro lado. 23.- El precio de un boleto de viaje redondo en tren se calcula tomando en cuenta el número de kilómetros que se van a recorrer, siendo el precio $60.00 por Km. Este precio puede tener un descuento del 30% si el viaje de regreso se hace después de 7 días del viaje de ida, o si el recorrido supera los 800 Km. Elabore un diagrama de flujo para calcular cuánto se debe pagar por un boleto de tren dando como datos el total de Km recorridos y el número de días entre el viaje de ida y el viaje de vuelta. Pruebe su diagrama con los siguientes grupos de datos: a) b) 850 Km y 10 días. 356 Km y 8 días. 24.- Leer el valor de las ventas efectuadas por un vendedor y determinar el porcentaje de ventas menores a 500 Bs. 25.- Escribir un algoritmo en donde dado un número, si es positivo verificar si se encuentra en el intervalo abierto (60 – 90) , de lo contrario emitir un mensaje de error. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 119 INF-101 Introducción a la Programación 1-2010 26.- A un trabajador se le paga según las horas que trabaja en la semana una tarifa de pago por hora. Si la cantidad de horas trabajadas es mayor a 40, la tarifa se incrementa en un 50%. Calcular el salario total del trabajador, además considere que si existe un anticipo se debe restar este valor al salario total, mostrando al final el pago neto. 27.- Calcular el descuento efectuado al valor de una venta en base a las siguientes condiciones: Si la Venta < 100 Bs.. descontar el 1 % del valor de la venta Si la venta >=100 Bs pero es menor a 500 Bs. descontar el 5% de la venta Si la venta >= 500 Bs. Pero es menor a 1000 Bs. descontar el 10 % Si la venta es >= 1000 Bs descontar el 20% Mostrar como salida el descuento y el valor del producto descontado 28.- Leer el salario básico y la antigüedad de un empleado (en años) y determinar mediante un algoritmo el bono de antigüedad y el total ganado. El bono de antigüedad se calcula en base a las siguientes condiciones: Si la antigüedad < 5 años : 10 % del Salario básico Si la antigüedad >=5 pero es menor a 10 : 15 % del Salario básico Si la antigüedad >=10 pero es menor a 15 : 25 % del Salario básico Si la antigüedad >= 15 : 50 % del Salario básico El total ganado es la suma del salario básico mas el bono de antigüedad 29.- Obtener el producto entre dos números enteros mediante sumas sucesivas. 30.- Escribir un D.F para determinar la suma de los n primeros números impares elevados al cuadrado. 31.- Determinar ab mediante productos sucesivos. 32.- Obtener la serie: 1 , -1 , 2 , -2 , 3 , -3 , ………, n , -n 33.- Escribir un D.F o programa para obtener la suma de los 100 primeros números pares. 34.- Escribir un algoritmo para obtener la suma de los cuadrados de los 10 primeros números pares. 35.- Obtener la suma de los n primeros términos de la serie : 1 – 2 + 3 – 4 + 5 – 6 + ........ para n términos 36.- En el rango de 1 a n determinar el porcentaje de números primos Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 120 INF-101 Introducción a la Programación 1-2010 37.- Escribir un algoritmo que permita obtener el valor aproximado de PI, mediante la serie: 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 +.....para n términos. 38.- Escribir un algoritmo que permita adivinar un numero que sea genere internamente al azar, el cual esta en el rango de 0 a 50. El usuario debe adivinar este número en base a aproximaciones, para lo cual se dispone de 5 intentos. Veamos un ejemplo: Supongamos que el número “pensado” por la computadora sea el 42. Salida del programa: Estoy pensando un número entre 0 y 50 Intento 1 ? 25 El numero esta entre 25 y 50 Intento 2 ? 34 El numero esta entre 34 y 50 Intento 3 ? 45 El numero esta entre 34 y 45 Intento 4 ? 40 El numero esta entre 40 y 45 Intento 5 ? 42 Felicitaciones … Adivinaste el numero 39.- Elabore un diagrama de flujo que dado un entero n > 1, calcule e imprima los elementos correspondientes a la conjetura de Ullman (en honor al matemático S. Ullman) que consiste en lo siguiente: Empiece con cualquier entero positivo. Si es par, divídalo entre 2; si es impar multiplíquelo por 3 y agréguele 1. Obtenga enteros sucesivamente repitiendo el proceso. Al final se obtendrá el número 1, independientemente del entero inicial. Por ejemplo, cuando el entero inicial es 26, la secuencia será: 26 13 40 20 10 5 16 8 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” 4 2 1 Pagina - 121 INF-101 Introducción a la Programación 1-2010 Elabore un diagrama de flujo para leer una serie de enteros positivos, contar los valores introducidos y calcular su promedio. El final de los datos se indicará con un número negativo. 40.- Escriba un algoritmo para leer un número entero y mostrar todos sus divisores incluido en propio número. 41.- Escriba un algoritmo para leer un número y obtener el producto de los dígitos distintos de cero. 42.- En una guardería hay 25 niños de 1, 2 y 3 años. Los niños de 1 año consumen 6 pañales al día, los niños de 2 años consumen 3 pañales diarios y los niños de 3 años consumen 2 pañales diarios. Se desea conocer el consumo total de pañales diarios. Datos: edad1 edad2 ..... edad25 donde edadi representa la edad del i–ésimo niño en años cumplidos (1, 2 ó 3). 43.- Escriba un algoritmo para leer un número entero y obtener la suma de sus dígitos pares. 44.- Dado un número, verificar si el producto de sus dígitos mayores a cero, genera un número par. 45.- Dado un número, verificar si es automórfico.(es aquel que reaparece al final de su cuadrado) Ej: 252 = 625 52 = 25 46.- Obtener el Mínimo Común Múltiplo de dos números. 47.- Leer un número y obtener la suma de sus dígitos que sean pares 48.- Escribir un D.F para leer dos números enteros (a,b) y determinar cual de los dos tiene mas dígitos. 49.- Escribir un programa que muestre en pantalla, con los encabezados correspondientes, el capital y los intereses ganados por un capital C0 depositado a un Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 122 INF-101 Introducción a la Programación 1-2010 interés compuesto I durante N años. C0, I y N se deben leer por teclado. La formula del interés compuesto es: Cn = C0(1+I)n 50.- Escribir un algoritmo que obtenga el valor de la serie: 4 – 4/3 + 4/5 – 4/7 + ......... para n términos El valor de la sumatoria es el valor de PI, por lo tanto introduzca un valor que se aproxime a este valor. 51.- Leer tres números enteros y determinar cual es que tiene la suma mayor de sus divisores. 52.- Mediante un algoritmo simule el comportamiento de un semáforo, considerando los tres estados. Establezca ciclos iguales de retardo para el rojo (1) y el verde (3) y un ciclo de retardo menor para el amarillo (2) 53.- Dado un número, obtener su equivalente en base 2. 54.- Leer 10 números enteros y determinar cuantos de estos son capicúa. 55.- Dado un número, verificar si la sumatoria de sus dígitos genera un número primo. 56.- Dado un número, obtener su factorial haciendo uso de operaciones de suma y/o resta únicamente. 57.- Escribir un algoritmo para invertir n números se lean desde el teclado Ej . 123 ---- > 321 58.- Escribir un algoritmo para determinar el valor del seno de un ángulo x ( en radianes ), según la serie: sin x = x – x3/3! + x5/5! – x7/7! ... para n términos 59.- Obtenga la suma de números primos comprendidos entre n y m 60.- Escribir un programa que halle el valor aproximado de ex ex = x0/0! + x1/1! + x2/2! + x3/3! + x4/4! + ..... para n términos Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 123 INF-101 Introducción a la Programación 1-2010 61.- Generar las tablas de multiplicar del 1 al 9 62.- Elabore un diagrama de flujo que dado un valor n entero con n la siguiente sumatoria: 1, calcule e imprima n ii i 1 63.- Los cubos de Nicómaco, considera la siguiente propiedad descubierta por Nicómaco de Gerasa: sumando el primer impar, se obtiene el primer cubo. sumando los dos siguientes se obtiene el segundo cubo, sumando los tres siguientes, se obtiene el tercer cubo, etc. Es decir: 1 = 13, 3 + 5 = 23 = 8, 7 + 9 + 11 = 33 = 27, 13 + 15 + 17 + 19 = 43 = 64. Elabore un diagrama que dado un número n entero positivo, imprima los n primeros cubos utilizando esta propiedad. 64.- De n números que se lean desde el teclado determinar el mayor y el menor valor. 65.- Leer las estaturas (en cm ) de un grupo de personas, a partir de estos valores obtener el promedio de estaturas, el porcentaje de estaturas por debajo de 150 cm y el porcentaje de las que estén por encima o igual a este valor. Detener el proceso cuando el usuario ingrese un cero. 66.- Leer las calificaciones de un grupo de estudiantes que han rendido un examen, a partir de ello determinar: - La media de las calificaciones El porcentaje de alumnos aprobados (nota >= 51) El porcentaje de reprobados Las dos mejores notas 67.- Construya un algoritmo que acepte los montos de depósitos y retiros efectuados por un cliente de un banco, mostrar el saldo final que tiene dicho cliente. 68.- Escribir un algoritmo que permita leer dos números enteros y muestre por pantalla a los números enteros comprendidos en este intervalo, incluidos los valores de entrada, considerar que si el primer numero es menor que el segundo, la secuencia será creciente, Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 124 INF-101 Introducción a la Programación 1-2010 en caso contrario será decreciente, si el usuario ingresa dos números idénticos, el algoritmo debe solicitar la entrada de nuevos valores. 69.- Obtener mediante un algoritmo el valor de la serie: 2, 5, 7 ,10, 12, 15 ,17,......., 1800 70.- Construya un algoritmo que las temperaturas registradas en un centro de metereología, y determine cuantas veces se registro temperaturas menores a cero, cuantas iguales a cero y finalmente cuantas temperaturas mayores a cero grados, detener el proceso cuando ingrese una temperatura de 99 o –99. 71.- Obtener el valor final de la serie: n1 + (n-1)2 + (n-3)3+ ......... 1n 72.- Leer un número entero y determinar si su primer digito es par o impar 73.- Escribir un algoritmo que permita obtener el valor de la serie: s = 1! / 0! – 2! / 2! + 3! / 4! – 5! /6! + ........ 11!/10! 74.- Mediante un algoritmo generar la serie: 1 , 2 , 6 , 24 , 120 ,....... para n términos 75.- Escribir un algoritmo que determine si 3 números leídos desde el teclado son “pitagóricos” 76.- Hallar la raíz cuadrada de un número n, empleando la relación: b = 0,5 * (a + n/a) c = 0,5 * (b + n/b) d = 0,5 * (c + n/c) .......... ........... en donde el valor inicial de a es 1, efectué las iteraciones k veces 77.- Leer el valor de un bien y su vida útil (en años) y muestre por pantalla su depreciación en cada año, hasta alcanzar la vida útil. Emplear las siguientes relaciones para determinar el factor de depreciación: Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 125 INF-101 Introducción a la Programación 1-2010 FD = Valor original / Vida Útil Depreciaciónn = Depreciación-1 – FD FD es el factor de depreciación 78.- Escriba un algoritmo que encuentre la cantidad de números perfectos que existen en el rango de 1 a n. 79.- Calcular potencias con exponentes positivos o negativos, se deben utilizar ciclos repetitivos para tal efecto. 80.- Obtener el valor de la serie: 1/2 + 3/4 + 5/6 + .............n-1/n 81.- Una fuente de datos registra varias edades, la edad 0 indica el final de la entrada de datos, escriba un algoritmo para determinar el promedio de las edades ingresadas y también el porcentaje de personas mayores a los 65 años. 82.- Calcular el valor de la serie: 1/1 + 1/2 + 2/3 + 3/4 + 5/5 + 8/6 + 13/7 + 21 /8 + 34/9 + 55/10 83.- Leer un numero entero y producir un segundo numero con sus dígitos ordenados del menor al mayor. 84.- Leer dos números enteros si no son iguales intercambie el contenido de las variables, de ser iguales sume los mismos y muestre este resultado. 85.- Leer un número entero y determinar si la suma de sus dígitos distintos de cero forman un número primo, de ser así imprima el mensaje respectivo. 86.- Escribir un algoritmo que permita generar 50 números al azar en el rango (199) y determine cuantos de estos elementos son números primos. 87.- Mostrar los primeros N números triangulares. 88.- Calcular el coeficiente binomial a partir de la lectura de dos números enteros, a partir de la relación: n m n! (n m)!*m! Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 126 INF-101 Introducción a la Programación 1-2010 89.- Dados dos números determinar si son primos relativos entre si. (por definición, no tienen ningún factor primo en común, o, dicho de otra manera, si no tienen otro divisor común más que 1 ) 90.- Simular mediante un algoritmo el comportamiento de un reloj digital, mostrando : hh:mm:ss 91.- Generar las secuencias: 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 92.- Generar las secuencias: 1 5 1 4 1 3 1 2 1 1 2 4 2 3 2 2 2 1 3 3 3 2 3 1 4 2 4 1 5 1 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 93.- Generar la tabla: 1 2 3 4 5 2 4 6 8 10 94.- Generar : 11111 11115 11145 11345 12345 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 127 INF-101 Introducción a la Programación 1-2010 95.- Leer un valor que represente una cierta cantidad de dinero, escribir un algoritmo que permita convertir el dicho valor en billetes y monedas, de tal forma que sea la menor cantidad de billetes y monedas a convertir. Ej: Sea el monto = 655 Bs. La salida será: 3 billetes de 200 Bs 1 billete de 50 Bs. 1 moneda de 5 Bs. 96.- Leer el nombre completo de una persona y determine si tiene uno o mas de un nombre. 97.- Dada la fecha de nacimiento de una persona escribir un algoritmo que indique su signo zodiacal. 98.- Escribir un algoritmo que permita convertir un numero arábigo en un numero romano (el rango es de 1 - 3000 ) 99.- Escribir un algoritmo que indique la frecuencia de repetición de las vocales de un frase que se lea desde el teclado. 100.- Leer una cadena de caracteres y verifique si es un palíndromo (palabra que se lee igual de izquierda a derecha o viceversa). Ej: ORURO, OSO, ANITA LAVA LATINA, etc 101.- Leer una palabra y determinar si la misma contiene las cinco vocales. 102.- Escribir un algoritmo que acepte un número no mayor a dos dígitos y muestre el mismo de manera literal: Ej: 23 : Veintitrés 103.- Leer los nombres de pila, de por lo menos 5 personas y determinar cuantos de estos nombres tienen como primera letra la „A‟ 104.- Leer los nombres las capitales de varios países, deteniendo la entrada con una cadena nula (“00000”), y luego efectué la búsqueda de alguno de estos e indique el orden en el que registro. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 128 INF-101 Introducción a la Programación 1-2010 PROBLEMAS PROPUESTOS - PROGRAMACION 1. Asignar valor a cuatro variables e imprímalos. 2. Leer dos números y mostrar el resultado de su suma, resta, división y modulo. 3. Leer 2 números y hallar la resta del mayor menos el menor. 4. Leer 2 números e imprimir el mayor. 5. Leer un número e imprimir su cuadrado. 6. Leer un número e imprimir su raíz cuadrada. 7. Leer 2 números e imprimir de menor a mayor. 8. Leer 2 números y mostrar de mayor a menor. 9. Leer 3 números y mostrar el mayor. 10. Leer 3 números y mostrar de mayor a menor. 11. Asignar valor a 5 variables e imprimir el resultado de su suma, el producto del 1° con el 4° y la diferencia del 5° con el 2°. 12. Asignar valor a 3 variables e imprimir el producto de la suma del 1° con el 3°, por el 2°. 13. Leer 2 números e imprimir el resultado de su suma. 14. Leer 2 números e imprimir el resultado de su resta. 15. Leer 2 números e imprimir el resultado de su producto. 16. Leer 2 números e imprimir el resultado de su división. 17. Leer 2 números e imprimir el resultado de las 5 operaciones fundamentales (CASE). 18. Leer un número y determinar si es positivo. 19. Leer un número y determinar si es positivo, negativo o neutro. 20. Leer un número y determinar si es par. 21. Leer un número y determinar si es par o impar. 22. Leer un número y determinar si es múltiplo de 3. 23. Leer un número y determinar si es múltiplo de 5. 24. Leer un número y determinar si es mayor que 100. 25. Leer un número y determinar si es mayor que 300. 26. Leer un numero y determinar si esta en el rango de 70 y 150. 27. Leer 4 números y hallar la resta del mayor menos el menor. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 129 INF-101 Introducción a la Programación 1-2010 28. Leer 4 números e imprimir de menor a mayor. 29. Leer 2 números y efectuar la resta del mayor menos el menor. 30. Leer 2 números e imprimir el resultado de su división (si se puede) verificando si es infinito o indeterminado. 31. Calcular los salarios mensuales de los empleados de una empresa, sabiendo que estos se calculan en base a las horas semanales trabajadas y de acuerdo a un monto por hora trabajada. Si pasa de 40 horas semanales, las horas extra se pagana razón de 1.5 veces la hora ordinaria. 32. Calcular el área de un triangulo sabiendo que la formula es: S=(1/2)*b*h b=Base h=Altura 33. Convertir una temperatura dada en Celcius a grados Farenheit sabiendo que: F°=9/5*C°+32 34. Calcular el salario Neto mensual de un trabajador en función a sus horas trabajadas y la tasa de impuestos, tomar en cuenta que: a. Las primeras 120 horas se paga a tarifa normal. b. Las horas extra se pagan a razón de 1.5 veces la hora ordinaria. c. Las tasas de impuestos son: i. Los primeros 700 Bs son libres de impuestos. ii. El resto tiene un impuesto del 13% IVA (se deduce AFP 10% y Fonvis 2% del salario Bruto). d. Se paga 20 Bs la hora. 35. Hallar el área y el perímetro de un círculo. 36. Hallar el área y el perímetro de un rectángulo. 37. Hallar el volumen y área de un prisma rectangular. 38. Hallar el volumen y área de un cilindro. 39. Hallar el volumen y área de una esfera. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 130 INF-101 Introducción a la Programación 1-2010 40. Introducir por teclado una fecha en formato (D) día, (M) mes, (Y) año. Determinar la fecha del día siguiente: Y=1971 D=25 M=4 Y=1971 D=31 M=12 Y=1996 D=1 Y=1997 D=24 M=4 M=1 41. Leer mes y año, y obtener el número de días del mes. Estructura While 42. Leer 10 números y hallar su suma de todos los elementos (sin while). 43. Leer 10 números hallar la suma de los primeros 10 números naturales. 44. Hallar su suma de todos los elementos (con while). 45. Hallar la suma de los primeros 5 números pares naturales. 46. Leer 10 números e imprimir la cantidad de positivos. 47. Leer 20 números e imprimir la cantidad de pares y la cantidad de impares. 48. Leer 20 números e imprimir la suma de pares y la suma de impares. 49. Leer 15 números e imprimir la cantidad de números múltiplos de 3 y 5 que existan. 50. Leer 40 números e imprimir la cantidad de números que se encuentran en el rango de 15 a 30. 51. Leer 30 números e imprimir la cantidad de números que sean iguales a 40 y la cantidad de mayores a 200. 52. Leer 4 números e imprimir su promedio. 53. Leer N números e imprimir el promedio de los múltiplos de 7 y la cantidad de los múltiplos de 3. 54. Leer N números e imprimir la sumatoria de ellos. 55. Leer N números e imprimir el promedio de impares y la sumatoria de los restantes. 56. Leer un número e imprimir el número de dígitos que tiene. 57. Leer un numero decimal entero e imprimir su equivalente en binario. 58. Leer un numero decimal entero e imprimir su equivalente en octal. 59. Leer un numero decimal entero e imprimir su equivalente en hexadecimal. 60. Leer un número e invertirlo. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 131 INF-101 Introducción a la Programación 1-2010 61. Leer un número y verificar si es capicúa. 62. Leer un número decimal y obtener el primer digito decimal. 63. Leer N números e imprimir la sumatoria de los que se encuentren en el rango del 10 y 100 y el promedio de los múltiplos de 4 y 9. 64. Obtener el producto de 2 números utilizando sumas sucesivas. 65. Obtener la división de 2 números utilizando restas sucesivas. 66. Obtener la potencia de un numero N a la I utilizando multiplicaciones sucesivas. 67. Leer un número e imprimir sus múltiplos. 68. Leer N números e imprimir el promedio de los múltiplos de 8 y el 15vo numero leído. 69. Leer N números e imprimir la 4ta que se encuentre comprendida en el rango del 50 al 100 y el 10mo numero leído. 70. Leer N números e imprimir el porcentaje de pares y el último negativo. 71. Leer N números e imprimir el 4to número leído si este es mayor de 400. 72. Leer N números e imprimir el 10mo numero si este es mayor que 5. 73. Leer N números e imprimir el 15 número si este es igual a la suma del primer par con el último impar. 74. Leer N números e imprimir el 7mo si es que es el doble del primero. 75. Leer N números e imprimir el 13 si es el doble del quinto impar. 76. Leer N números e imprimir el mayor. 77. Leer N números e imprimir el promedio de pares y el porcentaje de los múltiplos de 4. 78. Leer N números e imprimir el promedio de los menores que 100, porcentaje de los mayores que 200, y la cantidad de los que se encuentren en el rango de 100 y 200. 79. Hallar 10 números y hallar el promedio. 80. Leer N números e imprimir el 5to leído. 81. Leer N números e imprimir el 5to número impar. 82. Leer N números e imprimir el tercer número par que se encuentre en el rango de 10 y 20 y el número mayor de todos. 83. Leer N números e imprimir la 4ta posición leída y el mayor de los impares. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 132 INF-101 Introducción a la Programación 1-2010 84. Leer N números e imprimir la cantidad de positivos, promedio de los pares, porcentaje de los múltiplos de 4 y el mayor de los impares. 85. Leer N números e imprimir la cantidad de pares que estén entre los dos primeros impares. 86. Leer N números hasta que la sumatoria de los pares sea mayor o igual a 500, imprimir la cantidad de números leídos. 87. Leer números hasta que aparezca el 7mo múltiplo de 4, imprimir la cantidad total de números leídos, y la primera negativa. 88. Leer 10 números y hallar la cantidad de números que están entre [100-200]. 89. Leer 10 números y hallar el último par. 90. Leer 10 números y hallar el primer par. 91. Leer N números y hallar el promedio. 92. Leer un número y mostrar la cantidad de dígitos que tiene. 93. Leer un número y mostrar el número invertido. 94. Verificar si un número es capicúa. 95. Leer el número y mostrar 2 números: uno con los dígitos pares, y el otro con los impares, pero invertidos. 96. Leer el número y mostrar 2 números: uno con los dígitos pares, y el otro con los impares, pero ordenados. Estructura FOR 97. Generar e imprimir los números del 1 al 10. 98. Generar e imprimir los números del 10 al 1. 99. Generar e imprimir N números aleatorios. 100. Generar e imprimir N números aleatorios que se encuentren entre A y B. 101. Generar e imprimir N números pares aleatorios. 102. Generar e imprimir N números aleatorios múltiplos de 7. 103. Leer 10 números y mostrar la cantidad de números pares. 104. Leer N números y mostrar el promedio. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 133 INF-101 Introducción a la Programación 1-2010 105. Generar la serie para N números: 1 3 5 7 8 11 13 … 106. Generar la tabla de sumar del 1 al 10 de un numero X. 107. Generar la tabla de restar del 1 al 10 de un numero X. 108. Generar la tabla de multiplicar del 1 al 10 de un numero X. 109. Generar la tabla de dividir del 1 al 10 de un numero X. 110. Leer un número N y mostrar la cantidad de dígitos pares e impares. 111. Leer 30 números y mostrar el porcentaje de pares e impares. 112. Leer N números y mostrar el mayor de todos. 113. Leer N números y mostrar el menor de todos. 114. Leer N números y mostrar el 1er positivo. 115. Leer N números e imprimir el último múltiplo de 5. 116. Leer N números y mostrar la cantidad de pares que se encuentran entre los dos primeros impares. 117. Generar la serie para N números: 1357… 118. Generar la serie para N números: 1 2 3 4 5 6 7 8 9 10 11 … 119. Generar la serie para N números: 2 4 6 8 10 12 14 … 120. Generar la serie para N números: 1 2 4 7 11 16 22 29 … 121. Generar la serie para N números: 100030005000700090… 122. Generar la serie para N números: 2242462468… 123. Generar la tabla de multiplicar de 1 hasta N del numero X. 124. Hallar el factorial de un numero N. 125. Imprimir el resultado de 0!+1!+2!+…+N! (N menor a 20) 126. Imprimir el resultado de 1/1+1/2+1/3+…+1/N 127. Imprimir el resultado para N términos: 128. Generar el factorial de los N números secuenciales. 129. Verificar si un número es perfecto. N=6 1*2*3 = 1+2+3 130. Hallar el mcm y MCD para dos números. 131. Verificar si un número es primo. S=X - X^3/3!+ X^5/5!- X^7/7!+… (sus múltiplos) Si es perfecto Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 134 INF-101 Introducción a la Programación 1-2010 132. Generar la serie para N números: N=6 100 1 99 2 98 3 97 … 133. Generar la siguiente serie para N términos: N=6 134. Generar la siguiente serie para N términos (Fibonacci): 135. Generar la siguiente serie para N términos: 1 0 2 0 3 0 4 0 … 136. Generar la siguiente serie: 137. Generar N Fibonaccis, e imprimir el promedio de los múltiplos de 9 que se 615243… 0 1 1 2 3 5 8 13 … A B C D E F G .. encuentren en el rango de 40 y 80. 138. Generar N Fibonaccis e imprimir el factorial del 5to elemento par. 139. Imprimir la secuencia 100, 1 , 99 , 2 , 98, 3 , … 140. Generar los primeros N números primos. 141. Leer un numero N y mostrar un numero con los dígitos del medio. N=4521 52 142. Leer un numero N y mostrar la suma de sus dígitos. 143. Leer un número y mostrar la cantidad de dígitos pares y la cantidad de dígitos impares. 144. Convertir un número entero positivo en su equivalente en romano. N=3276 MMMCCLXXVI Vectores 145. Llenar un vector de longitud N y mostrarlo por pantalla. 146. Llenar un vector de longitud N y mostrarlo por pantalla los elementos pares. 147. Llenar un vector de longitud N y mostrar la suma de todos sus elementos. 148. Llenar un vector de tamaño N y mostrar en X la suma de los elementos impares y en Y la suma de las posiciones pares. 149. Leer dos vectores de tamaño N, e intercambiar sus elementos. 150. Leer un numero N y almacenar los dígitos pares en el vector P y los dígitos impares en el vector 1. 151. Llenar 2 vectores de tamaño N y mostrar en el vector C la suma de dos vectores. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 135 INF-101 Introducción a la Programación 152. 1-2010 Llenar 2 vectores (A y B) de diferentes tamaños y copiar en el vector C de tamaño del vector mayor. El vector C debe ser llenado con los elementos mayores de cada celda correspondiente al índice de A y B, y los elementos sobrepasen al Vector de menor tamaño, cópielos. 153. Llenar un vector de tamaño N con la siguiente serie: 1 0 1 0 1 0 .. 154. Generar 2 vectores de tamaño N con los siguientes elementos: 12345 54321 155. Generar un vector de tamaño N con la siguiente serie: 2 4 6 8 10 12 14 … 156. Generar un vector de tamaño N con la siguiente serie: 1 2 4 7 11 16 22 … 157. Generar un vector de tamaño N con la siguiente serie: 0 1 1 2 3 5 8 13 … 158. Llenar un vector de tamaño N y buscar un elemento X introducido por teclado (imprimir la posición). 159. Llenar un vector y contar cuantos elementos X hay en el vector. 160. Llenar un vector de tamaño N y ordenarlo en forma ascendente. 161. Llenar un vector A de tamaño N, y generar un vector B de tamaño N con los elementos invertidos de A. 162. Llenar un vector, ordenarlo, leer un elemento X por teclado e introducir en el vector en la posición que corresponde. 163. 47 21847 21847 218 164. 317231722713 Matrices 165. Calcular la sumatoria de los elementos de la diagonal principal de una matriz cuadrada. 166. Calcular la sumatoria de los elementos de la diagonal secundaria de una matriz cuadrada. 167. Hallar la transpuesta de una matriz. 168. Realizar la suma de 2 matrices NxN. Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 136 INF-101 Introducción a la Programación 1-2010 169. Verificar si la matriz cuadrada leída es simétrica. 170. Intercambiar los elementos de la triangular superior izquierda de una matriz, por la triangular inferior derecha. 171. Llenar una matriz N x N de la siguiente forma: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 172. 173. 174. 175. Generar una Matriz de tamaño NxN, y el elemento X X 0 0 X 0 X X 0 0 X X 0 X 0 0 X Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 137 INF-101 Introducción a la Programación 1-2010 176. 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 177. Llenar una matriz NxM y hallar la suma de sus elementos. 178. Llenar una matriz NxN y mostrar en la variable X la suma de la diagonal principal y en la variable Y la suma de la diagonal secundaria. 179. Llenar 2 matrices NxM y su suma almacenar en otra matriz C. 180. Llenar una matriz NxM, y generar la suma de los elementos de cada fila. 181. Llenar una matriz Mx2, y generar en un vector la resta de los elementos de las filas. 182. Llenar una matriz NxM, y generar un vector con las suma de cada columna. 183. Llenar un matriz y sumar los elementos de las filas y columnas externas. 184. Generar la siguiente serie. 5 25 45 65 185. 10 30 50 70 15 35 55 75 20 40 60 80 Generar la matriz: 0 0 0 1 186. 0 0 1 2 0 1 2 3 1 2 3 4 0 1 2 3 0 0 1 2 N=4 0 0 0 1 Generar la matriz 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 138 INF-101 Introducción a la Programación 187. 1-2010 Llenar la matriz: n=5 (n impar) 5 5 0 5 5 188. 5 5 0 5 5 0 0 0 0 0 5 5 0 5 5 5 5 0 5 5 Llenar la matriz: n=5 1 0 0 0 1 189. 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 0 1 Llenar una matriz Nx3 de tal forma: m[i,3]=abs(m[i,1]-m[i,2]) 2 5 6 7 4 6 6 13 190. 3 1 2 7 Llenar la matriz: n=5 1 16 15 14 13 191. 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 Llenar la matriz: n=5 17 18 19 20 21 10 11 12 13 22 5 6 7 14 23 2 3 8 15 24 1 4 9 16 25 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 139 INF-101 Introducción a la Programación 192. 1-2010 Llenar la matriz: n=5 1 3 6 10 15 193. 2 5 9 14 0 4 8 13 0 0 7 12 0 0 0 11 0 0 0 0 Llenar la matriz: n=5 1 3 4 10 11 194. 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15 16 22 23 25 Llenar la matriz: n=5 1 10 11 20 21 2 9 12 19 22 3 8 13 18 23 4 7 14 17 24 5 6 15 16 25 195. Llenar la matriz: n=5 1 2 3 4 5 22 21 20 19 6 23 24 25 18 7 14 15 16 17 8 13 12 11 10 9 Ingeniería de Sistemas – Universidad Católica Boliviana “San Pablo” Pagina - 140