CURSO+DE+ALGORITMOS+Y+ESTRUCTURA+DE+DATOS+-+UNIDAD+I+y+II-2

113
C C U U R R S S O O D D E E A A L L G G O O R R I I T T M M O O S S Y Y E E S S T T R R U U C C T T U U R R A A D D E E D D A A T T O O S S P P r r i i m m e era Pa r r t t e e Enero 2011

description

LABORATORIO 1. MEDICIÓNOBJETIVOS• Conocer las definiciones relativas al error experimental.• Determinar el error en el proceso experimental.EXPERIMENTO 1. MEDICIÓN Y ERROR EXPERIMENTAL (INCERTIDUMBRE) I. OBJETIVOS• Determinar la curva de distribución normal en un proceso de medición, correspondiente al número de frijoles que caben en un puñado normal. • Determinar la incertidumbre en este proceso experimental.

Transcript of CURSO+DE+ALGORITMOS+Y+ESTRUCTURA+DE+DATOS+-+UNIDAD+I+y+II-2

  • CCUURRSSOO DDEE AALLGGOORRIITTMMOOSS YY

    EESSTTRRUUCCTTUURRAA DDEE DDAATTOOSS

    PPrriimmeerraa PPaarrttee

    Enero 2011

  • Curso de Algoritmos y Estructura de Datos

    2

    Este pequeo compendio va dirigido a toda la gente chvere de la Facultad de Ingeniera

    Industrial y de Sistemas de la Universidad Nacional de Ingeniera que estn llevando el

    curso de Algoritmos y Estructura de Datos, ya sea la primera vez o la segunda, la

    tercera, o la ensima vez, no importa, con tal que se esfuercen y sigan estudiando ya que

    todo se aprende con esfuerzo y prctica constante.

    Mi objetivo principal es ayudar, de alguna forma, a todos los estudiantes que llevan por

    primera vez este curso, debido a que muchos se enfrentan al curso sin tener algn material

    con qu guiarse. Los que ya lo han llevado antes, sin excepcin, se habrn dado cuenta que

    cuando vemos por primera vez el curso, nos encontramos frente a algo totalmente nuevo y

    mientras las clases van avanzando los temas se complican. En vista de que en este curso el

    nmero de desaprobados es bastante, y solo son pocos los que aprueban (generalmente los

    que ya lo han llevado antes), es que me anim a transcribir las primeras clases de mi

    cuaderno, buscar problemas y ordenarlos conforme el nivel aumente, y compartirlo con

    todos.

    Este libro no ha sido revisado por algn experto ni editado por una editorial ni nada, al

    igual que ustedes, soy un estudiante y deseo compartir lo que en algn me sirvi para

    aprender y aprobar el curso. Por falta de tiempo, no puedo presentarles el curso completo,

    pero s est todo lo relacionado a la primera parte, acerca de los conceptos bsicos, los

    datos simples, y las estructuras de control. Este texto debe ser dominado a la perfeccin

    para que no tengan problemas con los temas restantes.

    Los ejercicios que presento, fueron extrados de distintas fuentes, algunos corresponden a

    los resueltos en clase por mis profesores y otros que han sido extrados de prcticas y

    libros, como tambin de un texto denominado cuaderno de algoritmo que encontr en la

    pgina web www.ingfiis.tk en el enlace 2do ciclo y apuntes que he realizado mientras

    llev el curso. Si quisieran profundizar en la teora, les recomendara el libro Fundamentos

    de Programacin, algoritmos y estructura de datos y objetos de Luis Joyanes Aguilar.

    Algunas sugerencias:

    Hasta la fecha, los profesores que regularmente ensean el curso son: Inga, Acosta,

    Grimanesa y Crdova.

    Todos los que llevamos el curso por primera vez necesitamos una buena base y la mejor

    profesora, creo yo, es la profesora Inga. No tuve la suerte de llevar con ella, pero todos

  • Curso de Algoritmos y Estructura de Datos

    3

    comentan que es ordenada y explica muy bien, adems que desarrolla una gran variedad

    de ejercicios y problemas.

    Sin nimo de ofender, los tres profesores que siguen tienen algunas deficiencias. El profesor

    Acosta es ordenado, es puntual en la revisin de los exmenes, es muy estricto en su

    calificacin, avanza bastante, pero no explica muy bien y tiene la costumbre de realizar

    problemas con un nivel muy complejo cuando debera empezar con ejercicios simples,

    adems que es arrogante. De la profesora Grimanesa puedo rescatar que es bien ordenada

    y organizada, deja tareas y aumenta puntos a los que lo resuelven, pero avanza despacio y

    se retrasa mucho en las clases. Generalmente, los que se matriculan con ella son los

    repitentes que ya tienen la base y solo desean aprobar el curso. Si es que llevan el curso por

    primera vez, no sera muy recomendable. El profesor Crdova es un ingeniero con mucha

    experiencia, domina su materia pero sus clases no son ordenadas (me refiero a la pizarra),

    adems que hay que hacer un esfuerzo para entenderle. Recalco que no pretendo ofender a

    los profesores, solo darle unas sugerencias. (Ya que yo llev el curso tres veces con los tres

    ltimos profesores mencionados)

    Una ltima sugerencia es la siguiente: Cada profesor hace su clase diferente, segn la

    seccin en donde se encuentren el formato de la resolucin de los problemas cambia. Por

    qu? Porque para la escritura de algoritmos no existe un estndar (en otras universidades

    tambin usan diferentes estilos) pero la idea y la lgica es lo que importa.

    En este texto usar el formato del profesor Acosta, por costumbre y por ser entendible.

    Aunque estn en otras secciones, esta primera parte del curso, les va a servir a todos, ya

    que los algoritmos no difieren mucho. La diferencia se va haciendo mayor en los ltimos

    temas.

    A mi parecer, los ejercicios de este compendio son la base del curso. Los temas que siguen, y

    que no estn aqu, incorporan nuevas cosas pero se sigue utilizando la teora de la primera

    parte. Ms adelante procurar subir a Internet los temas que faltan.

    Una vez ledo el libro (incluso antes), si es que les lleg a ser de gran ayuda, no duden en

    recomendrselo a otros que tambin lo pueden estar necesitando. Para mejorar este texto,

    pueden mandarme cualquier sugerencia al correo electrnico [email protected] y

    tambin aquellos que quisieran aportar con problemas resueltos de prcticas y exmenes.

    Su amigo: TThhee OOlliizzttiikk

  • Curso de Algoritmos y Estructura de Datos

    4

    UNIDAD IALGORITMOS Y ESTRUCTURA DE DATOS

    Cuando llevamos algoritmos, lo ideal sera que ya conociramos los siguientes cursos:

    Clculo Diferencial. Geometra Analtica, Clculo Integral, lgebra Lineal adems de poseer una

    gran capacidad de abstraccin. Esa es la razn por la que se el profesor Acosta opina que sera

    mejor llevar este curso en el tercer ciclo y ya no en el segundo. En este curso nos van a dar la

    base y los cimientos para que ms adelante seamos unos excelentes programadores.

    CONCEPTOS BSICOS:

    DATO:

    Es un MENSAJE (segn la IBM), posee la caracterstica de ser OBJETIVO, es decir, es

    independiente de quien lo emite pues un MENSAJE es nico.

    Es la representacin de un hecho real. Un dato es aquel que puede ser registrado por un

    computador. Ejemplo: El peso de una persona, la temperatura, el nombre de una persona, etc.

    Es la expresin general que describe los objetos con los cuales opera una computadora.

    INFORMACIN:

    Es la INTERPRETACIN de un DATO o MENSAJE. La informacin posee la caracterstica de ser

    SUBJETIVO ya que cada persona interpreta un mensaje de diferente forma.

    CLASIFICACIN DE LOS DATOS

    Los datos se clasifican en datos simples y datos compuestos (tambin llamados estructurados).

    La clasificacin general es la siguiente:

  • Curso de Algoritmos y Estructura de Datos

    5

    Por ahora nos centraremos en los datos simples, en la tercera unidad se ver con ms detalle los

    datos estructurados.

    DATOS

    Simples o Primitivos Compuestos o Estructurados

    ESTTICOS DINMICOS

    Arreglos

    Cadenas

    Registros

    Archivos

    Punteros

    Listas

    rboles

    Grafos

    NUMRICO

    LGICO

    Entero

    Real

    CARACTER

    Verdadero

    Falso

    Alfabtico

    Numrico

    Especial

  • Curso de Algoritmos y Estructura de Datos

    6

    DATOS SIMPLES

    A. PRIMERA FORMA DE CLASIFICACIN: Numrico, Caracter y Lgico.

    1. NUMRICO: Con estos datos se van a realizar las operaciones aritmticas y dems clculos

    matemticos.

    Entero: Son aquellos nmeros enteros que conocemos.

    -2 , -1 , 0 , 1 , 2 , 458, 78989

    Real: Todos aquellos que no son enteros sern considerados reales. En palabras simples,

    van a ser datos numrico de tipo real todo nmero que lleva un punto decimal.

    -0.1, 8.33, etc.

    2. CARACTER: Siempre tiene que ir entre comillas simples (apstrofos ) y constan de un solo

    caracter (una sola letra, un nico dgito o un nico smbolo)

    Alfabtico: Corresponde a las letras del alfabeto ya sea maysculas o minsculas

    , , , , , , , , , , . . . , , , , . . .

    Numrico: No confundir con los datos numricos anteriores. Los datos de tipo caracter

    numrico van entre comillas simples. Son solo 10 datos de tipo caracter numrico, adems

    con estos no se pueden realizar operaciones aritmticas

    1, 2, 3, 4, 5, 6, 7, 8, 9, 0

    Especial: Corresponden a ciertos caracteres como: , , * , , { , @ , etc.

    3. LGICO: Son solo dos, Verdadero y Falso, y se va a utilizar cuando se evalen condiciones. En

    este curso vamos a utilizar las letras V y F cuando hagamos referencia a algn dato lgico.

    B. SEGUNDA FORMA DE CLASIFICACIN: Ordinales y no Ordinales

  • Curso de Algoritmos y Estructura de Datos

    7

    1. ORDINALES: Vamos a considerar como ordinales a los siguientes tipos de datos:

    Los datos de tipo numrico entero

    Los datos de tipo caracter tanto alfabtico y numrico (Estos se van a ordenar de acuerdo a

    su cdigo. Resulta que cada caracter tiene un cdigo llamado ASCII, esto por ahora no es tan

    importante)

    Los datos de tipo lgicos verdadero y falso

    2. NO ORDINALES

    Vamos a considerar como no ordinales a los datos numricos del tipo real.

    OBSERVACIONES:

    o De ahora en adelante para ya no estar mencionando la palabra completa dato de tipo

    numrico entero solo se va a mencionar dato numrico entero o dato entero . Lo mismo se

    aplica para el dato real , dato caracter y dato lgico .

    o CODIGO ASCII: Los caracteres tienen un cdigo que entre otras cosas, nos permite

    ordenarlos. Por ejemplo: < < < .

    o El caracter espacio en blanco tambin es de tipo especial

    o El hecho de que a los datos reales se les considere no ordinales, no quiere decir que no

    puedan ser comparados. (La proposicin 5.2 < 6.6 es verdadera), sino, son considerados no

    ordinales pues, dado un dato real, no se sabe que nmero es el que le sigue, en cambio, dado

    un dato ordinal, podemos saber que datos le anteceden y que datos le siguen. Ejemplo:

    Dado el dato entero: 5 , sabemos que le precede el 4 y le sigue el 6.

    Dado el dato caracter: , sabemos que le precede y le sigue .

    Pero, dado el dato real: 5.2 , no podemos determinar quin le antecede y quin le sigue. Y

    aunque sepamos cules son los nmeros mayores o menores que ste, es considerado

    no ordinal.

  • Curso de Algoritmos y Estructura de Datos

    8

    OPERADORES QUE TRABAJAN CON DATOS SIMPLES

    OPERADORES ARITMTICOS

    Adicin + , se usa el smbolo cruz

    Sustraccin - , se usa el smbolo guin

    Multiplicacin * , se usa el smbolo asterisco

    Divisin: / , div , se usa el smbolo eslash o la palabrita div .

    En esta parte hagamos una observacin importante. En matemticas nosotros podemos dividir

    de dos formas, una divisin real y otra divisin entera.

    Ejemplo:

    5/2 = 2.5 , esta es una divisin real

    5 div 2 = 2 , esta es una divisin entera (ya que solo nos da como resultado el cociente de la

    divisin entera)

    Existe adems una operacin que nos permite obtener el residuo o resto de la divisin entera,

    para eso utilizamos el operador denotado por la palabra mod .

    Ejemplo:

    5 mod 2 = 1

    OBS:

    Algunos utilizan otros smbolos para el resto de la divisin entera, por ejemplo otros

    usan % en vez de mod. Nosotros usaremos nicamente mod.

    Los operadores div y mod son exclusivamente para datos enteros, por tal motivo la

    operacin 5.6 mod no tendran sentido, pues 5.6 es considerado dato real.

  • Curso de Algoritmos y Estructura de Datos

    9

    OPERADORES LGICOS

    Negacin: o sino ~

    Conjuncin: (se lee: )

    Disyuncin: (se lee: )

    OBS:

    Con mucha ms frecuencia usaremos el smbolo de negacin en ves de ~

    es un operador unario, ya que nicamente afecta a una expresin.

    expresin_lgica

    y son operadores binarios pues involucran dos expresiones.

    Opcin1 opcin2

    OPERADORES DE COMPARACIN O RELACIN

    Sern usados para establecer comparaciones entre 2 valores del mismo tipo de datos.

    Mayor que >

    Menor que = o sino

    Menor o igual que

  • Curso de Algoritmos y Estructura de Datos

    10

    IDENTIFICADORES

    Un identificador es solo el nombre de algo. Pero de manera ms formal es un conjunto de

    caracteres que permite identificar a los elementos de un algoritmo. Los identificadores son

    llamados vlidos cuando poseen las siguientes caractersticas:

    1. Deben empezar con una letra (no pueden empezar con un nmero o con otro smbolo) y no

    deben contener el caracter espacio en blanco

    Ejemplo:

    Son identificadores vlidos:

    A1 , X1 , A123 , A2B3C

    Son identificadores invlidos:

    1AA , X 1

    (Son invlidos porque el primer identificador por comienza con un nmero, y la segunda por

    contener al caracter espacio en blanco.)

    2. Solo pueden contener a los caracteres alfabticos (letras maysculas o minsculas),

    caracteres numricos (dgitos) y al nico caracter especial Subguin o Guin bajo

    Ejemplo:

    Son identificadores vlidos:

    X_1 , The_Oliztik , Estructura_de_datos

    Son identificadores invlidos:

    X-1 , The-Oliztik , Estructura-de-datos

    (Pues contienen un caracter especial llamado guin el cual no puede ser usado porque

    llevara a la confusin con la operacin de Diferencia)

    3. Deben de ser diferentes de las palabras reservadas para los algoritmos (esto se entender

    mejor ms adelante)

    Ejemplo: No podemos identificar a algn elemento como: inicio, fin, si, entonces, mientras,

    desde, repetir, etc, pues estos nombres los usaremos ms adelante para otros fines.

  • Curso de Algoritmos y Estructura de Datos

    11

    CONSTANTES Y VARIABLES

    CONSTANTES: Son aquellos DATOS que van a tener un valor fijo. Las constantes al ser DATOS,

    se clasifican en: Constantes numricas (constantes enteras y constantes reales), constantes

    caracter (constantes alfabticas, numricas, especiales) y constantes lgicas: verdadero y falso.

    Las constantes tienen un nombre o identificador. Generalmente el identificador para la

    constante debe contener caracteres alfabticos en mayscula (aunque esto no es obligatorio en

    este curso pero sera mucho ms esttico).

    Ejemplo:

    PI = 3.14 (Constante real)

    N = 10 (Constante entera)

    LETRA = (Constante caracter)

    VARIABLES: Son aquellos DATOS que no van a tener un valor fijo, sino que van a ser

    modificados. De forma anloga a las constantes, las variables al ser DATOS, se clasifican en:

    Variables numricas (variables enteras y variables reales), variables caracter (variables

    alfabticas, numricas, especiales); variables lgicas: verdadero y falso.

    Las variables tambin tienen un nombre o identificador vlido. Generalmente el identificador

    para la variable debe contener caracteres alfabticos en minscula (aunque esto tampoco es

    obligatorio)

    Ejemplo:

    Sueldo , edad , fecha , Ganancia, suma1 , suma_2 , i , n

    OBS:

    No hay que confundir el identificador o nombre de un dato (ya sea este una constante o una

    variable) con su valor o contenido.

    En los dos ltimos ejemplos, se tienen tres constantes de diferente tipo, el identificador de la

    primera constante es PI y tiene como valor al nmero real 3.14. El identificador de la

    segunda constante es N y tiene como valor al nmero entero 10, el identificador de la tercera

    constante es LETRA y tiene como valor al caracter .

  • Curso de Algoritmos y Estructura de Datos

    12

    En el otro ejemplo, se tiene las variables cuyos identificadores son: sueldo, edad, fecha,

    ganancia, suma1, suma_2, i, n. Debido a que el contenido de las variables puede cambiar,

    todava no les hemos asignado algn valor determinado. Despus se ver como funciona el

    uso de las variables.

    Depender de cada persona en la forma cmo quiera identificar a una variable o constante,

    pero se sugiere que el nombre o identificador que se use deba tener relacin con el objeto

    que representa. Ejemplo: Si una variable almacenar edad o edad(es) es obvio que su

    identificador sera edad.

  • Curso de Algoritmos y Estructura de Datos

    13

    LA OPERACIN DE ASIGNACIN

    La operacin de asignacin es aquella que permite almacenar valores a una variable. Para

    realizar la operacin de asignacin se utiliza el operador (flechita hacia la izquierda). Para

    realizar la operacin de asignacin se tiene el siguiente formato:

    Formato:

    Donde:

    Nomb_var: viene a ser el identificador vlido o nombre de la variable

    Valor: es el valor que se le quiera asignar o almacenar

    Ejemplos:

    L 25 : Significa que a la variable llamada L (o sino, cuyo identificador es L) se le ha

    asignado el nmero entero 25. Por tal motivo el valor que almacena la variable L

    es 25.

    Si es que seguidamente hacemos L 40 , la variable L tendr ahora como valor al nmero

    entero 40, mientras que el valor anterior (25) se perdi o desapareci. Es por esto que la

    operacin de asignacin se la conoce como destructiva.

    Si es que hacemos:

    L 50

    L 900

    L 0

    El valor ltimo que toma la variable L sera el nmero entero 0, los valores 50 y 900

    desaparecieron.

    Para realizar la operacin de asignacin tambin se tiene el siguiente formato:

    L 5 + 10 , Significa que el valor que toma la variable L sera el resultado de sumar 5 + 10,

    es decir, el nmero entero 15

    Nomb_var valor

    Nomb_var expresin

  • Curso de Algoritmos y Estructura de Datos

    14

    Las computadoras realizan la asignacin en dos pasos. Primero, calculan el resultado de la

    expresin del lado derecho. Segundo, almacenan el valor calculado a la variable que se

    encuentra a la izquierda.

    As, si es que tenemos lo siguiente:

    A 10 , a la variable con nombre A se le asigna el nmero entero 10

    B 20 , a la variable con nombre B se le asigna el nmero entero 20

    C A +B , a la variable con nombre C se le asigna el resultado de sumar los valores de las

    variables A y B, el cual sera 10 + 20 = 30.

    Tambin es posible utilizar el mismo nombre o identificador en ambos lados del operador de

    asignacin. Por ejemplo:

    D 35

    D D+10 , Aunque no lo parezca, esta asignacin tiene sentido, el proceso de asignacin

    sera: Primero, se calcula el resultado de la derecha, es decir la suma de la variable D (la cual vale

    35) con 10. Segundo, el resultado (que sale 45) se le asigna a la variable D, por lo que D se queda

    con ese valor. Desde el punto de vista matemtico esto no tendra sentido, pero s en este curso.

    NOTA: De ahora en adelante para ya no estar indicando: la variable de nombre x o la variable

    cuyo identificador es x ; expresar: la variable x , solo por comodidad.

  • Curso de Algoritmos y Estructura de Datos

    15

    VARIABLES IMPORTANTES: ACUMULADOR Y CONTADOR

    ACUMULADOR O SUMADOR: Es una variable que permite sumar. Los acumuladores

    generalmente se incrementan o decrementan en una cantidad variable. Los acumuladores son

    variables enteras o variables reales.

    Usaremos la siguiente asignacin:

    acumulador acumulador + exp_num

    Ejemplo: Consideremos S y num variables enteras, donde el acumulador sera S

    Asignmosle un primer valor a la variable S

    S 0

    (Cuando se le asigna un valor a un acumulador por primera vez, entonces se dice que se est

    inicializando al acumulador)

    num 20

    S S + num , (el acumulador S contendr ahora el resultado de sumar 0 + 20 , es decir, 20)

    num 18 (la variable num ahora tendr como valor al nmero 18)

    S S + num (el acumulador S contendr ahora el resultado de sumar 20 + 18, es decir, 38)

    CONTADOR: Son variables numricas de tipo entero solamente. Son tiles al momento de

    contar eventos o sucesos, su valor se incrementa o decrementa en un valor constante.

    Usaremos la siguiente asignacin:

    contador contador + 1

    El nombre que generalmente se le da a esta variable es cont, pero cada quien tiene la libertad de

    decidir identificador vlido ponerle.

    Ejemplo: Consideremos la variable cont entera

    cont 0

    (Cuando se le asigna un valor a un contador por primera vez, se dice entonces que se est

    inicializando al contador)

  • Curso de Algoritmos y Estructura de Datos

    16

    cont cont + 1, (Ahora el contador tendr como valor el resultado de sumar 0 + 1, es

    decir, 1)

    cont cont + 1, (Ahora el contador tendr como valor el resultado de sumar 1 + 1, es

    decir, 2)

  • Curso de Algoritmos y Estructura de Datos

    17

    ALGORITMOS

    Un algoritmo es un conjunto de pasos lgicos que permiten resolver un problema.

    CARACTERSTICAS

    1. Debe ser finito, es decir, en algn momento debe terminar.

    2. Debe estar ordenado (debe tener una secuencia lgica)

    3. Debe de estar bien definido, de tal forma que si se sigue dos veces, se obtendra el mismo

    resultado cada vez.

    Ejemplo: Escriba un algoritmo para prender el televisor

    1. Ponerse de pie

    2. Caminar y dirigirse hacia el televisor

    3. Levantar la mano e introducir el dedo en el botn de encendido

    4. Regresar a su lugar

    Como ven, esto es un algoritmo, as como la una receta de cocina, los procedimientos para ir a

    votar, para amarrarse los zapatos, para calcular el mximo comn divisor, etc. La palabra

    algoritmo es muy general, por eso, es necesario precisar que en este curso lo que nos va a

    interesar es desarrollar algoritmos que permitan solucionar problemas a travs de una

    computadora.

    Para la creacin de algoritmos debemos tener presente:

    1. Con qu informacin contamos? que es lo mismo a Cules son los datos de entrada?

    2. Qu nos piden como resultado? que es lo mismo a Cules son los datos de salida?

    3. Cules son los procesos que transforman los datos de entrada en la informacin requerida?

    Ejemplo: Desarrolle un algoritmo para calcular el promedio de tres notas.

    DATOS DE ENTRADA: las tres notas

    DATOS DE SALIDA: el promedio

    PROCESO: sumar las tres notas y dividir el resultado entre tres

    ALGORITMO:

    1. Proporcionar las notas

    2. Sumar las tres notas

    3. Dividir el resultado entre 3

    DATOSDE

    ENTRADA

    DATOSDE

    SALIDAPROCESO

  • Curso de Algoritmos y Estructura de Datos

    18

    4. Mostrar el promedio resultante

    Lo cual podramos escribir de una forma mucho ms esttica usando la instruccin de

    asignacin ya aprendida.

    1. Inicio

    2. Leer las notas: n1, n2, n3

    3. promedio (n1+n2+n3)/3

    4. presentar el promedio

    5. Fin

    Despus presentar el formato que se utilizar para escribir un algoritmo.

    REPRESENTACIN DE UN ALGORITMO

    Los algoritmos se pueden representar de muchas formas:

    1. En palabras, as como hemos hecho en los ejemplos.

    2. En forma grfica mediante: Diagramas de Flujo y Diagramas Nassi Schneiderman

    3. En forma de cdigos llamado Pseudocdigo.

    DIAGRAMA DE FLUJO

    (FLOWCHART)

    Es la representacin simblica o grfica de un algoritmo. Los smbolos usados son:

    Entrada / Salida

    Proceso

    Decisin

    Lnea de Flujo

    Conector de diagramas

    Inicio / Fin

    Los diagramas de flujo son una de las tcnicas ms antiguas para representar un algoritmo. Los

    smbolos usados en los diagramas de flujo han sido normalizados por ANSI (American Nacional

    Estndar Institute). Instituto Norteamericano de Normalizacin.

    Durante todo el curso vamos a utilizar el PSEUDOCDIGO para representar a los algoritmos.

  • Curso de Algoritmos y Estructura de Datos

    19

    PSEUDOCDIGO

    Es la representacin escrita en un lenguaje parecido al habla humano (espaol/ingls).

    PARTES DE UN PSEUDOCDIGO

    Vamos a distinguir 2 partes.

    1. El encabezado o cabecera: Aqu va a ir la palabra reservada Pseudocdigo seguida de un

    identificador vlido para el algoritmo, es decir el nombre del algoritmo. (o nombre del

    programa), el cual, se sugiere que sea un nombre que describa al programa.

    Formato:

    Ejemplo:

    Pseudocdigo Promedio

    Pseudocdigo Prom_2

    Algunos profesores, en vez de utilizar la palabra Pseudocdigo prefieren usar la palabra

    Algoritmo, como es el caso de la profesora Grimanesa.

    2. El bloque algortmico: Se podra dividir en tres partes.

    2.1 Seccin de declaracin de constantes y variables: En esta parte se van a definir o

    declarar todos los datos a utilizar (constantes y variables) tanto simples como compuestos.

    Para este curso, definir o declarar un dato (variable o constante) se puede entender como

    crear un dato para que pueda ser utilizado.

    En realidad, ms adelante, aparte de declarar Variables Y Constantes, tendremos que

    recurrir a la creacin de Tipos, pero por ahora solo vamos a interesarnos en las variables y

    constantes. Lo relacionado a los Tipos se ver en la Unidad III.

    Formato:

    Pseudocdigo Identificador_Algoritmo

    Const const1 = valor1 const2 = valor2 ...

    constN = valorN

    Var var1 : tipo_dato1 var2 : tipo_dato2 ...

    varN : tipo_datoN

  • Curso de Algoritmos y Estructura de Datos

    20

    Ejemplo: Si queremos utilizar a las constantes PI (nmero irracional) e IGV (impuesto

    general a las ventas) y a las variables edad, sueldo, sexo, tendremos que declararlas de la

    siguiente forma:

    Const PI = 3.1416

    IGV = 0.19

    Var edad: entero

    sueldo: real

    sexo: caracter

    La edad se declara generalmente como variable entera pues se considera cantidades enteras

    de aos. El sueldo se declara como variable real pues presentar punto decimal y el sexo al

    ser masculino o femenino, deber ser caracter para asumir dos posibles valores: o o .

    Algunos profesores utilizan el siguiente formato:

    Def. Variables:

    edad: entero

    sueldo: real

    sexo: caracter

    CONST

    PI = 3.1416

    Otros profesores cambian el orden en la declaracin de variables

    Variables:

    entero: edad

    real: sueldo

    caracter: sexo

    Durante todo este libro usaremos el primer formato presentado.

    2.2 Seccin para los subprogramas: Por ahora no ser necesario.

  • Curso de Algoritmos y Estructura de Datos

    21

    2.3 Acciones ejecutables: Aqu se va a realizar todo el proceso de resolucin de algn

    problema mediante un conjunto de acciones o instrucciones que se ver luego.

    Siempre debern ir las palabras Inicio y Fin.

    En conclusin, la estructura general de todo pseudocdigo ser el siguiente:

    Ejemplo: Realice un algoritmo que permita hallar el promedio de 3 notas y luego represntelo

    mediante pseudocdigo.

    Pseudocdigo Ejemplo

    Var n1, n2, n3: entero

    prom: real

    Inicio

    Leer (n1, n2, n3)

    prom (n1+n2+n3)/3

    Escribir (prom)

    Fin

    Pseudocdigo Identificador_Algoritmo

    Tipo

    Const

    Var

    Inicio

    Fin

    SUBPROGRAMAS

  • Curso de Algoritmos y Estructura de Datos

    22

    INSTRUCCIONES DE ENTRADA Y SALIDA

    INTRUCCIN DE ENTRADA (LECTURA DE DATOS)

    La instruccin de entrada permite leer determinados valores que luego le son asignados a

    determinadas variables. A esta instruccin tambin se le conoce como instruccin de lectura. Los

    datos se introducen a la computadora mediante algunos dispositivos de entrada, siendo el ms

    importante el teclado.

    El formato para realizar esta instruccin es el siguiente:

    Para el caso en el que se tengan muchas variables se realiza:

    Ejemplo: En el ejemplo realizado para calcular el promedio de tres notas, la instruccin de

    lectura que se realiz fue:

    Leer (n1, n2, n3)

    Esta instruccin funciona de esta forma. Primero espera que alguien escriba por el teclado tres

    valores, luego estos tres valores le son asignados a las tres variables n1, n2, n3 que aparecen

    dentro del parntesis. Por ejemplo: Si es que ingreso por el teclado los nmeros 5, 8 Y 9, las

    variables almacenarn a estos tres nmeros en ese orden.

    Y si aun hago lo siguiente: C n1+n2+n3, entonces el valor que estara almacenando en la

    variable C sera la suma de los valores que estn almacenados en las tres variables n1, n2 y n3.

    Por tal motivo el valor de la variable C sera 5 + 8 + 9 = 22

    INTRUCCIN DE SALIDA (ESCRITURA DE DATOS)

    La instruccin de salida permite mostrar los valores que han sido almacenados en determinadas

    variables. A esta instruccin tambin se le conoce como instruccin de escritura. El valor que

    est almacenado en una variable se puede visualizar a travs de dispositivos de salida como el

    monitor y la impresora.

    El formato para realizar esta instruccin es el siguiente:

    Para el caso en el que se tengan muchas variables se realiza:

    Escribir (variable)

    Leer (variable)

    Leer (variable1, variable2,..., variableN)

    Escribir (variable1, variable2,..., variableN)

  • Curso de Algoritmos y Estructura de Datos

    23

    Ejemplo: En el ejemplo realizado para calcular el promedio de tres notas, la instruccin de salida

    que se realiz fue:

    Escribir (prom)

    Lo cual, significa que por el monitor se pudo visualizar el valor que almacenada la variable prom.

    Continuando el ejemplo, en donde tenamos: C n1+n2+n3

    Si luego hacemos:

    Escribir (C)

    Significara que en la pantalla del monitor se puede visualizar el valor de la variable C, o sea 22.

    OBSERVACIN:

    Cuando queramos escribir un mensaje que aparezca en la pantalla de la computadora,

    haremos uso de la palabra Escribir seguida de un parntesis y comillas. El mensaje ir

    dentro de las comillas.

    Escribir (aqu va el mensaje )

    Ejemplo:

    Escribir Voy a aprobar el curso de Algoritmos )

    22

    Voy a aprobar elcurso de

    Algoritmos

  • Curso de Algoritmos y Estructura de Datos

    24

    Lo ms razonable sera que antes de una instruccin de lectura realizramos una

    instruccin de escritura en la que se enve un mensaje indicando qu es lo que se va a

    introducir.

    Ejemplo:

    Escribir Ingrese su edad )

    Leer (edad)

    Para este curso, generalmente solo realizaremos la lectura de datos. As que, consideraremos

    como opcional el uso de los mensajes, ha menos que el profesor indique lo contrario.

    Cuando queremos presentar el valor de una variable, podemos presentarla sola o

    acompaada de un mensaje.

    Ejemplo: Supongamos que tenemos la variable entera max_edad que almacena la edad

    mxima de un conjunto de personas, la cual es 28. Para presentar el valor de esta

    variable haremos:

    Escribir (max_edad)

    Pero tambin podemos hacerlo de la siguiente forma:

    Escribir La mxima edad es: , max_edad)

    28

    La mximaedad es 28

  • Curso de Algoritmos y Estructura de Datos

    25

    OBSERVACIONES:

    En ocasiones podemos hacer uso de comentarios. Estos permiten explicar a los que

    vayan a revisar nuestro algoritmo el porqu se realizan ciertas acciones. Ejemplo:

    Pseudocdigo Ejemplo

    Var n1, n2, n3: entero

    prom: real

    Inicio

    Leer (n1, n2, n3)

    prom (n1+n2+n3)/3 ( * Media aritmtica de las 3 notas * )

    Escribir (prom)

    Fin

    Los comentarios que hagamos debern ir entre parntesis y asteriscos. ( * * ).

    El uso de los comentarios es opcional, aunque a veces sirven para que nuestro

    algoritmo sea ms entendible.

    Los comentarios no van a aparecer en la pantalla ni tampoco van a interferir con las

    instrucciones, solo son ayudas visuales.

  • Curso de Algoritmos y Estructura de Datos

    26

    UNIDAD IIESTRUCTURAS DE CONTROL

    En mayo de 1966 Botin y Jacopeni demostraron de que cualquier algoritmo, sin importar su

    complejidad, poda ser construido utilizando combinaciones de tres estructuras de control de

    flujo estandarizados (secuencial, selectivas o de seleccin y repetitivas o iterativas). El flujo de

    control se refiere al orden en que se ejecutan las sentencias del programa.

    Sinnimos: control de flujo, secuenciacin

    I. ESTRUCTURAS SECUENCIALES: Son aquellas en las que una accin sigue aotra en secuencia. La salida de una accin es la entrada de la siguiente y as sucesivamente, hasta

    el final del proceso.

    Accin 1

    Accin 2

    Accin 3

    Pseudocdigo Nomb_Alg

    Const

    Var

    Inicio

    Accin 1

    Accin 2

    Accin 3

    Fin

  • Curso de Algoritmos y Estructura de Datos

    27

    Ejemplo1: Disear un algoritmo que obtenga el valor de a partir de la ecuacin

    y=3x2+7x-15 solicitando como dato de entrada el valor de x. Solucin:

    Datos de entrada? x

    Datos de salida? y

    Proceso: y 3 * x * x + 7 * x 15

    Pseudocdigo Ejemplo_1

    Var x, y: real

    Inicio

    Leer (x)y 3 * x * x + 7 * x 15Escribir (y)

    Fin

    Ejemplo 2: Disee un algoritmo para calcular el salario neto de un trabajador si se conoce

    el nmero de horas trabajadas, precio de la hora de trabajo y considerando unos

    descuentos fijos, el sueldo bruto en concepto de impuestos (20%). Solucin:

    Pseudocdigo Salario

    Var horas_trab, precio_hora, sue_bru, sue_ne: real

    Inicio

    Leer (horas_trab, precio_hora)sue_bru horas_trab * precio_horasue_net 0.8 * sue_bruEscribir (sue_ne)

    Fin

    Antes de la instruccin de lectura:Leer (x) , pudimos haber enviado un mensaje de lasiguiente manera:Escribir ( Ingrese el valor de x ).

    En el curso de algoritmos, el uso de estosmensajes ser opcional, ha no ser que elprofesor indique lo contrario.

    Presentamosel valor de lavariable

  • Curso de Algoritmos y Estructura de Datos

    28

    Ejemplo 3: Disear un algoritmo para calcular el monto que debe pagar un cliente que

    desea comprar los productos A, B y C. Los precios de venta se dan como dato. Existe un

    descuento del 10% para los productos A y B antes del I.G.V. Solucin:

    Pseudocdigo Ejemplo_3

    Var PA, PB, PC, CA, CB, CC, PTA, PTB, PTC, IGV, PP: real

    Inicio

    Escribir ( Ingrese los precios de los productos A, B y C )

    Leer (PA, PB, PC)

    PTA 0.9 * (PA * CA)

    PTB 0.9 * (PB * CB)

    PTC PC * CC

    IGV 0.19 * (PTA+PTB+PTC)

    PP PTA+PTB+PTC+IGV

    Escribir ( Total a pagar: , PP)

    Fin

    Este mensaje ser opcional

  • Curso de Algoritmos y Estructura de Datos

    29

    UTILIDAD DE LOS OPERADORES div Y mod

    Los operadores div y mod son importantes en muchos problemas relacionados a la inversin de

    nmeros, clculo del mcd, verificacin de numerales capicas, cambios de sistema de

    numeracin, cantidad de divisores de un nmero, saber si un nmero es primo, . . , etc.

    Ejemplos:

    Sea N = 123Si queremos invertirlo seguimos los siguientes pasos:

    1. Debemos tomar la primera cifra que se encuentra a la derecha de 123 que es 3, por eso

    dividimos 123 entre 10 y nos quedamos con el residuo el cual lo almacenamos en una variable

    llamada R1. (Utilizamos el operador mod)

    R1 N mod 10 (R1 = 3)2. Ahora debemos quedarnos con el nmero que queda a la izquierda del 3, es decir, con 12. Para

    eso dividimos 123 entre 10 y nos quedamos con el cociente el cual lo almacenamos en una

    variable llamada N1. (Utilizamos el operador div)

    N1 N div 10 (N=12)

    As, tenemos:

  • Curso de Algoritmos y Estructura de Datos

    30

    3. Volvemos a repetir los pasos anteriores, tomaremos la primera cifra de la derecha de 12 el cual

    es 2, por eso dividimos 12 entre 10 y nos quedamos con el residuo el cual lo almacenamos en

    una variable llamada R2. (Utilizamos el operador mod)

    R2 N1 mod 10 (R2 = 2)4. Ahora debemos quedarnos con el nmero que queda a la izquierda de 2, es decir, con 1. Para eso

    dividimos 12 entre 10 y nos quedamos con el cociente el cual lo almacenamos en una variable

    llamada N2. (Utilizamos el operador div)

    N2 N1 div 10 (N2=1)As tenemos:

  • Curso de Algoritmos y Estructura de Datos

    31

    Ahora que ya tenemos los dgitos del nmero inicial N = 123 almacenados en distintas variables,

    ya podremos formar el nmero invertido.

    Sea la variable NI la que almacene al nmero invertido. Se tiene:

    NI R1 * 100 + R2 * 10 + N2

    Ejemplo 4: Disear un algoritmo para invertir un nmero entero de 4 cifras.

    Nota: Pondremos en prctica la utilizacin de los operadores div y mod. Solucin:

    Datos de entrada? Nmero de 4 dgitos: N

    Datos de salida? Nmero invertido: NI

    Proceso? Divisiones sucesivas entre 10

    Pseudocdigo Inversin

    Var N, N1, NI, R1, R2, R3, R4: entero

    Inicio

    Leer (N)R1 N mod 10N1 N div 10R2 N1 mod 10N2 N1 div 10R3 N2 mod 10N3 N2 div 10NI R1 * 1000 + R2 * 100 + R3 * 10 + N3Escribir El nmero invertido es: NI)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    32

    II. ESTRUCTURAS SELECTIVAS

    Son tambin llamadas ESTRUCTURAS CONDICIONALES, ESTRUCTURAS DE DECISIN o

    ESTRUCTURAS ALTERNATIVAS. Son usadas para tomar decisiones. En estas estructuras se

    evala una condicin (una condicin es una expresin lgica que da como resultado o verdadero o

    falso) y segn el resultado se realiza una u otra accin. La representacin de las estructuras

    selectivas se hace:

    EN PSEUDOCDIGO: Se usan las palabras reservadas: Si entonces, Sino (If then, else)

    EN DIAGRAMA DE FLUJOS: Se usa una figura geomtrica con forma de rombo llamada DECISIN.

    CLASIFICACIN:

    A. ESTRUCTURA SELECTIVA SIMPLE: (Si entonces / If then ) , tambin conocida como

    alternativa simple.

    Se evala una condicin y:

    - Si es verdadera _ Se ejecutan ciertas acciones

    - Si es falsa _ No se ejecuta ninguna accin, contina

    Accin 2

    Condicin

    V

    F Si (condicin) entonces

    Accin 1

    Accin 2

    Accin 3

    fin_si

  • Curso de Algoritmos y Estructura de Datos

    33

    Ejemplo 5: Disear un algoritmo que halle el nuevo sueldo de un empleado si conocido su

    sueldo actual se le aplique un aumento del 15% en el caso que dicho sueldo actual sea

    superior a S/. 1000. Solucin:

    Pseudocdigo Sueldo

    Var sueldo: entero

    Inicio

    Escribir ( Ingrese su sueldo actual )Leer (sueldo)Si (sueldo > 1000) entonces

    sueldo 1.15 * sueldofin_si

    Escribir (sueldo)Fin

    Ejemplo 6: Disear un algoritmo para calcular el promedio de 4 notas de prcticas

    calificadas eliminando la menor nota.

    Solucin:

    Datos de entrada? Las 4 notas de las prcticasDatos de salida? El promedio de las 3 notas ms altas.Proceso? Encontrar la menor nota mediante comparaciones.

    Pseudocdigo Promedio_prctica

    Var pc1, pc2, pc3, pc4, mn: entero

    prom: real

    Inicio

    Escribir ( Ingrese las notas de prcticas )Leer (pc1, pc2, pc3, pc4)mn pc1Si (pc2 < mn) entonces

    mn pc2fin_siSi (pc3 < mn) entonces

    mn pc3fin_siSi (pc4 < mn) entonces

    mn pc4fin_siprom (pc1+pc2+pc3+pc4-mn) / 3Escribir El promedio de prcticas es: , prom)

    Fin

    Inicializamos lavariable mn con elvalor de cualquierade las prcticas: pc1,pc2, pc3, pc4, en estecaso con pc1

  • Curso de Algoritmos y Estructura de Datos

    34

    Ejemplo 7: Se desea leer 3 nmeros enteros y luego:

    a) Identifique y presente el nmero medio del conjunto de los 3 nmeros.

    b) Organice los 3 nmeros en forma ascendente.

    Solucin:

    Pseudocdigo Ejemplo7

    Var n1, n2, n3, mx, mn, me: entero

    Inicio

    Leer (n1, n2, n3)mx n1mn n1

    Si (n2 > mx) entonces

    mx n2

    fin_si

    Si (n3 > mx) entonces

    mx n3

    fin_si

    Si (n2 < mn) entonces

    mn n2

    fin_si

    Si (n3 < mn) entonces

    mn n3

    fin_si

    (*Calculando el nmero medio del conjunto*)

    me n1 + n2 + n3 (mx + mn)

    Escribir (me)

    (*Mostrando los nmeros en forma ascendente*)

    Escribir (mn, me, mx)

    Fin

    Inicializamos lasvariables max y mncon el valor decualquiera de lasnotas: n1, n2, n3; eneste caso con n1

  • Curso de Algoritmos y Estructura de Datos

    35

    B. ESTRUCTURA SELECTIVA DOBLE: (Si entonces; Sino / If then; Else ) , tambin conocida

    como alternativa doble.

    Se utiliza cuando se evala una condicin y se presentan dos alternativas, luego:

    - Si la condicin es verdadera _ Se ejecutan ciertas acciones

    - Si es la condicin es falsa _ Se ejecutan otras acciones

    Ejemplo 8: Una universidad aplica dos exmenes E1 y E2 a sus postulantes. Los postulantes

    son admitidos si tienen una calificacin mayor que 80 en al menos uno de los exmenes, en

    caso contrario, ser rechazado. Disee un algoritmo que soluciones el problema y diga si un

    alumno est aprobado o desaprobado.

    Solucin:

    Pseudocdigo Examen_Admisin

    Var E1, E2: entero

    Inicio

    Leer (E1, E2)

    Si (E1 > 80 E1 > 80) entoncesEscribir admitido )

    sinoEscribir rechazado )

    fin_si

    Fin

    Si (condicin) entonces

    Acciones1

    Sino

    Acciones2

    fin_siAccin 2

    CondicinV F

    Accin 1

  • Curso de Algoritmos y Estructura de Datos

    36

    Ejemplo 9: Algoritmo para resolver una ecuacin paramtrica.

    Nota: Recordar que una ecuacin paramtrica tiene la forma: ax=b. Si a 0 entonces la solucin

    es nica y sera x=b/a; Si a = 0 y b = 0 entonces habran infinitas soluciones; Si a = 0 y b 0

    entonces no existira solucin. Solucin:

    Pseudocdigo Ecuacin_Paramtrica

    Var a, b, x: real

    Inicio

    Leer (a, b)Si (a 0) entonces

    x b/aEscribir solucin nica: , x)

    sino Si (b=0) entonces

    Escribir ( Ecuacin consistente indeterminada, infinitas soluciones )Sino

    Escribir Ecuacin inconsistente, no hay solucin )fin_si

    fin_si

    Fin

    Ejemplo 10: Dado un ao, indicar si es bisiesto o no.

    Nota: Un ao es bisiesto si es mltiplo de 4 y no de 100 o es mltiplo de 400.

    Solucin:

    Pseudocdigo Ao_Bisiesto

    Var ao: entero

    Inicio

    Leer (ao)

    Si ((ao mod 4 = 0 ao mod 100 0) ao mod 400 = 0) entonces

    Escribir ( Es Bisiesto )

    sino

    Escribir ( No es bisiesto )

    fin_si

    Fin

    Sabemos que un nmero es mltiplo de otro cuandola divisin es exacta, por eso utilizamos el operadormod para calcular el residuo. Si este es cerosabremos que es mltiplo.

  • Curso de Algoritmos y Estructura de Datos

    37

    Ejemplo 11: Hallar el mayor de tres nmeros reales. Solucin:

    Pseudocdigo Mayor

    Var a, b, c, mx: entero

    Inicio

    Leer (a, b, c)

    Si (a > b) entoncesmx a

    sinomx b

    fin_si

    Si (c > mx) entonces

    mx c

    fin_si

    Escribir (mx)

    Fin

    Ejemplo 12: Disee un algoritmo que calcule el nuevo sueldo de un empleado conociendo su

    sueldo actual bajo el siguiente criterio. Aumente en 12% su sueldo si este es superior a

    s/.100 y un 20% en caso contrario. Solucin

    Pseudocdigo Sueldo

    Var sueldo, nsueldo: real

    Inicio

    Leer (sueldo)

    Si (sueldo > 100) entonces

    nsueldo 1.12 * sueldo

    sino

    nsueldo 1.2 * sueldo

    fin_si

    Escribir (nsueldo)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    38

    Ejemplo 13: Dado 3 nmeros, determinar si la suma de cualquier pareja de ellas es igual al

    tercero. Si se cumple la condicin, escribir iguales y en caso contrario distintos .

    Solucin: Vamos a resolverlo de dos formas:

    Primera Forma:

    Pseudocdigo Ejemplo_13

    Var a, b, c: entero

    Inicio

    Leer (a, b, c)

    Si (a+b=c) entoncesEscribir ( Iguales )

    sino

    Si (b+c=a) entoncesEscribir Iguales )

    sino

    Si (a+c=b) entoncesEscribir Iguales )

    sino

    Escribir Distintos )fin_si

    fin_si

    fin_si

    Fin

    Segunda Forma: Observen cmo el uso del operador lgico disminuye considerablemente el

    nmero de instrucciones selectivas dobles.

    Pseudocdigo Ejemplo_13

    Var a, b, c: entero

    Inicio

    Leer (a, b, c)

    Si (a+b=c a+c=b b+c=a) entoncesEscribir ( Iguales )

    sino

    Escribir Distintos )fin_si

    Fin

  • Curso de Algoritmos y Estructura de Datos

    39

    Ejemplo 14: Una empresa qumica paga a sus vendedores un sueldo bsico quincenal de s/.

    250 ms un % del total de las ventas efectuadas segn la siguiente tabla.

    Monto total de ventas % de pago

    MV S/. 2000 15%

    S/. 1500 MV S/. 2000 12%

    S/. 0 MV S/. 1500 10%

    Por otro lado si el sueldo del vendedor supera los S/. 800, ste se somete a un impuesto del

    10% sobre su sueldo total. Desarrolle un algoritmo que permita conocer el monto del

    descuento por impuesto, el sueldo neto y el sueldo total.

    Solucin

    Voy a utilizar las siguientes variables: sb: sueldo bsico, mtv: monto total de las ventas, desc:

    descuento, sn: sueldo neto.

    Pseudocdigo Sueldo

    Var sb, mtv, desc, sn: real

    Inicio

    sb 250.0

    Leer (mtv)

    Si (mtv 2000) entoncesst sb + 0.15 * mtv

    sino

    Si (mtv 1500) entoncesst sb + 0.12 * mtv

    sino

    st sb + 0.1 * mtv fin_si

    fin_si

    Si (st > 8000) entoncesdesc 0.1 * stsn st - desc

    sino

    desc 0

    sn st

    fin_si

    Escribir (st, desc, sn)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    40

    Este problema puede ser resuelto cambiando la ltima parte de la siguiente forma:

    Pseudocdigo Sueldo

    Var sb, mtv, desc, sn: real

    Inicio

    sb 250.0

    Leer (mtv)

    Si (mtv 2000) entonces

    st sb + 0.15 * mtvsino

    Si (mtv 1500) entoncesst sb + 0.12 * mtv

    sino

    st sb + 0.1 * mtvfin_si

    fin_si

    Si (st > 8000) entoncesdesc 0.1 * st

    sino

    desc 0

    fin_si

    sn st - desc

    Escribir (st, desc, sn)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    41

    Ejemplo 15: Dado 3 nmeros, presentarlos en forma decreciente. Solucin

    Pseudocdigo Ejemplo_15

    Var a, b, c: entero

    Inicio

    Leer (a, b, c)

    Si (a > b) entoncesSi (b>c) entonces

    Escribir (a, b, c)sino (* c b *)

    Si (a>c) entoncesEscribir (a, c, b)

    sino (* c a *)

    Escribir (c, a, b)fin_si

    fin_si

    Sino (* b a *)

    Si (a>c) entoncesEscribir (b, a, c)

    sino (* c a *)

    Si (b>c) entoncesEscribir (b, c, a)

    sino (* c b *)

    Escribir (c, b, a)fin_si

    fin_si

    fin_si

    Fin

  • Curso de Algoritmos y Estructura de Datos

    42

    Ejemplo 16: Dado 4 nmeros enteros diferentes, presentar el segundo mayor. Solucin

    Para resolver este problema, vamos a tratar de ordenar los nmeros de mayor a menor, y para

    eso realizaremos comparaciones de la siguiente forma:

    Los nmeros que van a ser ingresados, van a ser almacenados en las variables a, b, c y d. Luego

    comparamos y y tratamos de almacenar en el mayor de entre estos dos, y

    almacenamos en el menor de entre estos dos. Para eso usamos la siguiente instruccin:

    Si (a < d) entoncesaux aa dd aux

    fin_si

    Lo mismo haremos con b y c.

    Si (b < c) entoncesaux bb cc aux

    fin_si

    Entonces obtendremos dos mximos y dos mnimos parciales: max1, max2, min2, min1, los

    cuales estarn almacenados en ese orden en las variables a, b, c, d.

    Luego compararemos los dos mximos parciales (max1 y max2 que estn almacenados en a y b)

    de tal forma que tratemos de almacenar el mayor de entre estos dos en y el menor de entre

    estos dos en . De manera anloga se comparar los dos mnimos parciales (min2 y min1 que

    estn almacenados en c y d) de tal forma que tratemos de almacenar el menor de entre estos dos

    en y el mayor de entre estos dos en . De esta forma estamos asegurando que el mximo de

    los 4 nmeros iniciales se encuentre almacenado en y que el mnimo de los 4 nmeros se

    encuentre almacenado en . Por ltimo queda comparar y que de tal forma que

    tratemos de almacenar en el mayor de entre estos dos y en el menor de entre estos dos.

    En conclusin, la finalidad de este mtodo fue el de ordenar los nmeros ingresados de mayor a

    max1

    min1

    max2min2

    max3min3max4min4

    max5min5

    a

    b

    c

    d

  • Curso de Algoritmos y Estructura de Datos

    43

    menor pues de esta forma se sabe quin es el segundo mayor, tercero mayor, segundo menor,

    etc. (a > b > c > d)

    Pseudocdigo Segundo_Mayor

    Var a, b, c, d, aux: entero

    Inicio

    Leer (a, b, c, d)

    Si (a < d) entoncesaux aa dd aux

    fin_si

    Si (b < c) entoncesaux bb cc aux

    fin_si

    Si (a < b) entoncesaux aa bb aux

    fin_si

    Si (c < d) entoncesaux cc dd aux

    fin_si

    Si (b < c) entoncesaux bb cc aux

    fin_si

    Escribir ( El segundo mayor es: b)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    44

    C. ESTRUCTURA SELECTIVA MLTIPLE: (En_caso, sino, fin_caso), Se utiliza cuando existan ms

    de dos alternativas o elecciones posibles. Se evala un Selector que podr tener n valores

    distintos: 1, 2, 3, ,n y de acuerdo al valor que se obtenga se realizar o ejecutar alguna accin

    o acciones.

    Donde:

    SELECTOR: Es una variable del tipo ordinal, es decir, puede ser:

    Variable del tipo caracter (excepto los especiales)

    Variable del tipo numrico entero

    Variable del tipo lgico

    No puede ser numrico real ni cadena de caracteres

    CASO: Los casos son constantes del tipo ordinal (no pueden haber expresiones), vendran a

    representar las alternativas y podran tener las siguientes formas:

    5

    5, 6, 7

    , ,

    V (constante lgica verdadera)

    F (constante lgica Falso)

    Sentencia2

    SELECTOR

    Sentencia1 Sentencian

    Caso Caso 2 Caso n

    En_caso (SELECTOR)

    Caso1: Sentencia 1Caso2: Sentencia 2.

    . .

    CasoN: Sentencia NSino

    Sentencia X

    fin_caso

  • Curso de Algoritmos y Estructura de Datos

    45

    1. . 5 (es equivalente a 1, 2 , 3, 4, 5)

    . . (es equivalente a B, C, D, E, F)

    OBSERVACIONES:

    Como se puede apreciar, los casos o alternativas pueden estar conformados por un valor o

    por una lista de valores.

    Los valores que toman los casos no tienen porqu ser necesariamente consecutivos.

    Ejemplo:

    1, 3, 7, 12

    Adems se puede apreciar que los casos pueden ser rangos de constantes numricas o de

    caracteres. En general, para indicar un rango de constantes del tipo ordinal (caracteres,

    nmeros enteros,) se tiene el siguiente formato:

    El uso del Sino es opcional.

    Funcionamiento de la instruccin:

    El SELECTOR se compara con cada uno de los casos, si hay coincidencia, realiza o se ejecuta la

    sentencia correspondiente y luego contina con el resto del algoritmo. Si es que no hay

    coincidencia con ninguno de los casos y si:

    Tenemos el SINO: Entonces se realiza la sentencia que se encuentra dentro de este

    bloque.

    No tenemos el SINO: Entonces no realiza ninguna accin y la sentencia termina.

    Lm_inf . . Lm_sup

    Dos puntos

  • Curso de Algoritmos y Estructura de Datos

    46

    Ejemplo 17: Se desea determinar el salario mensual de un obrero conociendo el nmero

    total de horas trabajadas al mes y el turno en que labora. De acuerdo al turno en que

    labora, se tiene las siguientes tarifas.

    Turno Pago x Hora

    M 30.5

    T 27.9

    N 36.5

    Solucin:

    Pseudocdigo Salario

    Var horas_trab: entero

    turno: caracter

    salario: real

    Inicio

    Leer (horas_trab, turno)

    En_caso (turno)

    M: salario horas_trab * 30.5

    T: salario horas_trab * 27.9

    N: salario horas_trab * 36.5

    fin_caso

    Escribir (salario)

    Fin

    Como se observa, no se utiliz el SINO.

  • Curso de Algoritmos y Estructura de Datos

    47

    Ejemplo 18: Disee un algoritmo que escriba los nombres de los das de la semana en

    funcin del valor de una variable da introducida por el teclado. Solucin:

    Pseudocdigo Das

    Var da: entero

    Inicio

    Leer (da) En_caso (da)

    1: Escribir Lunes )2: Escribir Martes )3: Escribir Mircoles )4: Escribir Jueves )5: Escribir Viernes )6: Escribir Sbado )7: Escribir Domingo )

    fin_caso

    Fin

    Ejemplo 19: Solo empleando la instruccin selectiva mltiple, halle el mayor de 3 nmeros

    reales. Solucin:

    Pseudocdigo Mayor

    Var a, b, c, mx: entero

    Inicio

    Leer (a, b, c)

    En_caso (a > b)

    V: mx aF: mx b

    fin_caso

    En_caso (c > mx)

    V: mx c fin_caso

    Fin

  • Curso de Algoritmos y Estructura de Datos

    48

    Ejemplo 20: Disear un algoritmo para determinar el costo del servicio de una ca

    fumigadora de terrenos hacia un agricultor que tiene una determinada extensin de

    terreno. La tarifa depende del tipo de fumigacin:

    Tipo

    1 Fumigacin contra malas hierbas S/. 10 Ha

    2 Fumigacin contra langostas S/ 20 Ha

    3 Fumigacin contra gusanos S/. 30 Ha

    4 Fumigacin contra todo lo anterior S/. 50 Ha

    Si el rea a fumigar es mayor a 500 Ha, tiene un descuento del 5%; adems, si el total a

    pagar por el servicio es mayor a S/. 1500 , tiene un descuento del 10% sobre el exceso.

    Solucin:

    Pseudocdigo Fumigacin

    Var costo, Ha: real

    tipo: entero

    Inicio

    Leer (tipo, Ha)

    En_caso (tipo)

    1: costo Ha * 102: costo Ha * 203: costo Ha * 304: costo Ha * 50

    fin_caso

    Si (Ha >500) entonces

    costo 0.95 * costo

    fin_si

    Si (costo >1500) entonces

    costo 0.9 * costo

    fin_si

    Escribir (costo)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    49

    Ejemplo 21: En una olimpiada de tiro al blanco se llega a un acuerdo para que el puntaje

    final obtenido sea calculado en base al puntaje original alcanzado en el tiro (del 1 al 10)

    multiplicado por un factor, segn la siguiente tabla:

    Se pide disear un algoritmo que calcule el puntaje final de un determinado jugador

    Solucin:

    Pseudocdigo Juego

    Var punt, punt_final: entero

    Inicio

    Leer (punt)

    En_caso (punt)

    0: punt_final punt * 01 . . 3: punt_final punt * 34 . . 6: punt_final punt * 87 . . 10: punt_final punt * 10

    fin_caso

    Escribir (punt_final)

    Fin

    Ejemplo 22: Se desea leer por teclado un nmero comprendido desde 1 al 10 y se desea visualizar

    un mensaje en la pantalla indicando su el nmero ingresado es par o impar (Use la instruccin

    selectiva mltiple) Solucin:

    Pseudocdigo Nmero

    Var num: entero

    Inicio

    Leer (num)

    En_caso (num)1, 3 , 5, 7, 9: Escribir ( impar )2, 4, 6, 8, 10: Escribir ( par )

    fin_caso

    Escribir (punt_final)

    Fin

    Puntaje Original Factor

    0 0

    1 3 3

    4 6 8

    7 - 10 10

  • Curso de Algoritmos y Estructura de Datos

    50

    III. ESTRUCTURAS REPETITIVAS:Las estructuras repetitivas son aquellas en las cuales se utilizan a las instrucciones de control

    repetitivas, los cuales son tambin llamados bucles de repeticin.

    Existen tres estructuras repetitivas:

    Estructura Repetitiva Desde (Bucle con nmero de repeticiones preestablecido)

    Estructura Repetitiva Mientras (Bucle con entrada Controlada)

    Estructura Repetitiva Repetir (Bucle con salida controlada)

    A. EL BUCLE CON NMERO DE REPETICIONES PREESTABLECIDO: Es utilizado cuando el

    nmero de repeticiones o iteraciones se conoce, es decir, cuando ya sabemos el nmero de veces

    que vamos a repetir una misma accin. Por ejemplo: Para calcular el factorial de un nmero,

    sabemos el nmero de veces que se va a multiplicar el nmero por sus menores consecutivos

    hasta el 1.

    Donde:

    Vi: Valor inicial (no necesariamente empieza en uno)

    Vf: Valor final

    Vi, Vf, cont: son del tipo ORDINAL

    Funcionamiento: La sentencia se repite desde que cont toma el valor inicial Vi hasta quealcanza en forma secuencial el valor final Vf.

    Por ejemplo:

    desde i 1 hasta 4

    Escribir ( i )

    fin_desde

    cont Vi hasta Vf

    Sentencia

    cont

    Desde cont Vi hasta Vf

    Sentencia

    fin_desde

    1234

  • Curso de Algoritmos y Estructura de Datos

    51

    desde car X hasta Z Escribir ( car )

    fin_desde

    En este curso, generalmente, solo se va a considerar avanzar de 1 en 1. Adems depender del

    profesor con el que estn llevando el curso.

    Ejemplo 23: Disear un algoritmo para calcular el factorial de un nmero entero positivo.

    Solucin: Vamos a utilizar el contador .

    Pseudocdigo Factorial

    Var i, num, fac: entero

    Inicio

    Leer (num)

    fac 1

    desde i 1 hasta num

    fac fac * i

    fin_desde

    Escribir (fac)

    Fin

    Ejemplo 24: Se pide sumar los n primeros nmeros naturales.

    Solucin: Vamos a utilizar un acumulador y un contador . Recuerde que para el uso de un

    acumulador, en primer lugar hay que inicializarlo, es decir, asignarle un valor inicial.

    Generalmente los acumuladores se inicializan en cero.

    Pseudocdigo Suma

    Var i, S, n: entero

    Inicio

    Leer (n)

    S 0

    desde i 1 hasta n

    S S + i

    fin_desde

    Escribir (S)

    Fin

    XYZ

  • Curso de Algoritmos y Estructura de Datos

    52

    FACTORIAL, DIVISORES, NMEROS PRIMOS

    Ejemplo 25: Disear un algoritmo para calcular el factorial de n nmeros naturales ledos.

    Solucin: Vamos a utilizar dos instrucciones repetitivas, una para calcular el factorial de un

    nmero (tal y como lo hicimos en el ejercicio 23, y otra instruccin en que permite la lectura

    (ingreso) de los nmeros. Adems, debemos usar dos contadores diferentes: y , uno

    para cada instruccin repetitiva.

    Pseudocdigo Factorial

    Var i, j, num, n, fac: entero

    Inicio

    Leer (n) (* n es la cantidad de nmeros que se va a ingresar *)

    desde i 1 hasta n

    Leer (num)

    fac 1

    desde j 1 hasta num

    fac fac * j

    fin_desde

    Escribir (fac)

    fin_desde

    Fin

    Ejemplo 26: Disee un algoritmo tal que, dado un nmero entero positivo, presente la

    cantidad de divisores.

    Solucin: Aqu vamos a usar el operador mod, debido a que si un nmero es divisible por otro,

    entonces la divisin de ambos debe ser exacto y el residuo debe ser cero. Usaremos una

    instruccin repetitiva dentro de la que se encontrar una instruccin selectiva, en donde la

    condicin ser: si la divisin de un nmero entre otro arroja como residuo cero, es decir, num1

    mod num2 = 0 entonces se contabiliza, lo cual se realiza a partir de un contador que representa

    la cantidad de divisores, cont cont+1 (sin olvidar de inicializar el contador con el valor de

    cero).

  • Curso de Algoritmos y Estructura de Datos

    53

    Pseudocdigo Cantidad_Divisores

    Var cont, i, num: entero

    Inicio

    cont 0

    Leer (num)

    desde i 1 hasta num

    Si (num mod i = 0) entonces

    cont cont +1

    fin_si

    fin_desde

    Escribir (cont)

    Fin

    Ejemplo 27: Disee un algoritmo tal que, dado un nmero entero positivo, presente todos

    sus divisores y la cantidad de estos.

    Solucin: Similar al ejercicio anterior.

    Pseudocdigo Divisores

    Var cont, i, num: entero

    Inicio

    cont 0

    Leer (num)

    desde i 1 hasta num

    Si (num mod i = 0) entonces

    Escribir ( i )

    cont cont +1

    fin_si

    fin_desde

    Escribir (cont)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    54

    Ejemplo 28: Disee un algoritmo tal que, para un grupo de n nmeros enteros positivos,

    presente todos sus divisores y la cantidad de estos.

    Solucin: Al ejercicio anterior se le agrega una instruccin repetitiva.

    Pseudocdigo Divisores

    Var cont, i, j, num, n: entero

    Inicio

    Leer (n)

    desde i 1 hasta n

    cont 0

    Leer (num)

    desde j 1 hasta num

    Si (num mod j = 0) entonces

    Escribir ( j )

    cont cont +1

    fin_si

    fin_desde

    Escribir (cont)

    fin_desde

    Fin

  • Curso de Algoritmos y Estructura de Datos

    55

    Ejemplo 29: Disee un algoritmo tal que dado un nmero entero positivo, identifique si esprimo.Solucin: Un nmero es primo cuando tiene como divisores nicamente a s mismo y a la

    unidad. Para identificar si un nmero es primo, lo que se hace es contar todos sus divisores, y

    solo cuando el nmero de divisores es dos, ser primo.

    Pseudocdigo Primo

    Var i, num, cont: entero

    Inicio

    cont 0

    Leer (num)

    desde i 1 hasta num

    Si (num mod i = 0) entonces

    cont cont +1

    fin_si

    fin_desde

    Si (cont=2) entonces

    Escribir ( Es primo )

    sino

    Escribir No es primo )

    fin_si

    Fin

    Ejemplo 30: Para un conjunto de nmeros enteros positivos, identifique cuando es

    primo, o compuesto mediante un mensaje en la pantalla: es primo o es compuesto . Si es

    compuesto, presente sus divisores y la cantidad de divisores que posee. Adems, al final

    presente cuantos de los n nmeros ingresados resultaron ser primos y cuntos resultaron

    ser compuestos.

    Solucin: Este ejercicio es una combinacin de los ejemplos anteriores, pero, aqu a parte de

    utilizar un contador para la cantidad de divisores (cont_d) de cada nmero ingresado, vamos a

    utilizar dos contadores adicionales para contabilizar la cantidad de primos (cont_p) y la cantidad

    de compuestos (cont_c).

  • Curso de Algoritmos y Estructura de Datos

    56

    Pseudocdigo Ejemplo_30

    Var n, num, i, j, cont_d, cont_p, cont_c: entero

    Inicio

    cont_p 0

    cont_c 0

    Leer (n)

    desde i 1 hasta n

    Leer (num)

    Si (num = 1) entonces

    Escribir no es primo ni compuesto, es un nmero simple )

    sino

    cont_d 0

    desde j 1 hasta num

    Si (num mod j = 0) entonces

    Escribir ( j )

    cont_d cont_d + 1

    fin_si

    fin_desde

    Si (cont = 2 ) entonces

    Escribir es primo )

    cont_p cont_p + 1

    sino

    Escribir Es compuesto )

    Escribir Nmero de divisores: , cont_d)

    cont_c cont_c + 1

    fin_si

    fin_si

    fin_desde

    Escribir Cantidad de nmeros primos: , cont_p)

    Escribir Cantidad de nmeros compuestos: , cont_c)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    57

    Ejemplo 31: La ASJ est interesada en promover la natacin y para ello desea conocer

    jvenes con las siguientes condiciones: edad (menor de 18 aos), estatura (mnimo 1.70

    cm.) y peso (mximo 70 Kg.). Disear un algoritmo en el cual se lean la edad, estatura, peso

    de un grupo de n deportistas y verifique cuantos de ellos cumplen las condiciones

    impuestos. Presentar la edad, peso, estatura el nmero de jvenes que cumplen y el peso

    promedio de estos.

    Solucin:

    Pseudocdigo ASJ

    Var edad, i, n, cont: entero

    talla, peso, peso_prom, suma_p: real

    Inicio

    cont 0

    suma_p 0

    Leer (n)

    desde i 1 hasta n

    Leer (edad, talla, peso)

    Si (edad < 18 talla 1.7 peso 70) entonces

    cont cont + 1

    suma_p suma_p + peso

    Escribir (edad, talla, peso)

    fin_si

    fin_desde

    Si (cont 0 ) entonces

    peso_prom suma_p / cont

    Escribir (peso_prom)

    sino

    Escribir Ninguno cumple las condiciones )

    fin_si

    Fin

  • Curso de Algoritmos y Estructura de Datos

    58

    MXIMOS Y MNIMOS

    Ejemplo 32: Para n estudiantes se desea leer las notas (desde 0 hasta 20) y se pide

    averiguar la mayor nota.

    Solucin: Cuando se conoce el rango de valores que puede asumir una variable que represente a

    un valor mximo, debemos inicializarlo con el menor de los valores del rango. Por ejemplo,

    para este problema se van a leer notas los cuales se encuentran en el rango de 0 a 20, luego

    mediante una serie de instrucciones vamos tratar de hallar cual fue la mayor de todas las notas

    ingresadas la cual deber ser almacenada en una variable que llamaremos maxnota, pero antes

    de todo, debemos inicializar a nuestra variable maxnota con el valor cero (que es el menor del

    rango 0 20).

    Pseudocdigo Ejemplo30

    Var n, nota, maxnota, i: entero

    Inicio

    Leer (n)

    maxnota 0

    desde i 1 hasta n

    Leer (nota)

    Si (maxnota < nota) entonces

    maxnota nota

    fin_si

    fin_desde

    Escribir (maxnota)

    Fin

    Estamos inicializando la variable entera maxnota con elvalor 0 (cero), que es el menor de los valores del rango (0 a20)

  • Curso de Algoritmos y Estructura de Datos

    59

    Ejemplo 33: Para n estudiantes se desea leer las notas (Desde 0 hasta 20 y se pide

    averiguar la menor nota.

    Solucin: De forma anloga al ejercicio anterior. Cuando se conoce el rango de valores que

    puede asumir una variable que represente a un valor mnimo, debemos inicializarlo con el

    mayor de los valores del rango. Por ejemplo, para este problema se van a leer notas los cuales se

    encuentran en el rango de 0 a 20, luego mediante una serie de instrucciones vamos tratar de

    hallar cual fue la menor de todas las notas ingresadas la cual deber ser almacenada en una

    variable que llamaremos minnota, pero antes de todo, debemos inicializar a nuestra variable

    minnota con el valor 20 (que es el mayor del rango 0 20).

    Pseudocdigo Ejemplo33

    Var n, nota, minnota, i: entero

    Inicio

    Leer (n)

    minnota 20

    desde i 1 hasta n

    Leer (nota)

    Si (minnota > nota) entonces

    minnota nota

    fin_si

    fin_desde

    Escribir (minnota)

    Fin

    Estamos inicializando la variable entera minnota con elvalor 20 (veinte), que es el mayor de los valores del rango(0 a 20)

  • Curso de Algoritmos y Estructura de Datos

    60

    Ejemplo 34: Para n estudiantes se desea leer los cdigos y se pide averiguar el mayor

    cdigo ingresado.

    Solucin: Cuando no se conoce el rango de valores que puede asumir una variable que

    represente a un valor mximo, debemos inicializarlo con el primero de los datos ingresados.

    Por ejemplo, para este problema se van leer (ingresar) cdigos de los que no sabemos en que

    rango se encuentran, y mediante una serie de instrucciones vamos tratar de hallar cual fue el

    mayor de todos los cdigos ingresados el cual deber ser almacenado en una variable que

    llamaremos maxcod, pero antes de todo, debemos inicializar a nuestra variable maxcod con el

    primero de los datos ingresados. (En el supuesto caso en el que nos hubieran dicho que los

    cdigos se encuentran en el rango 100 999 , entonces hubiramos inicializado a la variable

    maxcod con 100)

    Se puede resolver de dos formas que no difieren mucho.

    Pseudocdigo Ejemplo34

    Var n, cod, maxcod, i: entero

    Inicio

    Leer (n)

    desde i 1 hasta n

    Leer (cod)

    Si (i = 1) entonces

    maxcod cod

    sino

    Si (maxcod < cod) entonces

    maxcod cod

    fin_si

    fin_si

    fin_desde

    Escribir (maxcod)

    Fin

    Estamos inicializando la variable entera maxcod con elprimero de los datos ingresados (cuando i = 1, es decir, a laprimera vez que se ejecuta la instruccin desde)

    Cuando i = 2 , se lee el segundo cdigo, y se compara el cdigoledo anteriormente (que fue almacenado en maxcod) con elcdigo ledo ahora (que a sido almacenado en cod), de talforma que maxcod se quede con el mayor valor de entre estosdos. As se va repitiendo la instruccin y nos aseguramos quemaxcod almacene el mayor de todos los cdigos ledos.

  • Curso de Algoritmos y Estructura de Datos

    61

    Pseudocdigo Ejemplo34

    Var n, cod, maxcod, i: entero

    Inicio

    Leer (n)

    Leer (cod)

    maxcod cod

    desde i 2 hasta n

    Leer (cod)

    Si (maxcod < cod) entonces

    maxcod cod

    fin_si

    fin_desde

    Escribir (maxcod)

    Fin

    Estamos inicializando la variable entera maxcod con elprimero de los datos ingresados

    Debido a que inicializamos la variable maxcod fuera de lainstruccin repetitiva desde y el total de datos ingresadosdebe de ser n, entonces, la instruccin repetitiva solo serepetir n-1 veces (desde i = 2 hasta n)

  • Curso de Algoritmos y Estructura de Datos

    62

    Ejemplo 35: Para n estudiantes se desea leer las notas (desde 0 hasta 20) y se pide

    averiguar la mayor nota y cuntos lo obtuvieron. Solucin:

    Pseudocdigo Ejemplo35

    Var n, nota, maxnota, i, cont: entero

    Inicio

    Leer (n)

    cont 0

    maxnota 0

    desde i 1 hasta n

    Leer (nota)

    Si (maxnota < nota) entonces

    maxnota nota

    cont 1

    Sino

    Si (maxnota = nota) entonces

    cont cont + 1

    fin_si

    fin_si

    fin_desde

    Escribir (maxnota, cont)

    Fin

    Para probar si funciona este algoritmo, supongamos que las notas que se debieron ingresar fueron:

    05, 10, 15, 15, 12, 17, 17, 05. El proceso sera el siguiente:

    Debemos ingresar la cantidad de notas que vamos a almacenar, en este caso n debe ser 8.

    Leer (n)

    n = 8

    Inicializamos el contador con el valor de cero y a la variable maxnota tambin con cero.

    cont 0

    maxnota 0

    Comenzamos con la instruccin repetitiva DESDE

    desde i 1 hasta n

    Como vamos a utilizar un contador, no olvidar inicializarlo en cero

    Debido a que se conoce el rango, inicializamos lavariable entera maxnota con el valor de cero

    En esta parte del algoritmo, se va a contabilizar elnmero de coincidencias con la mayor nota.

    En esta parte se va a encontrar la mayor notaingresada, adems de actualizar el contador a 1.Actualizar el contador a 1 quiere decir, regresar elvalor de este a 1, porque puede darse el caso endonde se haya estado contabilizando una nota quepareca que era la mayor de todas, y luego cuandose ingrese una nota mayor, el contador debe volvera 1.

  • Curso de Algoritmos y Estructura de Datos

    63

    * CUANDO i = 1 :

    Ingresamos la primera nota (la cual ser leda por la computadora)

    Leer (nota)

    nota = 05

    Comparamos la variable maxnota que almacena el valor de 0 con la nota ahora ingresada que

    almacena el valor de 05

    Si (maxnota < nota) entonces

    Debido a que s se cumple la condicin (00 < 05) almacenamos en la variable maxnota, el valor

    de nota (05)

    maxnota nota

    maxnota = 05

    Y el contador lo inicializamos en 1 para indicar que encontramos una mayor nota.

    cont 1

    * CUANDO i = 2 :

    Ingresamos la segunda nota

    Leer (nota)

    nota = 10

    Comparamos la variable maxnota que almacena el valor de 05 con la nota ahora ingresada que

    almacena el valor de 10

    Si (maxnota < nota) entonces

    Debido a que s se cumple la condicin (05 < 10) almacenamos en la variable maxnota, el valor

    de nota (10)

    maxnota nota

    maxnota = 10

    Y el contador lo inicializamos en 1 (lo actualizamos a 1) para indicar que encontramos una

    mayor nota (mayor que la anterior)

    cont 1

    * CUANDO i = 3:

    Ingresamos la tercera nota

    Leer (nota)

    nota = 15

    Comparamos la variable maxnota que almacena el valor de 10 con la nota ahora ingresada que

    almacena el valor de 15

    Si (maxnota < nota) entonces

  • Curso de Algoritmos y Estructura de Datos

    64

    Debido a que s se cumple la condicin (10 < 15) almacenamos en la variable maxnota, el valor

    de nota (15)

    maxnota nota

    maxnota = 15

    Y el contador lo inicializamos en 1 (lo actualizamos a 1) para indicar que encontramos una

    mayor nota (mayor que la anterior)

    cont 1

    * CUANDO i = 4:

    Ingresamos la cuarta nota

    Leer (nota)

    nota = 15

    Comparamos la variable maxnota que almacena el valor de 10 con la nota ahora ingresada que

    almacena el valor de 15

    Si (maxnota < nota) entonces

    Debido a que no se cumple la condicin (15 < 15), nos vamos hacia el Sino

    Sino

    Evaluamos la condicin que se encuentra dentro del Sino

    Si (maxnota = nota) entonces

    Debido a que s se cumple esta condicin (15 = 15), ejecutamos lo que sigue a continuacin

    cont cont + 1

    Contabilizamos las coincidencias con esta supuesta mayor nota (por lo menos hasta ahora)

    cont = 1 + 1 = 2

    * CUANDO i = 5:

    Ingresamos la quinta nota

    Leer (nota)

    nota = 12

    Comparamos la variable maxnota que almacena el valor de 15 con la nota ahora ingresada que

    almacena el valor de 12

    Si (maxnota < nota) entonces

    Debido a que no se cumple la condicin (15< 12), nos vamos hacia el Sino

    Sino

    Evaluamos la condicin que se encuentra dentro del Sino

    Si (maxnota = nota) entonces

  • Curso de Algoritmos y Estructura de Datos

    65

    Debido a que tampoco se cumple esta condicin (15 = 12), nos salimos de la instruccin

    condicional y pasamos a la siguiente repeticin.

    * CUANDO i = 6:

    Ingresamos la sexta nota

    Leer (nota)

    nota = 17

    Comparamos la variable maxnota que almacena el valor de 15 con la nota ahora ingresada que

    almacena el valor de 17

    Si (maxnota < nota) entonces

    Debido a que s se cumple la condicin (15 < 17) almacenamos en la variable maxnota, el valor

    de nota (17)

    maxnota nota

    maxnota = 17

    Y el contador lo inicializamos en 1 (lo actualizamos a 1) para indicar que encontramos una

    mayor nota (mayor que la anterior)

    cont 1

    cont = 1

    * CUANDO i = 7:

    Ingresamos la sptima nota

    Leer (nota)

    nota = 17

    Comparamos la variable maxnota que almacena el valor de 17 con la nota ahora ingresada que

    almacena el valor de 17

    Si (maxnota < nota) entonces

    Debido a que no se cumple la condicin (17 < 15), nos vamos hacia el Sino

    Sino

    Evaluamos la condicin que se encuentra dentro del Sino

    Si (maxnota = nota) entonces

    Debido a que s se cumple esta condicin (17 = 17), ejecutamos lo que sigue a continuacin

    cont cont + 1

    Contabilizamos las coincidencias con esta supuesta mayor nota (por lo menos hasta ahora)

    cont = 1 + 1 = 2

  • Curso de Algoritmos y Estructura de Datos

    66

    * CUANDO i = 8:

    Ingresamos la octava nota

    Leer (nota)

    nota = 05

    Comparamos la variable maxnota que almacena el valor de 17 con la nota ahora ingresada que

    almacena el valor de 05

    Si (maxnota < nota) entonces

    Debido a que no se cumple la condicin (17< 05), nos vamos hacia el Sino

    Sino

    Evaluamos la condicin que se encuentra dentro del Sino

    Si (maxnota = nota) entonces

    Debido a que tampoco se cumple esta condicin (17 = 05), nos salimos de la instruccin

    condicional.

    Ahora que ya se termin nmero de notas a ingresar, maxnota almacena la mayor de todas las

    notas ingresadas que fue 17. Solo nos queda mostrarlo por la pantalla y la cantidad de veces que

    se ingres

    Escribir (maxnota, cont)

    En la pantalla deber mostrarse 17 y

  • Curso de Algoritmos y Estructura de Datos

    67

    Ejemplo 36: Para n estudiantes se desea leer las notas (desde 0 hasta 20) y se pide

    averiguar la menor nota y cuntos lo obtuvieron. Solucin:

    Pseudocdigo Ejemplo36

    Var n, nota, minnota, i, cont: entero

    Inicio

    Leer (n)

    cont 0

    minnota 20

    desde i 1 hasta n

    Leer (nota)

    Si (minnota > nota) entonces

    minnota nota

    cont 1

    Sino

    Si (minnota = nota) entonces

    cont cont + 1

    fin_si

    fin_si

    fin_desde

    Escribir (minnota, cont)

    Fin

    Este algoritmo se puede comprobar de la misma forma que en el ejercicio anterior.

    Como vamos a utilizar un contador, no olvidar inicializarlo en cero

    Debido a que se conoce el rango, inicializamos la variableentera minota con el valor de veinte

  • Curso de Algoritmos y Estructura de Datos

    68

    Ejemplo 37: 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 Ejemplo37

    Var cod, n, maxcod, i, cont: entero

    sexo: caracter

    nota, minnota: real

    Inicio

    Leer (n)

    maxcod 100

    minnota 20

    cont 0

    desde i 1 hasta n

    Leer (cod, nota, sexo)

    Si (sexo = ) entonces

    Si (minnota > nota) entonces

    minnota nota

    maxcod cod

    cont 1

    Sino

    Si (minnota = nota) entonces

    cont cont + 1

    Si (maxcod < cod ) entonces

    maxcod cod

    fin_si

    fin_si

    fin_si

    fin_si

    fin_desde

    Escribir (minnota, maxcod, cont)

    Fin

  • Curso de Algoritmos y Estructura de Datos

    69

    Ejemplo 38: Para un conjunto de n personas se desea averiguar la edad promedio por sexoy cul es la edad mayor en cada caso (la mxima edad en cada sexo). Desarrolla unalgoritmos que reciba las edades de las n personas y entregue la informacin pedida.

    Pseudocdigo Ejemplo_38

    Var edad, n, i , contM, contF, maxM, maxF, sumaM, sumaF: entero

    sexo: caracter

    Inicio

    Leer (n)

    contM 0contF 0sumaM 0sumaF 0maxM 0maxF 0

    desde i 1 hasta n

    Leer (edad, sexo)

    En_caso (sexo)

    M, m: sumaM sumaM + edad

    contM contM + 1

    Si (edad > maxM) entonces

    maxM edad

    fin_si

    F, f: sumaF sumaF + edad

    contF contF + 1

    Si (edad > maxF) entonces

    maxF edad

    fin_si

    fin_caso

    fin_desde

    Escribir (maxM, maxF)

    Si (contM = 0) entonces

    Escribir no hay promedio )

    Sino

    Escribir (sumaM div contM) (* Para mostrar un promedio entero *)

    fin_si

  • Curso de Algoritmos y Estructura de Datos

    70

    Si (contF = 0) entonces

    Escribir no hay promedio )

    sino

    Escribir (sumaM div contF) (* Para mostrar un promedio entero *)

    fin_si

    Fin

  • Curso de Algoritmos y Estructura de Datos

    71

    Ejemplo 39: 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 edad, i, edad, max1, max2: entero

    Inicio

    Leer (n)

    max1 0

    max2 0

    desde i 1 hasta n

    Leer (edad)

    Si (i = 1) entonces

    Si (max1 < edad) entonces

    max1 edad

    fin_si

    Sino ( * cuando i = 2, 3, 4, , n * )

    Si (max1 < edad) entonces

    max2 max1

    max1 edad

    sino ( * no considero la igualdad edad = max1 * )

    Si (max1 > edad) entonces

    Si (max2 < edad) entonces

    max2 edad

    fin_si

    fin_si

    fin_si

    fin_si

    fin_desde

    Si (max = 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

  • Curso de Algoritmos y Estructura de Datos

    72

    Ejemplo 40: 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 edad, i, edad, min1, min2: entero

    Inicio

    Leer (n)

    desde i 1 hasta n

    Leer (edad)

    Si (i = 1) entonces

    min1 edad

    min2 edad

    Sino ( * i = 2, 3, 4, , n * )

    Si (min1 > edad) entonces

    min2 min1

    min1 edad

    sino

    Si (min1 < edad) entonces

    Si (min2 > edad) entonces

    min2 edad

    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

  • Curso de Algoritmos y Estructura de Datos

    73

    Ejemplo 41: 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 F

    Leer (n)

    desde i 1 hasta n

    Leer (num)

    Si (num < 0) entonces

    Si ( encont) entonces

    maxneg num

    cont 1

    encont V

    sino

    Si (maxneg < num) entonces

    maxneg num

    cont 1

    sino

    Si (maxneg = num) entonces

    cont cont + 1

    fin_si

    fin_si

    fin_si

    fin_si

    fin_desde

    Escribir (maxneg, cont)

    Fin

    Vamos a inicializar al switch con el valor falso

    Vamos a descartar los datos no negativos quesean ingresados

  • Curso de Algoritmos y Estructura de Datos

    74

    Explicacin del ejemplo 41: 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 adicional, algunos lo conocen como switch, el identificador para este switch

    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 (Si es que se ingresa algn dato no negativo, no se les tomar en

    cuenta)

  • Curso de Algoritmos y Estructura de Datos

    75

    B. BUCLE CON ENTRADA CONTROLADA (ESTRUCTURA REPETITIVA MIENTRAS). Es

    utilizado 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.

    OBS:

    Esta instruccin tiene desde cero hasta ms repeticiones

    La condicin debe modificarse dentro del bucle para evitar que se genere un bucle infinito.

    Ejemplo: Un bucle finito.

    x 2

    Mientras (x > 0) hacer

    Escribir (x)

    x x-1

    fin_mientras

    Sentencia

    condicin

    V

    F

    Cuerpo del bucle

    Mientras (condicin) hacer

    Sentencia

    fin_mientras

    Cuerpo del bucle

    En la pantalla se vernicamente los valorespositivos de x: 2 y 1(segnla condicin), pues cuandox a toma un valor nopositivo, la instruccinrepetitiva Mientrastermina

    21

  • Curso de Algoritmos y Estructura de Datos

    76

    Ejemplo: Un bucle infinito

    x 2

    Mientras (x > 0) hacer

    Escribir (x)

    x x+1

    fin_mientras

    Ejemplo 42: 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

    algo ms.

    Pseudocdigo Primos

    Var num, cont_div, i: entero

    Inicio

    num 2

    Mientras (num 100) hacer

    desde i 1 hasta num

    Si (num mod i = 0) entonces

    cont_div cont_div+1

    fin_si

    fin_desde

    Si (cont_div = 2) entonces

    Escribir (num)

    fin_si

    num num+1

    fin_mientras

    Fin

    En la pantalla se vernlos valores de x: 2, 3, 4,

    ., etc. Y estocontinuar hasta que lacomputadora secuelgue , ya que la

    instruccin Mientrasno terminar mientrasx no tome un valornegativo lo cual nuncapasar pues x va enaumento

    2,3,4,5,6,7,8,910,11,12,13,14,15,16,17,18

    La variable num debe ir aumentando de unoen uno

  • Curso de Algoritmos y Estructura de Datos

    77

    El ejemplo tambin pudo haberse resuelto con el uso de dos estructuras repetitivas desde de la

    siguiente forma:

    Pseudocdigo Primos

    Var num, cont_div, i: entero

    Inicio

    desde num 2 hasta 100

    desde i 1 hasta num

    Si (num mod i = 0) entonces

    cont_div cont_div+1

    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 iraumentando la variable num, porque esta aumenta una unidadautomticamente durante cada repeticin

  • Curso de Algoritmos y Estructura de Datos

    78

    Ejemplo 43: 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 0

    num num div 10 , es decirnum 4512 div 10 lo cual quedaranum 451 ; num = 451 y seguidamente contabilizamos cont cont+1; cont = 1

    num num div 10 , es decirnum 451 div 10 lo cual quedaranum 45 ; num = 45 y seguidamente contabilizamos cont cont+1; cont = 1+1=2

    num num div 10 , es decirnum 45 div 10 lo cual quedaranum 4 ; num = 4 y seguidamente contabilizamos cont cont+1; cont = 2+1=3

    num num div 10 , es decirnum 4 div 10 lo cual quedaranum 0 ; num = 0 y seguidamente contabilizamos cont 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

    Pseudocdigo Ejemplo_43

    Var num, cont: entero

    Inicio

    Leer (num)

    cont 0

    Mientras (num 0) hacer

    num num div 10

    cont cont+1

    fin_mientras

    Escribir (cont)

    Fin

    Al ir asignando al nmero el cociente de sudivisin entre 10, iremos disminuyendo lacantidad de cifras del nmero y a la vezaprovecharemos para contabilizar suscifras.

  • Curso de Algoritmos y Estructura de Datos

    79

    Ejemplo 44: 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 n