curso de algoritmos y estructura de datos - unidad i y ii - the oliztik

Upload: art1110

Post on 08-Jul-2015

3.991 views

Category:

Documents


0 download

TRANSCRIPT

Este pequeo compendio va dirigido a los estudiantes de la Facultad de Ingeniera Industrial y de Sistemas de la Universidad Nacional de Ingeniera que se encuentren llevando el curso de Algoritmos y Estructura de Datos.

En el tiempo que llevo en la universidad he podido notar que algoritmos y estructura de datos es uno de los cursos con el mayor nmero de desaprobados y creo que esta situacin debera mejorar. Es por esto que he elaborado este compendio de la primera parte del curso que contiene los temas hasta la primera prctica calificada (conceptos bsicos, los datos simples, y las estructuras de control). Los ejercicios presentados aqu fueron extrados de distintas fuentes: Algunos corresponden a los resueltos en clase, prcticas calificadas, libros, como tambin de un texto denominado cuaderno de algoritmo que encontr en el siguiente enlace www.ingfiis.tk en la seccin 2do ciclo y de apuntes que he realizado mientras llev el curso. La teora presentada en este compendio es resumida y se enfoca en la parte prctica, as que si quisieran profundizar en el tema les recomendara el libro Fundamentos de Programacin, algoritmos y estructura de datos y objetos de Luis Joyanes Aguilar.

Todos los ejercicios de este texto deben de ser comprendidos y entendidos perfectamente. Al principio tal vez les parezcan complicados o confusos (eso nos ha sucedido a todos en algn momento) pero mientras ms practiquen irn dominndolos. Como ya les haba mencionado, por ahora solo les puedo presentar la primera parte del curso. Luego de esta primera parte estudiarn temas como arreglos, cadenas, registros, etc... en los que de todas maneras seguirn haciendo uso de las tcnicas ya aprendidas en este texto. Es por esto que creo que el dominio de este compendio es importante.

Algunas sugerencias: Hasta la fecha, los profesores que regularmente ensean el curso son: Inga, Acosta, Grimanesa y Crdova. La mayora de estudiantes que llevaron el curso con la profesora Inga comentan que es ordenada y explica muy bien, aunque ltimamente me han comentado que ha comenzado a explicar mediante diapositivas. El profesor Acosta es ordenado, es puntual en la revisin de los exmenes, es muy estricto en su calificacin, avanza el curso conforme el cronograma pero no explica muy bien y tiene la costumbre de realizar problemas difciles cuando debera comenzar resolviendo ejercicios sencillos para poder entender lo esencial del asunto. La profesora Grimanesa es bien organizada en su clase pero eso ocasiona que muchas veces se retrase, adems es flexible en su calificacin, generalmente, los alumnos que se matriculan en su seccin son repitentes (no se ofendan) que ya tienen la base del curso y que desean aprobar. El profesor Crdova es un ingeniero con mucha experiencia y domina la materia, pero sus clases en la pizarra son poco ordenadas.

Por otro lado deben de saber que el formato que utilizarn para la resolucin de los problemas variar segn la seccin en donde se encuentren matriculados. Por qu? Porque para la resolucin de los problemas

no existe un formato estndar, sino que cada persona tiene un estilo propio, as que debern aprender el estilo usado por sus profesores.

Para la resolucin de los problemas de este texto usar el formato del profesor Acosta porque es un estilo muy completo y fcil de entender. Muy aparte del formato tambin deben tener presente que un mismo problema puede resolverse de diferentes maneras, en la mayora de los ejemplos de este texto solo se presenta una forma de resolucin, pero eso no quiere decir que sea la nica.

Si quisieran colaborar con ejercicios interesantes, resoluciones de prcticas y exmenes pueden escribirme al correo electrnico [email protected]. Espero recibir toda clase de aportes as como comentarios, correcciones y crticas para que entre todos podamos ir mejorando este texto que espero sea de mucha ayuda.

The Oliztik 25 de Agosto 2011

LISTADO DE TEMASUNIDAD I INTRODUCCIN 1. ALGORITMOS 1.1. ALGORITMOS EN LA COMPUTACIN 1.2. FASES EN LA RESOLUCIN DE PROBLEMAS 1.2.1 ANLISIS DEL PROBLEMA 1.2.2 DISEO DE LA SOLUCIN 1.3 CARACTERSTICAS DE UN ALGORITMO 1.3.1 CARACTERSTICAS NECESARIAS DE UN ALGORITMO 1.3.2 CARACTERSTICAS RECOMENDABLES DE UN ALGORITMO 1.4. TCNICAS DE REPRESENTACIN DE UN ALGORITMO 1.4.1 DIAGRAMA DE FLUJO 1.4.2 PSEUDOCDIGO 2. CONCEPTOS BSICOS 2.1. DATO E INFORMACIN 2.1.1. DATO: 2.1.2. INFORMACIN: 2.2. ATRIBUTOS DE UN DATO 2.2.1 PRIMER ATRIBUTO: TIPO 2.2.2. SEGUNDO ATRIBUTO: VALOR 2.2.3. TERCER ATRIBUTO: IDENTIFICADOR 3. CONSTANTES Y VARIABLES 3.1 CONSTANTES 3.2 VARIABLES 3.3 LA VARIABLE COMO UNA POSICIN DE MEMORIA 3.3.1 MEMORIA 3.3.2 DECLARACIN DE UNA VARIABLE 3.3.3. ACCESO A LA CELDA DE MEMORIA RESERVADA 4. OPERADORES Y EXPRESIONES 4.1 OPERADORES ARITMTICOS Y EXPRESIONES ARITMTICAS 4.1.1 OPERADORES ARITMTICOS 4.1.2 EXPRESIONES ARITMTICAS 4.2 OPERADORES RELACIONALES O DE COMPARACIN RELACIONALES 4.2.1 OPERADORES RELACIONALES 4.2.2 EXPRESIN RELACIONAL 4.3 OPERADORES LGICOS Y EXPRESIONES LGICAS 4.3.1 OPERADORES LGICOS 4.3.2 EXPRESIN LGICA 5. INSTRUCCIONES 5.1 INSTRUCCIN DE ASIGNACIN 5.1.1. Asignacin de una expresin

Y

EXPRESIONES

5.1.2 ERROR DE TIPO 5.2. INSTRUCCIONES DE ENTRADA Y SALIDA 5.2.1. INSTRUCCIN DE LECTURA 5.2.2. INSTRUCCIN DE ESCRITURA 5.2.3. PRESENTACIN DE DATOS EN PANTALLA 6. VARIABLES II 6.1. VARIABLE DE TRABAJO: 6.2. ACUMULADOR: 6.3. CONTADOR: 6.4 VARIABLE DE BANDERA: 6.5 VARIABLE AUXILIAR: 7. ESTRUCTURA DEL PSEUDOCDIGO 7.1. ENCABEZADO O CABECERA 7.2 SECCIONES 7.2.1. Seccin de creacin de Tipos 7.2.2. Seccin de declaracin de Constantes y Variables 7.2.3. Seccin para los subprogramas 7.3. ACCIONES EJECUTABLES UNIDAD II INTRODUCCIN 8. ESTRUCTURAS DE CONTROL DE FLUJO 8.1. ESTRUCTURAS SECUENCIALES 8.2. ESTRUCTURAS SELECTIVAS 8.2.1. ESTRUCTURA SELECTIVA SIMPLE: 8.2.2. ESTRUCTURA SELECTIVA DOBLE 8.2.3. ESTRUCTURA SELECTIVA MLTIPLE 8.3. ESTRUCTURAS REPETITIVAS 8.3.1. EL BUCLE CON NMERO DE REPETICIONES PREESTABLECIDO (ESTRUCTURA REPETITIVA DESDE) 8.3.2 BUCLE CON ENTRADA CONTROLADA (ESTRUCTURA REPETITIVA MIENTRAS).ESTRUCTURA CON PRE-TEST DE PRUEBA 8.3.3. BUCLE CON SALIDA CONTROLADA (ESTRUCTURA REPETITIVA REPETIR). ESTRUCTURA CON PRE-TEST DE PRUEBA

Curso de Algoritmos y Estructura de [email protected]

