intro a programacion

Upload: peperiveros

Post on 15-Oct-2015

28 views

Category:

Documents


0 download

TRANSCRIPT

  • 5/26/2018 Intro a Programacion

    1/40

    11.. IINNTTRROODDUUCCCCIINNAALLAAPPRROOGGRRAAMMAACCIINN

    11..11.. OOBBJJEETTIIVVOOSS..

    Presentar todo el panorama histrico desde los inicios hasta los ms recientes avances a fin deque el estudiante comprenda ideas y principios bsicos que llevaron al desarrollo de lascomputadoras modernas.

    Que el estudiante conozca la arquitectura de un computador y sus componentes de hardware ysoftware.

    11..22.. HHIISSTTOORRIIAADDEELLAACCOOMMPPUUTTAACCIINN

    11..22..11.. AAnntteecceeddeenntteess

    El concepto numrico se considera, generalmente, como anterior al desarrollo de los lenguajesescritos; los primeros registros del hombre son anotaciones sobre la cantidad de granos,animales y dems posesiones personales. Con este fin, el hombre empleaba guijarros, palos y/omarcas en las paredes de las cavernas que habitaba.

    El deseo humano de obtener mayor informacin y mejores comunicaciones, gradualmente fuedejando atrs estos sencillos instrumentos. El baco es considerado como el primer instrumentoelaborado por el hombre para realizar operaciones aritmticas de manera ms eficiente. El bacono realiza clculos de manera autnoma (por si solo), simplemente le permite al hombrerealizarlos de manera ms eficiente.

    La primera mquina que realizaba clculos de manera autnoma fue inventada en 1642 por elgran matemtico y filsofo francs Blas Pascal. La mquina de Pascal (en honor a su inventor),era movida mediante una serie de ruedas dentadas, numeradas del cero al nueve, alrededor de

    sus circunferencias y era capaz de sumar y restar en forma directa, mostrando un nmero atravs de una ventanita y por este hecho tiene la ventaja de evitar tener que contar, como en elcaso del baco; adems, presenta los resultados en forma ms accesible.

    Figura 1. Mquina de Pascal (1642)

    En 1671 Gottfried Wilhelm Leibniz le adicion a la mquina de Pascal un cilindro diseadoespecialmente para que fuera capaz de multiplicar y dividir de manera directa.

    A principios del siglo XIX el ingeniero Joseph Marie Jacquard perfeccion el concepto de tarjetaperforada, con el cual se podan programar las mquinas de tejer para que siguieran un patrno diseo. Este concepto fue posteriormente utilizado en las mquinas de cmputo para decirlesqu deban calcular.

  • 5/26/2018 Intro a Programacion

    2/40

    2

    Pero ninguno de estos avances fue antecesor directo de las computadoras electrnicas de hoy.La verdadera precursora de la computadora fue la mquina llamada motor de diferencias,construida en 1822 por Charles Babbage para calcular algoritmos y tablas astronmicas.

    A partir de su trabajo en el motor de diferencias, Babbage dise un poderoso instrumento parael clculo automtico. Tal como lo concibi Babbage, este motor analtico estara impulsadopor vapor, y trabajara basado en un programa de planeacin almacenado en tarjetasperforadas. sta mquina estaba dividida funcionalmente en dos grandes partes: una queordenaba y otra que ejecutaba las rdenes. La que ejecutaba las rdenes era una versin muyampliada de la mquina de Pascal, mientras que la otra era la parte clave. La innovacinconsista, en que el usuario poda combinando las especificaciones de control, lograr que lamisma mquina ejecutara operaciones complejas, diferentes a las hechas antes. Babbageconcibi una memoria, un procesador aritmtico, los medios de ingresar datos y/o instrucciones,as como una seccin de produccin que imprimira los resultados.

    Todos estos son los elementos de las computadoras modernas y no se hicieron realidad sinovarias generaciones despus de ser propuestos por Babagge. Charles Babbage no pudoimplementar el motor analtico y muri sin saber que realmente funcionaba.

    Figura 2. Mquina Diferencial de Charles Babbage

    Durante los cien aos siguientes, las mquinas activadas por tarjetas perforadas se modificaron,se mejoraron e hicieron ms rpidas, pero an no podan mantener el ritmo de las crecientesnecesidades humanas de procesamiento de listas de pagos, cuentas, facturas, anlisis deventas y otros problemas.

    En 1937, Howard H. Aiken, un candidato al doctorado en fsica de Harvard, trabaj en unamquina que podra resolver automticamente ecuaciones diferenciales. La InternationalBusiness Machines(I.B.M.), hoy una de las ms grandes empresas de esta fase de la industrianorteamericana, ayud al inventor a crear la Calculadora Controlada de Secuencia Automtica

    conocida como el Mark I.

    El Mark I era un monstruo de cuatro y media toneladas mtricas, con 78 aparatosindependientes vinculados por unos 800 kilmetros de cable. En tres dcimas de segundo podaefectuar sumas y restas de 23 dgitos y en cerca de 6 segundos poda multiplicar nmeros de 23dgitos. Fue retirado en 1959.

  • 5/26/2018 Intro a Programacion

    3/40

    3

    Figura 3. Mark I

    Tanto el Mark I como la Segunda Guerra Mundial, desempearon un papel clave en el desarrollode las computadoras. El Mark I aport los ingredientes tecnolgicos bsicos mientras que la

    segunda guerra mundial con sus inmensas demandas de mano de obra y mquinas, cre lanecesidad. El resultado fue el Integrador y Calculador Numrico Electrnico, ms conocidocomo el ENIAC.

    Figura 4. ENIAC

    Terminado en 1946, el ENIAC fue creado para el ejrcito norteamericano en la escuela Moore deIngeniera Elctrica, de la Universidad de Pennsylvania. Sus creadores fueron un estudiantegraduado, J. Presper Eckert, y un fsico, el Dr. John W. Mauchly. Juntos eliminaron la necesidadde las partes que se movan mecnicamente en la computadora central. En su lugar, adaptaroncircuitos elctricos de gatillo flip-flop y pulsaciones electrnicas para conectar o desconectartubos al vaco, como interruptores.

    Como las interrupciones de este tipo podan hacerse miles de veces ms rpido que los aparatoselectro-mecnicos, el ENIAC constituy un gran inicio hacia el desarrollo de las computadoras

    modernas.El ltimo paso para completar el concepto de la computadora de hoy, fue el desarrollo delconcepto de mquina almacenadora de programas. Este paso se dio a fines de los cuarenta,despus de que el clebre matemtico hungaro-norteamericano Dr. John Von Neumann sugirique las instrucciones de operacin, as como los datos, se almacenaran de la misma manera enla memoria de la computadora. Adems, aport la idea de hacer que la computadoramodificara sus propias instrucciones de acuerdo con un control programado. Las ideas de VonNewman fueron fundamentales para los desarrollos posteriores y se le considera el padre de lascomputadoras. Desde entonces, se ha tratado de modificar, mejorar y apresurar estosconceptos, en fin, de hacer computadoras cada vez ms eficientes.

  • 5/26/2018 Intro a Programacion

    4/40

    4

    Figura 5. Computador electrnico IBM 360

    Existen bsicamente dos tipos bsicos de computadoras: las anlogas y las digitales. Tambinexisten sistemas llamados hbridos que emplean elementos tanto anlogos como digitales.Los fenmenos que se comportan en forma continua reciben el nombre de analgico porejemplo: la altura de una columna de mercurio en un termmetro clnico, puede variar entre lasmarcas de treinta y cuarenta y cinco grados y en todo momento puede estar en cualquier puntointermedio de la escala, lo mismo ocurre con un voltaje elctrico o la rotacin angular de un eje.En una computadora anloga los nmeros estn representados por cantidades fsicascontinuamente variables como las anteriores. Tales mquinas tienen aplicaciones fsicas eindustriales que representan procesos fsicos que ocurren con el paso del tiempo.

    Existe otro tipo de fenmenos ejemplo: si se averigua la cantidad de ventanas de un edificio sellegar a la conclusin de que son un nmero exacto como 90 y que no puede haber 90 ymedia. Estos fenmenos reciben el nombre de digitales porque dan la idea de que se puedencuantificar con los dedos de la mano. La computadora digital opera con nmeros representadosdirectamente en forma digital. Tales computadoras son las ms extensamente usadas ypueden aplicarse en todos los campos que requieren operaciones aritmticas y manejo deinformacin.

    11..22..22.. LLaaffaabbrriiccaacciinneennsseerriiee((ggeenneerraacciioonneessddeeccoommppuuttaaddoorreess))

    El concepto de generacin resulta un tanto especial: aunque tiene relacin con la modernizacinde la tecnologa constructiva y de componentes, reviste un carcter marcadamente comercial.Adicionalmente, las fronteras entre generaciones no parecen bien definidas y tal confusin es unsntoma ms de las frenticas y agresivas campaas comerciales llevadas a cabo por las firmasconstructoras para colocar sus computadores. Se suelen considerar cinco generaciones:

    Generacin Cero: En la cul el hombre construyo mquinas, usando dispositivos mecnicostales como ruedas dentadas y piones, para realizar bsicamente operaciones aritmticas como

    suma, resta, multiplicaciones y divisiones. Estas mquinas se conocen con el nombre deMquinas Aritmticas.

    Primera Generacin: En la cul el hombre construy mquinas de clculo para tareas muyespecficas como investigacin y militares, usando dispositivos electro-mecnicos como rels ytubos de vaco los cuales dieron paso a los elementos transistorizados. Las mquinas decmputo de esta generacin tenan pocas facilidades de programacin. La comunicacin seestableca en lenguaje de mquina (lenguaje binario). Estos aparatos eran grandes y costosos.

  • 5/26/2018 Intro a Programacion

    5/40

    5

    Figura 6. Folleto promocional de una mquina aritmtica

    Segunda Generacin: En la cul el hombre construy computadores (mquinas de clculo),basados en el transistor. Los computadores de esta generacin tienen propsito general, no sonusados nicamente para la investigacin y el aspecto militar, ya son usados en el arte, laeconoma y la industria. Se programaban en nuevos lenguajes llamados de alto nivel.

    Figura 7. Dibujo esquemtico de un transistor

    Tercera Generacin: En la cual el hombre construye diferentes tipos de computadores,basados en el desarrollo de los circuitos integrados. En esta generacin se desarrollan losprimeros programas de software de tipo especfico.

    Figura 8. Computador Electrnico -VAX

  • 5/26/2018 Intro a Programacion

    6/40

    6

    Cuarta Generacin: En la cual el hombre construye computadores de tamao pequeo pero degran capacidad, llamados microcomputadores, los cuales estn basados en el microprocesador.La aparicin del microprocesador se debe a los desarrollos hechos en la tecnologa VLSI(Integracin de Gran Escala). En esta generacin se hacen aplicaciones de software orientadas alusuario final.

    Figura 9. El Apple-II, Primer Computador Personal

    Quinta Generacin: En la cual el hombre construye computadores con ms de un procesador,cada uno con una tarea especfica como procesamiento de imagen y procesamiento de sonido,y/o con una tarea en comn. Adicionalmente se construyen computadores capaces de auto-

    configurarse, auto-programarse, etc. En esta generacin se desarrolla software tanto genricocomo especfico.

    Figura 10. Computador con mltiples procesadores.

    11..33.. EESSTTRRUUCCTTUURRAADDEEUUNNCCOOMMPPUUTTAADDOORR

    Un COMPUTADOR es una mquina que realiza clculos de manera automtica. Se dividefundamentalmente en dos partes: el hardware y el software. El HARDWARE es la parte fsica deun computador, es decir, la parte que realiza los clculos. El SOFTWAREes la parte lgica delcomputador, es decir, la parte que le dice al hardware qu hacer. Usando una metfora se puede

    decir que: Un computador es como un ser humano: el hardware es el cuerpo y el software esla mente

    11..33..11.. AArrqquuiitteeccttuurraaddeehhaarrddwwaarree

    Un computador desde la perspectiva del hardware, est constituido por una serie de dispositivoscada uno con un conjunto de tareas definidas. Los dispositivos de un computador se dividensegn la tarea que realizan en: dispositivos de entrada, dispositivos de salida, dispositivos decomunicaciones, dispositivos de almacenamiento y dispositivo de cmputo.

  • 5/26/2018 Intro a Programacion

    7/40

    7

    Figura 11. Arquitectura de Hardware

    Dispositivos de entrada: Son aquellos que permiten el ingreso de datos a un computador.Entre estos se cuentan: teclados, ratones, scaners, micrfonos, cmaras fotogrficas, cmarasde video, controles de juegos, lpices pticos, y guantes de realidad virtual.

    Figura 12. Dispositivos de Entrada

    Dispositivos de salida. Son aquellos que permiten mostrar informacin almacenada oprocesada por el computador. Entre otros estn: las pantallas de video, impresoras, audfonos,plotters, guantes de realidad virtual, gafas y cascos virtuales.

    Figura 13. Dispositivos de Salida

    Dispositivos de almacenamiento.Son aquellos en los cuales el computador puede guardarinformacin y de los cuales puede obtener informacin previamente almacenada. Entre otrosestn los discos flexibles, discos duros, unidades de cinta, CD-ROM, CD-ROM de re-escritura yDVD.

  • 5/26/2018 Intro a Programacion

    8/40

    8

    Figura 14. Dispositivos de Almacenamiento.

    Dispositivos de comunicacin: Son aquellos que le permiten a un computador comunicarsecon otros. Entre estos se cuentan los modems y tarjetas de red.

    Figura 15. Modem

    Dispositivo de cmputo:Es la parte del computador que realiza todos los clculos y tiene elcontrol sobre los dems dispositivos. Est formado por tres elementos fundamentales: la unidadcentral de proceso, la memoria y el bus de datos y direcciones.

    Figura 16. Diagrama esquemtico del dispositivo de computo

    La unidad central de proceso (UCP)1: es el cerebro del computador, est encargada derealizar todos los clculos, utilizando para ello la informacin almacenada en la memoria y decontrolar los dems dispositivos, procesando las entradas y salidas provenientes y/o enviadas alos mismos. Mediante el bus de datos y direcciones, la UCP se comunica con los diferentesdispositivos enviando y obteniendo tales entradas y salidas.

    Para realizar su tarea la unidad central de proceso dispone de una unidad aritmtico lgica, unaunidad de control, un grupo de registros y opcionalmente una memoria cach para datos ydirecciones.

    La unidad aritmtico lgica (UAL)2es la encargada de realizar las operaciones aritmticas ylgicas requeridas por el programa en ejecucin, la unidad de control es la encargada dedeterminar las operaciones e instrucciones que se deben realizar, el grupo de registros esdonde se almacenan tanto datos como direcciones necesarias para realizar las operacionesrequeridas por el programa en ejecucin y la memoria cach se encarga de mantenerdirecciones y datos intensamente usados por el programa en ejecucin.

    1La unidad central de proceso es ms conocida como CPU por sus siglas en ingls Central Process Unit.

    2La unidad aritmtico lgica es ms conocida como ALU por sus siglas en ingls Arithmetic Logic Unit.

  • 5/26/2018 Intro a Programacion

    9/40

    9

    Figura 17. Unidad Central de Proceso.

    La memoriaest encargada de almacenar toda la informacin que el computador est usando,es decir, la informacin que es accedida (almacenada y/o recuperada) por la UCP y por losdispositivos.

    La unidad de medida de memoria es el byte, constituido por 8 bits (ceros o unos). Cada bytetiene asignada una direccin de memoria, para poder ser accedida por la UCP. Para lainterpretacin de la informacin que est en memoria, como datos o comandos o instrucciones,se utilizan cdigos que la UCP interpreta para llevar a cabo las acciones deseadas por elusuario.

    Existen diferentes tipos de memoria, entre las cuales se encuentran las siguientes:

    RAM(Random Access Memory): Memoria de escritura y lectura, es la memoria principal delcomputador. El contenido solo se mantiene mientras el computador est encendido.

    ROM(Read Only Memory): Memoria de solo lectura, es permanente y no se afecta por elencendido o apagado del computador. Generalmente almacena las instrucciones que lepermiten al computador iniciarse y cargar (poner en memoria RAM) el sistema operativo.

    Cach: Memoria de acceso muy rpido, usada como puente entre la UCP y la memoria RAM,para evitar las demoras en la consulta de la memoria RAM.

    El bus de datos y direccionespermite la comunicacin entre los elementos del computador.Por el bus de datos viajan tanto las instrucciones como los datos de un programa y por el bus dedirecciones viajan tanto las direcciones de las posiciones de memoria donde estn instruccionesy datos, como las direcciones lgicas asignadas a los dispositivos.

    11..33..22.. AArrqquuiitteeccttuurraaddeessooffttwwaarree

    Un computador desde la perspectiva del software, est constituido por:

    Un sistema operativo. Un conjunto de lenguajes a diferente nivel con los cuales se comunica con el usuario y con

    sus dispositivos. Entre estos estn los lenguajes de mquina, los ensambladores y los dealto nivel.

    Un conjunto de aplicaciones de software. Un conjunto de herramientas de software.

  • 5/26/2018 Intro a Programacion

    10/40

    10

    Software: Es un conjunto de instrucciones que le dicen al hardware que hacer. El hardware porsi solo no puede hacer nada.

    Lenguaje de programacin: Es un conjunto de reglas y estndares que es utilizado paraescribir programas de computador (software), que puedan ser entendidos por l.

    Programa: Es la representacin de algn software en un lenguaje de programacin especfico.

    11..33..22..11.. SSiisstteemmaaOOppeerraattiivvooEs el software encargado de administrar los recursos del sistema. Adicionalmente, ofrece unconjunto de comandos para interactuar con la mquina.

    Los sistemas operativos pueden ser escritos en lenguaje de alto nivel (UNIX fue escrito en C), enlenguaje ensamblador y/o en lenguaje mquina. Algunos de los sistemas operativos msconocidos son DOS, UNIX, LINUX y las distintas versiones de Microsoft Windows.

    11..33..22..22.. LLeenngguuaajjeessaaddiiffeerreenntteenniivveell11..33..22..22..11 LLeenngguuaajjeeddeeMMqquuiinnaaEs el nico lenguaje que entiende el hardware (mquina) y usa exclusivamente el sistemabinario (ceros y unos). Este lenguaje es especfico para cada hardware (procesador, dispositivos,etc.).

    El programa (tanto cdigos de instruccin como datos) es almacenado en memoria. Laestructura de una instruccin en lenguaje mquina es la siguiente:

    CODIGO ARGUMENTO(S)

    Figura 18. Lenguaje de mquina

    11..33..22..22..22 LLeenngguuaajjeeEEnnssaammbbllaaddoorrEs un lenguaje que usa mnemnicos (palabras cortas escritas con caracteres alfanumricos),para codificar las operaciones. Los datos y/o direcciones son codificados generalmente comonmeros en un sistema hexadecimal. Generalmente es especfico (aunque no nico) para cadalenguaje de mquina. La estructura de una instruccin en este lenguaje es la siguiente:

    MNEMONICO ARGUMENTO(S)

    Un ENSAMBLADOR es un software, generalmente escrito en lenguaje de mquina, que escapaz de traducir de lenguaje ensamblador a lenguaje de mquina.

  • 5/26/2018 Intro a Programacion

    11/40

    11

    Figura 19. Lenguaje Ensamblador.

    11..33..22..22..33 LLeenngguuaajjeeddeeAAllttooNNiivveellEs un lenguaje basado en una estructura gramatical para codificar estructuras de control y/oinstrucciones. Cuenta con un conjunto de palabras reservadas (escritas en lenguaje natural).Estos lenguajes permiten el uso de smbolos aritmticos y relacionales para describir clculosmatemticos, y generalmente representan las cantidades numricas mediante sistema decimal.

    Gracias a su estructura gramatical, estos lenguajes permiten al programador olvidar eldireccionamiento de memoria (donde cargar datos y/o instrucciones en la memoria), ya que estese realiza mediante el uso de conceptos como el de variable.

    Los COMPILADORESe INTERPRETESson software capaz de traducir de un lenguaje de altonivel al lenguaje ensamblador especfico de una mquina. Los primeros toman todo el programaen lenguaje de alto nivel, lo pasan a lenguaje ensamblador y luego lo ejecutan. Los ltimostoman instruccin por instruccin, la traducen y la van ejecutando.

    Figura 20. Lenguaje de Alto Nivel.

    11..33..22..33.. AApplliiccaacciioonneessUna APLICACION es un software construido para que el computador realice una tareaespecfica y con el cual no se puede construir otro software. Ejemplos de aplicaciones son losprocesadores de texto como Microsoft Wordy Word Perfecty las hojas electrnicas de clculocomo Microsoft Excely Lotus.

    11..33..22..44.. HHeerrrraammiieennttaassUna HERRAMIENTA es un software construido especialmente para el desarrollo de nuevosoftware, (tanto de aplicaciones como de herramientas). Ejemplos de herramientas son loscompiladores como Turbo C, Turbo Pascal y Dev C++, las herramientas CASE y los ambientesintegrados de desarrollo.

  • 5/26/2018 Intro a Programacion

    12/40

    12

    Figura 21. Arquitectura de Software Completa.

    11..44.. RREESSUUMMEENN..

    Las computadoras son un avance de los sencillos utensilios que el nombre uso para contar a

    principios de su historia.El baco fu el primer calculador digital.La mquina de Pascal inventada en 1642 fue la primera mquina calculadora.La verdadera precursora de las computadoras electrnicas fue el Motor de Diferenciasconstruida en 1922 por Charles Babbage.En 1937 la IBM ayud a Howard Aiken a crear el Mark I.El Mark I y la Segunda Guerra Mundial desempearon papeles claves en el desarrollo de lascomputadoras norteamericanas.El resultado fue el Eniac terminado en 1946 creado por un estudiante graduado Prespert Eckerty el fsico John Mauchly.Afines de los aos 40 John Von Nuemann concibi la idea de que en la memoria coexistan datoscon instrucciones. Alrededor de este concepto y el de control programado gira toda la evolucinposterior de la industria de las computadoras.Existen computadoras analgicas y digitales. Son computadoras digitales aquellas que manejan

    la informacin de manera discreta y son analgicas las que trabajan por medio de funcionescontinuas, generalmente representacin de seales elctricas.

    El computador est constituido por Hardware y Software. El hardware es la parte fsica y elsoftware la parte lgica.

    Los componentes del hardware son: dispositivos de entrada, dispositivos de salida, dispositivosde almacenamiento, dispositivos de comunicacin y dispositivo de cmputo (Unidad central deproceso, memoria, bus de datos y direcciones).

    Desde la perspectiva de software el computador est constituido por: sistema operativo,conjunto de lenguajes a diferente nivel (lenguajes de mquina, ensambladores y alto nivel),aplicaciones y herramientas.

    11..55.. BBIIBBLLIIOOGGRRAAFFAA..

    BECERRA C.,Algoritmos: Conceptos Bsicos, 4 edicin, 1998.

    11..66.. LLEECCTTUURRAASSCCOOMMPPLLEEMMEENNTTAARRIIAASS..

    Cursos y manuales, artculos, revisiones, bricolaje, compaas de hardware, componentes de lapgina http://www.mundopc.net/hardware/

  • 5/26/2018 Intro a Programacion

    13/40

    13

    22.. IINNTTRROODDUUCCCCIINNAALLOOSSAALLGGOORRIITTMMOOSS

    22..11.. OOBBJJEETTIIVVOOSS

    Presentar una definicin informal del concepto de algoritmo que ser adoptada para el resto deltexto. Igualmente, clarificar los tipos de problemas que pueden ser resueltos de maneraalgortmica, y ejemplificar el trabajo que implica resolver un problema mediante un programa decomputador. Los ejercicios del final del captulo ofrecen una oportunidad para que el estudianteconsolide estos conceptos y se ejercite en relacionar la informacin dada en el enunciado de unproblema, con la informacin desconocida.

    Tambin, se presentan los elementos bsicos de los dos principales formalismos que sernutilizados para especificar algoritmos que se quieren ejecutar en un computador: elpseudocdigo y los diagramas de flujo.

    22..22.. IINNTTRROODDUUCCCCIINN

    Diariamente el ser humano trata de darle solucin a cada problema que se le presenta, o demejorar las soluciones disponibles. Para algunos problemas fundamentales ha encontradosoluciones brillantes que consisten en una serie de acciones, que siempre que se realicen demanera ordenada y precisa conducen a la respuesta correcta. Algunas de esas soluciones hanrequerido el trabajo, la inteligencia y la persistencia de muchas generaciones. Hoy la sociedadcuenta con ese legado de soluciones, adems de las mquinas capaces de ejecutarlas precisa yvelozmente. Esas mquinas maravillosas, de las cuales trata el captulo 1, son loscomputadores.

    22..33.. AALLGGOORRIITTMMOOSS

    La palabra algoritmo se deriva de Al-khwarizmi, un matemtico y astrnomo del siglo IXquien al escribir un tratado sobre manipulacin de nmeros y ecuaciones, el Kitab al-jabrwalmugabala, us en gran medida la nocin de lo que se conoce hoy como algoritmo.

    Un ALGORITMO es una secuencia finita bien definida de tareas bien definidas, cada una de lascuales se puede realizar con una cantidad finita de recursos. Se dice que una tarea esta biendefinida, si se saben de manera precisa las acciones requeridas para su realizacin. Aunque losrecursos que debe utilizar cada tarea deben ser finitos estos no estn limitados, es decir, si unatarea bien definida requiere una cantidad inmensa (pero finita) de algn recurso para surealizacin, dicha tarea puede formar parte de un algoritmo. Adems, se dice que una secuenciade tareas est bien definida si se sabe el orden exacto en que deben ejecutarse.

    A lo largo de este libro, se considerar solo esta definicin informal de algoritmo. Enmatemticas se usa una definicin formal que est fuera del alcance de este texto.

    EJECUTAR un algoritmo consiste en realizar las tareas o instrucciones que lo conforman, en elorden especificado y utilizando los recursos disponibles. Hoy se cuenta con mquinas querealizan esta labor, pero se requiere que los algoritmos que ejecutan se escriban en un lenguajeespecial. Usar esos lenguajes especiales para especificar algoritmos se llama programacin decomputadores.

    22..33..11.. CCaarraacctteerrssttiiccaassddeeuunnaallggoorriittmmoo

    Las caractersticas que debe poseer una secuencia de tareas para considerarse algoritmo son:precisin, de finitud y finitud.

  • 5/26/2018 Intro a Programacion

    14/40

    14

    Precisin De finitud o Determinismo Finitud

    Hay un orden preciso en el cualdeben ejecutarse las tareas que

    conforman el algoritmo.

    Todas las veces que se realicenlas tareas o pasos de un

    algoritmo, con las mismascondiciones iniciales, se debenobtener resultados idnticos.

    El algoritmo debe terminar enalgn momento y debe usar una

    cantidad finita de recursos.

    22..33..22.. EEssttrruuccttuurraabbssiiccaaddeeuunnaallggoorriittmmoo

    En esencia un algoritmo est constituido por los siguientes tres elementos:

    Datos Instrucciones Estructuras de controlPara almacenar informacin:datos de entrada, de salida o

    intermedios.

    Las acciones o procesos queel algoritmo realiza sobre los

    datos.

    Las que determinan el orden en que seejecutarn las instrucciones del

    algoritmo.

    En el captulo siguiente se presentan de manera completa los conceptos de dato e instruccin, y

    en el captulo cuatro se describe el concepto de estructura de control.

    22..33..33.. EEjjeemmpplloossddeeaallggoorriittmmooss

    Enseguida se dan varios ejemplos de algoritmos, algunos de los cuales no son susceptibles deejecutarse por medio de un computador; en cambio, son ms bien recetas que se usan pararesolver problemas cotidianos.

    PROBLEMA UNO:Un estudiante se encuentra en su casa (durmiendo) y debe ir a la universidad(a tomar la clase de programacin!), qu debe hacer?ALGORITMO:

    Inicio

    PASO1.DormirPASO 2. Hacer 1hastaque suene el despertador (o lo llame la mam).PASO3.Mirar la hora.PASO4. Hay tiempo suficiente?PASO4.1.Sihay, entoncesPASO4.1.1.Baarse.PASO4.1.2. Vestirse.PASO4.1.3. Desayunar.PASO4.2.Sino,PASO4.2.1. Vestirse.PASO5.Cepillarse los dientes.PASO6.Despedirse de la mam y el pap.PASO7.Hay tiempo suficiente?PASO7.1. Sihay, entoncesPASO 7.1.1.Caminar al paradero.PASO7.2.Sino, Correr al paradero.

    PASO8. Hastaque pase un bus para la universidad hacer:PASO8.1.Esperar el busPASO8.2.Ver a las dems personas que esperan un bus.PASO9. Tomar el bus.PASO10.Mientras no llegue a la universidad hacer:PASO10.1.Seguir en el bus.PASO10.2.Pelear mentalmente con el conductor.PASO11.Timbrar.PASO12.Bajarse.PASO13.Entrar a la universidad.Fin

  • 5/26/2018 Intro a Programacion

    15/40

    15

    PROBLEMA DOS: Sean P=(a,b) y Q=(c,d) los puntos extremos de un segmento de recta.Encontrar un segmento de recta perpendicular al anterior, que pase por su punto medio.ALGORITMO:

    Inicio

    PASO 1.Trazar un crculo con centro en el punto P que pase por el punto Q.

    PASO 2.Trazar un crculo con centro en el punto Q que pase por el punto P.

    PASO 3. Trazar un segmento de recta entre los puntos de interseccin de las circunferenciastrazadas en los pasos 1 y 2.

    Fin.El segmento de recta trazada es el buscado.

  • 5/26/2018 Intro a Programacion

    16/40

    16

    PROBLEMA TRES:Realizar la suma de dos nmeros enteros positivos.

    ALGORITMO:

    InicioPASO1.En una hoja de papel, escribir los nmeros el primero arriba del segundo, de tal manera que lasunidades, decenas, centenas, etc., de los nmeros queden alineadas. Trazar una lnea debajo del segundonmero.

    PASO2. Empezar por la columna ms a la derecha.PASO3. Sumar los dgitos de dicha columna.PASO4.Si la suma es mayor a 9 anotar el nmero que corresponde a las decenas encima de la siguientecolumna a la izquierda y anotar debajo de la lnea las unidades de la suma. Si no es mayor anotar la suma debajode la lnea.PASO5.Si hay ms columnas a la izquierda, pasar a la siguiente columna a la izquierda y volver a 3.PASO6. El nmero debajo de la lnea es la solucin.Fin

    PROBLEMA CUATRO:Cambiar la rueda pinchada de un automvil teniendo un gato mecnicoen buen estado, una rueda de reemplazo y una llave inglesa.

    ALGORITMO:

    InicioPASO 1. Aflojar los tornillos de la rueda pinchada con la llave inglesa.PASO 2. Ubicar el gato mecnico en su sitio.PASO 3. Levantar el gato hasta que la rueda pinchada pueda girar libremente.PASO 4. Quitar los tornillos y la rueda pinchada.PASO 5. Poner rueda de repuesto y los tornillos.PASO 6. Bajar el gato hasta que se pueda liberar.PASO 7. Sacar el gato de su sitio.PASO 8. Apretar los tornillos con la llave inglesa.Fin

    PROBLEMA CINCO:Encontrar los nmeros primos entre 1 y 50.

    ALGORITMO:

    InicioPASO 1. Escribir los nmeros de 1 al 50PASO 2. Tachar el nmero 1 ya que no es primo.PASO 3. Para k entre 2 y el entero ms cercano por debajo de la raz cuadrada de 50, siel nmero k no esta tachado, tachar los mltiplos del nmero k, sin tachar el nmero k.PASO 4. Los nmeros que no se tacharon son los nmeros primos entre 1 y 50.Fin

  • 5/26/2018 Intro a Programacion

    17/40

    17

    22..33..44.. RReepprreesseennttaacciinnddeeAAllggoorriittmmooss

    Cuando se quiere que un computador ejecute un algoritmo es indispensable, por lo menos hastahoy, representar ese algoritmo mediante algn formalismo. Las tcnicas utilizadas mscomnmente para la representacin de algoritmos son:

    22..33..44..11.. AADDiiaaggrraammaassddeefflluujjoo

    Se basan en la utilizacin de diversos smbolos geomtricos para representar operacionesespecficas. Se les llama diagramas de flujo porque los smbolos utilizados se conectan pormedio de flechas para indicar la secuencia que sigue la ejecucin de las operaciones.

    EEnnllaasseecccciinnddeePPrrooggrraammaacciinnEEssttrruuccttuurraaddaassee eexxpplliiccaallaaffoorrmmaaddeeccoonnssttrruuiirrddiiaaggrraammaassddeefflluujjoouuttiilliizzaannddooeessttaattccnniiccaa..

    22..33..44..22.. PPsseeuuddooccddiiggooEs un lenguaje de especificacin de algoritmos. Tiene asociado un lxico (conjunto de palabras),

    una sintaxis (reglas gramaticales) y una semntica precisa (significado), de manera anloga aun lenguaje natural como el castellano. El uso de tal lenguaje hace relativamente fcil el paso decodificacin final del algoritmo (esto es, la traduccin a un lenguaje de programacin).

    La ventaja del pseudocdigo es que le permite al programador concentrarse en la lgica y en lasestructuras de control del algoritmo que quiere disear, sin preocuparse de las reglas de unlenguaje especfico de programacin, que normalmente incluyen infinidad de detalles. Estambin fcil modificar el pseudocdigo si se descubren errores o anomalas en la lgica delprograma; adems de lo anterior, es fcil su traduccin a lenguajes de programacin comoPascal, C, Javao Basic.

    El pseudocdigo utiliza palabras reservadas (similares a sus homnimos en los lenguajes deprogramacin) para representar las acciones y estructuras de control, tales como inicio, fin, si-entonces-sino, mientras, etc.

    El formato general de un algoritmo expresado mediante pseudocdigo es el siguiente:

    [][constantes ][variables ][]

    procedimiento principal()[constantes ][variables ]inicio

    /*bloque de instrucciones*/fin_procedimiento

    Los detalles completos de este formato no son importantes a esta altura del libro y cada uno deellos ser cubierto adecuadamente en prximos captulos. Por ahora basta con saber que en lasprimeras secciones se definen las constantes y variables que se usan dentro del algoritmo;posteriormente se especifican algunos procedimientos y funciones; y finalmente, se escriben lasinstrucciones que conforman el algoritmo principal.

    Tambin conviene mencionar que la informacin que se manipula dentro de un algoritmo seagrupa en conjuntos llamados TIPOS. Hay unos tipos predefinidos en el pseudocdigo: entero(conjunto de valores enteros), real (conjunto de valores reales), caracter (conjunto de

  • 5/26/2018 Intro a Programacion

    18/40

    18

    smbolos representables en el computador) y booleano (los dos valores lgicos: falso yverdadero).

    22..44.. PPRROOBBLLEEMMAASS

    Un algoritmo tiene sentido cuando constituye una forma efectiva de resolver un problemainteresante. Se tiene un problema cuando se desea encontrar uno o varios objetos desconocidos(ya sean estos nmeros, smbolos, diagramas, figuras, u otras cosas), que cumplen condicioneso relaciones, previamente definidas, respecto a uno o varios objetos conocidos. De esta manera,solucionar un problema es encontrar los objetos desconocidos de dicho problema.

    22..44..11.. CCllaassiiffiiccaacciinnddeepprroobblleemmaass

    Los problemas se clasifican, de acuerdo a la existencia de una solucin, en solubles, no solublese indecidibles.

    Un problema se dice SOLUBLE si se sabe de antemano que existe una solucin para l. Un problema se dice INSOLUBLEsi se sabe que no existe una solucin para l. Un problema se dice INDECIDIBLEsi no se sabe si existe o no existe solucin algortmica

    para l.

    A su vez, los problemas solubles se dividen en dos clases: los algortmicos y los no algortmicos.

    Un problema se dice ALGORTMICO3si existe un algoritmo que permita darle solucin. Un problema se dice NO ALGORTMICO si no es susceptible del resolver mediante un

    algoritmo.

    22..44..22.. EEjjeemmpplloossddeepprroobblleemmaass

    PROBLEMA UNO: Sean P=(a,b) y Q=(c,d) los puntos que definen un segmento de recta.Encontrar un segmento de recta perpendicular al anterior, que pase por su punto medio.

    ELEMENTOS CONOCIDOS Los puntos Py Q.

    ELEMENTOS DESCONOCIDOS Un segmento de recta.

    CONDICIONESEl segmento de recta debe pasar por el punto medio entre Py Q, y debe

    ser perpendicular a la recta trazada entre Py Q

    TIPO DE PROBLEMASoluble-algortmico. Es soluble por que ya existe un algoritmo que permite

    encontrar la solucin del mismo. Este algoritmo fue presentado en laseccin anterior.

    PROBLEMA DOS:De las siguientes cuatro imgenes, cul es la ms llamativa?

    3En este curso solo se tratarn problemas algortmicos

  • 5/26/2018 Intro a Programacion

    19/40

    19

    ELEMENTOS CONOCIDOS Las cuatro imgenes.

    ELEMENTOS DESCONOCIDOS La imagen ms llamativa.

    CONDICIONES La imagen buscada es la ms llamativa para quien resuelve el problema.

    TIPO DE PROBLEMA

    Soluble-no algortmico. La solucin de este problema existe y es alguna delas cuatro imgenes presentadas; pero no existe un algoritmo que permitadeterminar cul es, ya que el concepto de imagen ms llamativa no est

    definido de manera precisa.

    PROBLEMA TRES:Un granjero tiene cincuenta animales entre conejos y gansos. Si la cantidadde patas de los animales es ciento cuarenta, cuntos conejos y cuntos gansos tiene elgranjero?

    ELEMENTOS CONOCIDOSLa cantidad total de animales (50), cantidad de patas totales (150),nmero de patas de los gansos y nmero de patas de los conejos.

    ELEMENTOS DESCONOCIDOS La cantidad de conejos y la cantidad de gansos.

    CONDICIONESLa suma de los conejos y los gansos es igual a 50. La suma de las patas de

    los conejos y de los gansos es igual a 150.

    TIPO DE PROBLEMA Soluble-algortmico.

    PROBLEMA CUATRO:Existe, en la expansin decimal de , una secuencia de tamao nparaun nmero natural ndado?

    ELEMENTOS CONOCIDOS El nmero n.

    ELEMENTOS DESCONOCIDOS Un valor de verdad (falso o verdadero).

    CONDICIONES Verdadero si existe en la expansin decimal de una secuencia de tamaondel nmero n, para todo nmero natural n, Falso en otro caso.

    TIPO DE PROBLEMA

    Indecidible. Este problema es indecidible por que si en el primer milln dedgitos de no se encuentra una secuencia como la buscada, nadagarantiza que en el siguiente milln de dgitos no se encuentre tal

    secuencia. Pero si no se encuentra en el segundo milln, nada garantizaque no se encuentre despus, o no se encuentre. De esta manera no se

    puede decidir si existe o no existe tal secuencia.

  • 5/26/2018 Intro a Programacion

    20/40

    20

    PROBLEMA CINCO: Realizar la suma de dos nmeros naturales

    ELEMENTOS CONOCIDOS Dos nmeros naturales

    ELEMENTOS DESCONOCIDOS Un nmero natural

    CONDICIONES El nmero desconocido debe ser igual a la suma de los dos nmeros dados.

    TIPO DE PROBLEMASoluble-algortmico. Es soluble por que ya existe un algoritmo que permite

    encontrar la solucin del mismo. Este algoritmo fue presentado en laseccin anterior. Adems, es un algoritmo que se ensea en la primaria.

    PROBLEMA SEIS:Una partcula se mueve en el espacio de manera aleatoria, si en el instantede tiempo tse encuentra en la posicin x, cul ser la posicin exacta de dicha partcula 10segundos despus?

    ELEMENTOS CONOCIDOS Posicin en el instante de tiempo t, lapso de tiempo transcurrido (10 Seg.).

    ELEMENTOS DESCONOCIDOS Una posicin en el espacio.

    CONDICIONES La partcula se mueve en el espacio de manera aleatoria.

    TIPO DE PROBLEMAInsoluble. No se puede solucionar por que no existe forma de predecir la

    posicin de la partcula, pues su movimiento es aleatorio, es decir, semueve de manera arbitraria.

    PROBLEMA SIETE: Un robot debe trasladar una pila (montn) de cajas desde un punto A hastaun punto C usando, si lo requiere, un punto intermedio B. Las cajas inicialmente estn todas enel punto A, ordenadas como muestra la siguiente figura. En cada traslado, el robot slo puedetomar una caja que est en la cima de un montn y llevarla a uno de los otros dos puntos.Adems, en ningn momento puede poner una caja sobre otra ms pequea. Mirando la figura,cmo puede el robot pasar las tres cajas apiladas en el lugar A, al lugar C.?

    ELEMENTOS CONOCIDOS Nmero de cajas, posicin inicial y posicin destino, nmero de lugares deapilamiento.

    ELEMENTOS DESCONOCIDOS Una secuencia de traslados.

    CONDICIONESLa secuencia de traslados solicitada debe respetar las reglas enunciadas:

    no se puede poner una caja sobre otra ms pequea, solo se puede tomaruna caja a la vez y solo la que este ms arriba en una pila de cajas.

    TIPO DE PROBLEMA Soluble-algortmico.

  • 5/26/2018 Intro a Programacion

    21/40

    21

    22..55.. PPRROOGGRRAAMMAACCIINNEESSTTRRUUCCTTUURRAADDAA

    La programacin estructurada es un estilo de programacin de los aos sesentas en el cual, la

    estructura de un algoritmo se hace tan clara como sea posible utilizando tres formas deorganizar sus instrucciones:

    1. Secuencia2. Seleccin3. Iteracin

    Estos tres tipos de estructuras de control pueden combinarse para producir programas decomputador tan complejos y largos como se quiera.

    La lgica y propsito de un algoritmo estructurado puede comprenderse al leerlo de arriba haciaabajo. Esto facilita que el creador de un programa lo comparta con otros programadores, lo d aconocer, o delegue en otros la labor de modificarlo.

    Un programa (o algoritmo) estructurado tiene segmentos o componentes claramente definidos.Adems, en cada componente est explcito un punto de inicio o entrada, y un punto definalizacin o salida. Tal segmento de denomina unprograma propio.

    22..55..11.. TTeeoorraaddeellaaPPrrooggrraammaacciinnEEssttrruuccttuurraaddaa

    Teorema de la estructura.

    Cualquier programa propio se puede escribir usando solamente las tres estructuras de control:secuencia, seleccin e iteracin.

    Un programa propio contempla dos propiedades bsicas:

    1. Tiene exactamente un punto de entrada y uno de salida2. Entre el punto de entrada y el de salida hay trayectorias que conducen a cada parte del

    programa; esto significa que no existen grupos de instrucciones que se ejecutenindefinidamente, ni instrucciones que jams se vayan a ejecutar.

    Las tres estructuras de control se ilustran a continuacin.

    Secuencia: Las instrucciones del programa se ejecutan en el orden en el cual ellas aparecen enel texto del programa como se indica en el siguiente diagrama:

    A B A B

    A y B pueden ser instrucciones bsicas o compuestas. A y B deben ser ambos programas propiosen el sentido ya definido de entrada y salida. La combinacin de A y B es tambin un programapropio y que tiene tambin una entrada y una salida.

  • 5/26/2018 Intro a Programacion

    22/40

    22

    Seleccin: permite escoger entre dos grupos de instrucciones, de acuerdo a la evaluacin de unacondicin o predicado lgico. Se conoce como estructura SIENTONCESSINO. En el siguientediagrama, P representa un predicado y, A y B representan grupos de instrucciones. Debe serclaro que si P es falso, se realiza el conjunto de instrucciones B; de lo contrario se realiza A. Lasflechas horizontales de ms a la izquierda y de ms a la derecha representan los puntos deentrada y salida, respectivamente.

    AV

    P

    FB

    Iteracin: Esta forma de control permite repetir varias veces una instruccin o conjunto deinstrucciones hasta cuando deje de cumplirse una condicin (predicado lgico).Se conoce como la estructura HACER MIENTRAS. En el siguiente diagrama, P representa unpredicado y A representa un grupo de instrucciones. Debe ser claro que siempre que P seaverdadero, se realiza el conjunto de instrucciones A; de lo contrario se termina la iteracin. Lasflechas horizontales de ms a la izquierda y de ms a la derecha representan los puntos deentrada y salida, respectivamente.

    AV

    FP

    Algunos de los smbolos utilizados en las estructuras para conformar los diagramas de flujo son:

    Representa el inicio y el fin de un programa

    Entrada de datos(lectura)

    Salida de datos (impresin)

    Proceso (cualquier tipo de operacin)

  • 5/26/2018 Intro a Programacion

    23/40

    23

    Indicador de direccin o flujo

    22..66.. EEJJEERRCCIICCIIOOSS

    22..66..11.. EEjjeerrcciicciiooss ddeePPrroobblleemmaass

    Para los siguientes problemas, determine las variables conocidas, desconocidas, las condicionesy el tipo de problema. Para aquellos problemas algortmicos desarrollar adicionalmente unalgoritmo que permita encontrar una solucin.

    1. Se tienen dos jarras (Ay B) de capacidades 3 y 7 litros respectivamente, sobre las cuales sepueden efectuar las siguientes acciones: Llenar totalmente cualquiera de las dos jarras, vaciaruna de las dos jarras en la otra hasta que la jarra origen este vaca o hasta que la jarra destinoeste llena y vaciar el contenido de una jarra (este llena o no) en un sifn. Cmo se puede dejaren la jarra A un solo litro utilizando solamente las anteriores acciones?

    2.Es cierta o no es cierta la siguiente frase: Esta frase no es cierta.

    3.Si Juan tiene el doble de la edad de Pedro y la suma de las edades de los dos es 33 aos,Cuntos aos tiene Juan y cuntos tiene Pedro?

    4. Qu figura se forma al unir los puntos marcados con nmeros consecutivos con una lnea?

    5.Calcular de manera exacta el nmero de tomos del universo.

    6.Calcular el costo de una serie de productos comprados en el supermercado.

    7.Determinar quien es el mejor jugador de ftbol de toda la historia.

    8.Construir un barco de papel.

    22

    .

    .66

    .

    .22

    .

    . E

    Ejj

    ee

    rrcciicciiooss

    dd

    ee

    aa

    llgg

    oo

    rriittmm

    ooss

    Para los siguientes problemas construir un algoritmo que los solucione.

    EJERCICIO UNO:Buscar en el directorio telefnico, el nmero de:a. Jos Gonzlez Prezb. Pedro Gmez Bernal.c. Escribir un algoritmo que sirva para buscar a cualquier persona.

    EJERCICIO DOS: Calcular el nmero de das entre las fechas:a. Enero 17 de 1972 y Julio 20 de 1973b. Febrero 2 de 1948 y Agosto 11 de 1966

  • 5/26/2018 Intro a Programacion

    24/40

    24

    c. Escribir un algoritmo que sirva para calcular la cantidad de das entre dos fechascualesquiera.

    EJERCICIO TRES:Solicitar en prstamo algn libro de una biblioteca.

    EJERCICIO CUATRO: Hacer una caja de cartn con tapa de:a. 20 cm de largo, por 10 cm de ancho y 5 cm de alto.b. 10 cm de largo, por 30 cm de ancho y 15 cm de alto.c. Escribir un algoritmo que sirva para construir una caja de cartn con tapa de

    cualquier tamao.

    EJERCICIO CINCO:Construir un avin de papel.

    EJERCICIO SEIS: Calcular manualmente la divisin de cualquier par de nmeros naturales. Elresultado tambin debe ser un nmero natural. Escribir un algoritmo para calcular el residuo dela divisin.

    EJERCICIO SIETE: Un juego muy famoso entre dos nios es el de adivina mi nmero, el cualconsiste en que cada nio trata de adivinar el nmero pensado por el otro nio. Dicho nmerogeneralmente est entre 1 y 100. Las reglas del juego son las siguientes:

    a. Cada nio posee un turno en el que trata de averiguar el nmero del otro.b. En su turno el primer nio pregunta si un nmero que dice es el pensado por el

    segundo.c. Si el nmero que ha dicho el primer nio es el que pens el segundo, este ltimo

    debe informarle al primero que gan.d. Si el nmero no es el segundo nio debe decir si su nmero pensado es menor o

    mayor al que el primer nio dijo.e. Luego el segundo nio tiene su turno y de esta manera se van intercalando hasta

    que alguno de los dos gane. Desarrollar un algoritmo para jugar adivina mi nmero.

    EJERCICIO OCHO: Una balanza se encuentra en equilibrio cuando el producto de la cargaaplicada sobre el brazo derecho por la longitud de este brazo, es igual al producto de la cargaaplicada sobre el brazo izquierdo por la longitud de este otro brazo. Determinar si la balanza seencuentra en equilibrio si:

    a. La longitud del brazo izquierdo es 3 m, la del derecho es 2 m, la carga aplicada albrazo izquierdo es 5 Kg y la carga aplicada al derecho es 7 Kg.

    b. La longitud del brazo izquierdo es 4 m, la del derecho es 2 m, la carga aplicada albrazo izquierdo es 4 Kg y la carga aplicada al derecho es 4 Kg.

    c. Desarrollar un algoritmo que sirva para cualquier conjunto de valores para laslongitudes de los brazos y las cargas aplicadas.

    EJERCICIO NUEVE: Pasar un nmero entero positivo de base a diez a binario. Hacer tambinun algoritmo que haga la transformacin contraria.

  • 5/26/2018 Intro a Programacion

    25/40

    25

    33.. MMEETTOODDOOLLOOGGAADDEESSOOLLUUCCIINNDDEEPPRROOBBLLEEMMAASSCCOONNEELLCCOOMMPPUUTTAADDOORR

    33..11.. OOBBJJEETTIIVVOO

    El objetivo de este captulo es : lograr que el lector entienda cul es la metodologa que se usaren la solucin de los problemas. Para esto, se explica primero cules son los pasos de lametodologa, y luego se describen algunos ejemplos de su aplicacin a pequeos problemas deprogramacin.

    33..22.. IINNTTRROODDUUCCCCIINN

    A travs del tiempo, y mediante la prctica constante, se ha desarrollado en ingeniera unconjunto muy amplio de mtodos o formas estructuradas de proceder ante ciertas clases deproblemas que se presentan con frecuencia. Este conjunto de mtodos disponibles para afrontarun problema se llama metodologa.

    En ingeniera de sistemas se han venido depurando varias metodologas para programar

    computadores de manera adecuada y efectiva. Estas metodologas no se deben suponer comofrmulas mgicas, sino ms bien como formas de proceder que, seguidas con disciplina,conducen a buenos resultados, en la mayora de los casos. Programar sin metodologa setraduce en invertir mucho ms tiempo del necesario, en sufrir muchos dolores de cabeza y muyseguramente, en obtener resultados de baja calidad.

    El desarrollo de un programa que resuelva un problema es generalmente un reto intelectualimportante. Desde hace ms o menos 50 aos se estn haciendo programas para resolverproblemas de diversa ndole. Este ejercicio continuado y prolfico ha dado lugar a la formulacinde metodologas de programacin. En este libro se sigue una metodologa sencilla que se esperaque el estudiante adopte como forma de proceder para afrontar la mayora de los problemas deprogramacin a que se enfrente.

    Esta metodologa es un conjunto o sistema de mtodos, principios y reglas que permiten

    enfrentar de manera sistemtica el desarrollo de un programa que resuelva un problemaalgortmico. Esta metodologa se estructura como una secuencia de pasos que parten de ladefinicin del problema y culminan con un programa que lo resuelve.

    A continuacin se presentan de manera general los pasos de una metodologa:

    Anlisis del problema Con la cual se busca comprender totalmente el problema a resolver.

    Especificacin del problemaCon la cual se establece de manera precisa cules son los datos de

    entrada, los de salida y qu condiciones debe cumplir cada uno de ellos.

    Diseo del algoritmoEn esta etapa se construye un algoritmo que cumpla con la especificacin

    formulada en el paso anterior

    Problema

    Metodologa

    Programa

  • 5/26/2018 Intro a Programacion

    26/40

    26

    Prueba del algoritmo yrefinamiento

    Consiste en comprobar experimentalmente que el algoritmo funciona bien ycorregir los posibles errores que se detecten.

    Codificacin Se traduce el algoritmo a un lenguaje de programacin.

    Prueba y Verificacin Se realizan pruebas del programa implementado para determinar su

    efectividad en la resolucin del problema.

    NNOOTTAA::LLOOSSEEJJEEMMPPLLOOSSIINNCCLLUUIIDDOOSSEENNEESSTTAASSEECCCCIINNEENNPPSSEEUUDDIICCDDIIGGOOSSOONNSSOOLLOOPPAARRAAIILLUUSSTTRRAARRLLAAMMEETTOODDOOLLOOGGAA,,NNOOSSEEEESSPPEERRAAQQUUEEEELLEESSTTUUDDIIAANNTTEELLOOSSCCOOMMPPRREENNDDAA

    33..33.. AANNLLIISSIISSDDEELLPPRROOBBLLEEMMAA

    Es una perogrullada, pero hay que decirla: antes de poder dar solucin adecuada a unproblema hay que entenderlo completamente. En el primer paso de la metodologa elprogramador debe alcanzar claridad acerca de lo que le estn pidiendo resolver. Concretamente,debe determinar de manera clara y concisa lo siguiente:

    1. Los objetos, datos conocidos o datos de entrada. Aquellos elementos de informacin

    total o parcial que se encuentran en el enunciado del problema, y que son tiles en labsqueda de los objetos desconocidos.

    2. Los objetos, datos desconocidos o datos de salida. Aquellos datos que el algoritmo debeentregar como solucin, al final de su ejecucin.

    3. Las condiciones. De una parte estn las condiciones que deben cumplir los datos deentrada. De otra parte estn las propiedades que debern cumplir los datos de salida,que son normalmente relaciones con los datos de entrada. Estas relaciones establecenuna dependencia de los datos de entrada.

    Ejemplo.Sean los puntos P=(a,b)y Q=(c,d)que definen una recta, encontrar un segmento derecta perpendicular a la anterior que pase por el punto medio de los puntos dados.

    OBJETOS CONOCIDOS Los puntos Py Q.

    OBJETOS DESCONOCIDOS Un segmento de recta

    CONDICIONESLos puntos P y Q son diferentes

    El segmento de recta pedido debe pasar por el punto medio entre Py Q, ydebe ser perpendicular a la recta trazada entre Py Q.

    33..44.. EESSPPEECCIIFFIICCAACCIIOONNDDEELLPPRROOBBLLEEMMAA

    Despus de entender totalmente el problema a resolver (lo cual se consigue con la etapa deanlisis), se debe realizar su especificacin que corresponde a una formalizacin del anlisis. Laespecificacin de un problema se hace mediante una descripcin clara y precisa de:

    1. Las entradas que recibir el algoritmo pedido. Las entradas corresponden a los objetosconocidos. Se debe indicar la descripcin, cantidad y tipo de las mismas.

    2. Las salidas que el algoritmo pedido proporcionar. Las salidas corresponden a los objetosdesconocidos del problema. Se debe indicar la cantidad, descripcin y tipo de lasmismas.

    3. La dependencia que mantendrn las salidas obtenidas con las entradas recibidas. Poruna parte, se debe hacer claridad sobre las condiciones o propiedades que deben cumplirlos datos de entrada. De otro lado, se describe claramente como dependen las salidas delas entradas.

    Esta descripcin puede estar acompaada de un diagrama de caja negra como el de la siguientefigura. En ella, a cada entrada y salida se le pone un nombre adecuado y el algoritmo pedido se

  • 5/26/2018 Intro a Programacion

    27/40

    27

    representa con una caja, para indicar que no se conoce, por ahora, nada acerca de su estructurainterna.

    Ejemplo 1.Construir un algoritmo que calcule el promedio de 4 notas.

    ESPECIFICACION:

    Entradas N1,N2,N3,N4(notas parciales) de tipo Real.

    Salidas Final (nota final) de tipo Real.

    Condiciones

    N1,N2,N3,N4deben ser nmeros que corresponden a notas vlidas

    DIAGRAMA DE CAJA NEGRA:

    Ejemplo 2.Construir un algoritmo que determine el mayor de tres nmeros enteros dados.

    ESPECIFICACIN:

    Entradas A,B y C. Tres nmeros de tipo Real.

    Salidas Mayor (valor mayor) de tipo Real.

    Condiciones

    Mayor debe ser el valor mximo de A, B y C.Formalmente:

  • 5/26/2018 Intro a Programacion

    28/40

    28

    DIAGRAMA DE CAJA NEGRA:

    Ejemplo 3.Determinar si un punto est dentro de un crculo.

    ESPECIFICACIN:

    Entradas

    Cx (abscisa del centro del crculo) de tipo Real.Cy (ordenada del centro del crculo) de tipo Real.r (radio del crculo) de tipo Real.Px (coordenada x del punto) de tipo Real.Py (coordenada y del punto) de tipo Real.

    SalidasPertenecede tipo Booleano, (indica si el punto est dentro o fuera del

    crculo).

    Condiciones

    r>0 (ojo!: condicin sobre un dato de entrada)Pertenece = Verdadero, si el punto est dentro del crculo.

    Pertenece = Falso, si el punto est fuera del crculo.Formalmente:

    DIAGRAMA DE CAJA NEGRA:

    33..55.. DDIISSEEOOEESSTTRRUUCCTTUURRAADDOODDEEAALLGGOORRIITTMMOOSS

    En la fase de diseo del algoritmo se especifica un conjunto de instrucciones capaz de obtenerdatos de salida correctos, a partir de datos vlidos de entrada. Normalmente, un algoritmo tieneuna estructura no trivial, es decir, pueden identificarse en l, partes o componentes muyclaramente delimitados que interactan durante la ejecucin. Una primera estrategia paradisear el algoritmo que solucione el problema consiste en identificar los componentes de esa

  • 5/26/2018 Intro a Programacion

    29/40

    29

    estructura, para luego disearlos individualmente, y por ltimo ensamblarlos en el programacompleto. Esta forma de proceder se denomina diseo top-downporque consiste en solucionarun problema dividindolo en otros ms pequeos, solucionando esos problemas resultantes yfinalmente, ensamblando las soluciones de esos subproblemas para obtener la solucin completadel problema original.

    33..55..11.. DDiivviissiinn

    Consiste en identificar subprocesos dentro del proceso completo que debe llevar a cabo elalgoritmo buscado. Est subdivisin se realiza de manera repetida hasta llegar al nivel deinstruccin bsica. La siguiente figura ilustra el modo de proceder.

    En la etapa final de subdivisin, los problemas a resolver son tan sencillos que ya no se puedendividir ms, sino que simplemente se pueden resolver usando las instrucciones bsicasdisponibles en el pseudocdigo: asignacin, lectura o escritura, secuencia, seleccin, repeticin.

    Problema: Realizar un programa que lea una serie de n nmeros enteros y determine si lasuma de los mismos es un cuadrado perfecto.

    ESPECIFICACIN DEL PROBLEMA

    Entradasn (nmero de datos a considerar)

    dato1, dato2, ..., daton(los nmeros enteros)

    SalidasEs_cuadradode tipo Booleano, (indica si la suma de los datos de entrada

    es un cuadrado perfecto).

    Condiciones

    n>0Es_cuadradotiene valor verdadero si la suma de los n nmeros es uncuadrado perfecto. De lo contrario, tendr valor falso.

    Diagrama de caja negra:

  • 5/26/2018 Intro a Programacion

    30/40

    30

    DISEO DEL ALGORITMO:

    El algoritmo que soluciona este problema es muy sencillo. Sin embargo, para el propsito deilustrar la tcnica de subdivisiones sucesivas (diseo top-down o refinamiento a pasos) serealizan tres etapas de divisin, cada una de las cuales tiene un diagrama de flujo asociado.

    En la primera fase de divisin se considera que el algoritmo consiste, grosso modo, en leer losdatos de entrada, sumar los n nmeros, y determinar si el resultado de la suma es un cuadradoperfecto.

    Primera Iteracin

    En la segunda fase de divisin se hace explcito que el proceso de lectura de los datos consisteen (i)obtener el nmero de enteros que se van a procesar y en (ii)leer cada uno estos nenteros. Adicionalmente, se aclara de qu manera se verificar que la suma es un cuadradoperfecto (se comprueba si la raz cuadrado es un entero). Por ltimo se deja especificado lo queel algoritmo escribir como resultado final.

  • 5/26/2018 Intro a Programacion

    31/40

    31

    Segunda Iteracin

    En la tercera fase de divisin se logra describir todo las acciones del algoritmo con instruccionesbsicas. En este punto ya no es necesario ni posible hacer ms subdivisiones. El algoritmo estdiseado completamente.

    Aunque el lector no entienda todos los detalles del lenguaje con el cual se describe el algoritmo,se le invita a entender la lgica del mismo.

  • 5/26/2018 Intro a Programacion

    32/40

    32

    Tercera Iteracin (final en este ejemplo)

  • 5/26/2018 Intro a Programacion

    33/40

    33

    En seguida se muestra la traduccin del diagrama de flujo anterior a pseudocdigo. Nuevamentese aclara que los detalles de esta forma de describir algoritmos se estudian en los prximoscaptulos.

    Pseudocdigo

    procedimiento principal()variablesn :enterosuma:enterodato :enteroi :enteroinicio

    escribir(Nmero de enteros a considerar:)leer(n)suma := 0Para(i:=1 hastan)hacer

    escribir(ingrese un nmero entero:)leer( dato)suma:= suma+ dato

    fin_parasi(piso( raiz2( suma) ) = raiz2(suma))Entonces

    escribir(La suma de los nmeros es un cuadrado perfecto)sino

    escribir(La suma de los nmeros no es un cuadrado perfecto)fin_si

    fin_procedimiento

    33..55..22.. DDeeffiinniicciinnddeeaabbssttrraacccciioonneess

    Durante el proceso de divisin es posible identificar qu secuencias de pasos se utilizan ms deuna vez en diferentes partes del proceso completo. Los lenguajes de programacin brindan laposibilidad de escribir solamente una vez estas secuencias de pasos, mediante el uso de unasabstracciones o subprogramas llamados procedimientos y funciones. Lo que debe hacer elprogramador es:

    Recolectar estas secuencias de pasos en funciones y procedimientos, segn sea el caso. Documentar cada funcin y procedimiento especificando claramente:

    o El propsito de la funcin (o procedimiento).o El nombre, tipo y propsito de cada argumento.o El resultado que produce ese subprograma (o efectos laterales).

    El uso de funciones y procedimientos evita tener que escribir ms de una vez las secuencias depasos que se repiten. Pero lo ms importante es que permiten describir ms claramente la lgicadel programa.

    Problema:Desarrollar un programa que determine si un nmero dado se encuentra en algunode dos conjuntos finitos de enteros.

    Recuerde que lo primero que recomienda la metodologa propuesta es entender completamenteel problema y hacer su especificacin.En este ejercicio se usan arreglos para guardar los dos conjuntos de nmeros. El uso de arreglospara representar conjuntos, requiere que se realicen ciertas validaciones que garanticen lavalidez como conjunto, por ejemplo, que en el arreglo no est un mismo elemento dos veces (enun conjunto un elemento est solo una vez). Los arreglos son un tipo de estructura de datos que

  • 5/26/2018 Intro a Programacion

    34/40

    34

    se cubre en un captulo posterior. Teniendo en cuenta estos razonamientos, se puede especificarel problema:

    ESPECIFICACIN DEL PROBLEMA

    Entradas dos conjuntos, A y B; y el nmero entero.

    Salidasbandera de tipo Booleano, (indica si el nmero est o no en

    alguno de los dos conjuntos).

    Condicionessi el entero dado est en alguno de los conjuntos dados el valor deverdad de bandera ser verdadero. Ser falso en caso contrario.

    Diagrama de caja negra:

    donde,

    A: es un conjunto de enteros.B: es un conjunto de enteros.elemento: es el entero a comprobar si est en alguno de los conjuntos.bandera : es un booleano que indica si el elemento est o no est.

    Diseo del algoritmo

    Primera iteracin. De manera general, el algoritmo debera tener los siguientes pasos

    Inicio1.Leer los dos conjuntos.2. Leer entero.3.Determinar si el entero est en alguno de los dos conjuntos4. Imprimir el resultado.Fin

    Segunda iteracin. En esta segunda fase se aclara en qu consiste leer los conjuntos.

    1. Leer primer conjunto consiste en:1.1.Leer un dato.1.2.Determinar si el elemento no est en el primer conjunto.1.3.Si no est, agregar el dato al primer conjunto. Si ya est, mostrar un mensaje de error.1.4. Preguntar si el usuario desea ingresar un nuevo elemento al primer conjunto.1.5. Si el usuario desea ingresar un nuevo elemento volver a 1.1. Si no, continuar.2. Leer segundo conjunto se divide en:

  • 5/26/2018 Intro a Programacion

    35/40

    35

    2.1. Leerun dato.2.2. Determinar si el elemento no est en el segundo conjunto.2.3. Si no est, agregar el dato al segundo conjunto. Si ya est, mostrar un mensaje de error.2.4. Preguntar si el usuario desea ingresar un nuevo elemento al segundo conjunto.2.5. Si el usuario desea ingresar un nuevo elemento volver a 2.1. Sino, continuar.3. Leer entero.

    4.Determinar si el entero est en el primer conjunto.5.Determinar si el entero est al segundo conjunto.6. Imprimir el resultado.

    Tercera Iteracin. Se utiliza pseudocdigo para especificar todas las operaciones necesarias.

    procedimiento principal()variables

    i, j, n, m, elemento :entero

    continuar :carcter

    bandera :booleano

    A :arreglo [100] deentero

    B :arreglo [100] deentero

    /* el codigo siguiente lee el conjunto A*/

    Inicion := 0

    escribir(Desea ingresar elementos al conjunto A (S/N):)

    leer(continuar)

    mientras(continuar= S | continuar = s)hacer

    escribir(Ingrese el elemento al conjunto A:)

    leer(elemento)

    /* el codigo siguiente prueba si el elemento esta en el conjunto A */

    i := 0

    mientras(i

  • 5/26/2018 Intro a Programacion

    36/40

    36

    leer(continuar)

    fin_mientras

    /* el codigo siguiente lee un elemento a probar */

    escribir(Ingrese el dato que desea buscar en los conjuntos)

    leer(elemento)

    /* el codigo siguiente prueba si el elemento esta en el conjunto A */bandera:= falsoi := 0mientras(i

  • 5/26/2018 Intro a Programacion

    37/40

    37

    si_nobandera := verdadero

    fin_siretornarbanderafin_funcion

    Segundo, el procedimiento leer_conjuntoes un subprograma que se define as:

    Procedimientoleer_conjunto(varA :arreglo[100] de entero,varn :entero)variables

    i :enteroelemento :enterocontinuar :caracter

    inicio/* el codigo siguiente lee el conjunto */

    n := 0escribir(Desea ingresar mas elementos al conjunto (S/N)?)leer(continuar)mientras (n

  • 5/26/2018 Intro a Programacion

    38/40

    38

    Se puede apreciar la reduccin de lneas de cdigo del programa y la facilidad de lectura de cadauno de estos algoritmos (funcin, procedimiento y algoritmo principal), con respecto al algoritmoinicial realizado sin abstraccin. Se deja al lector la escritura del programa completo, utilizandolas reglas descritas en esta seccin.

    33..66.. CCOODDIIFFIICCAACCIIOONN

    Cuando ya se ha diseado completamente el algoritmo y se tiene escrito en algn esquema derepresentacin (pseudo-cdigo o diagrama de flujo), el siguiente paso es codificarlo en ellenguaje de programacin definido para tal fin.

    En este momento es cuando el programador interacta con el computador mediante laherramienta de software de que disponga para codificar en el lenguaje seleccionado.

    EJEMPLO.Tmese como base el pseudocdigo desarrollado en la seccin anterior. El programaen C++ para este pseudocdigo sera:

    #include

    bool pertenece(intA[100,intn,inte){

    boolbandera;inti;

    /* el codigo siguiente prueba si el elemento esta en el conjunto */i = 0;

    while(>i

  • 5/26/2018 Intro a Programacion

    39/40

    39

    };cout> continuar;

    };}

    void main(){intn, m, elemento;intA[100];intB[100];

    /* el codigo siguiente lee el conjunto A */leer_conjunto( A,n);

    /* el codigo siguiente lee el conjunto B */leer_conjunto( B, m)

    /* el codigo siguiente determina si el elemento esta en alguno de los dos conjuntos */

    if(pertenece(A, n, elemento) || pertenece(B, m,elemento) ){cout

  • 5/26/2018 Intro a Programacion

    40/40

    40

    INSTRUCCIN entrada menor suma Pantallaleer (entrada) 10menor := entrada 10suma :=0 0suma :=suma + entrada 10

    leer(entrada) 7menor := entrada 7suma:=suma + entrada 17leer( entrada) 9suma :=suma + entrada 26leer(entrada) 0escribir(valor menor:) Valor Menorescribir(menor) 7escribir(Suma:) Suma:escribir(suma) 26

    33..77.. EEJJEERRCCIICCIIOOSS

    En cada uno de los siguientes problemas, use la metodologa presentada en este captulo pararesolverlo. Los algoritmos los puede especificar usando lenguaje natural (espaol).

    EJERCICIO UNO: Construir un algoritmo que determine si un nmero dado es primo.

    EJERCICIO DOS: Construir un algoritmo que determine si dos nmeros son primos relativos ono. Dos nmeros son primos relativos si no tienen un divisor comn mayor que 1.

    EJERCICIO TRES: Construir un algoritmo que determine si una fecha, especificada mediantetres nmeros (da, mes y ao), es una fecha vlida o no.

    EJERCICIO CUATRO: Construir un algoritmo que lea un entero y escriba todos sus divisorespropios, en orden decreciente.

    EJERCICIO CINCO: Construir un algoritmo que lea las longitudes de tres segmentos de recta ydetermine si con ellos se puede construir un tringulo.

    EJERCICIO SEIS: Un rectngulo queda determinado si se conocen las coordenadas de suvrtice inferior izquierdo, su ancho y su largo. Construir un algoritmo que lea los datosrelacionados con dos rectngulos y determine si estos se intersectan o no.