Una computadora es un dispositivo electrnico utilizado para procesar informacin y obtener resulta-dos. Los datos y la informacin se pueden introducir en la computadora por la entrada (input) y a continuacin se procesan para producir una salida (output, resultados), como se observa en la Figura 1.1. La computadora se puede considerar como una unidad en la que se ponen ciertos datos, entrada de datos, procesa estos datos y produce unos datos de salida. Los datos de entrada y los datos de salida pueden ser realmente cualquier cosa, texto, dibujos o sonido. El sistema ms sencillo de comunicarse una persona con la computadora es esencialmente mediante un ratn (mouse), un teclado y una pantalla (monitor). Hoy da existen otros dispositivos muy populares tales como escneres, micrfonos, altavoces, cmaras de vdeo, cmaras digitales, etc.; de igual manera, mediante mdems, es posible conectar su computadora con otras computadoras a travs de redes, siendo la ms importante, la red Internet.
Los componentes fsicos que constituyen la computadora, junto con los dispositivos que realizan las tareas de entrada y salida, se conocen con el trmino hardware. El conjunto de instrucciones que hacen funcionar a la computadora se denomina programa, que se encuentra almacenado en su memoria; a la persona que escribe programas se llama programador y al conjunto de programas escritos para una computadora se llama software. Este libro se dedicar casi exclusivamente al software, pero se har una breve revisin del hardware como recordatorio o introduccin segn sean los conocimientos del lector en esta materia. En el Anexo A de la pgina oficial del libro (www.mhe.es/joyanes)puede encon-
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
2 trar una amplia informacin de Introduccin a las computadoras, si desea ampliar este apartado.
1.2. ORGANIZACIN FSICA DE UNA COMPUTADORA (HARDWARE)
La mayora de las computadoras, grandes o pequeas, estn organizadas como se muestra en la Figura 1.2. Constan fundamentalmente de tres componentes principales: Unidad Central de Proceso (UCP) o procesador (compuesta de la UAL, Unidad Aritmtica y Lgica, y la UC, Unidad de Control); la memoria principal o central y el programa. 1 En Espaa est muy extendido el trmino ordenador para referirse a la traduccin de la palabra inglesa computer.
Figura 1.2. Organizacin fsica de una computadora. Si a la organizacin fsica de la Figura 1.2 se le aaden los dispositivos para comunicacin con la computadora, aparece la estructura tpica de un sistema de computadora: dispositivos de entrada, dispositivos de salida, memoria externa y el procesador/memoria central con su programa (Fig.1.3).
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
3
Dispositivos de Entrada/Salida (E/S)
Los dispositivos de Entrada/Salida (E/S) (en ingls, Input/Output I/O) o perifricos permiten la comunicacin entre la computadora y el usuario. Los dispositivos de entrada, como su nombre indica, sirven para introducir datos (informacin) en la computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacenan en la memoria central o interna. Los dispositivos de entrada convierten la informacin de entrada en seales elctricas que se almacenan en la memoria central. Dispositivos de entrada tpicos son teclados, lectores de tarjetas perforadas ya en desuso, lpices pticos, palancas de mando (joystick), lectores de cdigos de barras, escneres, micrfonos, lectores de tarjetas digitales, lectores RFID (tarjetas de identificacin por radio frecuencia), etc. Hoy da tal vez el dispositivo de entrada ms popular es el ratn (mouse) que mueve un puntero grfico (electrnico) sobre la pantalla que facilita la interaccin usuariomquina2.
Los dispositivos de salida permiten representar los resultados (salida) del proceso de los datos. El dispositivo de salida tpico es la pantalla (CRT)3o monitor. Otros dispositivos de salida son: impreso-ras (imprimen resultados en papel), trazadores grficos (plotters), reconocedores (sintetizadores) de voz, altavoces, etc.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
4 Dispositivos de entrada/salida y dispositivos de almacenamiento masivo o auxiliar (memoria externa) son: unidad de discos (disquetes, CD-ROM, DVD, cintas, discos duros, etc.), videocmaras, memorias flash, USB, etc.
Figura 1.4. Dispositivo de salida (Impresora HP Color LaserJet 2600n).
La memoria central (interna)
La memoria central o simplemente memoria (interna o principal) se utiliza para almacenar informacin (RAM, Random, Access Memory). En general, la informacin almacenada en memoria puede ser de dos tipos: instrucciones, de un programa y datos con los que operan las instrucciones. Por ejemplo, para que un programa se pueda ejecutar (correr, rodar, funcionar..., en ingls, run), debe ser situado en la memoria central, en una operacin denominada carga (load) del programa. Despus, cuando se eje-cuta (se realiza, funciona) el programa, cualquier dato a procesar por el programa se debe llevar a la memoria mediante las instrucciones del programa. En la memoria central, hay tambin datos diversos y espacio de almacenamiento temporal que necesita el programa cuando se ejecuta a fin de poder funcionar.
2 Todas las acciones a realizar por el usuario se realizarn con el ratn con la excepcin de las que se requieren de la escritura de datos por teclado. 3 Cathode Ray Tube: Tubo de rayos catdicos.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
5 Con el objetivo de que el procesador pueda obtener los datos de la memoria central ms rpidamente, normalmente todos los procesadores actuales (muy rpidos) utilizan una memoria denominada cach que sirve para almacenamiento intermedio de datos entre el procesador y la memoria principal. La memoria cach en la actualidad se incorpora casi siempre al procesador.
Organizacin de la memoria. La memoria central de una computadora es una zona de almacenamiento organizada en centenares o millares de unidades de almacenamiento individual o celdas. La memoria central consta de un conjunto de celdas de memoria (estas celdas o posiciones de memoria se denominan tambin palabras, aunque no guardan analoga con las palabras del lenguaje). El nmero de celdas de memoria de la memoria central, dependiendo del tipo y modelo de computadora; hoy da el nmero suele ser millones (512, 1.024, etc.). Cada celda de memoria consta de un cierto nmero de bits (normalmente 8, un byte).
La unidad elemental de memoria se llama byte (octeto). Un byte tiene la capacidad de almacenar un carcter de informacin, y est formado por un conjunto de unidades ms pequeas de almacenamiento denominadas bits, que son dgitos binarios (0 o 1).
Figura 1.5. Computadora porttil digital.
Por definicin, se acepta que un byte contiene ocho bits. Por consiguiente, si se desea almacenar la frase:
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
6 Hola Mortimer todo va bien la computadora utilizar exactamente 27 bytes consecutivos de memoria. Obsrvese que, adems de las letras, existen cuatro espacios en blanco y un punto (un espacio es un carcter que emplea tambin un byte). De modo similar, el nmero del pasaporte P57487891 ocupar 9 bytes, pero si se almacena como P5-748-7891 ocupar 11.
Estos datos se llaman alfanumricos, y pueden constar de letras del alfabeto, dgitos o in- cluso caracteres especiales (smbolos: $, #, *, etc.). Mientras que cada carcter de un dato alfanumrico se almacena en un byte, la informacin numrica se almacena de un modo diferente. Los datos numricos ocupan 2, 4 e incluso 8 bytes consecutivos, dependiendo del tipo de dato numrico (se ver en el Captulo 12). Existen dos conceptos importantes asociados a cada celda o posicin de memoria: su direccin y su contenido. Cada celda o byte tiene asociada una nica direccin que indica su posicin relativa en me-moria y mediante la cual se puede acceder a la posicin para almacenar o recuperar informacin. La informacin almacenada en una posicin de memoria es su contenido. La Figura 1.6 muestra una me-moria de computadora que consta de 1.000 posiciones en memoria con direcciones de 0 a 999. El con-tenido de estas direcciones o posiciones de memoria se llaman palabras, de modo que existen palabras de 8, 16, 32 y 64 bits. Por consiguiente, si trabaja con una mquina de 32 bits, significa que en cada posicin de memoria de su computadora puede alojar 32 bits, es decir, 32 dgitos binarios, bien ceros o unos.
Siempre que se almacena una nueva informacin en una posicin, se destruye (desaparece) cualquier informacin que en ella hubiera y no se puede recuperar. La direccin es permanente y nica, el contenido puede cambiar mientras se ejecuta un programa.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
7 La memoria central de una computadora puede tener desde unos centenares de millares de bytes hasta millones de bytes. Como el byte es una unidad elemental de almacenamiento, se utilizan mltiplos de potencia de 2 para definir el tamao de la memoria central: Kilo-byte (KB o Kb) igual a 1.024 bytes (210) prcticamente se consideran 1.000; Megabyte (MB o Mb) igual a 1.024 1.024 bytes = = 1.048.576 (220) prcticamente se consideran 1.000.000; Gigabyte (GB o Gb) igual a 1.024 MB (230), 1.073.741.824 = prcticamente se consideran 1.000 millones de MB.
En la actualidad las computadoras personales tipo PC suelen tener memorias centrales de 512 MB a 2 GB, aunque ya es muy frecuente verlas con memorias de 4 GB y hasta 8 GB. La memoria principal es la encargada de almacenar los programas y datos que se estn ejecutando y su principal caracterstica es que el acceso a los datos o instrucciones desde esta memoria es muy rpido. En la memoria principal se almacenan: Los datos enviados para procesarse desde los dispositivos de entrada. Los programas que realizarn los procesos. Los resultados obtenidos preparados para enviarse a un dispositivo de salida.
Tipos de memoria principal.
En la memoria principal se pueden distinguir dos tipos de memoria: RAM y ROM. La memoria RAM (Random Access Memory, Memoria de acceso aleatorio) almacena los datos e instrucciones a procesar. Es un tipo de memoria voltil (su contenido se pierde cuando se apaga la computadora); esta memoria es, en realidad, la que se suele conocer como memoria principal o de trabajo; en esta memoria se pueden escribir datos y leer de ella. La memoria ROM (Read Only Memory, Memoria de slo lectura) es una memoria permanente en la que no se puede escribir (viene pregrabada por el fabricante); es una
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
8 memoria de slo lectura. Los programas almacenados en ROM no se pierden al apagar la computadora y cuando se enciende, se lee la informacin almacenada en esta memoria. Al ser esta memoria de slo lectura, los programas almacenados en los chips ROM no se pueden modificar y suelen utilizarse para almacenar los programas bsicos que sirven para arrancar la computadora.
La Unidad Central de Proceso (UCP): el Procesador.
La Unidad Central de Proceso, UCP (Central Processing Unit, CPU, en ingls), dirige y controla el proceso de informacin realizado por la computadora. La UCP procesa o manipula la informacin almacenada en memoria; puede recuperar informacin desde memoria (esta informacin son datos o instrucciones: programas). Tambin puede almacenar los resultados de estos procesos en memoria para su uso posterior.
La UCP consta de dos componentes: unidad de control (UC) y unidad aritmtica-lgica (UAL) (Figura 1.7). La unidad de control (Control Unit, CU) coordina las actividades de la computadora y determina qu operaciones se deben realizar y en qu orden; asimismo controla y sincroniza todo el proceso de la computadora. La unidad aritmtico-lgica (Arithmetic-Logic Unit, ALU) realiza operaciones aritmticas y lgicas, tales como suma, resta, multiplicacin, divisin y comparaciones. Los datos en la memoria central se pueden leer (recuperar) o escribir (cambiar) por la UCP.
El microprocesador.
El microprocesador es un chip (un circuito integrado) que controla y realiza las funciones y operaciones con los datos. Se suele conocer como procesador y es el cerebro y corazn de la computadora. En realidad el microprocesador representa a la Unidad Central de Proceso de una computadora.
El primer microprocesador comercial, el Intel 4004 fue presentado el 15 de noviembre de 1971. Existen diferentes fabricantes de microprocesadores, como Intel, Zilog, AMD, Motorola; Cyrix, etc. Microprocesadores histricos de 8 bits son el Intel 8080, Zilog Z80 o Motorola 6800; otros microprocesadores muy populares han sido: 8086, 8088 de Intel o el Motorola MC68000. En la dcada de los ochenta eran populares: Intel 80286, 80386, 80486; Motorola, MC 68020, MC68400; AMD 80386, 80486. Unidad central de proceso
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
9
Figura 1.7. Unidad central de proceso.
En el ao 1993 aparecieron el Intel Pentium y durante esa dcada, Intel Pentium Pro, Intel Pentium II/III y AMD K6. En 2000, Intel y AMD controlan el mercado con Intel Pentium IV, Intel Titanium, Intel Pentium D o bien AMD Athlon XP, AMD Duxor. En los aos 2005 y 2006 aparecen las nuevas tecnologas Intel Core Duo, AMD Athlon 64, etc.
Memoria externa: almacenamiento masivo Cuando un programa se ejecuta, se debe situar primero en memoria central de igual modo que los datos. Sin embargo, la informacin almacenada en la memoria se pierde (borra) cuando se apaga (desconecta de la red elctrica) la computadora, y por otra parte la memoria central es limitada en capacidad. Por esta razn, para poder disponer de almacenamiento permanente, tanto para programas como para datos, se necesitan dispositivos de almacenamiento secundario, auxiliar o masivo (mass storage o secondary sto rage).
Los dispositivos de almacenamiento o memorias auxiliares (externas o secundarias) ms comnmente utilizados son: cintas magnticas, discos magnticos, discos compactos (CD- ROM, Compact Disk Read Only Memory) y videodiscos digitales (DVD). Las cintas son utilizadas principalmente por sistemas de computadores grandes similares a las utilizadas en los equipos de audio. Los discos y disquetes magnticos se utilizan por todas las computadoras, especialmente las medias y pequeas las computadoras personales. Los discos pueden ser duros, de gran capacidad de almacenamiento (su capacidad actual oscila entre 40 GB y 500 GB), disquetes o discos flexibles (floppy disk), ya casi en des-uso. Aunque todava se suelen comercializar lectoras de disquetes para compatibilidad con equipos antiguos. El disquete, ya casi en desuso, es de 3,5 y de 1,44 MB de capacidad.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
10 Figura 1.9. Memorias auxiliares: Tarjeta compact flash (izquierda), memoria flash USB (centro) y disco duro (derecha).
Los discos compactos (conocidos popularmente como CD) son soportes digitales pticos utilizados para almacenar cualquier tipo de informacin (audio, vdeo, documentos...). Se desarroll en 1980 y comenz a comercializarse en 1982. Existen diferentes modelos CD- ROM (de slo lectura), CD-R (grabable), CD-RW (reescribible). Su capacidad de almacenamiento va de 650 MB a 875 MB e incluso 215 MB.
Los DVD constituyen un formato multimedia de almacenamiento ptico y que se puede usar para guardar datos, incluyendo pelculas de alta calidad de vdeo y audio. Los formatos ms populares son: DVDROM, DVDR, DVDRW, DVDRAM, y sus capacidades de almacenamiento van desde 4,7 GB y 8,5 GB hasta 17,1 GB, segn sean de una cara, de dos caras y de una capa simple o capa doble.
Los ltimos discos pticos presentados en el mercado durante 2006 son: Bluray y HD DVD. Estos discos son de alta definicin y su capacidad de almacenamiento es muy grande de 15 GB a 50 GB y podr llegar en el futuro hasta 200 GB. La informacin almacenada en la memoria central es voltil (desaparece cuando se apaga la computadora) mientras que la informacin almacenada en la memoria externa (masiva) es permanente.
Esta informacin se organiza en unidades independientes llamadas archivos (ficheros, file en ingls). Los resultados de los programas se pueden guardar como archivos de datos y los programas que se escriben se guardan como archivos de programas, ambos en la memoria auxiliar. Cualquier tipo de archivo se puede transferir fcilmente desde la memoria auxiliar hasta la memoria central para su proceso posterior.
En el campo de las computadoras es frecuente utilizar la palabra memoria y almacenamiento o memoria externa, indistintamente. En este libro y recomendamos su uso se utilizar el trmino memoria slo para referirse a la memoria central. Comparacin de la memoria central y la memoria externa.
La memoria central o principal es mucho ms rpida y cara que la memoria externa. Se deben transferir los datos desde la memoria externa hasta la memoria central, antes de que puedan ser procesados. Los datos en memoria central son: voltiles y desaparecen cuando se apaga la computadora. Los datos en memoria externa son permanentes y no desaparecen cuando se apaga la computadora.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
11 Las computadoras modernas necesitan comunicarse con otras computadoras. Si la computadora se conecta con una tarjeta de red se puede conectar a una red de datos locales (red de rea local). De este modo se puede acceder y compartir a cada una de las memorias de disco y otros dispositivos de entrada y salida. Si la computadora tiene un mdem, se puede comunicar con computadoras lejanas. Se pueden conectar a una red de datos o enviar correo electrnioco a travs de las redes corporativas Intranet/Ex-tranet o la propia red Internet. Las redes inalmbricas permiten conexiones a Internet desde nmerosos lugares, siempre que su PC disponga de tarjetas o conexiones inalmbricas.
La computadora personal ideal para programacin
Hoy da el estudiante de informtica o de computacin y mucho ms el profesional, dispone de un amplio abanico de computadoras a precios asequibles y con prestaciones altas. En el segundo semestre de 2006 se pueden encontrar computadoras personales (PC) con 1.024 MB de memoria, grabadoras de DVD de doblecapa, procesador Pentium de 3.00/3.20 GH2 y un monitor plano 17", disco duro de 200/400 GB por 800 a 1.000 e incluso ms econmicos. En computadoras porttiles se pueden encontrar modelos de 1024 MB, 60-80 GB, procesadores Intel Pentium de 1,736 GHz, 1,83 GHz, pantalla de 15,4" y con precios de 800 a 1200 . La Tabla 1.2 resume nuestra propuesta y recomendacin de caractersticas medias para un/una PC, a mediados de 2006. Tabla 1.2. Caractersticas medias de una computadora porttil (laptop).
REPRESENTACIN DE LA INFORMACIN EN LAS COMPUTADORAS
Una computadora es un sistema para procesar informacin de modo automtico. Un tema vital en el proceso de funcionamiento de una computadora es estudiar la forma de representacin de la informacin en dicha computadora. Es necesario considerar cmo se puede codificar la informacin en patrones de bits que sean fcilmente almacenables y procesables por los elementos internos de la computadora.
Las formas de informacin ms significativas son: textos, sonidos, imgenes y valores numricos y, cada una de ellas presentan peculiaridades distintas. Otros temas importantes en el campo de la programacin se refieren a los mtodos de deteccin de errores que se puedan producir en la transmisin o almacenamiento de la informacin y a las tcnicas y mecanismos de comprensin de informacin al objeto de que sta ocupe el menor espacio en los dispositivos de almacenamiento y sea ms rpida su transmisin.
Representacin de textos
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
12 La informacin en formato de texto se representa mediante un cdigo en el que cada uno de los distintos smbolos del texto (tales como letras del alfabeto o signos de puntuacin) se asignan a un nico patrn de bits. El texto se representa como una cadena larga de bits en la cual los sucesivos patrones representan los sucesivos smbolos del texto original. En resumen, se puede representar cualquier informacin escrita (texto) mediante caracteres.
Los caracteres que se utilizan en computacin suelen agruparse en cinco categoras: 1. Caracteres alfabticos (letras maysculas y minsculas, en una primera versin del abecedario ingls). A, B, C, D, E, ... X, Y, Z, a, b, c, ... , X, Y, Z 2. Caracteres numricos (dgitos del sistema de numeracin). 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 sistema decimal 3. Caracteres especiales (smbolos ortogrficos y matemticos no incluidos en los grupos anteriores). { } ! ? & > # ... 4. Caracteres geomtricos y grficos (smbolos o mdulos con los cuales se pueden representar cuadros, figuras geomtricas, iconos, etc.
| ||| ... 5. Caracteres de control (representan rdenes de control como el carcter para pasar a la siguiente lnea [NL] o para ir al comienzo de una lnea [RC, retorno de carro, carriage return, CR] emitir un pitido en el terminal [BEL], etc.). Al introducir un texto en una computadora, a travs de un perifrico, los caracteres se codifican segn un cdigo de entrada/salida de modo que a cada carcter se le asocia una determinada combinacin de n bits. Los cdigos ms utilizados en la actualidad son: EBCDIC, ASCII y Unicode. Cdigo EBCDIC (Extended Binary Coded Decimal Inter Change Code). Este cdigo utiliza n = 8 bits de forma que se puede codificar hasta m = 28 = 256 smbolos di-ferentes. ste fue el primer cdigo utilizado para computadoras, aceptado en principio por IBM. Cdigo ASCII (American Standard Code for Information Interchange).
El cdigo ASCII bsico utiliza 7 bits y permite representar 128 caracteres (letras maysculas y minsculas del alfabeto ingls, smbolos de puntuacin, dgitos 0 a 9 y ciertos controles de informacin tales como retorno de carro, salto de lnea, tabulaciones, etc.). Este cdigo es el ms utilizado en computadoras, aunque el ASCII ampliado con 8 bits permite llegar a 28 (256) caracteres distintos, entre ellos ya smbolos y caracteres especiales de otros idiomas como el espaol.
Representacin de valores numricos.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
13 El almacenamiento de informacin como caracteres codificados es ineficiente cuando la informacin se registra como numrica pura. Veamos esta situacin con la codificacin del nmero 65; si se almacena como caracteres ASCII utilizando un byte por smbolo, se necesita un total de 16 bits, de modo que el nmero mayor que se poda almacenar en 16 bits (dos bytes) sera 99. Sin embargo, si utilizamos nota-cin binaria para almacenar enteros, el rango puede ir de 0 a 65.535 (216 1) para nmeros de 16 bits. Por consiguiente, la notacin binaria (o variantes de ellas) es la ms utilizada para el almacenamiento de datos numricos codificados.
La solucin que se adopta para la representacin de datos numricos es la siguiente: al introducir un nmero en la computadora se codifica y se almacena como un texto o cadena de caracteres, pero dentro del programa a cada dato se le enva un tipo de dato especfico y es tarea del programador asociar cada dato al tipo adecuado correspondiente a las tareas y operaciones que se vayan a realizar con dicho dato.
El mtodo prctico realizado por la computadora es que una vez definidos los datos numricos de un programa, una rutina (funcin interna) de la biblioteca del compilador (traductor) del lenguaje de programacin se encarga de transformar la cadena de caracteres que representa el nmero en su notacin binaria.
Existen dos formas de representar los datos numricos: nmeros enteros o nmeros reales.
Representacin de enteros Los datos de tipo entero se representan en el interior de la computadora en notacin binaria. La memoria ocupada por los tipos enteros depende del sistema, pero normalmente son dos, bytes (en las versiones de MS-DOS y versiones antiguas de Windows y cuatro bytes en los sistemas de 32 bits como Windows o Linux). Por ejemplo, un entero almacenado en 2 bytes (16 bits): 1000 1110 0101 1011
Los enteros se pueden representar con signo (signed, en C++) o sin signo (unsigned, en C++); es decir, nmeros positivos o negativos. Normalmente, se utiliza un bit para el signo. Los enteros sin signo al no tener signo pueden contener valores positivos ms grandes. Normalmente, si un entero no se especifica con/sin signo se suele asignar con signo por defecto u omisin.
El rango de posibles valores de enteros depende del tamao en bytes ocupado por los nmeros y si se representan con signo o sin signo (la Tabla 1.3 resume caractersticas de tipos estndar en C++).
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
14 Representacin de reales. Los nmeros reales son aquellos que contienen una parte decimal como 2,6 y 3,14152. Los reales se representan en notacin cientfica o en coma flotante; por esta razn en los lenguajes de programacin, como C++, se conocen como nmeros en coma flotante. Existen dos formas de representar los nmeros reales. La primera se utiliza con la notacin del punto decimal (ojo en el formato de representacin espaol de nmeros decimales, la parte decimal se representa por coma).
Ejemplos 12.35 99901.32 0.00025 9.0 La segunda forma para representar nmeros en coma flotante en la notacin cientfica o exponencial, conocida tambin como notacin E. Esta notacin es muy til para representar nmeros muy grandes o muy pequeos.
Notacin exponencial Exponente
Representacin de caracteres Un documento de texto se escribe utilizando un conjunto de caracteres adecuado al tipo de documento. En los lenguajes de programacin se utilizan, principalmente, dos cdigos de caracteres. El ms comn es ASCII (American Standard Code for Information Interchange) y algunos lenguajes, tal como Java, utilizan Unicode (www.unicode.org). Ambos cdigos se basan en la asignacin de un cdigo numrico a cada uno de los tipos de caracteres del cdigo. En C++, los caracteres se procesan normalmente usando el tipo char, que asocia cada carcter a un cdigo numrico que se almacena en un byte. El cdigo ASCII bsico que utiliza 7 bits (128 caracteres distintos) y el ASCII ampliado a 8 bits (256 caracteres distintos) son los cdigos ms utilizados. As se pueden representar caracteres tales como 'A', 'B', 'c', '$', '4', '5', etc.
En el caso de C++ se considera un dato de tipo carcter denominado wchar_t que sirve para representar caracteres de tipo internacional para manejar lenguajes extranjeros. La Tabla 1.3, recoge los tipos enteros, reales y carcter utilizados en C++, la memoria utilizada (n mero de bytes ocupados por el dato) y el rango de nmeros.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
15
Tabla 1.3. Tipos enteros reales, en C++.
CONCEPTO DE ALGORITMO
El objetivo fundamental de este texto es ensear a resolver problemas mediante una computadora. El programador de computadora es antes que nada una persona que resuelve problemas, por lo que para llegar a ser un programador eficaz se necesita aprender a resolver problemas de un modo riguroso y sistemtico. A lo largo de todo el libro nos referiremos a la metodologa necesaria para resolver problemas mediante programas, concepto que se denomina metodologa de la programacin. El eje central de esta metodologa es el concepto, ya tratado, de algoritmo.
Un algoritmo es un mtodo para resolver un problema. Aunque la popularizacin del trmino ha llegado con el advenimiento de la era informtica, algoritmo proviene de Mohammed al-Khowrizmi, matemtico persa que vivi durante el siglo IX y alcanz gran reputacin por el enunciado de las reglas paso a paso para sumar, restar, multiplicar y dividir nmeros decimales; la traduccin al latn del apellido en la palabra algorismus deriv posteriormente en algoritmo. Euclides, el gran matemtico griego (del siglo IV antes de Cristo) que invent un mtodo para encontrar el mximo comn divisor de dos nmeros, se considera con Al-Khowrizmi el otro gran padre de la algoritmia (ciencia que trata de los algoritmos).
El profesor Niklaus Wirth inventor de Pascal, Modula-2 y Oberon titul uno de sus ms famosos libros, Algoritmos + Estructuras de datos = Programas, significndonos que slo se puede llegar a realizar un buen programa con el diseo de un algoritmo y una correcta estructura de datos. Esta ecuacin ser una de las hiptesis fundamentales consideradas en esta obra.
La resolucin de un problema exige el diseo de un algoritmo que resuelva el problema propuesto. En las obras del profesor Alberto Prieto, Schaum Conceptos de Informtica e
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
16 Introduccin a la Informtica, publicadas en McGraw-Hill, puede encontrar una excelente referencia sobre estos conceptos y otros complementarios de este captulo introductorio.
Figura 1.10. Resolucin de un problema.
Los pasos para la resolucin de un problema son:
1 Diseo del algoritmo, que describe la secuencia ordenada de pasos sin ambigedades que conducen a la solucin de un problema dado. (Anlisis del problema y desarrollo del algoritmo.) 2 Expresar el algoritmo como un programa en un lenguaje de programacin adecuado. (Fase de codificacin.) 3 Ejecucin y validacin del programa por la computadora.
Para llegar a la realizacin de un programa es necesario el diseo previo de un algoritmo, de modo que sin algoritmo no puede existir un programa.
Los algoritmos son independientes tanto del lenguaje de programacin en que se expresan como de la computadora que los ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje diferente de programacin y ejecutarse en una computadora distinta; sin embargo, el algoritmo ser siempre el mismo. As, por ejemplo, en una analoga con la vida diaria, una receta de un plato de cocina se puede expresar en espaol, ingls o francs, pero cualquiera que sea el lenguaje, los pasos para la elaboracin del plato se realizarn sin importar el idioma del cocinero.
En la ciencia de la computacin y en la programacin, los algoritmos son ms importantes que los lenguajes de programacin o las computadoras. Un lenguaje de programacin es tan slo un medio para expresar un algoritmo y una computadora es slo un procesador para ejecutarlo. Tanto el lenguaje de programacin como la computadora son los medios para obtener un fin: conseguir que el algoritmo se ejecute y se efecte el proceso correspondiente.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
17 El diseo de la mayora de los algoritmos requiere creatividad y conocimientos profundos de la tcnica de la programacin. En esencia, la solucin de un problema se puede expresar mediante un algoritmo.
Caractersticas de los algoritmos.
Las caractersticas fundamentales que debe cumplir todo algoritmo son: Un algoritmo debe ser preciso e indicar el orden de realizacin de cada paso. 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 algn momento; o sea, debe tener un nmero finito de pasos.
La definicin de un algoritmo debe describir tres partes: Entrada, Proceso y Salida. En el algoritmo de receta de cocina citado anteriormente se tendr: Entrada: ingredientes y utensilios empleados. Proceso: elaboracin de la receta en la cocina. Salida: terminacin del plato (por ejemplo, cordero).
Ejemplo 1.1
Un cliente ejecuta un pedido a una fbrica. La fbrica 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. Inicio.
2. Leer el pedido.
3. Examinar la ficha del cliente.
4. Si el cliente es solvente, aceptar pedido; en caso contrario, rechazar pedido.
5. Fin.
Ejemplo 1.2
Se desea disear un algoritmo para saber si un nmero es primo o no. Un nmero es primo si slo puede dividirse por s mismo y por la unidad (es decir, no tiene ms divisores que l mismo y la unidad). Por ejemplo, 9, 8, 6, 4, 12, 16, 20, etc., no son primos, ya que son divisibles por nmeros distintos a ellos mismos y a la unidad. As, 9 es
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
18 divisible por 3, 8 lo es por 2, etc. El algoritmo de resolucin del problema pasa por dividir sucesivamente el nmero por 2, 3, 4, etc.
1. Inicio.
2. Poner X igual a 2 (x = 2, x variable que representa a los divisores del nmero que se busca N).
3. Dividir N por X (N/X).
4. Si el resultado de N/X es entero, entonces N es un nmero primo y bifurcar al punto 7; en caso contrario, continuar el proceso.
5. Suma 1 a X (X X + 1).
6. Si X es igual a N, entonces N es un nmero primo; en caso contrario, bifurcar al punto 3.
7. Fin.
Por ejemplo, si N es 131, los pasos anteriores seran: 1. Inicio. 2. X = 2. 3 y 4. 131/X. Como el resultado no es entero, se contina el proceso.
5. X 2 + 1, luego X = 3.
6. Como X no es 131, se bifurca al punto 3. 3 y 4. 131/X resultado no es entero.
5. X 3 + 1, X = 4.
6. Como X no es 131 bifurca al punto 3. 3 y 4.131/X..., etc.
7. Fin.
Ejemplo 1.3 Realizar la suma de todos los nmeros pares entre 2 y 1.000. El problema consiste en sumar 2 + 4 + 6 + 8 ... + 1.000. Utilizaremos las palabras SUMA y NUMERO (variables, sern denominadas ms tarde) para representar las sumas sucesivas
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
19 (2+4), (2+4+6), (2+4+6+8), etctera. La solucin se puede escribir con el siguiente algoritmo:
1. Inicio.
2. establecer SUMA a 0.
3. establecer NMERO a 2.
4. Sumar NMERO a SUMA. El resultado ser el nuevo valor de la suma (SUMA).
5. Incrementar NMERO en 2 unidades.
6. Si NUMERO =< 1.000 bifurcar al paso 4;
7. en caso contrario, escribir el ltimo valor de SUMA y terminar el proceso.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
20 Smbolos de los Organigramas
Reglas Bsicas
1 Todos los smbolos han de estar conectados 2 A un smbolo de proceso pueden llegarle varias lneas 3 A un smbolo de decisin pueden llegarle varias lneas, pero slo saldrn dos. 4 A un smbolo de inicio nunca le llegan lneas. 5 De un smbolo de fin no parte ninguna lnea.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
21 La plantilla de Diagramacin La plantilla contiene un conjunto de smbolos y reglas, para el proceso de negociacin que nos ocupan.
Estructuras de control Llamaremos estructuras de control a las acciones que tienen como objeto marcar el orden de ejecucin de las instrucciones y que van a servirnos para escribir concisamente y sin ambigedades los algoritmos. Todas las estructuras de control que estudiaremos estarn compuestas de unos elementos bsicos (lxico) y una estructura (sintaxis.)
Estructuras selectivas Son las que toman una cierta direccin dentro del flujo del programa en funcin de una condicin o el valor de una variable. Alternativas simples.- Se realiza una accin o conjunto de acciones si se cumple una determinada condicin.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
22
Alternativas dobles Si una condicin se cumple se realizan unas acciones, si no se cumple la condicin se realizan otras
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
23
Alternativas mltiples Dependiendo del valor de una variable se realizan unas acciones u otras.
Este tipo de estructuras se utiliza especialmente cuando se programan mens de seleccin. Ejemplo: Calculadora infantil. Realizar un programa que pida dos nmeros y una operacin (suma, resta, multiplicacin o divisin) y nos de el resultado de operar los nmeros con esa operacin.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
24
EJERCICIOS DE DIAGRAMAS DE FLUJO
1 Hacer el diagrama de flujo para sumar dos nmeros ledos por teclado y escribir el resultado. 2 Modificar el anterior pero para sumar 100 nmeros ledos por teclado. 3 Modificar el anterior para que permita sumar N nmeros. El valor de N se debe leer previamente por teclado. 4 Hacer un diagrama de flujo que permita escribir los 100 primeros pares. 5 Hacer el diagrama de flujo para sumar los N primeros impares. Realizar despus uno que haga lo mismo con los pares y, otro, con los mltiplos de 3. 6 La sucesin de Fibonacci se define de la siguiente forma: a1=1, a2=1 y an=an-1+an-2 para n>2, es decir los dos primeros son 1 y el resto cada uno es la suma de los dos anteriores, los primeros son: 1, 1, 2, 3, 5, 8, 13, 21, ... Hacer un diagrama de flujo para calcular el Nsimo trmino de la sucesin. 7 Hacer un diagrama de flujo que simule un reloj. 8 Realizar el diagrama de flujo para resolver una ecuacin de segundo grado, teniendo en cuenta las soluciones complejas. 9 Hacer un organigrama que calcule el total de una factura, partiendo de una lista de parejas importe, iva. La lista finaliza cuando el importe sea 0. El iva puede ser el 4%, el 7% o el 16%, en cualquier otro caso se rechazan importe e iva y se deben introducir de nuevo.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
25 Finalmente hay que realizar un descuento, en funcin de la suma de los importes, dicho descuento es del 0% si es menor que 1000, es del 5% si es mayor o igual que 1000 y menor que 10000 y es de un 10% si es mayor o igual que 10000. El descuento se debe aplicar a la suma de los importes y a la suma de los ivas.
Para acabar se debe imprimir el importe y el iva resultantes (total menos descuento) y la suma de ambos.
10. Hacer un organigrama que lea N nmeros, calcule y escriba la suma de los pares y el pro-ducto de los impares.
11. Hacer un diagrama de flujo para calcular el mximo comn divisor de dos nmeros enteros positivos N y M siguiendo el algoritmo de Eucldes, que es el siguiente:
1. Se divide N por M, sea R el resto.
2. Si R=0, el mximo comn divisor es M y se acaba.
3. Se asigna a N el valor de M y a M el valor de R y volver al paso 1.
Por qu el mtodo anterior acaba alguna vez? Por qu calcula el mximo comn divisor de N y M? 12. Calcular los nmeros primos hasta el N, segn la Criba de Eratstenes, que consiste en poner todos los nmeros del 2 al N en una tabla e ir tachando los mltiplos de cada nmero, detalladamente es como sigue:
1. Escribir los nmeros del 2 al N. 2. Hacer I igual a 2 3. Mirar el nmero I de la tabla. 4. Si esta tachado ir al paso 6. 5. Si no lo esta tachar los mltiplos de I en la tabla. 6. Incrementar I. 7. Si I es menor o igual que N ir al paso 3. 8. En otro caso finalizar.
El punto 5 tambin requiere un algoritmo, que es el siguiente: 5.1 Hacer J igual al doble de I (primer mltiplo de I). 5.2 Si J es mayor que N finalizar (el apartado 5). 5.3 En otro caso tachar el elemento J. 5.4 Incrementar J en I (para pasar al siguiente mltiplo de I).
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
26 5.5 Volver a 5.2. Para realizarlo se simular la tabla con nmeros tachados mediante un array P, y el elemento I estar sin tachar cuando P(I) sea 1 y tachado cuando sea 0.
13. Hacer el diagrama de flujo para calcular el factorial de N (N!=123...N).
14. Hacer un diagrama de flujo para sumar los N primeros trminos de una progresin geomtrica de primer trmino A y razn R (dados por teclado). Se debe realizar la suma sin emplear la frmula que existe para ello.
15. Hacer un diagrama de flujo para convertir un nmero decimal N dado por teclado a binario.
16. Hacer un diagrama de flujo para calcular AB, siendo B un entero, ntese que B puede ser 0
o negativo. No se pueden emplear logaritmos.
17. Hacer un diagrama de flujo para calcular el mximo de N nmeros ledos por teclado, se debe realizar de dos formas, una almacenando previamente los nmeros dados por teclado en un array y la otra calculando el mximo directamente segn se leen los nmeros del teclado.
18. Hacer un diagrama de flujo para ordenar N nmeros ledos por teclado y almacenados en un array A. El algoritmo es el siguiente:
1. Se lee N y despus los N nmeros al array A.
2. Se busca el mximo de los elementos del 1 al N y su ndice J.
3. Se intercambian los elementos A(J) y A(N).
4. Se decrementa N en 1.
5. Se compara N con 1, si es mayor se vuelve a 2.
6. Si es menor o igual se termina.
19. Hacer el organigrama de un programa que dado un array A ordenado de N elementos, encuentre la posicin de uno B ledo por teclado. El algoritmo a emplear es el siguiente:
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
27
1. Se fijan los extremos de la porcin a buscar: I=1, J=N.
2. Se calcula el ndice del elemento medio K=(I+J)/2.
3. Se compara B con el elemento medio A(K).
4. Si es igual se escribe K y se termina.
5. Si es mayor se cambian los extremos a I=K+1, J=N y se vuelve a 2.
6. Si es menor se cambian los extremos a I=1, J=K-1 y se vuelve a 2.
Pensar despus que habr que modificar para que busque tambin valores de B que no estn en el array A, si se da ese caso y no lo encuentra debe poner un mensaje diciendo que no esta.
20. Hacer un organigrama de un programa que adivine el nmero entre 1 y 1000 pensado por un humano. El programa debe ir diciendo nmeros y el humano responder con los smbolos '<', '>' o '=', segn el nmero pensado sea menor, mayor o igual que el dicho por el ordenador. Cuando lo adivine deber poner un mensaje especificando cuantas preguntas ha necesitado y finalizar. No debe realizar ms de 10 preguntas y debe detectar si el humano le engaa dicindole cosas imposibles, por ejemplo es mayor que 4 y menor que 5. Si en lugar de estar el nmero de partida entre 1 y 1000 estuviera entre 1 y 1000000, cuantas preguntas seran necesarias?
21. Realizar el organigrama de un programa que permita calcular ceros de funciones empleando el Teorema de Bolzano (si una funcin continua, definida en un intervalo cerrado [a,b], toma valores de signos opuestos en los extremos, existe un punto c en [a,b] tal que f(c)=0). Los datos de partida son los extremos del intervalo a y b y E que nos dice el mximo error tolerado en el resultado. El programa deber poner un mensaje de error si la funcin tiene igual signo en los extremos del intervalo, en otro caso debe escribir un valor C, que diste del c del Teorema en menos de E.
22. Dados dos nmeros enteros positivos N y D, se dice que D es un divisor de N si el resto de dividir N entre D es 0. Se dice que un nmero N es perfecto si la suma de sus divisores (excluido el propio N) es N. Por ejemplo 28 es perfecto, pues sus divisores (excluido el 28) son: 1, 2, 4, 7 y 14 y su suma es 1+2+4+7+14=28. Hacer un organigrama que dado un nmero N nos diga si es o no perfecto.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
28 23. Un ao es bisiesto si es mltiplo de 4, exceptuando los mltiplos de 100, que slo son bisiestos cuando son mltiplos adems de 400, por ejemplo el ao 1900 no fue bisiesto, pero el ao 2000 si lo ser. Hacer un organigrama que dado un ao A nos diga si es o no bisiesto.
24. Hacer un organigrama que dados un da D, un mes M y un ao A, calcule cual es el da siguiente. Se debe tener en cuenta que en los aos bisiestos Febrero tiene 29 das y en los no bisiestos 28.
25. El Mircoles de Ceniza es 46 das antes que el Domingo de Resurreccin. Hacer un orga-nigrama para que dados el da D, el mes M y el ao A del Domingo de Resurreccin calcule la fecha del Mircoles de Ceniza en ese ao. Se debe tener en cuenta si el ao es o no bisiesto.
26. Hacer un organigrama que lea un nmero N y obtenga las ternas pitagricas (A, B, C) en las que A, B y C son todos enteros positivos y menores que N. Para que una terna (A, B, C) sea pitagrica debe cumplir que A2+B2=C2.
27. Una empresa paga a sus 100 operarios semanalmente, de acuerdo con el nmero de horas trabajadas, a razn de P pesetas por hora y de 1.5P pesetas por cada hora extra. Las horas extras son las que exceden de 40h. Hacer el organigrama que dado el nmero de horas trabajadas y el valor de P calcule el salario que le corresponde.
28. Disponemos de una mquina que puede dar vueltas con 5 tipos de monedas distintas: 100, 50, 25, 5 y 1 pts. Realizar el organigrama de un programa que dados el precio del artculo y la cantidad entregada por el consumidor nos indique la vuelta a entregar empleando el menor nmero posible de monedas.
29. Plantear el organigrama de un programa que sea capaz de calcular el impuesto sobre la renta el nmero de veces que sea necesario y lo escriba por impresora. El impuesto de la renta es el 15% del salario anual de cada persona, al que previamente se debe realizar una deduccin en funcin del nmero de hijos, que es del 0% si tiene 0, del 5% si tiene 1 o 2 y del 15% si tiene ms de 2.
30. Realizar un organigrama para leer por teclado las notas de N alumnos que estn matriculados en M asignaturas, si un alumno no esta matriculado de una asignatura o no se presenta al examen se debe introducir como nota -1. El programa debe calcular y
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
29 escribir el nmero de alumnos presentados a cada asignatura, la nota media, el nmero de suspensos, el nmero de aprobados, el nmero de notables y el nmero de sobresalientes.
31. Hacer el organigrama para resolver el siguiente problema: Un hombre, un lobo, una cabra y un repollo deben pasar un ro, para ello se dispone de una barca con capacidad para dos ocupantes, el hombre (nico que sabe remar) y otro. Si en una orilla se quedan solos el lobo y la cabra, el lobo se come a la cabra. Si en una orilla se quedan solos la cabra y el repollo, la cabra se come el repollo.
SOLUCIONES A LOS EJERCICIOS DE DIAGRAMAS DE FLUJO
1. Hacer el diagrama de flujo para sumar dos nmeros ledos por teclado y escribir el resultado.
2. Modificar el anterior pero para sumar 100 nmeros ledos por teclado.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
30
En I contamos los nmeros que quedan por sumar. -En S calculamos la suma. -A se emplea para leer temporalmente cada nmero. Vamos a ver paso a paso como funciona. Supongamos que los datos son: 7, -1, 8, 5, ...
(1) I=100 (nmeros a sumar) (2) S=0 (suma, inicialmente 0) (3) Leer A. El primero es 7, luego A=7 (4) S=S+A=0+7=7 (5) I=I-1=100-1=99 (6) I=0? NO (3) Leer A, ahora A=-1 (4) S=S+A=7-1=6 (5) I=I-1=99-1=98 (6) I=0? NO Cuando I=0 habremos sumado los 100 nmeros y pasaremos a: (7) Escribir S que ser la suma
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
31 3. Modificar el anterior para que permita sumar N nmeros. El valor de N se debe leer previamente por teclado.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
32 4. Hacer un diagrama de flujo que permita escribir los 100 primeros pares.
P: Variable para contener el siguiente par que se debe escribir. I: Contador de pares que quedan por escribir. El proceso es similar al anterior. Necesitamos un bucle para contar 100 veces y dentro de l escribimos el par e incrementamos para obtener el siguiente. 5. Hacer el diagrama de flujo para sumar los N primeros impares. Realizar despus uno que haga lo mismo con los pares y otro con los mltiplos de 3.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
33
6. La sucesin de Fibonacci se define de la siguiente forma: a1=1, a2=1 y an=an-1+an- 2 para n>2, es decir, los dos primeros son 1 y el resto cada uno es la suma de los dos anteriores, los primeros son: 1, 1, 2, 3, 5, 8, 13, 21, ... Hacer un diagrama de flujo para calcular el Nsimo trmino de la sucesin.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
34
Dado N, el proceso es el siguiente: - si N2 se escribe directamente 1 y se acaba. -en otro caso se guardan en A y B los 2 ltimos (al principio 1) y se suman, pasando despus a llamar A al antiguo B, y B a la suma. Se decrementa N y cuando valga 2, en B tenemos lo que queremos. Vamos a ver cmo funciona paso a paso. Para ello vamos a numerar cada uno de los pasos y ver cmo se van realizando.
(1) Leemos N, supongamos N=4. (2) N=2? NO (3) A=1 (4) B=1 (5) C=A+B=1+1=2 (6) A=B=1 (7) B=C=2
(8) N=N-1=4-1=3 (9) N=2? NO (5) C=A+B=1+2=3
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
35
7. Hacer un diagrama de flujo que simule un reloj.
9. Hacer un organigrama que calcule el total de una factura, partiendo de una lista de parejas importe, iva. La lista finaliza cuando el importe sea 0. El iva puede ser el 4%, el 7% o el 16%, en cualquier otro caso se rechazan importe e iva y se deben introducir de nuevo. Finalmente hay que realizar un descuento, en funcin de la suma de los importes, dicho descuento es del 0% si es menor que 1000, es del 5% si es mayor o
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
36 igual que 1000 y menor que 10000 y es de un 10% si es mayor o igual que 10000. El descuento se debe aplicar a la suma de los importes y a la suma de los ivas. Para acabar se debe imprimir el importe y el iva resultantes (total menos descuento) y la suma de ambos.
10. Hacer un organigrama que lea N nmeros, calcule y escriba la suma de los pares y el producto de los impares.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
37
11. Hacer un diagrama de flujo para calcular el mximo comn divisor de dos nmeros enteros positivos N y M siguiendo el algoritmo de Eucldes, que es el siguiente:
12
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
38
14. 13 Hacer el diagrama de flujo para calcular el factorial de N (N!=1 2 3 ... N).
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
39
14.- Hacer un diagrama de flujo para sumar los N primeros trminos de una progresin geomtrica de primer trmino A y razn R (dados por teclado). Se debe realizar la suma sin emplear la frmula que existe para ello.
15. Hacer un diagrama de flujo para convertir un nmero decimal N dado por teclado a binario.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
40
16. Hacer un diagrama de flujo para calcular AB, siendo B un entero, ntese que B puede ser 0 o negativo. No se pueden emplear logaritmos.
17. Calcular el mximo de N nmeros ledos desde teclado.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
41
Vamos a almacenar en M el mximo de los nmeros que se hayan ledo, el primero va di- rectamente a M y los N-1 restantes los leemos en A, comparamos con M y si son mayores cambiamos el mximo temporal. Al final se escribe el resultado. Vamos a ejecutarlo paso a paso para N=4, empleando como datos: 2, 3, -1, 7.
(1) Leer N N=4 (2) Leer M M=2 (3) I=N-1=3 (4) Leer A A=3 (5) A>M? SI (6) M=A=3 (7) I=I-1=3-I=2 (8) I=0? NO (4) Leer A A=-1
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
42 18 Hacer un diagrama de flujo para ordenar N nmeros ledos por teclado y almacenados en un array A. El algoritmo es el siguiente: 1. Se lee N y despus los N nmeros al array A. 2. Se busca el mximo de los elementos del 1 al N y su ndice J. 3. Se intercambian los elementos A(J) y A(N). 4. Se decrementa N en 1. 5. Se compara N con 1, si es mayor se vuelve a 2. 6. Si es menor o igual se termina.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
43 19 Hacer el organigrama de un programa que dado un array A ordenado de N elementos, encuentre la posicin de uno B ledo por teclado. El algoritmo a emplear es el siguiente: 1. Se fijan los extremos de la porcin a buscar: I=1, J=N. 2. Se calcula el ndice del elemento medio K=(I+J)/2. 3. Se compara B con el elemento medio A(K). 4. Si es igual se escribe K y se termina. 5. Si es mayor se cambian los extremos a I=K+1, J=N y se vuelve a 2. 6. Si es menor se cambian los extremos a I=1, J=K-1 y se vuelve a 2. Pensar despus que habr que modificar para que busque tambin valores de B que no estn en el array A, si se da ese caso y no lo encuentra debe poner un mensaje diciendo que no est.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
44 22. Dados dos nmeros enteros positivos N y D, se dice que D es un divisor de N si el resto de dividir N entre D es 0. Se dice que un nmero N es perfecto si la suma de sus divisores (excluido el propio N) es N. Por ejemplo 28 es perfecto, pues sus divisores (excluido el 28) son: 1, 2, 4, 7 y 14 y su suma es 1+2+4+7+14=28. Hacer un organigrama que dado un nmero N nos diga si es o no perfecto.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
45 23. Un ao es bisiesto si es mltiplo de 4, exceptuando los mltiplos de 100, que slo son bisiestos cuando son mltiplos adems de 400, por ejemplo el ao 1900 no fue bisiesto, pero el ao 2000 si lo ser. Hacer un organigrama que dado un ao A nos diga si es o no bisiesto.
24. Hacer un organigrama que dados un da D, un mes M y un ao A, calcule cual es el da siguiente. Se debe tener en cuenta que en los aos bisiestos Febrero tiene 29 das y en los no bisiestos 28.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
46 26. Hacer un organigrama que lea un nmero N y obtenga las ternas pitagricas (A, B, C) en las que A, B y C son todos enteros positivos y menores que N. Para que una terna (A, B, C) sea pitagrica debe cumplir que A 2 +B 2 =C 2 .
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
47 27. Una empresa paga a sus 100 operarios semanalmente, de acuerdo con el nmero de horas trabajadas, a razn de P pesetas por hora y de 1.5 P pesetas por cada hora extra. Las horas extras son las que exceden de 40h. Hacer el organigrama que dado el nmero de horas trabajadas y el valor de P calcule el salario que le corresponde.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
48 28. Disponemos de una mquina que puede dar vueltas con 5 tipos de monedas distintas: 100, 50, 25, 5 y 1 pts. Realizar el organigrama de un programa que dados el precio del artculo y la cantidad entregada por el consumidor nos indique la vuelta a entregar empleando el menor nmero posible de monedas.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
49 29 Plantear el organigrama de un programa que sea capaz de calcular el impuesto sobre la renta el nmero de veces que sea necesario y lo escriba por impresora. El impuesto de la renta es el 15% del salario anual de cada persona, al que previamente se debe realizar una deduccin en funcin del nmero de hijos, que es del 0% si tiene 0, del 5% si tiene 1 o 2 y del 15% si tiene ms de 2.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica
50 BIBLIOGRAFIA Bibliografa bsica JOYANES, L. (2008). Fundamentos de la programacin. Algoritmos y Estructura de Datos, 4 Edicin. Madrid: McGraw-Hill. VILLALOBOS, RICARDO. Fundamentos de programacin C#. Lima Macro 2008. Bibliografa complementaria. AHO, Alfred V.; HOPCROFT, John E.; ULLMAN, Jeffrey D. (1998). Estructuras de datos y algoritmos. Mxico: Addison Wesley. BRASSARD, G.; BRATLEY, P. (1997). Fundamentos de Algoritmia. Madrid: Prentice-Hall. COLLADO MACHUCA, M.; MORALES FERNNDEZ, R.; MORENO NAVARRO, J. J. (1987). Estructuras de datos. Realizacin en Pascal. Madrid: Ediciones Daz de Santos. ESPINOZA, Jaime. Fundamentos de programacin. Nueva Edicin..Ministerio de Educacin y Cultura. ISBN-10: ISBN 9978 45-386-5 2010 GARCA MOLINA, J. J.; MONTOYA DATO, F. J.; FERNNDEZ ALEMN, J. L.; MAJADO ROSALES, M. J. (2005). Una introduccin a la programacin. Un enfoque algortmico. Madrid: Thomson-Paraninfo. JOYANES, L. (1990). Problemas de Metodologa de la Programacin. Madrid: McGraw-Hill.
Fundamentos de programacin 1
Ing. Walther Vargas Gonzlez Profesor de Informtica