UNIDAD IINTRODUCCINUna de las muchas cosas importantes que van a aprender durante su etapa universitaria es la creacin de programas que permitan resolver problemas mediante el uso de una computadora. Un programa de computadora est constituido por un conjunto de instrucciones que estn ordenadas y enlazadas de forma coherente tal que al ejecutarse realizan una o varias tareas los cuales permiten la solucin de un problema en particular. Para llegar a crear un programa se realizan etapas previas: Anlisis del problema y el Diseo de la solucin. Estas dos fases son las que se estudiarn con mucho detalle durante el desarrollo del presente curso. El anlisis del problema consiste en comprender el problema y saber QU es lo que se espera obtener. Seguidamente el diseo de la solucin consiste en construir la forma CMO se resolver el problema, es decir, realizar el procedimiento necesario para obtener la solucin. Este procedimiento est constituido por un conjunto de pasos lgicos a lo que se le denomina algoritmo. Los algoritmos pueden representarse de varias maneras, ya sea mediante el uso de frmulas, diagramas de flujo, diagramas Nassi Schneiderman o pseudocdigo. Este ltimo ser la representacin usada en el curso. El pseudocdigo como su mismo nombre lo indica es un cdigo falso que luego deber ser traducido a un lenguaje de programacin. El pseudocdigo no puede ejecutarse en una computadora, su escritura se realiza en un papel ya que solo es un boceto del cdigo original. Una vez finalizado el diseo de la solucin (el algoritmo representado mediante pseudocdigo) se procede recin a la fase de codificacin en un lenguaje de programacin. codificacin se estudia con detalle en los ciclos siguientes. EN CONCLUSIN Por ahora el trabajo ser a base de lpiz y papel, y la preocupacin estar principalmente en la lgica de los procedimientos y en la adopcin de algn formato o estilo (ordenado) para el diseo de los algoritmos. Por lo tanto, por el momento no ser necesario aprender la sintaxis de ningn lenguaje de programacin en particular, sino lo que se aprender ser a escribir en pseudocdigo el cual tiene la ventaja de ser independiente pues puede implementarse en cualquier lenguaje de programacin. (En algunos con ms facilidad y en otros haciendo ligeras modificaciones.) Tener muy claro lo siguiente: SIN ALGORITMO NO HAY PROGRAMA !! Objetivo del Curso: Aprender a pensar como un programador. La fase de

Pgina 1

[email protected] Por qu? Porque como futuros programadores, nuestra manera de pensar tiene que ser diferente a la de las dems personas al momento de resolver un problema computable.

1. ALGORITMOSPodemos decir que un algoritmo es un conjunto limitado de pasos lgicos que permiten resolver un problema. Las personas continuamente seguimos pasos o desarrollamos una serie de acciones para resolver algn problema o para satisfacer una necesidad. As que todos consciente e inconscientemente estamos realizando algoritmos. Ejemplos: 1. Para llegar a la universidad debemos: levantarnos, asearnos, desayunar, ir al paradero, abordar el bus, etc. 2. Al amarrarnos los zapatos realizamos una serie de movimientos ordenados. 3. Al vestirnos. 4. El conjunto de acciones al momento de realizar una compra en un supermercado.

El concepto de algoritmo es muy general y se encuentra presente en las diferentes ramas del conocimiento. La rama del saber que mayor utilizacin ha hecho de los algoritmos es la matemtica con la que estamos muy relacionados. Ejemplos hay muchos: Sumas de fracciones, al aplicar el teorema de Pitgoras, los pasos que realizamos para calcular el mximo comn divisor de dos nmeros enteros positivos el cual conocemos como algoritmo de Euclides. Adems tenemos el algoritmo de Gauss-Jordan para resolver sistemas de ecuaciones y que se aprende en el curso de lgebra Lineal; as como el mtodo general que usamos en la resolucin de ecuaciones polinomiales de segundo grado o el algoritmo para encontrar los nmeros primos conocido como Criba de Eratstenes, etc.

1.1. ALGORITMOS EN LA COMPUTACINLos programas de computadora surgen como necesidad de resolver problemas pero son los Algoritmos la base de la programacin de computadoras pues detrs de todo programa hay un algoritmo que ha sido previamente codificado en un lenguaje entendible por la computadora. Estos algoritmos (previamente codificados) le ordenan a la computadora las acciones que debe realizar para solucionar el problema en cuestin. Por todo esto, debemos tener SIEMPRE presente que para poder realizar cualquier programa es necesario elaborar previamente un algoritmo que contenga los pasos necesarios que resuelvan el problema. Los pasos que forman parte de un algoritmo sern llamados ACCIONES.

Pgina 2

Curso de Algoritmos y Estructura de [email protected]

1.2. FASES EN LA RESOLUCIN DE PROBLEMASEl diseo de algoritmos forma parte de un conjunto de fases que todo programador realiza al momento de solucionar un problema mediante la computadora. Estas fases son bsicamente 6: - Anlisis del problema. - Diseo del algoritmo (Algoritmo). - Codificacin en un Lenguaje de Programacin. - Compilacin y ejecucin. - Verificacin y depuracin. - Documentacin. 1.2.1 ANLISIS DEL PROBLEMA Lo que hacemos la mayora cuando estamos ante a una situacin problemtica es analizarla y tratar de buscar una solucin. En eso consiste esta fase, comprender el problema y saber exactamente qu es lo que se desea obtener (aunque an no sepamos cmo hacerlo), luego buscar las alternativas de solucin. Las siguientes interrogantes nos permitirn el correcto anlisis de un problema: 1. Con qu informacin contamos? = Cules son los datos de entrada? 2. Qu nos piden como resultado? = Cules son los datos de salida? 3. Cules son los procesos que transforman los datos de entrada en la informacin requerida? = De qu forma usamos la datos iniciales para presentar el resultado pedido? DATOS DE ENTRADA DATOS DE SALIDA

PROCESO

Ejemplo: Resuelve la ecuacin polinomial de segundo grado: x2-5x+6=0 Solucin: Analicemos: - DATOS DE ENTRADA: Tenemos la expresin polinomial. - DATOS DE SALIDA: Debemos presentar la(s) solucin(es) de la ecuacin. - PROCESO: El anlisis podra ser de la siguiente manera: Se trata de ecuacin polinomial de segundo grado. Por el Teorema Fundamental del lgebra podemos asegurar que tiene dos races. Si la raz es de multiplicidad 2, la solucin ser nica. Si las races son diferentes, habrn dos soluciones. Podemos usar la Frmula general. Podemos factorizar mediante aspa simple. Podemos formar cuadrados.

Pgina 3

[email protected]

En los primeros 4 pasos hemos comprendido el problema. En los ltimos pasos estamos determinando QU podemos hacer para solucionar el problema. Solo nos quedara elegir una de estas tres alternativas. 1.2.2 DISEO DE LA SOLUCIN Esta es la etapa en la que vamos a solucionar el problema en cuestin mediante la elaboracin o diseo de un algoritmo, es decir, vamos a especificar paso a paso y detalladamente CMO obtenemos la solucin. Para esto se hace uso de algunas tcnicas algortmicas. Se puede ordenar el diseo de la siguiente manera: a) Construir en detalle cada operacin. b) Simplificar antes de calcular. c) Realizar un dibujo o diagrama. (opcional) d) Dar una respuesta completa. e) Hallar el mismo resultado de otra manera. (opcional pero recomendable) En conclusin: un algoritmo es la solucin al problema. Adems podemos percibirlo matemticamente como una funcin que asocia a cada entrada E una salida S. Algoritmo: E S ENTRADA / f ( E )=S SALIDA

E

Algoritmo

S

1.3 CARACTERSTICAS DE UN ALGORITMO1.3.1 CARACTERSTICAS NECESARIAS DE UN ALGORITMO 1. Debe ser finito en tamao y tiempo por lo que en algn momento debe terminar. 2. Es preciso pues los pasos que lo conforman deben estar ordenados de manera que no genere ambigedad. (debe tener una secuencia lgica). Legibilidad. 3. Debe de estar bien definido, de tal forma que si se sigue dos veces usando los mismos datos, se obtendra el mismo resultado cada vez. 4. Es Independiente del lenguaje de programacin en el que ser implementado. (codificacin) 1.3.2 CARACTERSTICAS RECOMENDABLES DE UN ALGORITMO

Pgina 4

