101 TodaLaMateria
-
Upload
felipe-tello-herborn -
Category
Documents
-
view
17 -
download
2
description
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