101 TodaLaMateria

238
1 1 Introducción 1.1 Conceptos Básicos Dato Representación simbólica (numérica, alfanumérica). Se puede procesar. Información Conjunto organizado de datos procesados. Constituye un mensaje válido para un receptor. Computador Máquina electrónica que procesa datos según programas previamente almacenados en memoria, de manera de obtener información Posee características de multipropósito.

description

asd

Transcript of 101 TodaLaMateria

  • 1

    1 Introduccin

    1.1 Conceptos Bsicos

    Dato

    Representacin simblica (numrica, alfanumrica).

    Se puede procesar.

    Informacin

    Conjunto organizado de datos procesados.

    Constituye un mensaje vlido para un receptor.

    Computador

    Mquina electrnica que procesa datos segn programas previamente almacenados en memoria, de

    manera de obtener informacin

    Posee caractersticas de multipropsito.

  • 2

    Computacin

    Ciencia que estudia el proceso electrnico de datos y a las computadoras.

    Informtica

    Ciencia que estudia el proceso de la informacin: captacin, proceso,

    generacin y distribucin; con el uso de tecnologas como la

    computacin y las telecomunicaciones.

    Programa

    Conjunto de instrucciones lgicamente ordenadas que realizan una

    tarea especfica en el computador por un periodo finito.

    Computacin Programacin

  • 3

    Bit (BInary digiT)

    Unidad mnima de procesamiento de informacin en un computador.

    Es un 0 un 1.

    El computador internamente trabaja con bits, es decir, con ceros y unos.

    Byte:

    Conjunto de 8 bits.

    Unidad mnima de almacenamiento en un computador.

    Constituye una unidad de medida para la capacidad de almacenamiento de un computador, ya sea

    para la memoria principal o la memoria secundaria.

  • 4

    Hardware:

    El trmino referencia a todas las componentes fsicas y concretas de un computador, considerando

    a las macro componentes, tales como pantalla, teclado, mouse, etc; hasta las componentes ms

    pequeas e internas, como las placas de circuitos integrados, cables, fuentes de poder, etc.

    Ejemplos

    Procesador

    RAM

    Disco Duro

    Lecto-grabador de CD

    Lecto-grabador de DVD

    Tarjeta de Red

  • 5

    Software:

    Trmino que identifica al conjunto de programas que entrega a la mquina la habilidad

    para poder realizar ciertas funciones especficas.

    Entre los ejemplos de programas se tiene a los Sistemas Operativos, Procesadores de texto,

    planillas electrnicas, bases de datos, administradores de correo, juegos, antivirus, ambientes de

    programacin, etc.

  • 6

    Sistema Operativo

    Un sistema operativo es un conjunto de programas que administran las componentes del

    computador, suministrando una interfase conveniente a los usuarios de la mquina.

    Ejemplo: Windows = Sistema operativo orientado a la interfaz, que permite la interaccin

    hombre-mquina a travs de grficos y ventanas que se despliegan cada vez que el usuario

    ejecuta un comando. El sistema operativo es el conjunto de algoritmos que determinan tanto la forma en que el

    computador interacta con el mundo exterior, como controlar las actividades de la mquina,

    gestionando sus recursos.

    El sistema operativo es el software bsico que se ejecuta en un computador y es puesto en

    operaciones apenas se enciende la mquina. Si no se carga un sistema operativo, la mquina no

    sirve para nada.

    Ejemplos de sistemas operativos:

    DOS

    UNIX

    WINDOWS

    NOVELL

    LINUX

    SYSTEM (Mac)

    Etc

  • 7

    Redes de computadoras

    Una red de computadoras o sistema de telecomunicaciones es el conjunto de hardware y software

    compatibles y organizados para comunicar informacin de un lugar a otro.

    Los componentes que la constituyen son:

    Los computadores para procesar la informacin. Cada computador tiene su propia direccin

    en la red, la que lo identifica como nico entre todos.

    Terminales que capten y enven datos sin procesarlos en forma local.

    Canales de comunicacin o enlaces mediante los cuales los datos son transmitidos entre

    los dispositivos de emisin y recepcin de datos

    .

    Los canales de comunicacin emplean diversos medios como:

    Cables trenzados

    Cables coaxiales

    Fibra ptica y

    Transmisin inalmbrica.

    Dispositivos de comunicacin encargados de encaminar los datos desde un computador o

    terminal a otro:

    Mdem: Cada vez que se necesita comunicar dos computadores lejanos (a ms de una

    cuadra de distancia), los datos que se envan entre ellos deben usar una seal

    elctrica grande como si fuera un vehculo grande para transportarse. A este proceso se

    le denomina modulacin de los datos. En el otro lado de la comunicacin es necesario

  • 8

    sacar los datos de esta seal transportadora, a este proceso se le denomina demodulacin

    de datos.

    El dispositivo que realiza la MOdulacin y la DEModulacin es el mdem.

    Es comn por lo tanto que para comunicar nuestros computadores en casa a Internet se

    deba utilizar un modem, independiente que la seal llegue por cable telefnico

    (Movistar, Entel pcs) o por video cable (VTR)

  • 9

    Switch: Cuando los computadores que se van a comunicar estn cercanos (a

    menos de una cuadra), para comunicarse envan los datos directamente sin modificarlos

    (solo unos y ceros por el cable),

    El dispositivo que permite llegar a estos datos desde un computador a

    otro identificando a cada uno en forma independiente, se denomina Switch.

    Router: Sin importar si los datos llegan por un

    modem o por un switch, cada vez que van a Internet

    necesitan encontrar su camino hacia el destino que se

    desea alcanzar (a veces muy distante),

    El computador enva

    paquetes, que contienen entre

    otros:

    Direccin fuente

    Direccin destino

    Datos

    Boca que se conecta a un computador

  • 10

    Nuestros datos ven la red como una ruta internacional donde deben ser

    encaminados desde una ruta a otra como se hace en las rotondas,

    donde se busca el camino de acuerdo a nuestro destino final.

    A estos elementos enrutadores, se les denomina en ingls Router

  • 11

    Los diversos software de comunicaciones que controlan las actividades de entrada y salida y

    otras funciones de la red de comunicaciones.

    Correo electrnico.

    Gestores de intercambio de archivos (Ares, Emule).

    Mensajera (MSN, Hotmail).

    Un elemento fundamental en una red de computadores la constituyen los protocolos, o

    conjunto de reglas y procedimientos que gobiernan la transmisin entre los componentes de la

    red y que identifican un servicio.

    HTTP: servicio de pginas web.

    FTP: servicio para transferir archivos.

    Red de rea local (LAN): todos los computadores conectados estn cercanos y se

    comunican a alta velocidad. Estos computadores conectados tambin pueden tener la

    capacidad para salir hacia fuera (Internet). Para efectos de la LAN, el router es un

    computador ms

    Red extendida (WAN): comunican redes de rea local o computadores lejanos, para

    ello se requieren los routers.

  • 12

  • 13

    Sistema de Informacin

    Conjunto formal de procesos que operando sobre un grupo de datos, de acuerdo a las

    necesidades de una empresa, recopila, elabora y distribuye la informacin necesaria para cualquier

    tarea de un negocio, tales como: operacin, control, direccin, etc.

    Ejemplos de Sistemas Computacionales

    Sistema Curricular de Alumnos (online UCN)

    Educa

    Cajeros Automticos

    Administrador de Mineras (SAP)

    Reservas de pasajes en las lneas areas

    Reservas de pasajes en empresas de buses

  • 14

    reas de la computacin

    Lenguajes de programacin

    Algoritmos y estructuras de datos

    Arquitectura de computadores

    Redes de computadores

    Sistemas Operativos

    Ingeniera de Software

    Inteligencia Artificial

    Interaccin humano - computador

    Clculo numrico y simblico

    Bases de datos

    Automatizacin de procesos

  • 15

    1.2 Arquitectura de los computadores

    Modelo Von Newmann

  • 16

    Partes de un computador 1. UCP (CPU):

    La unidad central de procesos cumple el doble propsito de permitir la realizacin de

    clculos con datos en la unidad aritmtico-lgica y controlar la ejecucin de las

    instrucciones en la unidad de control.

    Cach: Memoria intermedia entre la memoria RAM y el procesador, que tiene por objetivo

    acelerar el proceso de ejecucin de los programas.

    El procesador en vez de ejecutar de a una instruccin desde la memoria RAM, traslada

    desde la RAM a la cache un bloque y ejecuta de a una instruccin desde la memoria cache. Este

    proceso es cclico, ya que el procesador mientras va ejecutando las instrucciones, el controlador

    de la cache cuando corresponde vuelve a buscar un bloque de memoria a la RAM

    La cache es mucho ms rpida, ms cara y de menor capacidad que la RAM.

    2. Memoria

    Memoria principal + memoria secundaria

  • 17

    Memoria principal:

    La memoria principal es el medio de almacenamiento de datos y programas. Este medio se

    utiliza slo durante la fase de ejecucin de los programas.

    Terminada la ejecucin, los resultados quedan almacenados en memoria secundaria,

    que es de tipo permanente.

    La memoria principal est dividida en RAM y ROM.

    o La memoria RAM (random Access memory) es una memoria de lectura y escritura, es

    decir sus contenidos son alterables por programa, es donde se almacenan datos y

    programas del usuario mientras trabaja en el computador, adems almacena el sistema

    operativo mientras la mquina funciona.

    El computador solo opera datos y programas que estn en esta memoria RAM, la cual

    pierde su informacin si se interrumpe la energa elctrica a ella, por ello es necesario

    guardar cada cierto rato los trabajos que no se quieren perder mientras se modifican.

    o La memoria ROM (read only memory) es una memoria cuyos contenidos no son

    modificables en tiempo de ejecucin. Permite almacenar programas permanentes en el

    momento de la fabricacin del computador.

  • 18

    En ella existe un pequeo programa muy bsico que solo le indica al computador como

    comenzar a trabajar y operaciones muy elementales, llamado BIOS.

    Se puede ver algo as en los seres humanos, al nacer que si bien tienen completo sus

    manos, pies cabeza, boca, estomago (hardware), no saben leer, escribir o realizar funciones

    complejas (nada han aprendido, nadie los ha programado), sin embargo si tienen hambre

    lloran y si se les entrega una mamadera se la toman (ese es el ROM BIOS, rutinas que

    estn desde la fabricacin, que no se pueden borrar y que permiten la operacin ms bsica

    del sistema).

    Unidad de medida de la memoria es el byte.

  • 19

    Memoria secundaria:

    Discos:

    o Permiten mantener informacin por tiempo indefinido.

    o Sus contenidos son modificables la mayora de las veces.

    o Los discos son de gran importancia ya que constituyen la memoria secundaria

    del sistema.

    o Hoy estn cada vez ms de moda los medios de

    almacenamientos de tipo flash (memorias que almacenan los datos en circuitos integrados,

    que no requieren estar energizados para mantenerlos y que son bastante ms rpidos que

    un disco duro convencional), por ejemplo pendrive, disco duro de estado slido.

    Cuando un programa no encuentra los datos o instrucciones que requiere para operar en

    la memoria principal, los debe buscar en la memoria secundaria, de esta forma la memoria se

    transforma en un espacio continuo que incluye la memoria principal y la secundaria.

    Este concepto se conoce como jerarqua de memoria.

    Los accesos a memoria secundaria requieren de aproximadamente 1.000 a 10.000 veces el

    tiempo de acceso a memoria principal, por lo que es de vital importancia para mantener los

    tiempos de proceso dentro de mrgenes tolerables, reducir al mximo los accesos a memoria

    secundaria.

  • 20

    Memoria virtual

    Zona del disco duro tratada como parte de la memoria RAM, donde se almacenan en forma

    temporal programas o trozos de ellos que no est ejecutando el procesador en ese momento y que

    se encuentran en la RAM, con el objetivo de desocupar la memoria RAM para almacenar nuevos

    programas y as tener la capacidad de ejecutar una mayor cantidad de programas.

    Al traspaso de bloque desde la RAM a la memoria virtual y viceversa se llama swap

  • 21

    3. Entrada/salida:

    La unidad de Entrada/Salida es la responsable de comunicar el computador con el

    mundo externo a travs de los dispositivos perifricos.

    Pantalla

    Teclado

    Impresora

    Mouse

    Detector de cdigo de barras

    Lpiz de luz

    Pantalla sensible al tacto

    Escner de imgenes

    Joystick

    Plotters

    Detector de caracteres magnticos

    Terminales punto de ventas

    Terminales de operaciones financieras

    Dispositivos de reconocimiento de voz

    Sistemas de adquisicin de datos anlogos

    etc.

  • 22

    Modelo Von Newmann (programas)

  • 23

    Tarjetas: Placas con un conjunto de elementos elctricos y electrnicos, en especial circuitos

    integrados, que en unin realizan alguna tarea especfica.

    Tarjeta madre

    Tarjeta de video

    Tarjeta de sonido

    Tarjeta de red

    etc.

  • 24

    Tarjeta madre: Es la tarjeta ms importante de un computador ya que todo se conecta a ella. Lo

    que no est conectado directamente a la tarjeta madre, es un perifrico.

  • 25

    1.3 Jerga Computacional Bootear Iniciar el computador, encendido o arranque

    Hechar a correr Hacer funcionar un programa

    Carga de archivo Transferir datos desde y hacia un disco.

    Tambin, se refiere a la transferencia de archivos desde la memoria

    principal a la memoria secundaria y viceversa

    Bajar el computador

    Seleccionar el apagado del equipo

    Resetear Reiniciar el equipo a travs de hardware: Un botn, una tecla o un conjunto

    de teclas

    Computador

    pegado

    Equipo en proceso que no permite la interaccin humana

    Se cay Trmino anormal de un programa o alguna operacin de la mquina

    Formatea

    Iniciar un disco en blanco

    Rutear un algoritmo Revisin manual de un algoritmo, mediante el seguimiento paso a paso

    de ste.

    Es decir, se debe ir mostrando el contenido que van tomando todas

    las variables que estn involucradas en el algoritmo

  • 26

    2 ELEMENTOS BSICOS DE PROGRAMACIN

    2.1. Etapas para resolver un problema

    Para resolver un problema necesitamos:

    Tener una visin general del problema Entender sus caractersticas Identificar los datos importantes

  • 27

  • 28

  • 29

    a. Anlisis del problema El objetivo de esta etapa es entender y especificar el problema que se quiere resolver. Al finalizar:

    Deben estar especificados los requerimientos funcionales (Por ejemplo, el programa debe permitir ingresar estudiantes)

    Debe estar establecida la informacin del mundo del problema (por ejemplo, contexto UCN)

    Deben estar especificados los requerimientos no funcionales (por ejemplo, la aplicacin ser utilizada simultneamente por 3.000 usuarios, estudiantes)

    b. Diseo de la solucin

    El objetivo de esta etapa es detallar, usando algn lenguaje (planos, dibujos, ecuaciones, diagramas, texto, etc.), las caractersticas que tendr la solucin antes de ser construida. Los diseos nos van a permitir la solucin antes de comenzar el proceso de fabricacin propiamente tal.

  • 30

    c. Construccin de la solucin Tiene como objetivo implementar el programa a partir del diseo y probar su correcto funcionamiento.

    Implementar significa escribir el cdigo fuente en algn lenguaje de programacin como Java,

    C, C# o C++. El cdigo fuente se crea y edita usando un ambiente de desarrollo, por ejemplo

    DrJava.

    Las pruebas de software es el proceso por el cual se busca garantizar la calidad de un

    producto desarrollado. Se utiliza para identificar posibles fallas en los productos software.

    Por lo tanto, el proceso de pruebas de software tiene dos objetivos:

    Demostrar al desarrollador y cliente que el software satisface sus requerimientos.

    Descubrir defectos en el software (comportamiento incorrecto, no deseado o que no cumple su

    especificacin).

  • 31

    Pruebas de Caja Negra o testing funcional

    Las condiciones de prueba se desarrollan en base a las funcionalidades del programa, es decir, el tester (persona dedicada a ejecutar las pruebas) requiere informacin sobre los datos de entrada y las salidas observadas.

    Se requiere conocer cules son los resultados esperados.

    No se requiere conocer cmo trabaja el software.

    Debugging de un programa Es el proceso de identificar y corregir errores de programacin.

    En su forma ms bsica se puede depurar (debugging) un programa colocando, en algn lugar de

    l, instrucciones para desplegar a la pantalla mensajes o resultados intermedios, de manera de

    poder seguir la ejecucin del programa.

  • 32

    Ejemplo del proceso de solucin de problemas

    Problema: Construccin de una casa

    Se parte haciendo el anlisis, donde se ven los requerimientos de la casa (cantidad de

    dormitorios, tamao de la cocina, baos, etc.). Luego se hace el diseo (planos y

    maquetas) y finalmente se construye la casa. A medida que se construye la casa, se

    hacen las pruebas respectivas, por ejemplo, se chequea la calidad del hormign.

  • 33

  • 34

    2.1 Resolucin de problemas con el computador

    Algoritmo de Computador

    Conjunto de instrucciones ordenadas lgicamente que realizan una tarea

    especfica en un periodo finito.

    Un ejemplo concreto es una receta de cocina o un mueble con la

    modalidad Armelo Ud. mismo.

    Por ejemplo: Algoritmo para cambiar la rueda a un auto

    1. Tirar del freno de mano.

    2. Sacar repuesto y la gata del portamaleta.

    3. Colocar la gata y aflojar pernos de la rueda averiada.

    4. Levantar auto con la gata.

    5. Quitar las tuercas y la rueda.

    6. Colocar la rueda buena y las tuercas.

    7. Bajar automvil y apretar tuercas.

    8. Guardar la gata y la rueda averiada.

    Los algoritmos son el medio por el cual se pueden especificar tareas, que

    posteriormente podemos ensear a los computadores a travs de los

    lenguajes de programacin.

  • 35

    Ejemplo: Calcular el rea de un tringulo

    1. Obtener la base del tringulo, variable b.

    2. Obtener la altura del tringulo, variable h.

    3. Multiplicar la base por la altura (b*h)

    4. Dividir el resultado de la multiplicacin en 2 y

    guardar el resultado en la variable A, o sea,

    A=(b*h)/2

    5. Comunicar el resultado de la operacin.

  • 36

    Ejemplo: Calcular el promedio de las tres notas de un alumno y determinar si el alumno aprob o no

    el curso. (La condicin de aprobacin es promedio mayor o igual que 4)

    1. Obtener la nota 1, N1.

    2. Obtener la nota 2, N2.

    3. Obtener la nota 3, N3.

    4. Sumar las 3 notas y dividirlas por 3, P=(N1+N2+N3)/3

    5. Si P >= 4.0, entonces comunicar Aprob Sino comunicar Reprob

  • 37

    Ejemplo: Conversin de decimal a binario

    1. Obtener el nmero a convertir.

    2. Guardar el nmero en la variable PE.

    3. Dividir PE en 2.

    4. Guardar la parte entera del resultado en la variable PE.

    5. Guardar el resto de la divisin en la variable R.

    6. Formar el binario.

    mientras

    PE > 0

  • 38

    Un algoritmo en si es algo puramente conceptual, de modo que para comunicar un algoritmo, a otra

    persona o a un computador, se debe hallar alguna forma de representarlo.

    Pseudocdigo Describe un algoritmo utilizando una mezcla de frases en lenguaje comn,

    instrucciones de lenguaje de programacin y palabras claves

  • 39

    Ejemplos de algoritmos utilizando pseudocdigo

    Ejemplo 1 Leer (N1, N2, N3) R N1*0.3 + N2*0.3 + N3*0.4 Escribir (R)

  • 40

    Ejemplo 2 Read (N)

    C 0 S 0 For I= 1 to N Do

    Read (Nota)

    S S + Nota if (Nota >= 4.0) then

    C C + 1 Endif

    Endfor R S/N Write ('Promedio del curso',R)

    Write (Numero de Alumnos aprobados', C)

  • 41

    Programa de computador Algoritmo escrito en un lenguaje de

    programacin, que ingresado a un computador

    y traducido al cdigo binario, permite que

    la mquina ejecute alguna funcin.

    Instrucciones de computador Comandos imperativos que dirigen a la

    mquina a ejecutar una accin especfica:

    Leer, escribir, asignar, preguntar, repetir

    Lenguaje de programacin Conjunto de normas que determinan una forma

    especfica de escribir un algoritmo para

    computador.

    Un lenguaje de programacin es el medio

    mediante el cual la mquina acepta y entiende

    algoritmos, expresados en una forma

    compatible con los seres humanos.

  • 42

    Algunos Lenguajes

    Ada

    C#

    Algol

    Fortran

    Objective-C

    C++

    Python

    Basic

    C

    Java

  • 43

    La coleccin de instrucciones, cada una con su estructura semntica bien definida y una sintaxis

    no ambigua, para describir un algoritmo, se denomina lenguaje de programacin. Por sintaxis se entiende la forma en que se escribe una instruccin y por semntica, su

    significado. Un programa sintcticamente correcto, no necesariamente es semnticamente correcto. El lenguaje de programacin permite expresar algoritmos en forma de oraciones, las cuales

    conducen las operaciones de las componentes de la computadora.

    Ejemplos de sentencias en Java

    a = 5;

    for (int i = 1; i b) { a++; b--;

    }

  • 44

    Programa

    Computador

    Algoritmo: Estructura Lgica

    Lenguaje: Formato de escritura

    Pensar en lo que hara Lo que la mquina debe hacer

  • 45

    Estrategia iterativa (refino sucesivo)

    Se refinan las tareas necesarias de realizar

    El refino sucesivo es la bsqueda de la solucin de un problema, detallando nivel a nivel la

    solucin, es decir, las tareas necesarias de realizar para llevar a cabo una funcin.

    Un problema determinado es separado funcionalmente en distintas tareas que permiten su solucin.

    Las tareas definidas, por su parte, pueden nuevamente ser detalladas en sub niveles, que

    determinan un tercer nivel de solucin.

    As, es posible continuar hasta alcanzar cierto nivel de detalle que permita claras y sencillas

    instrucciones de programacin que den cuenta de la solucin.

  • 46

    2.2 Ejemplos de refino

    2.2.1 Se deben leer 2 datos desde pantalla y se debe imprimir el mayor.

    Programa mayor

    BEGIN

    Leer datos Ver cul es el mayor Imprimir el mayor END

  • 47

    2.2.2 Indicar si un alumno aprueba o reprueba un curso, a partir de tres notas.

    Primer Nivel

    Programa NotaFinal begin Leer notas Calcular nota final Aprueba o no?

    end

    Segundo nivel

    Leer notas begin Leer nota 1 Leer nota 2 Leer nota 3

    end

    Aprueba o no? begin Si la nota final es mayor o igual a 4

    imprimir Aprob Sino, imprimir Reprob

    end

  • 48

    Ejemplo: Clculo de promedio

    Refino Obtener notas Calcular NF Entregar Resultado

    La idea:

    Algoritmo en Seudocdigo

    begin Leer notas desde pantalla Calcular nota promedio Informar nota calculada

    end

    Begin Read (nota1, nota2, nota3) NF nota1*0.3 + nota2 * 0.3 + nota3 * 0.4 Write(NF) end

  • 49

    Lo que finalmente se traduce en .

    Cdigo Java

    import ucn.*; public class Promedio { public static void main(String args[]) { StdOut.print("Ingrese nota 1:"); double N1 = StdIn.readDouble(); StdOut.print("Ingrese nota 2:"); double N2 = StdIn.readDouble(); StdOut.print("Ingrese nota 3:"); double N3 = StdIn.readDouble(); double NF = (N1 + N2 + N3) / 3; StdOut.println("Nota final: " + NF); } // Fin main } // Fin class Promedio

  • 50

    3 Lenguajes de programacin

    Un lenguaje de programacin es el medio mediante el cual la mquina acepta y entiende

    algoritmos, expresados en una forma compatible con los seres humanos.

    Un algoritmo es un conjunto de instrucciones que lgicamente ordenadas y que requieren un tiempo

    finito de desarrollo, ejecutan una tarea en el computador.

    Programar o programacin: Especificar mediante un lenguaje de programacin lo que una

    mquina debe hacer.

    Programa: Conjunto de instrucciones y datos especificados mediante un lenguaje de programacin

    que pueden ser entendibles por una mquina o software de forma automtica

    A diferencia de la mayora de los humanos, las mquinas no tienen sentido comn, por lo que harn

    exacta y literalmente lo que uno le indique.

  • 51

    Un algoritmo en s es algo puramente conceptual, de modo que para comunicar un algoritmo, a otra

    persona o a un computador, se debe hallar alguna forma de representarlo.

    La coleccin de instrucciones, cada una con su estructura semntica bien definida y una sintaxis no

    ambigua, para describir un algoritmo, se denomina lenguaje de programacin.

    La traduccin de una idea (algoritmo) a un lenguaje, se llama "programar"

    Para poder programar una mquina necesitamos un Lenguaje de programacin, que de forma similar

    al lenguaje natural que utilizamos los humanos, nos permitir comunicarnos con las mquinas e

    indicarles lo que deben hacer con detalle exacto.

    Al hablar de un lenguaje, por sintaxis se entiende la forma en que se escribe una instruccin y por

    semntica, su significado. Un programa sintcticamente correcto, no necesariamente es

    semnticamente correcto.

  • 52

    El lenguaje de programacin permite expresar algoritmos en forma de oraciones, las cuales

    conducen las operaciones de las componentes de la computadora.

    A partir de un algoritmo, se pueden crear varios programas que lo implementen:

    o Por ejemplo en distintos lenguajes

    o Con distintas tecnologas

    o Pero an as ser la misma solucin al mismo problema.

  • 53

    3.1 Proceso de traduccin de un programa

    Para que un computador realice una o un conjunto de tareas, es imprescindible que exista un

    algoritmo puesto en la memoria principal, expresado en el lenguaje de la mquina (0 y 1).

    Un programa de computador, es decir un algoritmo escrito en algn lenguaje de programacin, para

    ser ejecutado por la mquina debe ser convenientemente traducido al lenguaje que entiende el

    procesador, es decir, a lenguaje de mquina.

    Para convertir los programas escritos en algn lenguaje de programacin a cdigo de mquina, se

    debe ejecutar un proceso de traduccin, de alguna de estas formas:

    Proceso de compilacin, realizado por un programa llamado compilador.

    Proceso de interpretacin, realizado por un intrprete, o bien un enfoque hbrido (cdigo

    intermedio).

  • 54

    La diferencia entre un compilador y un intrprete, es que el compilador traduce todas las sentencias

    del programa a ceros y unos, y luego lo ejecuta. En cambio, un intrprete traduce de a una las

    sentencias y las va ejecutando inmediatamente.

    Proceso de compilacin

    Compilador

    Programa en

    lenguaje de alto nivel

    Programa Fuente

    Programa

    Objeto

  • 55

    Qu es programar?

    La programacin moderna, al igual que la ciencia de la computacin, es un rea del conocimiento

    que tiene poco ms de medio siglo de existencia.

    Prcticamente toda la tecnologa actual incluye programacin de una u otra forma, desde un sencillo

    reloj, hasta los costosos equipos mdicos o servicios de telecomunicaciones e informacin.

    Programar o programacin ser para nosotros: especificar mediante un lenguaje de

    programacin lo que una mquina debe hacer.

    Para poder programar necesitamos (definiciones generales e incompletas por ahora):

    Problema: Un problema o tema a solucionar que requiere automatizacin.

    Algoritmo: Una idea general de como resolver el problema

    Lenguaje de Programacin: Lenguaje que define una mecanismo, forma y significado de lo que podemos indicarle a la mquina para implementar el algoritmo y resolver el problema

    mediante un programa.

    Un compilador/intrprete: Un software especializado que permite transformar o interpretar los programas para una mquina especfica

    Mquina: La mquina para ingresar el problema y visualizar la solucin

  • 56

    3.2 Errores

    Al momento de programar, se cometen errores. stos se pueden clasificar en varios tipos.

    a. Errores en tiempo de compilacin: El compilador de un lenguaje detecta los errores de sintaxis en

    un programa fuente y otros errores bsicos. Si existe este tipo de errores, no se genera el programa

    ejecutable.

    b. Errores en tiempo de ejecucin: Son problemas que se presentan durante la ejecucin de un

    progama. Por ejemplo, tratar de realizar una divisin por cero, lo que causara el trmino anormal

    del programa.

    c. Errores lgicos: Un programa puede correr, y parecer que funiona, pero produce resultados

    errneos. Por ejemplo, algn clculo mal realizado ya que la forma de hacer el clculo se escribi en

    forma incorrecta. El computador no tiene forma de saber que lo que uno escribe en este caso est

    incorrecto!

  • 57

    3.2.1 Errores de Sintaxis Simples en Java

    Mensaje de error Causa comn

    Error: ')' expected Falta un parntesis

    Error: variable X might not have been

    initialized

    Se debe asignar un valor por defecto a la

    variable X indicada

    Error: bad operand type java.lang.X for

    unary operator 'Y'

    No se puede aplicar el operador Y sobre la el

    tipo de dato X

    Error: not a statement Lo escrito no se entiende como una sentencia

    vlida del lenguaje

    Error: class, interface, or enum expected Sobra una palabra clave, est mal escrita o sobra

    una llave de cierre

  • 58

    3.2.2 Errores de Sintaxis en Smbolos y Tipos de Datos

    Mensaje de error Causa comn

    Error: incompatible types

    required: X

    found: Y

    No se puede utilizar el tipo de dato Y, se requiere el tipo X

    Error: possible loss of precision

    required: X

    found: Y

    El tipo de dato Y no es suficiente, se requiere al menos el tipo de dato X

    o realizar un casting

    Error: cannot find symbol

    symbol: X

    location: Y

    No se conoce la variable, instruccin X en el lugar Y

    Error: bad operand types for

    binary operator Z

    first type: X

    second type: Y

    No se pueden operar los tipos de datos X e Y mediante el operador Z

  • 59

    3.3 Aspectos bsicos asociados a un programa

    3.3.1 Concepto de Variable

    Todo dato que el programa necesita lo representa a travs de un smbolo.

    Todo smbolo de un programa es una variable.

    Toda variable ocupa un espacio en la memoria RAM.

    El espacio utilizado por una variable en memoria puede ser:

    Fijo, cuando el tamao de la misma no variar a lo largo de la ejecucin del programa.

    Variable, cuando el tamao de la misma puede variar a lo largo de la ejecucin.

    Cada variable posee un nombre y un contenido, repartido en la memoria RAM en celdas de

    memoria

    El nombre de una variable debe ser significativo.

    Las variables son objetos cuyo valor puede ser modificado a lo largo de la ejecucin de un

    programa

    Memoria RAM, dividida en celdas

    NF (N1 + N2 + N3)/3

    N1 N2

    N3 NF

  • 60

    Ejemplo: Celda de memoria correspondiente a la variable X

    Si ejecutamos Qu pasa en la memoria?

    Declarar X

    X

    X 0 0

    X 3 3

  • 61

    Todas las variables poseen una declaracin de tipo que determina los valores que puede almacenar

    y las operaciones en que puede participar.

    Ejemplo: int, double, String, etc.

  • 62

    3.3.2 Concepto de Constante

    Las constantes son objetos cuyo valor permanece invariable a lo largo de la ejecucin de un

    programa.

    Una constante es la denominacin de un valor concreto, de tal forma que se utiliza su nombre cada

    vez que se necesita referenciarlo.

    Debe tener un tipo y nombre

  • 63

    Ejemplo:

    Celdas de memoria asociadas a las constantes PI y E

    En algn lugar estn definidos dos bloques de memoria, que contiene dichos valores:

    PI 3.141592 E 2.710281

    3.141592 PI

    2.718281 E

  • 64

    3.3.3 Tipos de Datos Bsicos

    3.3.3.1 Nmeros Enteros

  • 65

    3.3.3.2 Nmeros Reales

  • 66

    3.3.3.3 Booleano

    3.3.3.4 Carcter

    3.3.3.5 Cadena de caracteres

  • 67

    3.3.4 Operadores

    3.3.4.1 Operadores Aritmticos

    Operador Uso Descripcin

    + v1 + v2 Suma v1 y v2

    - v1 - v2 Resta v2 de v1

    * v1 * v2 Multiplica v1 por v2

    / v1 / v2 Divide v1 por v2

    % v1 % v2 Calcula el resto de dividir v1 con v2

  • 68

    Nota: Aun cuando parezca extrao, los textos (o sea, los String) tambin se pueden "sumar". El

    resultado de sumarle algo a un String es la concatenacin del String con la otra cosa. Por ejemplo:

    String a = "hola" + "mundo"; El String a adquiere el valor "holamundo"

    String b = "hola" + 123; El String b adquiere el valor "hola123"

    String a = "hola";

    String b = "mundo";

    String c = a + b;

    El String c adquiere el valor "holamundo"

    String a = "hola";

    String b = "Mundo";

    int c = 103;

    String d = a + c + b;

    El String d adquiere el valor ????

  • 69

    Operadores Relacionales

    Operador Uso Devuelve Verdadero Si:

    > v1 > v2 v1 es mayor que v2

    >= v1 >= v2 v1 es mayor o igual que v2

    < v1 < v2 v1 es menor que v2

  • 70

    Operadores Lgicos

    Operador Uso Devuelve verdadero si...

    && (AND) v1 && v2 v1 y v2 son ambos verdaderos

    || (OR) v1 || v2 v1 o v2 son verdaderos

    ! (NOT) !v v es falso

  • 71

    Instrucciones

    3.3.4.2 Asignacin de datos

    Dar un valor a una variable de acuerdo a su tipo.

    Ejemplo:

    En pseudocdigo: var expresin

    En Java: var = expresin;

    Se guarda el resultado de la expresin en la celda de memoria asociada a variable

    Ejemplo:

    n1 = 6.1;

    edad = 21;

    NF = (n1 + n2)/3;

  • 72

    Ejemplos:

    n1 = 10; n2 = 20; n1 = n2 + 6;

    n1 n2

    n1 = 10; n1 = n1 + 6; n2 = 10; n1 = n2;

  • 73

    Algunos usos de la sentencia de asignacin:

    3.3.4.2.1.1 Esquema contador

    Uso de una variable para contar.

    Sintaxis: i = i + 1; i ++;

    Ejemplo:

    .. int i = 1; while (i

  • 74

    3.3.4.2.1.2 Esquema sumador o acumulador

    Variable que suma nmeros de cualquier valor y su resultado lo guarda en la variable de asignacin

    involucrada.

    Sintaxis: sumEdades = sumEdades + edad;

    Ejemplo:

    .. int i = 1; int sum = 0; while (i

  • 75

    Orden de Evaluacin de los Operadores en una expresin

    En toda expresin, al realizar operaciones de todo tipo (aritmticas, lgicas), la expresin siempre se

    evala en un orden especfico:

    1. Parntesis (comenzando por los ms internos).

    2. Signo.

    3. Potencias.

    4. Productos y divisiones.

    5. Sumas y restas.

    6. Concatenacin.

    7. Operadores Relacionales.

    8. Operador de Negacin.

    9. Operador de Conjuncin (AND, &&).

    10. Operador de Disyuncin (OR, ||).

    La evaluacin de operadores de igual orden se realiza siempre de izquierda a derecha.

  • 76

    Ejemplo 1:

    ( (3+2) 2 - 15 ) /2 * 5

    (Math.pow((23 ) , 2) - 15) / 2 * 5

    ( Math.pow(5, 2) - 15) / 2 * 5

    ( 25 - 15) / 2 * 5

    10 / 2 * 5

    5 * 5

    25

  • 77

    Ejemplo 2:

    5 2 > 4 && ! 0.5 = 1 / 2

    25 > 4 && ! 0.5 = 0.5

    3 > 4 && ! 0.5 = 0.5

    Falso && ! 0.5 0.5

    Falso && ! Verdadero

    Falso && Falso

    Falso

  • 78

    Lectura de datos

    Adquirir datos de dispositivos como teclado, discos, etc.

    READ (n1, n2, n3) (pseudocdigo)

    En Java:

    int n1 = StdIn.readInt(); double n2 = StdIn.readDouble(); String s1 = StdIn.readString();

  • 79

    3.3.4.3 Salida de datos

    Enviar datos y mensajes a dispositivos como pantalla, discos, impresora, etc.

    WRITE (n1, n2, n3) (pseudocdigo)

    En Java:

    StdOut.print(n1); StdOut.println(n2);

  • 80

    3.3.4.3.1 Ejemplo Lectura desde teclado y despliegue a pantalla

    import ucn.*; public class AppLecturaDesplieguePantalla { public static void main(String[] args) { // Lectura de un entero StdOut.print("Ingrese numero entero: "); int num = StdIn.readInt(); StdOut.println("numero: " + num); // Lectura de un double StdOut.print("Ingrese numero double: "); double num5 = StdIn.readDouble(); StdOut.println("numero: " + num5); // Lectura de un String StdOut.print("Ingrese un string "); String s = StdIn.readString(); StdOut.println("string: " + s); } // Fin main }// Fin AppLecturaDesplieguePantalla

  • 81

    3.3.4.4 Instrucciones condicionales

    Permite definir distintos cursos de accin dentro de un algoritmo.

    Alternativa Simple:

    Alternativa Completa:

    if (condicin) {

    // instrucciones si se cumple la condicin } else{

    // instrucciones si no se cumple la condicin }

    if (condicin) { // instrucciones si se cumple la condicin }

  • 82

    Condicin: Expresin booleana que puede resultar Verdarera o Falsa. Compara a travs de

    operadores y expresiones con conectores lgicos.

    Las instrucciones pueden ser otros IF.

    Si es una sola instruccin, no son necesarias las llaves

  • 83

    Diferencia entre el if al mismo nivel y el if anidado

    Suponga que tiene que leer un dato entero y hacer algo diferente,

    dependiendo del valor del dato

    if (dato == 1){ StdOut.print(1); } if (dato == 2){ StdOut.print (2); } if (dato == 3){ StdOut.print (3); } else { StdOut.print (Ni 1, ni 2, ni 3); }

    Cmo funciona si dato es 1? Entra al primer if (si dato = 1).

    Como es si, imprime el 1 en la pantalla

    Entra al segundo if (si dato = 2). No se cumple la condicin. No hace nada

    Entra el tercer if (si dato = 3). No se cumple la condicin. Se va por el else e imprime: Ni 1, ni

    2, ni 3

    Impresin

    1

    Ni 1, ni 2, ni 3

  • 84

    if (dato == 1){ StdOut.println(1); } else { if (dato == 2){ StdOut.println(2); } else { if (dato == 3){ StdOut.println(3); } else { StdOut.println(Ni 1, ni 2,ni 3); } } }

    Cmo funciona si dato es 1? Entra al primer if (si dato = 1).

    Como es si, imprime el 1 en la

    pantalla y se va al final, ya que

    despus viene el else, por lo tanto

    no entra ah.

    Impresin

    1

  • 85

    Alternativa Mltiple:

    nomVar: es el nombre de la variable.

    valor1, valor2, valorN: son los valores que puede tomar la variable nomVar. Ejemplo:

    1, 2, 3,

    default: es la seccin en donde se indican las instrucciones que se ejecutarn en caso

    de que la variable no tenga ninguno de los

    valores especificados en los case.

    switch (nomVar) { case valor1: // instrucciones break; case valor2: // instrucciones break; case valorN: // instrucciones break; default: // instrucciones }

  • 86

    =

    if anidado versus switch

    if (dato == 1){ StdOut.print (1); } else { if (dato == 2){ StdOut.print (2); } else { if (dato == 3){ StdOut.print (3); } else { StdOut.print (Ni 1, ni 2, ni 3); } } }

    switch (dato) { case 1: StdOut.print (1); break; case 2: StdOut.print (2); break; case 3: StdOut.print (3); break; default: StdOut.print (Ni 1, ni 2, ni 3); }

  • 87

    Ejemplos del uso del if:

    i) Indicar si un alumno aprueba o reprueba un curso, a partir de tres notas.

    import ucn.*; public class AppIf1 { public static void main(String args[]) { StdOut.print("Ingrese la primera nota: "); double nota1 = StdIn.readDouble(); StdOut.print("Ingrese la segunda nota: "); double nota2 = StdIn.readDouble(); StdOut.print("Ingrese la tercera nota: "); double nota3 = StdIn.readDouble(); double notaFinal = (nota1 + nota2 + nota3) / 3; if (notaFinal >= 3.95) { StdOut.println("Aprobo con nota = " + notaFinal); } else { StdOut.println("Reprobo con nota =" + notaFinal); } } // Fin main } // Fin AppIf1

  • 88

    ii) Calcular nota final de un alumno (considere el promedio de las 3 notas parciales), bonificando la

    nota final en 0.5 si todas las notas son mayores o iguales a cuatro.

    import ucn.*; public class AppIf2 { public static void main(String args[]) { StdOut.print("Ingrese la primera nota: "); double nota1 = StdIn.readDouble(); StdOut.print("Ingrese la segunda nota: "); double nota2 = StdIn.readDouble(); StdOut.print("Ingrese la tercera nota: "); double nota3 = StdIn.readDouble(); double notaFinal = (nota1 + nota2 + nota3) / 3; if (nota1 >= 4.0 && nota2 >= 4.0 && nota3 >= 4.0) { if (notaFinal < 6.6) { notaFinal = notaFinal + 0.5; } else { notaFinal = 7.0; } } StdOut.println("nota final = " + notaFinal); }// fin main } // fin AppIf2

  • 89

    3.3.4.4.1 Ejercicios

    i) Leer notas para 2 alumnos distintos. Determinar cual posee el mejor promedio.

    Programa MejorPromedio

    begin

    Leer notas de los 2 alumnos Calcular promedios para los 2 alumnos Determinar cual promedio es mejor End

    Programa MejorPromedio

    begin

    Leer notas alumno 1 Leer notas alumno 2 Calcular promedio alumno1 Calcular promedio alumno2 Determinar cual promedio es mejor end

  • 90

    ii) Indicar si un alumno repite aprueba o va a recuperativa, segn las reglas de notas y taller dadas

    en el curso.

    Programa CalculoNF

    begin

    Leer notas Sacar Promedio Imprimir nota final y mensaje end

  • 91

    Instrucciones para ciclos

    Posibilita la repeticin de una o ms instrucciones (ciclos)

    3.3.4.4.2 for

    Repite un conjunto de sentencias un nmero especfico de veces

    for (inicio; condicion_termino; incremento){ // Conjunto de Sentencias

    }

    Ejemplo: Leer las edades de 10 personas

    int edad; for(int i=1; i

  • 92

    3.3.4.4.3 while

    Repite la ejecucin de un conjunto de sentencias, de tal forma que estas se ejecutan mientras

    la condicin sea verdadera.

    La condicin, ser evaluada siempre antes de cada repeticin.

    while(condicion_termino){ // Conjunto de Sentencias

    }

    Ejemplo: Leer las edades de personas hasta que se ingrese una edad igual a -1

    StdOut.print("Ingrese edad: "); int edad = StdIn.readInt(); while (edad != -1) { StdOut.print("Ingrese edad: "); edad = StdIn.readInt();

    }

  • 93

    3.3.4.4.4 dowhile:

    Repite un conjunto de sentencias de tal forma que estas se ejecutan mientras la condicin sea

    verdadera. La condicin ser evaluada siempre despus de cada repeticin. El conjunto de

    instrucciones se ejecuta al menos una vez.

    do { // Conjunto de Sentencias

    } while (condicion_termino);

    Ejemplo: Leer la edad de una persona, no se debe permitir el ingreso de una edad negativa.

    int edad; do { edad = StdIn.readInt();

    } while (edad < 0);

  • 94

    Ejemplos:

    o int i = 1; while (i

  • 95

    3.4 Validacin de datos de entrada y casos de prueba

    a. Validacin de datos de entrada

    Verificar correcta lectura de la informacin ingresada.

    Verificar formatos de rut, montos, fechas, etc.

    Verificar el ingreso de datos slo numricos donde corresponda.

    Verificar validacin en el ingreso de los das correspondientes al mes.

    Verificar validacin en el ingreso de los meses correspondientes al ao.

    Verificar redaccin clara y precisa.

    Verificar correcta ortografa.

    Ejemplos de validacin de datos de entrada:

    Se estn ingresando las edades de los alumnos, se debe validar que no pueden ser menores a 15 y mayores a 70

    Se estn ingresando las notas de los alumnos y estas deben ser numricas y estar entre 1.0 y 7.0

    Se est ingresando un mes, se debe validar que est entre 1 y 12.

  • 96

    Ejemplo de un tipo de validacin:

    Validacin del rut Para validar el rut se utiliza su dgito verificador, es decir, se debe comparar el dgito verificador del rut con un dgito verificador que se calcula con los dgitos que tiene el rut hasta antes del guin. Si son iguales est correcto, sino significa que hay un error en el rut ingresado.

    Cmo se calcula el dgito verificador (DV)?

    1. Se multiplica cada dgito por un ponderador que parte en 2, se va incrementando en 1

    por cada dgito y su valor mximo es 7.

    Si hay ms dgitos se vuelve a partir desde el 2.

    El rut se considera de atrs para adelante.

    Por ejemplo, para el rut 8.064.042-0

    8 0 6 4 0 4 2 * * * * * * * 2 7 6 5 4 3 2 = = = = = = = 16 0 36 20 0 12 4

  • 97

    2. Se hace la suma de los valores obtenidos anteriormente.

    16 + 0 + 36 + 20 + 0 + 12 + 4 = 88

    3. El resultado de la suma anterior se divide por 11, obtenindose el resto de la divisin

    88 : 11 = 8

    0

    4. Se resta 11 menos el resto de la divisin anterior

    11 0 = 11

    5. Si resultado

    es 11 DV = 0

    es 10 DV = K

    est entre 1 y 9 DV = resultado

    Resto de la divisin

  • 98

    b. Casos de prueba

    Casos de Prueba

    Nmero Datos de prueba Resultados Esperados

  • 99

    Ejemplo de un caso de prueba

    Construir un programa para calcular e imprimir el promedio de edad de los estudiantes. Se leen las

    edades de los estudiantes. Fin de datos, edad = -1

    Casos de Prueba

    Nmero Datos de prueba Resultados Esperados 1 20

    19

    18 -1

    Edad promedio: 19

    2 18

    21

    -1

    Edad promedio: 19.5

    3 -1 No se ingresaron edades

  • 100

    4 Algoritmos: Promedios, Bsqueda del mayor y menor

    4.1 Calcular y desplegar por pantalla el promedio de notas de un curso de 100 alumnos. Se

    debe leer desde pantalla la nota final de cada alumno.

    Programa promedio

    Begin

    Inicializar acumulador de notas

    For I = 1 to 100

    Leer nota final

    Acumular nota final

    Calcular e imprimir promedio

    End

    Refino

  • 101

    En Java:

    import ucn.*; public class Promedio100Alumnos { public static void main(String args[]) { double suma = 0; for (int i = 1; i

  • 102

    4.2 Determinar al mejor alumno (con la mejor nota), en 1000 estudiantes. Por cada alumno se

    debe leer su matrcula y su promedio de notas. Se debe desplegar el nmero de matrcula y

    la nota del mejor alumno.

    import ucn.*; public class MejorAlumno { public static void main(String args[]) { double mayor = 0; String matrMayor = ""; for (int i = 1; i mayor) { mayor = prom; matrMayor = mat; } } StdOut.println("Mayor promedio es: " + mayor + " numero de matricula: " + matrMayor); } }

  • 103

    4.3 El arancel de matrcula es calculado por la frmula:

    AM = SUELDO_PADRES * 10 NHERMANOS * EDAD_ESTUDIANTE + IMPUESTO_POR_REGION_PROCEDENCIA

    Dependiendo de la regin, el impuesto es:

    1. 5000

    2. 1000

    3. 4000

    4. 10000

    Cualquier otra regin: 0

    Construya un algoritmo que calcule e imprima el arancel a pagar por un estudiante. Se debe leer,

    desde pantalla, el sueldo de los padres, N de hermanos, edad y la regin.

    Programa Arancel

    Begin

    Leer datos Calcular arancel Imprimir arancel

    End

    Refino

  • 104

    import ucn.*; public class Arancel { public static void main(String args[]) { // Lectura de los datos StdOut.print("Ingrese sueldo: ");

    int sueldo = StdIn.readInt(); StdOut.print("Ingrese cantidad de hermanos: ");

    int cant = StdIn.readInt(); StdOut.print("Ingrese edad: ");

    int edad = StdIn.readInt(); StdOut.print("Ingrese region: ");

    int region = StdIn.readInt(); int impuesto; switch (region) { case 1: impuesto = 5000; break; case 2: impuesto = 1000; break; case 3: impuesto = 4000; break; default: impuesto = 0; } int arancel = sueldo * 10 - cant * edad + impuesto; StdOut.println("Arancel: " + arancel); } }

    Nota: Hacer los cambios en el cdigo para reemplazar el switch por if

  • 105

    4.4 Leer datos de alumnos, matrcula, nota1, nota2, nota3 y desplegar el promedio de cada uno.

    Son 500 estudiantes.

    PROGRAMA Promedio

    BEGIN

    FOR I = 1 TO 500

    Leer datos

    Calcular Promedio

    Imprimir promedio

    END FOR

    END

    Refino

  • 106

    import ucn.*; public class Promedio50 { public static void main(String args[]) { for (int i = 1; i

  • 107

    4.5 Leer e imprimir la edad de N alumnos. N es el primer dato!

    import ucn.*; public class Leyendo_N_Edades { public static void main(String args[]) { int N = StdIn.readInt(); for (int i = 1; i

  • 108

    4.6 Leer varios nmeros hasta encontrar un -1 y calcular su suma.

    import ucn.*; public class SumaNumerosHastaMenosUno { public static void main(String args[]) { int suma = 0; StdOut.println("Ingrese numero: "); int num = StdIn.readInt(); while (num != -1) { suma = suma + num; StdOut.println("Ingrese numero: "); num = StdIn.readInt(); } StdOut.println("Suma: " + suma); } // Fin main }// Fin SumaNumeros

  • 109

    4.7 Leer una secuencia de nmeros hasta encontrar un -1, y determinar cuntas veces hubo

    cambio entre signos positivos y negativos.

    import ucn.*; public class DetectarCambiosDeSignoHastaLeerMenosUno { public static void main(String args[]) { int anterior = 0; int cant = 0; StdOut.println("Ingrese un numero: "); int numero = StdIn.readInt(); while (numero != -1) { if (numero * anterior < 0) { cant++; } anterior = numero; StdOut.println("Ingrese un numero: "); numero = StdIn.readInt(); } StdOut.println("Cambios de Signo:" + cant); } }

  • 110

    4.8 Leer una secuencia de 100 nmeros y determinar cuntos son divisibles por 2 y cuntos por

    3.

    Refino:

    PROGRAMA Divisibles por 3 y por 2

    BEGIN

    Inicializar 2 contadores FOR i = 1 TO 100

    Leer nmero Ver si es divisible por 2 Ver si es divisible por 3 IF (es divisible por 2) THEN Incrementar contador de los divisibles por 2 ENDIF

    IF (es divisible por 3) THEN Incrementar contador de los divisibles por 3 ENDIF

    ENDFOR

    WRITE (Total nmero divisible por 2, Contador de los divisibles por 2)

    WRITE (Total nmero divisible por 3, Contador de los divisibles por 3)

    END

  • 111

    En Java:

    import ucn.*; public class Leer100NumerosYDecirDivisiblesPor2y3 { public static void main(String args[]) { int cantidadDivisiblePor2 = 0; int cantidadDivisiblePor3 = 0; for (int i = 1; i 0) { aux2 = aux2 - 2; } if (aux2 == 0) { cantidadDivisiblePor2++; } // Ahora, veamos si "numero" es divisible por 3 int aux3 = numero; while (aux3 > 0) { aux3 = aux3 - 3; } if (aux3 == 0) { cantidadDivisiblePor3++; } } StdOut.println("Cantidad de divisibles por 2:" + cantidadDivisiblePor2); StdOut.println("Cantidad de divisibles por 3:" + cantidadDivisiblePor3); } }

  • 112

    Nota: Hacer los cambios en el cdigo para usar la funcin resto de Java

  • 113

    4.9 Leer un nmero y determinar si es primo o no.

    import ucn.*; public class DeterminarSiUnNumeroEsPrimo { public static void main(String args[]) { boolean ok = true; int numero = StdIn.readInt(); int i = 2; int mitad = numero / 2; while (i 0) { auxiliar = auxiliar - i; } if (auxiliar == 0) { ok = false; } i = i + 1; // o tambin "i++" } StdOut.println("El nmero " + numero); if (ok) { StdOut.println(" es primo"); } else { StdOut.println(" no es primo"); } } }

  • 114

    Nota: Hacer los cambios en el cdigo para usar la funcin resto de Java

  • 115

    4.10 Calcular la integral entre A y B, con precisin de DX para la ecuacin. A, B y DX deben

    leerse desde pantalla.

    f(x) = x4 - 3 x3 - 2x + 6

    PROGRAM Integral

    BEGIN f(x)

    Leer datos

    FOR cada rectngulo

    Calcular el rea

    Acumular el rea f(x)

    ENDFOR

    Imprimir el rea resultante a dx b x END

  • 116

    import ucn.*; public class Integral { public static void main(String args[]) { StdOut.print("Ingrese A: "); double a = StdIn.readDouble(); StdOut.print("Ingrese B: "); double b = StdIn.readDouble(); StdOut.print("Ingrese DX: "); double dx = StdIn.readDouble(); double area = 0; for (double x = a; x

  • 117

    4.11 Leer registros de alumnos (matrcula, promedio) y determine los 2 nmeros de matrculas

    correspondientes a los alumnos de mejores promedios. Fin de datos: matrcula = -1.

    Refino:

    PROGRAMA Los dos mejores

    BEGIN

    Leer matricula

    WHILE (matrcula < > -1)

    Leer promedio

    Determinar el primer mayor

    Determinar el segundo mayor

    Leer matrcula

    ENDWHILE

    Imprimir el primer mayor

    Imprimir el segundo mayor

    END

  • 118

    En Java:

    import ucn.*; public class DosMejores { public static void main(String args[]) { double mayor1 = 0; String mat1 = " "; double mayor2 = 0; String mat2 = " "; StdOut.print("Ingrese matrcula: "); String mat = StdIn.readString(); double prom; while (!mat.equals("-1")) { StdOut.print("Ingrese promedio de notas: "); prom = StdIn.readDouble(); if (prom > mayor1) { mayor2 = mayor1; mat2 = mat1; mayor1 = prom; mat1 = mat; } else { if (prom > mayor2) { mayor2 = prom; mat2 = mat; } } StdOut.print("Ingrese matrcula: "); mat = StdIn.readString(); } // Fin del while StdOut.println("Mejor promedio: " + mayor1 + " matricula: " + mat1); StdOut.println("Segundo mejor promedio: " + mayor2 + " matricula: " + mat2); } // Fin main } // Fin DosMejores

  • 119

    5 Programas de generacin de sucesiones y series

    5.1 Conceptos bsicos

    5.1.1 Sumatorias

    Definicin: tttt NN

    ii

    .......21

    1

    Propiedades:

    i.

    N

    iii

    N

    ii

    N

    ii vtvt

    111

    ii.

    N

    ii

    N

    ii tt cc

    11 (c constante)

    iii. Si ti = c i = 1,N (c constante)

    cNcN

    i

    N

    iit

    11

    Nota:

    N

    kii

    k

    ii

    N

    ii ttt

    111

  • 120

    5.1.2 Productos

    Definicin: tttt NN

    ii

    .......21

    1

    Propiedades:

    i.

    N

    iii

    N

    ii

    N

    ii vtvt

    111

    ii.

    N

    ii

    NN

    ii tctc

    11 (c constante)

    iii. Si ti = c i = 1,N (c constante)

    ctN

    N

    i

    N

    ii

    c 11

    Nota:

    N

    kii

    k

    ii

    N

    ii ttt

    111

  • 121

    5.1.3 Funcin Recursiva

    Es aquella que permite evaluar una infinidad de trminos, cada uno de los cuales despus de un

    cierto punto, est definido en trmino de los elementos precedentes.

    Ejemplos:

    5.1.3.1 Secuencia de Fibonacci:

    t1 = 1, t2 = 1

    tn = t n-1 + t n-2 n 3

    1, 1, 2, 3, 5, 8, 13, 21,........

    5.1.3.2 Definicin del N factorial

    n! = 1 si n = 0

    n! = n (n-1)! Si n 1

    Tambin: ti = t i-1 * i i > 0

    t0 = 1

    1, 1, 2, 6, 24, 120,......

  • 122

    5.1.3.3 El primer trmino de una sucesin es igual a 1 y los siguientes a 3 veces el trmino anterior.

    ti = 3t i-1 i 2 t1 = 1

    1, 3, 9, 27,.......

  • 123

    Funcin Posicional

    Es aquella en que cada trmino es evaluado de acuerdo a su posicin en la sucesin o serie, no

    requirindose la evaluacin de trminos anteriores. Por ejemplo:

    5.1.3.4 Sucesin de los nmeros naturales: 1, 2, 3, 4, 5, ........

    Funcin

    Recursiva

    Funcin

    Posicional

    t1 = 1

    ti = t i-1 + 1 i > 1

    ti = i i > 0

    5.1.3.5 Sucesin de los nmeros impares: 1, 3, 5, 7, 9, ........

    Funcin

    Recursiva

    Funcin

    Posicional

    t1 = 1

    ti = t i-1 + 2 i > 1

    ti = 2i - 1 i > 0

    5.1.3.6 Sucesin de los nmeros pares: 2, 4, 6, 8, ........

    Funcin

    Recursiva

    Funcin

    Posicional

    t1 = 2

    ti = t i-1 + 2 i > 1

    ti = 2i i > 0

  • 124

    5.1.3.7 Progresin Aritmtica, trmino inicial 5, diferencia 3:

    5, 8, 11, 14 ........

    Funcin

    Recursiva

    Funcin

    Posicional

    F1 = 5

    Fi = F i-1 + 3 i > 1

    Fi = 5 + 3(i-1)

    i > 0

    5.1.3.8 Progresin Aritmtica en general, trmino inicial a, diferencia d:

    a, a+d, a+2d, ........, a+(i-1)d

    Funcin Recursiva Funcin Posicional

    F1 = a

    Fi = F i-1 + d i > 1

    Fi = a + d(i-1) i > 0

    5.1.3.9 Progresin Geomtrica, trmino inicial 5, razn 2:

    5, 10, 20, 40, 80, ........

    Funcin Recursiva Funcin Posicional

    F1 = 5

    Fi = F i-1 * 2 i > 1

    Fi = 5 * 2(i-1) i > 0

  • 125

    5.1.3.10 Progresin Geomtrica en general, trmino inicial a, razn r:

    a, ar, ar2, ar3, ar4, .....,ar i-1

    Funcin Recursiva Funcin Posicional

    F1 = a

    Fi = F i-1 * r i > 1

    Fi = a * r(i-1) i > 0

  • 126

    5.1.4 Ejercicios

    5.1.4.1 Determinar la funcin posicional y recursiva de la sucesin:

    12, 22, 32, 42, 52,......

    5.1.4.2 Expresar S mediante notacin recursiva

    ....141185 S

    5.1.4.3 Expresar S mediante notacin recursiva

    .........8532

    8532

    xxxxxxS

    5.1.4.4 Expresar S mediante notacin recursiva y posicional

    NS ...321.....321211

  • 127

    5.1.4.5 Expresar S mediante notacin recursiva

    .......7531 ttttS

    t1 = 1 ; t2 = 1 ; t3 = 2 ; t4 = 3; t5 = 5

    5.1.4.6 Expresar S mediante notacin recursiva

    ......!7!5!3!1

    753

    xxxxS

    5.1.4.7 Construir un algoritmo para calcular la serie 1/xi hasta que el trmino sea menor a 0.0000005 (no incluir ese trmino). El valor x debe ser ledo.

    Refino: PROGRAM Serie

    BEGIN

    Leer x

    Calcular trmino

    WHILE ( trmino >= 0.0000005) DO

    Acumular trmino

    Obtener nuevo trmino

    END WHILE

    WRITE (S)

    END

  • 128

    En Java:

    import ucn.*; public class Serie1 { public static void main(String args[]) { StdOut.print("Ingrese X:"); double x = StdIn.readDouble(); double s = 0; double den = x; double term = 1 / den; while (term >= 0.0000005) { s = s + term; den = den * x; term = 1 / den; } StdOut.println(s); } }

  • 129

    5.1.4.8 Genere el trmino M de la secuencia de Fibonacci.

    S = 0, 1, 1, 2, 3, 5, 8, 13, M > 3 import ucn.*; public class Fibo1 { public static void main(String args[]) { int anteriorUno = 0; int anteriorDos = 1; int nuevo = 0; StdOut.print("Ingrese M: "); int m = StdIn.readInt(); for (int i = 3; i

  • 130

    6 Procesamiento de archivos secuenciales

    Un programa puede trabajar con archivos, de lectura o de escritura.

    Bsicamente, lo que se requiere es habilitar el acceso de las instrucciones de lectura y escritura a

    medios diferentes al teclado y la pantalla.

    Al conjunto de datos almacenado en disco, ya sea para ser ledo por un programa o resultado de algn

    proceso computacional, se le denomina Archivo.

    En trminos formales, un Archivo es un conjunto de datos organizados en estructuras llamadas

    registros, en los medios de almacenamiento secundarios, por ejemplo disco.

    Un archivo est compuesto por registros o lneas de datos que conforman un grupo de informacin

    que es reconocido como una unidad.

    El archivo est compuesto de estas lneas de datos y se estructuran sin confundirse y perder su

    significado.

  • 131

    Ejemplo:

    Un archivo de alumnos que contiene datos de matrcula, nota1, nota2 y nota3.

    26543 4.5 5.2 7.0

    26579 3.9 4.2 3.3

    26580 3.7 2.9 6.4 Registros de datos 26583 5.5 6.2 1.0

    26597 7.0 3.7 4.2

    6.1 Para recordar

    a. Un registro tiene campos.

    b. Los campos estn separados por espacios

    c. Al leer los datos, los espacios en blanco se ignoran

  • 132

    Ejemplo:

    25 Juan 2

    25 Juan 2

  • 133

    d. Un archivo debe ser:

    Abierto, antes de empezar a leerlo o grabarlo

    Cerrado, una vez que se termin de usar

    26580 3.7 2.9 6.4 26583 5.5 6.2 1.0 26597 7.0 3.7 4.2

    Ejemplos de archivos

    alumnos.txt

    juan 20 true 5.1 pedro 19 false 3.6 maria 24 true 6.5

    resultado.txt

    juan 20 true 5.1 pedro 19 false 3.6 maria 24 true 6.5

  • 134

    Por ejemplo, vamos a leer el archivo "alumnos.txt", vamos a mostrar por pantalla sus contenidos y

    vamos a escribir sus contenidos a otro archivo, llamado "resultado.txt".

    import ucn.*; public class Ejemplo1Archivos { public static void main(String[] args) { // Se abre el archivo de entrada In entrada = new In("alumnos.txt"); // Se crea el archivo de salida Out salida = new Out("resultado.txt"); while (!entrada.isEmpty()) { // Mientras no sea fin de archivo // Se lee el registro: // Se obtienen cada uno de los campos del registro de entrada String nombre = entrada.readString(); int edad = entrada.readInt(); boolean pertenece = entrada.readBoolean(); double promedio = entrada.readDouble(); // Despliegue en la pantalla de los datos del registro leido StdOut.println("Edad: " + edad + ". Nombre: " + nombre + ". Pertenece: " + pertenece + ". Promedio: " + promedio); // Se escriben los datos al archivo de salida: salida.print(nombre); salida.print(edad); salida.print(pertenece); salida.println(promedio); } // Fin while // Se cierran los 2 archivos entrada.close(); salida.close(); }// Fin main }

  • 135

    El archivo "alumnos.txt" tiene los siguientes contenidos:

    juan 20 true 5.1 pedro 19 false 3.6 maria 24 true 6.5

    Despus de ejecutar el programa, cul es el contenido del archivo "resultado.txt"?

    Qu tengo que hacer para que el nombre, la edad, el pertenece y el promedio no aparezcan

    "pegados" unos a otros?

    Cul es la diferencia entre print y println?

  • 136

    Qu pasa si me equivoco en el orden en que se leen los elementos desde el archivo de entrada? boolean pertenece = entrada.readBoolean(); String nombre = entrada.readString(); int edad = entrada.readInt(); double promedio = entrada.readDouble();

    en vez de String nombre = entrada.readString(); int edad = entrada.readInt(); boolean pertenece = entrada.readBoolean(); double promedio = entrada.readDouble();

  • 137

    6.2 Ejemplo

    Leer un archivo con datos de nombre de alumno, matrcula y tres notas, y calcular el promedio para

    cada alumno y escribirlo en un archivo junto con el nombre y la matricula. Adems, escriba el

    promedio general del curso en la pantalla del computador. El archivo de entrada se llama

    datos.txt y el de salida resultado.txt.

  • 138

    Program Archivo

    Begin

    Definir el archivo de lectura datos.txt Definir el archivo de salida resultado.txt Inicializar contador y sumador

    Mientras existan registros en el archivo Datos.txt Begin

    Leer registro del archivo Datos.txt Obtener cada uno de los campos del registro Calcular promedio

    Grabar el registro en el archivo de resultados Contar la cantidad de registros (cantidad de alumnos)

    Acumular el promedio End;

    Calcular el promedio general Imprimir el promedio general Cerrar archivos Calcular y mostrar el promedio general del curso

    End.

  • 139

    import ucn.*; public class Ejemplo2Archivos { public static void main(String args[]) { In entrada = new In("datos.txt"); Out salida = new Out("resultado.txt"); int contador = 0; double sum = 0; while (!entrada.isEmpty()) {// Mientras no sea fin de archivo // Leemos los datos desde el archivo de entrada // String nombre = entrada.readString(); String matricula = entrada.readString(); double n1 = entrada.readDouble(); double n2 = entrada.readDouble(); double n3 = entrada.readDouble(); // Se calcula el promedio double promAl = (n1 + n2 + n3) / 3; // Escribimos los datos al archivo de salida salida.print(nombre); salida.print(" "); salida.print(matricula);

  • 140

    salida.print(" "); salida.println(promAl); contador++; sum = sum + promAl; } // Fin while // Se cierran los archivos entrada.close(); salida.close(); double promG; if (contador > 0) { promG = sum / contador; } else { promG = 0; } StdOut.println("Promedio general es: " + promG); } // fin main } // fin Ejemplo

  • 141

    Con el siguiente Archivo Datos.txt

    Daniela_Fernandez 89.446-5 3.0 4.0 5.0 Jose_Ramirez 92.889-0 3.5 3.0 5.5 Sergio_Perez 89.234-7 4.0 4.5 3.7

    Resultado.txt

    Daniela_Fernandez 89.446-5 4.0 Jose_Ramirez 92.889-0 4.0 Sergio_Perez 89.234-7 4.066666666666666

  • 142

    7 Vectores y Matrices

    7.1 Conceptos

  • 143

    Un arreglo consiste en un nmero fijo, finito y ordenado de elementos, todos del mismo tipo y bajo

    un nombre comn para todos ellos.

    Valor

    1

    Valor

    2

    Valor

    3

    Valor

    4

    Valor

    5

    Valor

    6

    Valor

    7

    Valor

    N

    Primer

    elemento

    ensimo

    elemento

  • 144

    7.2 Tipos de arreglos:

    Tipos de Arreglos

    Unidimensionales

    Bidimensionales

    Multidimensionales

  • 145

    7.2.1 Arreglos unidimensionales (vectores)

    Son arreglos de una dimensin. Tambin se denominan vectores.

    Tiene un solo ndice. Cada componente del vector se direcciona mediante un nombre seguido del

    nmero correspondiente al ndice entre parntesis cuadrados.

    0 1 2 3 4 5 6 7 8 9

    En Java el primer elemento SIEMPRE est en la posicin 0.

    ndice del

    vector

  • 146

    Para trabajar con vectores se necesita:

    Declarar el vector

    Crear el vector

    Insertar elementos al vector

    Obtener elementos del vector

  • 147

    Ejemplo: para trabajar con un vector de nmeros enteros.

    7.2.1.1 Declaracin del Vector

    int [] vecNum;

    Crea una referencia para utilizar el arreglo.

  • 148

    7.2.1.2 Creacin del Vector

    vecNum = new int[26];

    Crea un arreglo que puede almacenar 26 elementos de tipo int. Los ndices de estos 26 elementos irn del 0 al 25.

  • 149

    7.2.1.3 Insercin de elementos en el Vector

    for(int i=0; i

  • 150

    7.2.1.4 Obtener elementos

    Desplegar los elementos del vector en la pantalla.

    for(int i=0; i

  • 151

    7.2.1.5 Ejemplo

    Programa que lee desde el teclado la nota final de un alumno para cada una de 10 asignaturas, las

    almacena en un vector y calcula e imprime su media.

    Refino:

    PROGRAM NOTA MEDIA

    Begin

    Leer notas y dejarlas en un vector de 10 posiciones Sumar las notas Calcular e imprimir el promedio end

  • 152

    import ucn.*; class EjemploVector { public static void main(String args[]) { // Declaracin y creacin del vector double[] notas = new double[10]; // Lectura de las notas e ingreso al vector for (int i = 0; i < 10; i++) { StdOut.print("Ingrese nota " + (i + 1)); double nota = StdIn.readDouble(); notas[i] = nota; // Las dos lineas anteriores se pueden reemplazar con una sola lnea: // notas[i] = PantallaEntrada.getDouble(); } // Calculo del promedio double suma = 0; for (int i = 0; i < 10; i++) { suma = suma + notas[i]; } double prom = suma / 10.0; StdOut.println("Promedio: " + prom); } // Fin main } // Fin EjemploVector

  • 153

    7.2.2 Arreglos Bidimensionales (Matrices)

    Son tablas de 2 dimensiones.

    Tienen dos ndices, por lo cual cada componente de la matriz se direccionan mediante su nombre seguido de los dos ndices, donde cada uno se encuentra entre parntesis cuadrados.

    0 1 2 N-1

    0

    1

    2

    M-1

    MxN

    Matriz de M filas y N columnas

    En Java, SIEMPRE la primera fila es la 0 y la primera columna es la 0.

    Siempre la primera dimensin corresponde a la fila, y la segunda a la columna.

  • 154

    7.2.2.1 Declaracin de la matriz

    int [][] m;

    7.2.2.2 Creacin de la matriz

    m = new int[13][2];

  • 155

    7.2.2.3 Direccionamiento de un elemento

    A[fila] [columna]

    Ejemplos:

    int val = 0; for(int f=0; f

  • 156

    int val = 0; for(int c=0; c

  • 157

    En general, los elementos de una matriz se almacenan en la memoria interna de la

    computadora por columnas es decir:

    A(1,1), A(2,1), A(3,1), ,

    A(N,1), A(N,2), A(N,3), A(N,4), , A(N,M)

    A 1 2 3 N

    1

    2

    3

    M

  • 158

    7.2.2.4 Ejemplo

    Hay una matriz de 7 filas y 9 columnas que contiene el nmero de alumnos matriculados a cada

    grupo de un centro docente, por asignatura. Las filas corresponden a los grupos y las columnas a las

    asignaturas. (no se ocupar ni la fila ni columna 0)

    MATRICULA

    1 2 3 4 5 6 7 8

    1 35 30 32 32 34 35 34 28

    2 40 33 40 37 36 39 40 29

    3 25 23 26 21 24 24 25 15

    4 33 33 33 32 34 30 32 20

    5 45 44 45 44 43 40 44 33

    6 24 20 22 22 24 25 24 12

    Se debe construir un algoritmo que cargue la tabla del ejemplo anterior y a continuacin calcule e

    imprima el total de alumnos matriculados por asignatura.

    Grupo 6

    Asignatura 7

    Hay 21 alumnos del grupo 3 en la asignatura 4

  • 159

    El nombre de las asignaturas es el siguiente:

    Asignatura Nmero 1: Matemticas

    Asignatura Nmero 2: Lengua Espaola

    Asignatura Nmero 3: Formacin Humanstica

    Asignatura Nmero 4: Ciencias Naturales

    Asignatura Nmero 5: Ingls

    Asignatura Nmero 6: Informtica Bsica

    Asignatura Nmero 7: Estructura de la Informacin

    Asignatura Nmero 8: Metodologa de la Programacin

    Program Matricula

    Begin

    Leer matriz for cada asignatura:

    Calcular el total de alumnos Imprimir el total de alumnos endfor

    end

  • 160

    import ucn.*; public class TotalAlumnos { public static void main(String args[]) { int[][] matriz = new int[7][9]; String[] asig = new String[9]; asig[1] = "Matemticas"; asig[2] = "Lengua Espaola"; asig[3] = "Formacin Humanista"; asig[4] = "Ciencias Naturales"; asig[5] = "Ingls"; asig[6] = "Informacin Bsica"; asig[7] = "Estructura de la Informacin"; asig[8] = "Metodologa de la Programacin"; for (int f = 1; f

  • 161

    for (int c = 1; c

  • 162

    8 Algoritmos de bsqueda

    Concepto de bsqueda:

    Entrada: Un vector A, de tamao N y un valor a buscar.

    Salida: Posicin donde se encuentra Valor. Si no est, se enva un mensaje.

    Condiciones: Los datos se encuentran desordenados

    8.1 Bsqueda Secuencial int n = StdIn.readInt(); int[] A = new int[n]; for (int i = 0; i < n; i++) { A[i] = StdIn.readInt(); } int valor = StdIn.readInt(); // ----- Version 1 ------------- int i = 0; while (i < n && A[i] != valor) { i++; } if (i == n) { StdOut.println("valor no encontrado"); } else { StdOut.println("valor encontrado en pos " + i); } // -- Fin versin 1 -------------

  • 163

    // --- Versin alternativa --------- int i = -1; do { i++; } while (A[i] != valor && i < n - 1); if (A[i] == valor) { StdOut.println("valor encontrado en pos " + i); } else { StdOut.println("valor no encontrado"); } // --- Fin Versin alternativa ----- // -- Versin Versin Alternativa 2 --------- int i; for (i = 0; i < n; i++) { if (A[i] == valor) { StdOut.println("valor encontrado en pos " + i); break; } } if (i == n) { StdOut.println("valor no encontrado"); } // --- Fin -----------------------

  • 164

    // -- Versin Alternativa 2' --------- int i; boolean encontrado = false; for (i = 0; i < n; i++) { if (A[i] == valor) { encontrado = true; break; } } if (encontrado == true) { StdOut.println("valor encontrado en pos " + i); } else { StdOut.println("valor no encontrado"); }

    // --- Fin -----------------------

  • 165

    8.2 Bsqueda Secuencial Rpida

    int n = StdIn.readInt(); int[] A = new int[n + 1]; for(int i=0;i

  • 166

    8.3 Para datos que se encuentran ordenados de menor a mayor

    8.3.1 Bsqueda Secuencial

    int n = StdIn.readInt(); int[] A = new int[n]; for (int i = 0; i < n; i++) { A[i] = StdIn.readInt(); } int valor = StdIn.readInt(); int i = 0; while (i < n && A[i] < valor) { i++; } if (i == n || A[i] > valor) { StdOut.println("valor no encontrado"); } else { StdOut.println("valor encontrado en pos " + i); }

  • 167

    8.3.2 Bsqueda Binaria (para arreglos ordenados)

    K: Posicin de al medio del arreglo

    I K J

    El algoritmo es el siguiente:

    Comenzar con I=0, J=n-1 (el ltimo ndice del arreglo)

    Calcular K como el ndice al medio de I y J (*)

    Comparar el valor en K con el valor buscado:

    Si son iguales, xito! y Fin

    Si V > A[K], hacer I = K + 1

    Si V < A[K], hacer J = K - 1

    Repetir desde (*)

  • 168

    int n = StdIn.readInt(); int[] A = new int[n]; int i; for (i = 0; i < n; i++) { A[i] = StdIn.readInt(); } int valor = StdIn.readInt(); i = 0; int j = n - 1; int k; do { k = (i + j) / 2; if (valor > A[k]) { i = k + 1; } else { j = k - 1; } } while (A[k] != valor && i

  • 169

    8.4 Problema

    Determinar el ganador de una eleccin. El programa recibe inicialmente el listado de 50 candidatos y

    luego 1000 votos (los votos contienen el nombre del candidato).

    candidatos

    0 Stan

    1 Kyle

    2 Eric

    Kenny

    49 Jimmy

    votos

    0 Kenny

    1 Kenny

    2 Kyle

    3 Stan

    4 Kenny

    5 Stan

    Jimmy

    999 Kenny

  • 170

    8.4.1 Refino

    PROGRAM VOTOS

    BEGIN

    Leer a los 50 candidatos y dejarlos en un vector de 50 posiciones

    Inicializar el contador de votos de cada candidato en 0

    FOR I 1 TO 1000 READ (VOTO)

    Buscar a que candidato corresponde ese voto Incrementar el contador correspondiente endfor

    Determinar al candidato con la mayor cantidad de votos Imprimir al candidato ganador

    END

  • 171

    import ucn.*; class Votos { public static void main(String args[]) { String[] candidatos = new String[50]; int[] votos = new int[50]; int i; for (i = 0; i < 50; i++) { String nombre = StdIn.readString(); candidatos[i] = nombre; votos[i] = 0; // este paso es innecesario...porque? } for (i = 0; i < 1000; i++) { String nombre = StdIn.readString(); int j = 0; while (j < 50 && !candidatos[j].equals(nombre)) { j = j + 1; } if (j == 50) { StdOut.println("Candidato no existe"); } else { votos[j] = votos[j] + 1; } } int mayor = 0; String mejorCandidato = "NINGUNO"; for (i = 0; i mayor) { mayor = votos[i]; mejorCandidato = candidatos[i]; } } StdOut.println(mejorCandidato + mayor); } // fin main }// Fin votos

  • 172

    9 Algoritmos de Ordenamiento

    Entrada: Arreglo Desordenado

    Salida: Arreglo Ordenado de menor a mayor

    9.1 Ordenamiento Simple

    // Lectura del vector StdOut.println("Ingrese valor de N: "); int N = StdIn.readInt(); int[] A = new int[N]; for (int i = 0; i < N; i++) { StdOut.print("Ingrese valor de A[" + i + "]: "); A[i] = StdIn.readInt(); }

  • 173

    // Ordenamiento del vector for (int i = 0; i

  • 174

    9.2 Ordenamiento de Burbujas

    // Lectura del vector StdOut.println("Ingrese valor de N: "); int n = StdIn.readInt(); int[] arreglo = new int[n]; for (int i = 0; i < n; i++) { StdOut.print("Ingrese valor de arreglo[" + i + "]: "); arreglo[i] = StdIn.readInt(); } // Ordenamiento del vector for (int izq = 0; izq = izq + 1; der--) { if (arreglo[der] < arreglo[der - 1]) { int aux = arreglo[der]; arreglo[der] = arreglo[der - 1]; arreglo[der - 1] = aux; } } } // Despliegue del arreglo ordenado for (int i = 0; i < n; i++) { StdOut.println(arreglo[i]); }

  • 175

    9.3 Algoritmos de Insercin y Eliminacin

    9.3.1 Eliminacin

    Eliminar de un arreglo A de N elementos, el valor X.

    El arreglo y X deben ser ledos.

    Imprimir el arreglo resultante.

    El arreglo podra estar ordenado o no.

    PROGRAM Eliminar

    BEGIN

    Leer arreglo Leer X

    Buscar la posicin donde est X en el arreglo

    IF (X est en el arreglo)

    Corrimiento

    N N - 1 Imprimir arreglo resultante

    ENDIF

    END

    0

    N-

    1

    Primera posicin a correr

    Segunda posicin a correr

    Tercera posicin a correr

    X

  • 176

    StdOut.print("Ingrese cantidad de elementos: "); int n = StdIn.readInt(); int[] elementos = new int[n]; for (int i = 0; i < n; i++) { StdOut.print("Ingrese datos para pos " + i + ": "); elementos[i] = StdIn.readInt(); } StdOut.print("Ingrese valor a eliminar:"); int x = StdIn.readInt(); // Se busca el elemento a eliminar int i = 0; while (i < n && x != elementos[i]) { i++; } if (i == n) { StdOut.println("Valor no encontrado"); } else { // Desplazamiento for (int k = i; k < n - 1; k++) { elementos[k] = elementos[k + 1]; } n--; // El vector tiene un elemento menos } for (int j = 0; j

  • 177

    9.3.2 Insercin

    Leer un arreglo de N elementos que est ordenado.

    Leer un valor X e insertarlo en el arreglo de manera que se conserve el orden.

    Imprimir el nuevo arreglo.

    PROGRAM Insertar

    BEGIN

    Leer arreglo Leer X

    Buscar la posicin donde se debe insertar X para que el arreglo siga ordenado Desplazamiento

    Insertar X N N + 1

    Imprimir arreglo resultante END

    0

    Posicin a insertar x

    N-1

    N

    Tercera posicin a correr

    Segunda posicin a correr

    Primera posicin a

    correr

  • 178

    StdOut.print("Ingrese cantidad de elementos: "); int n = StdIn.readInt(); int[] elementos = new int[n + 1]; for (int i = 0; i < n; i++) { StdOut.print("Ingrese dato en pos " + i + ": "); elementos[i] = StdIn.readInt(); } StdOut.println("Ingrese valor a insertar: "); int x = StdIn.readInt(); // Bsqueda de la posicin donde hacer la insercin, // de manera de mantener el orden de los datos, // de mayor a menor int i = 0; while (i elementos[i]) { i++; } // Desplazamiento for (int k = n; k >= i + 1; k--) { elementos[k] = elementos[k - 1]; } elementos[i] = x; n++; for (i = 0; i < n; i++) { StdOut.println(elementos[i]);

    }

  • 179

    9. FUNCIONES Y PROCEDIMIENTOS

    9.1 Introduccin

    Al resolver un problema complicado de programacin, es necesario utilizar la tcnica dividir

    para conquistar.

    Es decir, si un problema es complejo, lo puedo dividir en subproblemas, cada uno de menor complejidad.

    Cada uno de estos subproblemas, lo puedo seguir dividiendo, de tal manera de llegar a problemas sencillos de resolver.

  • 180

    9.2 Ejemplo de Dividir para Conquistar

    Construya un programa que a partir de un archivo de ventas (ventas.txt) de una empresa, determine

    los diez productos ms vendidos, ordenando los resultados de menor a mayor; y los productos que no

    se vendieron. El archivo de ventas contiene por cada registro el cdigo del producto (entero) y la

    cantidad vendida. Adems, se tiene un archivo inventarios.txt, que contiene en cada registro el

    cdigo del producto y su stock.

    Considere que cada vez que procesa un registro del archivo de ventas debe actualizar el stock del

    producto correspondiente.

  • 181

    Refino 1

    Begin.

    Generar tabla de productos

    Procesar archivo de ventas

    Emitir salidas

    End.

    Refino 2

    Generar tabla de productos Begin

    Cargar en tabla el archivo de inventarios Dejar columna cantidad en 0 End.

    Procesar archivo de ventas Begin

    while (not EOF) do

    Leer un registro de ventas Buscar en tabla de productos

    Disminuir stock del producto Actualizar columna cantidad

    end while

    End

    cod_prod stock cantidad

    Emitir salidas Begin

    Ordenar tabla artculos, por columna cantidad Seleccionar 10 mayores Emitir listado mayores Seleccionar productos no vendidos (cantidad = 0) Emitir listado no vendidos End.

  • 182

    9.3 Programacin modular

    La programacin modular es un enfoque que construye algoritmos a travs del desarrollo de mdulos, que encapsulan la lgica en pequeos programas que pueden ser referenciados por el

    programa definitivo.

    La idea se sustenta en que es mejor enfrentar la solucin de un complejo problema agrupando tareas del problema en mdulos, conceptualmente pequeos, de fcil comprensin y

    unifuncionales.

    La divisin del problema original en mdulos genera un conjunto de sub programas, que al ser reunidos dan origen a una solucin final verstil, flexible y mejor presentada.

    Para la construccin de mdulos o subprogramas podemos utilizar:

    Procedimientos

    Funciones

    Un subprograma es un programa en miniatura que se incluye dentro del programa mismo para llevar a cabo una tarea especfica.

  • 183

  • 184

    Una gran ventaja al usar subprogramas es que permiten al programador disear el programa de tal forma que el cuerpo principal acta como un supervisor, delegando tareas.

    El enfoque modular facilita la escritura y depuracin de un programa, ya que las diferentes partes del programa (es decir, los subprogramas) pueden ser escritos y depurados independientemente.

  • 185

    9.4 Beneficios de los subprogramas:

    Disminucin de la codificacin

    Simplifica la lgica

    Concentra l