Curso de Algoritmos y Estructura de [email protected] 1. Debe ser Eficiente y ptimo, es decir, tiene que solucionar un problema de la mejor forma posible en el menor tiempo. Ejemplo: Desarrolle un algoritmo para calcular el promedio de tres notas dadas como dato. Solucin: - DATOS DE ENTRADA: Las tres notas. - DATOS DE SALIDA: El promedio de las notas. - PROCESO: Calculamos la media aritmtica de las notas. ALGORITMO: 1. Proporcionar las notas 2. Sumar las tres notas 3. Dividir el resultado entre 3 4. Mostrar el promedio resultante

1.4. TCNICAS DE REPRESENTACIN DE UN ALGORITMOComo ya hemos visto, el algoritmo vendra a ser la solucin de un problema. Esta solucin debe de ser representada de alguna manera y para esto existen diversas tcnicas o herramientas. Las tcnicas ms usadas para la representacin de algoritmos son 3: 1. Diagramas de Flujo u Ordinogramas. 2. Diagramas Nassi Schneiderman. 3. Pseudocdigo. Los algoritmos tambin se pueden representar mediante el lenguaje natural pero no resulta eficiente a comparacin de las tres que ya se han mencionado adems que en muchos casos resulta ambiguo y tiende a interpretarse errneamente. 1.4.1 DIAGRAMA DE FLUJO (FLOWCHART) Es una tcnica que permite la representacin grfica de un algoritmo. Esta tcnica permite visualizar de forma clara el flujo de los datos y la secuencia de ejecucin de las acciones. Utiliza un conjunto de figuras que reciben el nombre de cajas. Dentro de las cajas se escriben las acciones que se van a realizar. El conjunto de cajas se conectan mediante lneas llamadas lneas de flujo. Estas lneas indican el orden en el que se van a realizar las acciones. Los smbolos o cajas ms utilizadas son: Entrada / Salida

Pgina 5

[email protected]

Proceso Decisin Lnea de Flujo

Conector de diagramas Inicio / Fin El diagrama de flujo es una de las tcnicas ms antiguas para representar un algoritmo. Los smbolos usados para la elaboracin de diagramas de flujo han sido normalizados. La ISO (Organizacin Internacional para la Estandarizacin) y el ANSI (Instituto Norteamericano de Estandarizacin) se encargaron de la estandarizacin en el ao 1985 con la finalidad de evitar que se usen diferentes figuras para representar un mismo proceso lo cual llevara a confusin. Ejemplo: Desarrolle un algoritmo para calcular el promedio de tres notas dadas como dato. Represente el algoritmo mediante un diagrama de flujo. Solucin: INICIO

Leer (Nota1) Leer (Nota2) Leer (Nota3)

Promedio Nota1 + Nota2 + Nota3 3

Escribir (Promedio)

FIN

Pgina 6

Curso de Algoritmos y Estructura de [email protected]

1.4.2 PSEUDOCDIGO Tambin llamado Pseudolenguaje. Es la representacin escrita de un algoritmo mediante un lenguaje parecido al habla humano. El pseudocdigo es un borrador, boceto, bosquejo, esbozo, etc. Es una simplificacin del cdigo original, de all su nombre: Pseudo-Cdigo = Cdigo Falso. El pseudocdigo es semejante a un lenguaje de programacin, solo que no puede ser ejecutado por una computadora y se rige por normas que no son estndares y que no son tan estrictas como s ocurre en un lenguaje de programacin en particular. Esta similitud con los lenguajes de programacin permite que su posterior implementacin sea relativamente fcil. En trminos simples lo podemos concebir como una imitacin de algn lenguaje de programacin por lo que podramos encontrar pseudocdigos orientados a lenguajes de programacin como C++, Phyton, Java, Pascal, etc. , as como tambin podemos encontrar pseudocdigos ms generales o como una sntesis de varios lenguajes de programacin. El pseudocdigo no presenta un formato nico por ser un lenguaje no formal, pero tampoco difiere demasiado de entre un programador u otro por lo tanto cualquier experimentado puede entender el pseudocdigo escrito en un estilo diferente por otra persona. Mientras que los diagramas de flujo utilizan las cajas, el pseudocdigo hace uso de ciertas palabras que tienen un significado y que cumplen determinadas funciones, a estas se les denomina Palabras Reservadas o Palabras Clave. Ejemplo: Desarrolle un algoritmo para calcular el promedio de tres notas dadas como dato. Represente el algoritmo mediante Pseudocdigo. Inicio Leer (Nota1) Leer (Nota2) Leer (Nota3) Promedio (Nota1+Nota2+Nota3) / 3 Escribir (Promedio) Fin En este ejemplo las Palabras Reservadas son: Inicio, Leer, Escribir y Fin.

Pgina 7

[email protected] Se puede observar que el Pseudocdigo es una mezcla de lenguaje natural con algunas convenciones sintcticas que son propias de los lenguajes de programacin. 1.4.2.1 VENTAJAS DEL USO DE PSEUDOCDIGO: Entre las ventajas ms importantes: 1. Permite una representacin simple de operaciones muy complejas y repetitivas. 2. El espacio ocupado es relativamente corto a comparacin con los diagramas de flujo. 3. Es fcil traducirlo a un lenguaje de programacin por su similitud. 1.4.2.2 DESVENTAJA DEL USO DE PSEUDOCDIGO: 1. A diferencia de los diagramas de flujo, el pseudocdigo no ha sido estandarizado por lo que para su escritura no existen reglas rgidas estrictamente definidas.

OBSERVACIONES:

En este curso debemos preocuparnos principalmente en dos cosas: 1. Prestar la mayor atencin en el anlisis de los problemas y en la lgica de la solucin. 2. Aprender y adoptar un estilo de pseudocdigo para la representacin de algoritmos.

Continuamente durante el desarrollo de este curso ser inevitable hacer analogas entre lo que es un Pseudocdigo y un Lenguaje de Programacin para poder comprender el funcionamiento del primero en base al segundo.

El pseudocdigo que presentamos en este texto est orientando al lenguaje de programacin Pascal, as que la sintaxis de nuestro pseudocdigo ser muy similar a este lenguaje, pero aun as esto no es ningn impedimento para posteriormente poder aprender cualquier lenguaje de programacin estructurado.

Pgina 8

Curso de Algoritmos y Estructura de [email protected]

2. CONCEPTOS BSICOSA continuacin se estudiar todo un conjunto de conceptos bsicos pero muy importantes los cuales nos permitirn comprender la forma como se construye un programa. Detrs de todo programa existe un conglomerado de elementos que se encuentran interrelacionados y que permiten el funcionamiento del mismo. Los elementos bsicos de programacin son: Datos, tipos, identificadores, palabras reservadas, valores, constantes, variables, operadores, expresiones, instrucciones, estructuras, etc., estos se combinan siguiendo un conjunto determinado de reglas a lo que se le denomina sintaxis. La sintaxis del pseudocdigo no es nica porque al no ser un lenguaje estndar, cada programador lo usa segn su criterio. Los lenguajes de programacin s son estndar por lo tanto tienen sintaxis ya definidas.

2.1. DATO E INFORMACINNo existe una definicin nica de dato e informacin ya que estos trminos se encuentran presentes en todas las reas del conocimiento. Se muestran a continuacin algunas definiciones ms cercanas a nuestro inters. 2.1.1. DATO: - Informacin dispuesta de manera adecuada para su tratamiento por un ordenador. - El dato es una representacin simblica (numrica, alfabtica, algortmica etc.), un atributo o una caracterstica de una entidad. Los datos son hechos que describen sucesos y entidades. No tienen ninguna informacin. Puede significar un nmero, una letra, o cualquier smbolo que representa una palabra, una cantidad, una medida o una descripcin. El dato no tiene valor semntico (sentido) en s mismo, pero si recibe un tratamiento (procesamiento) apropiado, se puede utilizar en la realizacin de clculos o toma de decisiones. Es de empleo muy comn en el mbito informtico y, en general, prcticamente en cualquier disciplina cientfica. En programacin, un dato es la expresin general que describe las caractersticas de las entidades sobre las cuales opera un algoritmo. - Es la expresin general que describe los objetos con los cuales opera una computadora. -Es la materia prima que sirve de base para obtener informacin. Tambin se dice que es un conjunto de caracteres o smbolos que no tiene un significado propio hasta que se le atribuye un significado asocindolo como parte de la descripcin de alguna cualidad o caracterstica perteneciente a algo. Los datos pueden ser normalmente discretos o continuos, pueden ser medidos o simplemente pueden describir una caracterstica. En cualquier caso sirven de base para su transformacin en informacin. En la mayora de los casos, los datos ya existen y pueden pertenecer al entorno o al sistema, en otros casos los datos son el resultado de procesos previos y finalmente se tienen algunos datos que son inventados o definidos.

Pgina 9

Conceptos [email protected] 2.1.2. INFORMACIN: -Comunicacin o adquisicin de conocimientos que permiten ampliar o precisar los que se poseen sobre una materia determinada. - En sentido general, la informacin es un conjunto organizado de datos procesados, que constituyen un mensaje que cambia el estado de conocimiento del sujeto o sistema que recibe dicho mensaje. - Es un recuso normalmente intangible que tiene la caracterstica de que cuando se posee en cantidad, calidad y oportunidad adecuada, ayuda a tomar mejores decisiones. La informacin es el resultado de la transformacin de los datos. La calidad de la informacin obtenida est relacionada con la calidad de los insumos o datos y con los conocimientos, tcnicas o mtodos que se elijan para efectuar la conversin. En conclusin: Datos: Son pequeas partes de informacin que por s solas tal vez digan poco o nada pero ordenados de manera conjunta resultan tiles. Adems tienen la cualidad de que pueden ser registrados por un computador. Informacin: La informacin es un conjunto organizado de datos que se obtienen luego de haber pasado por un ordenamiento y procesamiento.

2.2. ATRIBUTOS DE UN DATOComo bien sabemos, el presente curso nos permitir aprender a disear algoritmos mediante la tcnica de representacin: Pseudocdigo. Esto es con el objetivo de tener el algoritmo ya listo y preparado para su posterior codificacin en un Lenguaje de Programacin. Todo programa de computadora trabaja continuamente con datos de entrada y mediante un conjunto de acciones o instrucciones devuelve datos de salida que constituyen la informacin deseada. Estos datos (entrada o salida) tienen tres caractersticas o atributos fundamentales: - Tipo Nos determina las operaciones que podemos realizar con el dato y la manera en que ser codificada internamente en la computadora. - Valor Se refiere al contenido el cual puede cambiar o permanecer fijo. - Identificador Es el nombre que permite referenciarlo y que adems lo diferencia del resto.

Pgina 10

Curso de Algoritmos y Estructura de [email protected] 2.2.1 PRIMER ATRIBUTO: TIPO Desde el punto de vista de la programacin los datos se clasifican en forma general de la siguiente manera: 2.2.1.1. DATOS SIMPLES: Reciben otros nombres equivalentes: Datos bsicos, Datos primitivos, Datos estndar. 2.2.1.2. DATOS COMPUESTOS: Llamados tambin: Datos complejos o Datos estructurados.

DATOS

Simples o Primitivos

Compuestos o Estructurados ESTTICOS DINMICOS

NUMRICO

Entero Real LGICO

Arreglos Cadenas Registros Archivos

Punteros Listas rboles Grafos

Verdadero Falso

CARACTER

Alfabtico Numrico Especial

Pgina 11

Conceptos [email protected]

DATOS SIMPLESVamos a clasificar a los datos simples segn la clase o tipo de valores que puedan contener bajo dos enfoques: A. Clasificacin Principal B. Clasificacin en Ordinales y no Ordinales.

A. CLASIFICACIN PRINCIPAL: Los tipos de datos simples ms importantes son:Datos de tipo Numrico Datos de tipo Carcter Datos de tipo Lgico.

1. NUMRICO: Estos datos nos van a permitir realizar las operaciones aritmticas comunesy otros clculos matemticos. Se dividen en dos: enteros y reales.

Numrico Entero: Son aquellos nmeros enteros positivos y negativos que yaconocemos y por lo tanto no tienen parte decimal. -2 , -1 , 0, 1, 2, 458, 78989

Numrico Real: Todos aquellos que no son enteros sern considerados reales, por endevan a tener punto decimal y parte no entera. Tambin son positivos y negativos. -0.1, +8.33, -53.2 , etc.

2. CARACTER: Tambin llamado Alfanumrico. Est conformado por dgitos, letrasmaysculas, minsculas y smbolos especiales. Siempre van encerrados entre comillas simples (apstrofos ) y constan de un smbolo individual (carcter: una sola letra, un nico dgito o un nico smbolo). Se divide en tres principalmente: Alfabtico, Numrico y Especial.

Carcter Alfabtico: Corresponde a las letras del alfabeto ya sean maysculas ominsculas. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z

Pgina 12

Curso de Algoritmos y Estructura de [email protected]

Carcter Numrico: No debe confundirlos con los datos numricos anteriores. Un datode tipo carcter numrico va encerrado entre comillas simples y existen solo diez datos de este tipo, adems con estos no se pueden realizar operaciones aritmticas. Lo caracteres numricos son: 1 2 3 4 5 6 7 8 9 0

Aprecie que no es lo mismo el dato de tipo numrico entero 3 que el dato de tipo carcter numrico 3 . El uso de los apstrofos nos permitir diferenciarlos.

Carcter Especial: Corresponden a ciertos smbolos especiales como los siguientes: * / { @ %

3. LGICO: Tambin llamado Booleano. Es un dato que solo puede tomar un valor de entredos posibles: Verdadero y Falso. Son tiles al momento de realizar comparaciones entre datos adems permiten evaluar condiciones. En este curso vamos a utilizar las letras V y F cuando hagamos referencia al valor Verdadero y Falso respectivamente.

B. SEGUNDA FORMA DE CLASIFICACIN: Datos de tipo Ordinal y no Ordinal. 1. ORDINALES: Vamos a considerar como ordinales a los siguientes datos: Los datos de tipo numrico entero. Los datos de tipo carcter. (Los caracteres se ordenan de acuerdo a su cdigo ASCII). Los datos de tipo lgico: verdadero y falso. La razn de la clasificacin como ordinales es porque el conjunto de valores que asumen se pueden contar, es decir, podemos establecer una relacin de uno a uno entre los valores de los datos y los nmeros naturales.

2. NO ORDINALES: Vamos a considerar como no ordinales a los datos de tipo numricoreal. A diferencia de los de datos ordinales, los no ordinales no se pueden contar. No se puede establecer una relacin de uno a uno entre ellos y los nmeros naturales. Dicho de otra

Pgina 13

Conceptos [email protected] forma, para que un dato se considere ordinal se tiene que poder determinar el anterior y el siguiente a este. Ejemplo: Para el dato de tipo numrico entero: 5 , sabemos que antes est el 4 y luego est el 6. Dado el dato de tipo carcter alfabtico: D , sabemos que antes est C y despus est E. Dado el dato de tipo carcter numrico: 5 , sabemos que antes est 4 y despus est 6. Dado el dato de tipo numrico real: 5.021 , no podemos determinar los reales que estn antes o despus, por lo tanto, es no ordinal. Los datos lgicos tambin son ordinales pero solo pueden asumir uno de dos valores: V y F por lo que la relacin de orden es el siguiente: F < V

OBSERVACIONES:

En conclusin los tipos simples son: entero, real, carcter y lgico. De ahora en adelante en vez de mencionar la palabra completa: dato de tipo numrico entero solo se va a mencionar dato numrico entero o simplemente dato entero. Lo mismo se aplica para el dato real, dato carcter y dato lgico. CDIGO ASCII: Los caracteres tienen un cdigo que nos permite establecer un orden, de esta manera cuando comparamos caracteres, lo que en realidad se compara son sus cdigos. La relacin de orden entre los caracteres es el siguiente: 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < A < B < C < D < E < F < G < H < I < J < K < L < M < N < O < P < Q < R < S < T < U < V< W< X< Y< Z nota) entonces minnota cont Sino Si (minnota = nota) entonces cont fin_si fin_si fin_desde Escribir (minnota, cont) Fin cont + 1 1 nota

Este algoritmo se puede comprobar mediante una Prueba de Escritorio similar a la del ejercicio anterior.

Pgina 122

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Para un grupo de n alumnos se desea leer el cdigo (entero de 3 dgitos), nota (de 0 a 20) y sexo (M o F), luego se pide lo siguiente: a) Presentar la menor nota en los hombres y el mayor de los cdigos que la tiene. b) Presentar el nmero de alumnos hombres que tiene la menor nota. Solucin: Pseudocdigo Ejemplo Var cod, n, maxcod, i, cont: entero sexo: caracter nota, minnota: real Inicio Leer (n) maxcod minnota cont desde i 0 1 hasta n 100 20

Leer (cod, nota, sexo) Si (sexo = M) entonces Si (minnota > nota) entonces minnota maxcod cont Sino Si (minnota = nota) entonces cont cont + 1 cod Si (maxcod < cod ) entonces maxcod fin_si fin_si fin_si fin_si fin_desde Escribir (minnota, maxcod, cont) Fin 1 nota cod

Pgina 123

Estructura Repetitiva [email protected] Ejemplo: Para un conjunto de n personas se desea averiguar la edad promedio por sexo y cul es la edad mayor en cada caso (la mxima edad en cada sexo). Desarrolla un algoritmos que reciba las edades de las n personas y entregue la informacin pedida. Pseudocdigo Ejemplo Var Inicio Leer (n) contM 0 contF 0 sumaM 0 sumaF 0 maxM 0 maxF 0 desde i 1 hasta n Leer (edad, sexo) En_caso (sexo) M, m: sumaM contM sumaM + edad contM + 1 edad edad, n, i , contM, contF, maxM, maxF, sumaM, sumaF: entero sexo: caracter

Si (edad > maxM) entonces maxM fin_si F, f: sumaF contF sumaF + edad contF + 1 edad

Si (edad > maxF) entonces maxF fin_si fin_caso fin_desde Escribir (maxM, maxF) Si (contM = 0) entonces Escribir (no hay promedio) Sino Escribir (sumaM div contM) fin_si (* Para mostrar un promedio entero *)

Pgina 124

Curso de Algoritmos y Estructura de [email protected] Si (contF = 0) entonces Escribir (no hay promedio) sino Escribir (sumaM div contF) fin_si Fin (* Para mostrar un promedio entero *)

Pgina 125

Estructura Repetitiva [email protected] Ejemplo: SEGUNDA MAYOR EDAD. Para un conjunto de n personas, se desea leer sus edades y luego se desea presentar la segunda mayor edad. Solucin; Pseudocdigo Segunda_mayor_edad Var Inicio Leer (n) max1 max2 desde i 0 0 1 hasta n edad, i, edad, max1, max2: entero

Leer (edad) Si (i = 1) entonces Si (max1 < edad) entonces max1 fin_si Sino ( * cuando i = 2, 3, 4, , n * ) max2 max1 sino max1 edad ( * no considero la igualdad edad = max1 * ) Si (max2 < edad) entonces max2 fin_si fin_si fin_si fin_si fin_desde Si (max2 = 0) entonces (*max2 ser cero si es que todos los datos ingresados son iguales*) Escribir (No hay segunda mayor) sino Escribir (max2) fin_si Fin edad Si (max1 < edad) entonces edad

Si (max1 > edad) entonces

Pgina 126

Curso de Algoritmos y Estructura de [email protected] Ejemplo: SEGUNDA MENOR EDAD. Para un conjunto de n personas, se desea leer sus edades y luego se desea presentar la segunda menor edad. Solucin: A diferencia del ejercicio anterior, no vamos a inicializar las variables min1 y min2 en cero, sino con la primera edad leda. Pseudocdigo Segunda_menor_edad Var Inicio Leer (n) desde i 1 hasta n Leer (edad) Si (i = 1) entonces min1 min2 Sino edad edad ( * i = 2, 3, 4, , n * ) min2 min1 sino Si (min1 < edad) entonces Si (min2 > edad) entonces min2 fin_si fin_si fin_si fin_si fin_desde Si (min1 min2) entonces Escribir (Segunda menor edad:, min2) sino Escribir (No existe segunda menor edad) fin_si Fin edad min1 edad edad, i, edad, min1, min2: entero

Si (min1 > edad) entonces

Pgina 127

Estructura Repetitiva [email protected] Ejemplo: Para un conjunto de n datos reales se desea determinar el mayor de los datos negativos y cuntas veces aparece. Por ejemplo: para n=7, datos: 4, -7, 6, -3, 5, -3, 1 Solucin Pseudocdigo Mayor_negativo Var n, i, cont: entero num: real encont: lgico Inicio encont Leer (n) desde i 1 hasta n Vamos a descartar los datos no negativos que sean ingresados Leer (num) Si (num < 0) entonces Si ( encont) entonces maxneg cont encont sino Si (maxneg < num) entonces maxneg cont sino Si (maxneg = num) entonces cont fin_si fin_si fin_si fin_si fin_desde Escribir (maxneg, cont) Fin cont + 1 1 num 1 V num F Vamos a inicializar a la variable centinela o variable switch con el valor lgico falso

Pgina 128

Curso de Algoritmos y Estructura de [email protected] Explicacin del ejemplo: Vamos a crear una variable llamada maxneg y esta la tenemos que inicializar con el primer dato negativo ingresado. Pero puede darse el caso que el primer dato ingresado no sea negativo, sino cero o positivo, cmo sabremos en qu momento vamos a tener un dato negativo con el cual debemos inicializar nuestra variable maxneg? Para esto, vamos a utilizar una variable switch (conocida tambin como bandera, centinela, flag, conmutador, etc ), el identificador para este ser encont, ser de tipo lgico y servir para poder saber en qu momento se ingresar un dato negativo, de esta forma podremos inicializar la variable maxneg y podremos compararlo con los datos negativos siguientes (los datos no negativos ingresados no sern tomados en cuenta)

Pgina 129

Estructura Repetitiva [email protected] 8.3.2 BUCLE CON ENTRADA CONTROLADA (ESTRUCTURA REPETITIVA MIENTRAS). ESTRUCTURA CON PRE-TEST DE PRUEBA Es utilizada cuando el nmero de repeticiones o iteraciones no se conoce, aunque tambin sirve cuando s se conoce el nmero de repeticiones. En esta estructura, el cuerpo del bucle se repite mientras se cumpla una determinada condicin. Funcionamiento: Cuando se ejecuta la instruccin mientras, lo primero que sucede es que se evala una condicin. Si la condicin resulta ser verdadera, se ejecuta el cuerpo del bucle, despus se evala de nuevo la condicin. Este proceso se repite una y otra vez mientras la condicin sea verdadera. Cuando la condicin resulte ser falsa, no se realiza ninguna accin que se encuentra dentro del cuerpo del bucle, sino que el algoritmo sigue con las dems instrucciones.

Condicin V Instruccin

F

Mientras (condicin) Hacer Instruccin fin_mientras

OBSERVACIN

Esta instruccin tiene desde 0 hasta ms repeticiones. La condicin debe modificarse dentro del bucle para evitar que se genere un bucle infinito. Ejemplo: Un bucle finito. x 3 Escribir (x) x x-1 fin_mientras Mientras (x > 0) hacer

En la pantalla se ver nicamente los valores positivos de x: 3, 2 y 1(segn la condicin), pues cuando x a toma un valor no positivo, la instruccin repetitiva Mientras termina

Pgina 130

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Un bucle infinito x1 Mientras (x > 0) hacer Escribir (x) x x+1 fin_mientras

En la pantalla se vern los valores de x: 2, 3, 4, ., etc. Y esto continuar hasta que la computadora se cuelgue, ya que la instruccin Mientras no terminar mientras x no tome un valor negativo lo cual nunca pasar pues x va en aumento

Pgina 131

Estructura Repetitiva [email protected] Ejemplo: Imprimir todos los nmeros primos entre 2 y 100 (incluye a 2 y a 100), usando la instruccin mientras. Solucin. Ya sabemos el algoritmo para identificar a un nmero primo. Ahora le agregaremos una estructura adicional. Pseudocdigo Primos Var Inicio num 2 1 hasta num cont_div fin_si fin_desde Si (cont_div = 2) entonces Escribir (num) fin_si num Fin El ejemplo tambin pudo haberse resuelto con el uso de dos estructuras repetitivas desde de la siguiente forma: num+1 fin_mientras La variable num debe ir aumentando de uno en uno cont_div+1 Mientras (num 100) hacer desde i Si (num mod i = 0) entonces num, cont_div, i: entero

Pgina 132

Curso de Algoritmos y Estructura de [email protected] Pseudocdigo Primos Var Inicio desde num desde i 2 hasta 100 1 hasta num cont_div fin_si fin_desde Si (cont_div = 2) entonces Escribir (num) fin_si fin_desde Fin Usando la instruccin desde no hubo la necesidad de ir aumentando la variable num, porque esta aumenta una unidad automticamente durante cada repeticin cont_div+1 num, cont_div, i: entero

Si (num mod i = 0) entonces

Ejemplo: Dado un nmero entero positivo, indicar cuantos dgitos tiene. Solucin: Vamos a realizar divisiones sucesivas entre 10 y al nmero se le va ir asignando su cociente. Ejemplo: Si tuviramos el nmero num = 4512 hacemos: cont num num num num num num num num num num num num 0 num div 10 , es decir 4512 div 10 lo cual quedara 451 ; num = 451 y seguidamente contabilizamos cont num div 10 , es decir 451 div 10 lo cual quedara 45 ; num = 45 y seguidamente contabilizamos cont num div 10 , es decir 45 div 10 lo cual quedara 4 ; num = 4 y seguidamente contabilizamos cont num div 10 , es decir 4 div 10 lo cual quedara 0 ; num = 0 y seguidamente contabilizamos cont

cont+1; cont = 1

cont+1; cont = 1+1=2

cont+1; cont = 2+1=3

cont+1; cont = 3+1=4

Aqu debemos parar, pues el contador ya contabiliz la cantidad de cifras que tena el nmero inicial, por tanto, la condicin debera ser: Mientras (num 0) hacer

Pgina 133

Estructura Repetitiva [email protected] Pseudocdigo Ejemplo Var Inicio Leer (num) cont 0 num div 10 cont+1 Mientras (num 0) hacer num cont Al ir asignando al nmero el cociente de su divisin entre 10, iremos disminuyendo la cantidad de cifras del nmero y a la vez aprovecharemos para contabilizar sus cifras. num, cont: entero

fin_mientras Escribir (cont) Fin

Ejemplo: Disee un algoritmo para invertir un nmero entero (de cualquier cantidad de cifras). Una vez invertido, presentarlo. Solucin: Ya se hizo el algoritmo para invertir un nmero, pero se deba conocer la cantidad de cifras que tena el nmero. Ahora nos piden invertir un nmero, no importando la cantidad de cifras que tenga. Este ejercicio se resuelve con el uso de una estructura mientras. Pseudocdigo Invertir Var Inicio Leer (num) inv r inv 0 num mod 10 num div 10 inv *10 + r Mientras (num 0) hacer num No olviden inicializar con cero a la variable inv, que almacenar al nmero invertido. inv, num, r : entero

fin_mientras Escribir (num, inv) Fin IMPORTANTE: Fjense que la variable num va perdiendo su valor inicial (disminuye la cantidad de cifras) hasta ser igual a cero.

Pgina 134

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Disee un algoritmo para invertir un conjunto de nmeros enteros. (de cualquier cantidad de cifras). Una vez invertidos, presentarlos. Solucin: Pseudocdigo Invertir_varios_nmeros Var Inicio Leer (n) desde i inv r inv 1 hasta n 0 num mod 10 num div 10 inv *10 + r Leer (num) Mientras (num 0) hacer num i, inv, num, n, r : entero

fin_mientras Escribir (num, inv) fin_desde Fin

Pgina 135

Estructura Repetitiva [email protected] Ejemplo: Disear un algoritmo para identificar si un nmero entero positivo es capica. Solucin: Un numeral es capica si es igual a su forma invertida. Lo que haremos ser invertir al nmero y compararlo con su forma inicial. Pero, recuerde que el valor de num se pierde y llega ser igual a cero. Debido a que necesitamos el valor de num intacto, utilizaremos una variable auxiliar, y va a ser a esta variable a la cual la vamos a invertir. Pseudocdigo Capica Var Inicio Leer (num) aux inv r aux inv num 0 aux mod 10 aux div 10 inv *10 + r Comparamos el nmero inicial con su forma invertida Almacenamos el valor de num en aux, y empezamos a trabajar con aux, para que num mantenga su valor y no lo pierda. aux, inv, num: entero

Mientras (aux 0) hacer

fin_mientras Si (inv = num) entonces Escribir (es capica) sino Escribir (No es capica) fin_si Fin

Pgina 136

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Disear un algoritmo para identificar de un conjunto de n nmeros enteros positivos aquellos que son capicas. Solucin: Pseudocdigo Capica Var Inicio Leer (n) desde i aux inv r aux inv 1 hasta n num 0 aux mod 10 aux div 10 inv *10 + r Comparamos el nmero inicial con su forma invertida Almacenamos el valor de num en aux, y empezamos a trabajar con aux, para que num mantenga su valor y no lo pierda. Leer (num) n, i, aux, inv, num: entero

Mientras (aux 0) hacer

fin_mientras Si (inv = num) entonces Escribir (es capica) sino Escribir (No es capica) fin_si fin_desde Fin

Pgina 137

Estructura Repetitiva [email protected] Ejemplo: Disear un algoritmo que reciba n nmeros enteros positivos, y que identifique a aquellos que son capicas, mostrando un mensaje: s es capica. Al final, que muestre cuntos de los nmeros ingresados fueron capicas. Solucin: Pseudocdigo Capicas Var Inicio Leer (n) cont desde i aux inv r aux inv 0 1 hasta n num 0 aux mod 10 aux div 10 inv *10 + r Comparamos el nmero inicial con su forma invertida Almacenamos el valor de num en aux, y empezamos a trabajar con aux, para que num mantenga su valor y no lo pierda. No olvidar inicializar el capicas contador de n, i, aux, inv, num, cont: entero

Leer (num)

Mientras (aux 0) hacer

fin_mientras Si (inv = num) entonces Escribir (es capica) cont sino Escribir (No es capica) fin_si fin_desde Escribir (cantidad total de capicas: , cont) Fin cont +1

Pgina 138

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Para un conjunto de n nmeros enteros positivos, se desea saber Cuntos de ellos son capicas con el nmero de cifras impares? Solucin: Pseudocdigo Ejemplo Var Inicio Leer (n) cont cf inv aux r aux inv cf 0 1 hasta n 0 0 num aux mod 10 aux div 10 inv *10 + r cf + 1 cf mod 2 0) entonces desde i i, n, r, cf, inv, num, aux: entero

Leer (num)

Mientras (aux 0) hacer

fin_mientras Si (inv = num cont fin_si fin_desde Escribir (cont) Fin cont + 1

Pgina 139

Estructura Repetitiva [email protected] Ejemplo: Para un nmero entero positivo, determinar si es primo o no. Solucin: Este mtodo es del profesor Acosta. Recordar que N es primo si no es divisible entre 2, 3,

N . Lo que se va a realizar es: Vamos a elevar al cuadrada a 2, 3,,

N , para obtener 2 2 ,

3 2 , , N.Pseudocdigo Ejemplo Var Inicio Leer (num) d 2 V primo) hacer primo num, d: entero primo: lgico

Mientras (d*d < num primo sino d fin_si fin_mientras Si (primo) entonces d+1 F

Si(num mod d = 0) entonces

Escribir (El nmero es primo) sino Escribir (El nmero no es primo) fin_si Fin

Pgina 140

Curso de Algoritmos y Estructura de [email protected] Ejemplo: A un conjunto de 100 alumnos se le asigna un cdigo que oscila desde 500 hasta 599, luego de rendir un examen se obtiene la nota (0 a 20). Se desea averiguar la mayor nota, cuantas veces aparece y los cdigos de los alumnos que lo obtuvieron. Solucin: Pseudocdigo Ejemplo Var cod, nota, max, i, cont, lista: entero Inicio desde i 1 hasta n Leer (cod, nota) Si (i = 1) entonces cont max lista sino Si (max < nota ) entonces max cont lista sino Si (nota = max) entonces cont lista fin_si fin_si fin_si fin_desde Escribir (max, cont) Mientras (lista 0) hacer cod lista Fin lista mod 1000 lista div 1000 Escribir (cod) fin_mientras cont + 1 lista*1000 + cod nota 1 cod 1 nota cod

Pgina 141

Estructura Repetitiva [email protected] Ejemplo: Disear un algoritmo que reciba n nmeros enteros positivos , y que identifique a aquellos que son capicas, mostrando un mensaje: s es capica. En el caso que no sea capica que muestre un mensaje: No es capica y que adems aparezca la cantidad de cifras de este nmero, que muestre todos sus divisores y la cantidad de divisores de este nmero mostrando un mensaje si fue o no fue primo. Al final, que muestre cuntos de los nmeros ingresados fueron capicas, cuntos no fueron capicas y cuantos fueron primos. Solucin: Pseudocdigo Ejemplo Var Inicio Repetir Leer (n) Hasta_que (n > 0) cont_prim cont_cap desde i 0 0 1 hasta n Leer (num) Hasta_que (num > 0) cont_cif inv aux r aux inv 0 num aux mod 10 aux div 10 cont_cif + 1 inv * 10 + r 0 num, n, cont_cif, i, cont_div, cont_cap, cont_prim, inv, aux: entero

Repetir

Repetir

cont_cif

Hasta_que (aux = 0) Si (num = inv) entonces Escribir (Es capica) cont_cap cont_cap+1

Pgina 142

Curso de Algoritmos y Estructura de [email protected]

sino Escribir (No es capica) fin_si Escribir (Cantidad de cifras: , cont_cif) cont_div desde i 0 1 hasta num Escribir (i, es divisor de , num) cont_div fin_si fin_desde Escribir (Cantidad de divisores, cont_div) Si (cont = 2) entonces Escribir (num, es primo) cont_prim Sino Escribir (num, no es primo) fin_si fin_desde Escribir (Cantidad de capicas: , cont_cap) Escribir (Cantidad de no capicas , n cont_cap) Escribir (Cantidad de primos , cant_prim) Fin cont_prim + 1 cont_div + 1

Si (num mod i = 0) entonces

Pgina 143

Estructura Repetitiva [email protected] 8.3.3. BUCLE CON SALIDA CONTROLADA (ESTRUCTURA REPETITIVA REPETIR). ESTRUCTURA CON PRE-TEST DE PRUEBA Como habrn notado, en las estructuras repetitivas mientras, si la condicin es inicialmente falso, el cuerpo del bucle no se ejecutar ni una sola vez; pero existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez antes de comprobar la condicin de repeticin. Son en estas situaciones cuando se utiliza las estructuras repetitivas repetir, las cuales se ejecutarn s o s por lo menos una vez. Funcionamiento: Con una estructura repetir, el cuerpo del bucle se ejecuta siempre al menos una vez. Cuando una instruccin repetir se ejecuta, lo primero que sucede es la ejecucin del cuerpo del bucle, y a continuacin, se evala la condicin. Si se evala como falsa, el cuerpo del bucle se repite y la condicin se evala otra vez. Solo cuando la condicin resulte ser verdadera, all el bucle termina.

Instruccin F Condicin VOBSERVACIN

Repetir Instruccin Hasta_que (condicin)

Debemos modificar la condicin en el cuerpo del bucle para evitar que sea infinito. USOS DE LA ESTRUCTURA REPETIR a) Validacin de la entrada de datos: Validar que un dato sea positivo: Repetir Leer (dato) Hasta_que (dato > 0) Validar una nota de 0 a 20 Repetir Leer (nota) Hasta_que (0 nota nota 20)

Pgina 144

Curso de Algoritmos y Estructura de [email protected]

Validar un cdigo de tres cifras Repetir Leer (cod) Hasta_que (100 cod cod 999)

En cada uno de las estructuras anteriores, el programa se va a repetir indefinidamente y solo dejar de repetirse hasta que la condicin resulte ser verdadera. b) Para el uso de mens (opciones) Ejemplo: Mostrar una lista de opciones y terminar o salir si y solo s se elija la opcin correspondiente para tal accin. Leer (n1, n2) Repetir Escribir (MENU DE OPCIONES) Escribir ( 1. Sumar ) Escribir ( 2. Multiplicar ) Escribir ( 3. Salir ) Repetir Escribir (opcin: ) Leer (opc) Hasta_que (opc = 1 En_caso (opc) 1: Escribir (n1+n2) 2: Escribir (n1 * n2) fin_caso Hasta_que (opc = 3) opc = 2 opc = 3) Sea: n1 = 3 y n2 = 5

Pgina 145

Estructura Repetitiva [email protected] MXIMO COMN DIVISOR Y MNIMO COMN MLTIPLO Ejemplo: Dados dos nmeros enteros positivos, determine el mximo comn divisor de dichos nmeros. Solucin: Vamos a utilizar el algoritmo de Euclides para calcular el mximo comn divisor (MCD) de dos nmeros a y b. Por ejemplo: Si los nmeros fueran a = 24 y b = 18. Los pasos son los siguientes: - Realizo la divisin entera de 24 entre 18. - El divisor (18) pasa a convertirse en el dividendo. - El resto de la divisin entera (6) pasa a convertirse en el divisor. Este proceso se repite hasta que se obtiene resto = 0. Luego el MCD ser el ltimo divisor. OBS: El algoritmo de euclides permite calcular el MCD de dos nmeros sin importar quin es mayor o quin es menor. Funciona en cualquier orden. Pseudocdigo MCD Var Inicio Leer (a, b) Repetir r a b a mod b b r La variable a almacena el mcd de los nmeros. a, b, r: entero

Hasta_que (r = 0) Escribir (a) Fin

Pgina 146

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Dados nos nmeros enteros positivos, determine el mnimo comn mltiplo de dichos nmeros. Solucin: No vamos a calcular directamente el mnimo comn mltiplo (MCM) de los nmeros, sino que usaremos la siguiente propiedad. A partir del clculo del MCD se podr calcular el MCM. MCD (a, b) x MCM (a, b) = a x b

Pseudocdigo MCM Var Inicio Leer (a, b) prod Repetir r a b mcm Fin a mod b b r prod div a a*b a, b, prod, mcm, r: entero

Hasta_que (r = 0) Escribir (mcm)

Pgina 147

Estructura Repetitiva [email protected] Ejemplo: Para n (n 2) nmeros enteros positivos determine el MCD. Solucin: Hallaremos el mcd tomando a los nmeros de dos en dos, ejemplo: 12 4 10 8

mcd = 4 mcd = 2 mcd = 2 El procedimiento general ser: n1 mcd1 Pseudocdigo MCD Var Inicio Repetir Leer (n) Hasta_que (n 2) desde i 1 hasta n Leer (num) Hasta_que (num > 0) Si (i = 1) entonces mcd sino Repetir r mcd num fin_si fin_desde Escribir (mcd) Fin mcd mod num num r num Repetir n, mcd, num, r, i: entero mcd2 mcd3 n2 n3 ..

Hasta_que (r = 0)

Pgina 148

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Para n (n 2) nmeros enteros positivos determine el MCM. Solucin: Hallaremos el mcm tomando a los nmeros de dos en dos, ejemplo: 15 18 24 mcd = 3 mcm = 90

El procedimiento general ser: mcm Pseudocdigo MCM Var Inicio Repetir Leer (n) Hasta_que (n 2) desde i 1 hasta n Leer (num) Hasta_que (num > 0) Si (i = 1) entonces mcd mcm sino mcm Repetir r mcd num mcm fin_si fin_desde Escribir (mcm) Fin mcd mod num num r mcm div mcd mcm * num num num Repetir mcm, n, mcd, num, r, i: entero n1

mcd = 6 mcm = 360 n2 n3 ..

mcm1 mcm2 mcm3

Hasta_que (r = 0)

Pgina 149

Estructura Repetitiva [email protected] Ejemplo: Determine la siguiente suma para x y n dados:

Pseudocdigo Suma Var Inicio Leer ( x ) Repetir Leer (n) Hasta_que (n>0) S 0 -1 1 hasta n -1 * term * x * x / ((2 * i 1) * (2 * i)) S + term term x, S, term: real n, i: entero

Desde i term S fin_desde

Escribir (S) Fin

Pgina 150

Curso de Algoritmos y Estructura de [email protected] Ejemplo: (Primera prctica califica, ciclo 97-I, 26-04-97) Dado las ubicaciones (puntos no colineales en el plano) de tres clientes A, B, y C; se requiere determinar la ubicacin de un centro comercial que equidiste de estas tres ciudades. Solucin: ANLISIS DEL PROBLEMA: Este problema requiere conocimientos de Geometra Analtica. La ubicacin del centro comercial viene a ser el circuncentro del tringulo de vrtices A, B, y C. Para determinar las coordenadas del circuncentro vamos a recurrir a la geometra analtica. Unimos mediante 3 segmentos a los 3 puntos no colineales (A, B y C) formando de esta manera un tringulo. (de cualquier tipo: rectngulo u oblicungulo. B

A Trazamos las dos mediatrices relativas a los lados AC y BC. B N

C

A

M

C

El punto de interseccin de estas dos rectas mediatrices vendra a ser el Circuncentro del tringulo, y es adems el punto que equidita de los tres vrtices. Sean las coordenadas de los vrtices: A = (Xa, Ya) B = (Xb, Yc) C = (Xc, Yc)

Pgina 151

Estructura Repetitiva [email protected]

B

(Xb, Yb)

N

A (Xa, Ya) Hallamos las coordenadas de los puntos M y N: M= N=

M

(Xc, Yc) C

A C Xa Xc Ya Yc ; ) =( 2 2 2 B C 2 ( Xb Xc Yb Yc ; ) 2 2y y sus ortogonales =

Adems podemos conocer los vectores =

=

=

Sean LN y LM dos rectas cuyas ecuaciones vectoriales son las siguientes: L N: LM: P=N + t P=M + r

(recta que pasa por N y con vector direccional (recta que pasa por M y con vector direccional

)

)

LN

(Xb, Yb) B N P

A (Xa, Ya)

M LM

C (Xc, Yc)

Pgina 152

Curso de Algoritmos y Estructura de [email protected]

Pgina 153

Estructura Repetitiva [email protected] Ejemplo: Se desde leer un conjunto de n (n 30) cdigos enteros (cada cdigo 10000). Se desea averiguar cuntos de dichos cdigos tiene la secuencia 2, 3, 7 no necesariamente adyacentes. Solucin: Ejemplo: 213746 (s), 327541 (no), 2372374 (s) Pseudocdigo Ejemplo Var Inicio Repetir Leer (n) Hasta_que (n 30) cont desde i 0 1 hasta n Leer (cod) Hasta_que (cod 10000) j sec 1 V sec) hacer En_caso (j) 1: d 2: d 3: d fin_caso Repetir r cod cod mod 10 cod div 10 r = d) 7 3 2 cont, num, i, n, r, d, j: entero sec: lgica

Repetir

Mientras (j 3

Hasta_que (cod = 0 Si (cod = 0) entonces sec fin_si j j+1 fin_mientras F

Pgina 154

Curso de Algoritmos y Estructura de [email protected] Si (sec) entonces cont fin_si fin_desde Escribir (cont) Fin Ejemplo: Algoritmo para pasar un numeral de base 2 a base 10. Solucin: Pseudocdigo Binario_Decimal Var Inicio Repetir Leer (num ) Hasta_que (num > 0) S C 0 1 d num S C num mod 10 num div 10 d*C+S C*2 C, d, S, num: entero cont + 1

Repetir

Hasta_que (num = 0) Escribir ( S) Fin

Pgina 155

Estructura Repetitiva [email protected] Ejemplo: Algoritmo para transformar un numeral de una base n menor que 10 a la base 10. Solucin: Pseudocdigo Numeracin Var Inicio Repetir Leer (n, num) Hasta_que (2 n S C Repetir d num S C num mod 10 num div 10 d*C+S C*n 0 1 n9 (* Base del numeral *) num > 0) C, d, S, num, n: entero

Hasta_que (num = 0) Escribir (S) Fin

Pgina 156

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Algoritmo para transformar un numeral de base 10 a una base n menor que 10. Solucin: Pseudocdigo Cambio Var Inicio Repetir Leer (num) Hasta_que (num > 0) Repetir Leer (n) Hasta_que (2 n N P Repetir r num num mod n num div n 0 1 (* Base del numeral *) n 9) num, n, N, P, r: entero

NN+r*P P P * 10 Hasta_que (num < n) N N + num * P Escribir (N) Fin

Pgina 157

Estructura Repetitiva [email protected] Ejemplo: Dado un nmero natural positivo, indique si es un nmero perfecto. (NOTA: un nmero es perfecto si la suma de sus divisores (sin incluir al mismo nmero) resulta igual a s mismo. Ejemplo: 6 es perfecto pues 6 = 1+2+3. Solucin: Pseudocdigo Perfecto Var Inicio Repetir Leer (n) Hasta_que (n > 0) S 0 1 hasta n-1 S+i Si (n mod i = 0) Entonces S fin_si fin_desde Si (S = n) entonces Escribir (S es perfecto) Sino Escribir (No es perfecto) fin_si Fin Desde i n, S, i: entero

Pgina 158

Curso de Algoritmos y Estructura de [email protected] Ejemplo: Disee un algoritmo que entregue el trmino ensimo de la serie de Fibonacci. (Tomando a n a partir de cero.) 1, 1, 2, 3, 5, 8, 13, 21, F0 F1 F2

Solucin: F0 y F1 van a ser fijos: F0 = 1 ; F1 = 1 ; Fn = Fn-1 + Fn-2 para n 2 Pseudocdigo Fibonacci Var Inicio F0 F1 1 1 Leer (n) Hasta_que (n 0) Si (n = 0 F Sino Desde i F F0 F1 fin_si Escribir (F) Fin 2 hasta n F1+F0 F1 F 1 n = 1) entonces F, F0, F1: entero

Repetir

fin_desde

Pgina 159

Estructura Repetitiva [email protected] Ejemplo: Dado un conjunto de n alumnos (hombres y mujeres) se desea leer el cdigo (entero de 3 dgitos), nota (de 0 a 20) y sexo (M o F). Luego averiguar: a) El alumno (varn) con la mayor nota y menor cdigo (respecto a esa mayor nota). El nmero de alumnos que tienen esa mayor nota. b) La alumna con la menor nota y mayor cdigo (respecto a esa menor nota). El nmero de alumnas que tienen la misma menor nota. Pseudocdigo Ejercicio Var Inicio Repetir Leer (n) Hasta_que (n > 0) maxnotH minnotaM mincodH maxcodM contH contM desde i 0 0 1 hasta n Leer (cod) Hasta_que (100 cod Repetir Leer (nota) Hasta_que (0 nota Leer (sexo) Si (sexo = M) entonces Si (maxnotH < nota) entonces maxnotH contH mincodH sino Si (maxnotH = nota) entonces contH contH + 1 cod Si (mincodH > cod) entonces mincodH 1 cod nota nota 20) cod 999) 0 20 999 100 n, i, cod, nota, maxnotH, minnotM, mincodH, maxcodM, contH, contM: entero sexo: caracter

Repetir

Pgina 160

Curso de Algoritmos y Estructura de [email protected] fin_si fin_si fin_si sino Si (sexo = F) entonces Si (minnotM > nota) entonces minnotM contM sino Si (minnotM = nota) entonces contM contM + 1 cod Si (maxcodM < cod) entonces maxcodM fin_si fin_si fin_si fin_si fin_si fin_desde Escribir (maxnotH, mincodH, contH) Escribir (minnotM, maxcodM, contM) Fin 1 cod maxcodM nota

Pgina 161

Estructura Repetitiva [email protected] Ejemplo: (2006-I) Se tiene el cdigo (entero de 6 cifras) de un grupo de n empleados entre varones y mujeres. Disee un algoritmo que reciba dichos cdigos y luego determine: a. El nmero de varones cuyo cdigo termina en 41 b. El nmero de mujeres cuyos tres ltimos dgitos de su cdigo sea un nmero capica (nmero capica es aquel que se lee igual de derecha a izquierda que de izquierda a derecha) Solucin: Pseudocdigo Ejemplo Var cod, cont_M, cont_F, inv, aux, r: entero sexo: caracter Inicio Repetir Leer (n) Hasta_que (n>0) cont_M