Documente Academic
Documente Profesional
Documente Cultură
Introduccin
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
Byte:
Conjunto de 8 bits.
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
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.
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.
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.
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
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)
El computador enva
paquetes, que contienen entre
otros:
Direccin fuente
Direccin destino
Datos
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.
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
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 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).
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
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
23
24
25
Hechar a correr
Carga de archivo
Bajar el computador
Resetear
Computador
pegado
Se cay
Formatea
Rutear un algoritmo
26
27
28
29
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
que no cumple su
especificacin).
31
32
33
34
35
1.
2.
3.
4.
5.
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.
2.
3.
4.
5.
37
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
39
40
Ejemplo 2
Read (N)
C0
S0
For I= 1 to N Do
Read (Nota)
S S + Nota
if (Nota >= 4.0) then
CC+1
Endif
Endfor
R S/N
Write ('Promedio del curso',R)
Write (Numero de Alumnos aprobados', C)
41
Programa de computador
Instrucciones de computador
Lenguaje de programacin
42
Algunos Lenguajes
C#
Python
C++
Algol
Basic
Objective-C
Fortran
Ada
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.
}
if (a > b) {
a++;
b--;
}
44
45
46
Programa mayor
BEGIN
Leer datos
Ver cul es el mayor
Imprimir el mayor
END
47
2.2.2
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
49
50
Lenguajes de programacin
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.
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
53
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).
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:
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
Programa en
lenguaje de alto nivel
Programa Fuente
Compilador
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
Mensaje de error
Error: ')' expected
Error: variable X might not have been
initialized
Error: bad operand type java.lang.X for
unary operator 'Y'
Error: not a statement
Causa comn
Falta un parntesis
Se debe asignar un valor por defecto a la
variable X indicada
No se puede aplicar el operador Y sobre la el
tipo de dato X
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
Mensaje de error
Error: incompatible types
required: X
found: Y
Error: possible loss of precision
required: X
found: Y
Error: cannot find symbol
symbol: X
location: Y
Error: bad operand types for
binary operator Z
first type: X
second type: Y
Causa comn
No se puede utilizar el tipo de dato Y, se requiere el tipo X
59
NF (N1 + N2 + N3)/3
N3 NF
60
Qu pasa en la memoria?
X
X0
0
X3
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
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
v1 - v2
v1 * v2
v1 / v2
v1 % v2
Suma v1 y v2
Resta v2 de v1
Multiplica v1 por v2
Divide v1 por 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";
String b = "hola" + 123;
String a = "hola";
String b = "mundo";
String c = a + b;
String a = "hola";
String b = "Mundo";
int c = 103;
String d = a + c + b;
69
Operadores Relacionales
Operador
Uso
>
v1 > v2
v1 es mayor que v2
>=
v1 >= v2
<
v1 < v2
v1 es menor que v2
<=
v1 <= v2
==
v1 == v2
v1 y v2 son iguales
!=
v1 != v2
v1 y v2 son distintos
70
Operadores Lgicos
Operador
Uso
&& (AND)
v1 && v2
|| (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
Ejemplo:
n1 = 6.1;
edad = 21;
NF = (n1 + n2)/3;
72
Ejemplos:
n1 = 10;
n2 = 20;
n1 = n2 + 6;
n1
n1 = 10;
n1 = n1 + 6;
n2 = 10;
n1 = n2;
n2
73
i = i + 1;
i ++;
Ejemplo:
..
int i = 1;
while (i <= 4) {
i++; // i = i + 1;
}
i
1
2
3
4
5
74
Variable que suma nmeros de cualquier valor y su resultado lo guarda en la variable de asignacin
involucrada.
Sintaxis:
i
1
2
3
4
5
sum
0
1
3
6
10
Ejemplo:
..
int i = 1;
int sum = 0;
while (i <= 4) {
sum = sum + i;
//sum es un acumulador
i++; // i = i + 1;
}
75
76
Ejemplo 1:
( (3+2) 2 - 15 ) /2 * 5
(Math.pow(( 3
2 ) , 2) - 15) / 2 * 5
( Math.pow(5, 2)
(
25
- 15) / 2 * 5
- 15) / 2 * 5
10
/ 2*5
5
*5
25
77
Ejemplo 2:
5 2 > 4 && ! 0.5 = 1 / 2
0.5
5
2 > 4 && ! 0.5 =
0.5
Falso
&& ! Verdadero
Falso
&&
Falso
Falso
0.5
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
(pseudocdigo)
80
81
3.3.4.4
Instrucciones condicionales
Alternativa Completa:
if (condicin) {
// instrucciones si se cumple la condicin
} else{
// instrucciones si no se cumple la condicin
}
82
Condicin: Expresin booleana que puede resultar Verdarera o Falsa. Compara a travs de
operadores y expresiones con conectores lgicos.
83
hacer
algo diferente,
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);
}
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);
}
}
}
Impresin
1
85
Alternativa Mltiple:
switch (nomVar) {
case valor1:
// instrucciones
break;
case valor2:
// instrucciones
break;
case valorN:
// instrucciones
break;
default:
// instrucciones
}
86
87
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
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 <= 100) {
//Sentencias
i = i + 1; //i++
}
int i = 0;
do {
//Sentencias
i++;
} while(i<100);
for (int i = 1; i <= 100; i++){
//Sentencias
}
95
96
0
*
7
=
0
6
*
6
=
36
4
*
5
=
20
0
*
4
=
0
4
*
3
=
12
2
*
2
=
4
97
98
b. Casos de prueba
Nmero
Casos de Prueba
Datos de prueba Resultados Esperados
99
20
19
18
-1
Edad promedio: 19
18
21
-1
-1
No se ingresaron edades
100
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 <= 100; i++) {
StdOut.print("Ingrese nota de un alumno: ");
double notaFinal = StdIn.readDouble();
suma = suma + notaFinal;
}
double prom = suma / 100.0;
StdOut.println("Promedio: " + prom);
}
}
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 <= 1000; i++) {
// Lectura de los datos
StdOut.print("Ingrese matricula del alumno: ");
String mat = StdIn.readString();
StdOut.print("Ingrese promedio del alumno: ");
double prom = StdIn.readDouble();
if (prom > mayor) {
mayor = prom;
matrMayor = mat;
}
}
StdOut.println("Mayor promedio es: " + mayor +
" numero de matricula: " + matrMayor);
}
}
103
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 =
break;
case 2:
impuesto =
break;
case 3:
impuesto =
break;
default:
impuesto =
}
{
5000;
1000;
4000;
0;
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 <= 50; i++) {
// Lectura de los datos de un alumno
StdOut.print("Ingrese matricula: ");
String matr = StdIn.readString();
double n1 = StdIn.readDouble();
double n2 = StdIn.readDouble();
double n3 = StdIn.readDouble();
// Calculo del promedio
double prom = (n1 + n2 + n3) / 3;
StdOut.println("Matricula " + matr + ", promedio: " + prom);
}
}
}
107
108
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 <= 100; i++) {
StdOut.print("Ingrese el item " + i + ": ");
int numero = StdIn.readInt();
// Vamos a ver si "numero" es divisible por 2
int aux2 = numero;
while (aux2 > 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
114
Nota: Hacer los cambios en el cdigo para usar la funcin resto de Java
115
dx b
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 <= b; x = x + dx) {
double fx = Math.pow(x, 4) - 3 * Math.pow(x, 3) - 2 * x + 6;
double r = dx * fx;
area = area + r;
}
StdOut.print("El rea bajo la curva es: ");
StdOut.println(area);
}
}
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
Sumatorias
N
t t t
Definicin:
i 1
....... t N
Propiedades:
t v t v
N
i.
i 1
i 1
ii.
ct
i 1
i 1
c t i
(c constante)
i 1
t c N c
i 1
i 1
Nota:
t t t
i 1
i 1
i k 1
120
5.1.2
Productos
N
t t t
Definicin:
i 1
....... t N
Propiedades:
t v t v
N
i.
i 1
i 1
ii.
i 1
c t c t
N
i 1
i 1
(c constante)
i 1
i 1
ti c c
N
Nota:
t t t
i 1
i 1
i k 1
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
n3
1, 1, 2, 3, 5, 8, 13, 21,........
5.1.3.2
ti = t i-1 * i
t0 = 1
1, 1, 2, 6, 24, 120,......
i>0
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
5.1.3.5
5.1.3.6
124
5.1.3.7
5.1.3.8
diferencia 3:
Funcin
Posicional
Fi = 5 + 3(i-1)
i>0
5.1.3.9
125
126
5.1.4
Ejercicios
5.1.4.1
5.1.4.2
S 5 8 1114 ....
5.1.4.3
S xx
5.1.4.4
x x x
3
.........
S 1 1 2 1 2 3 ..... 1 2 3 ... N
127
5.1.4.5
S t1 t 3 t 5 t 7 .......
t1 = 1 ; t2 = 1 ; t3 = 2 ; t4 = 3; t5 = 5
5.1.4.6
3!
5!
7!
x x x x
1!
......
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
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 <= m; i++) {
nuevo = anteriorUno + anteriorDos;
anteriorUno = anteriorDos;
anteriorDos = nuevo;
}
StdOut.println("El Fibonacci de " + m + " es
}
}
" + nuevo);
130
131
Ejemplo:
Un archivo de alumnos que contiene datos de matrcula, nota1, nota2 y nota3.
26543
26579
26580
26583
26597
4.5
3.9
3.7
5.5
7.0
5.2
4.2
2.9
6.2
3.7
7.0
3.3
6.4 Registros de datos
1.0
4.2
132
Ejemplo:
25 Juan 2
25
Juan
133
Ejemplos de archivos
26580 3.7 2.9 6.4
26583 5.5 6.2 1.0
26597 7.0 3.7 4.2
alumnos.txt
juan 20 true
pedro 19 false
maria 24 true
resultado.txt
5.1
3.6
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
true 5.1
false 3.6
true 6.5
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
141
89.446-5
92.889-0
89.234-7
3.0
3.5
4.0
4.0
3.0
4.5
Resultado.txt
Daniela_Fernandez 89.446-5 4.0
Jose_Ramirez 92.889-0 4.0
Sergio_Perez 89.234-7 4.066666666666666
5.0
5.5
3.7
142
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.
Primer
elemento
Valor
N
ensimo
elemento
144
Tipos de Arreglos
Bidimensionales
Multidimensionales
145
7.2.1
del
146
Declarar el vector
Crear el vector
Insertar elementos al vector
Obtener elementos del vector
147
148
7.2.1.2
149
7.2.1.3
150
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
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]
Identificador
Valor variable o expresin
numrica entera
Ejemplos:
int val = 0;
for(int f=0; f<13; f++) {
for(int c=0; c<2; c++){
m[f][c]= val;
val++;
}
}
156
int val = 0;
for(int c=0; c<2; c++) {
for(int f=0; f<13; f++){
m[f][c]= val;
val++;
}
}
157
N
1
2
3
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
30
1 35
33
2 40
23
3 25
33
4 33
44
5 45
20
6 24
Asignatura 7
3
32
40
26
33
45
22
4
32
37
21
32
44
22
5
34
36
24
34
43
24
6
35
39
24
30
40
25
7
34
40
25
32
44
24
8
28
29
15
20
33
12
Grupo 6
159
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]
asig[2]
asig[3]
asig[4]
asig[5]
asig[6]
asig[7]
asig[8]
=
=
=
=
=
=
=
=
"Matemticas";
"Lengua Espaola";
"Formacin Humanista";
"Ciencias Naturales";
"Ingls";
"Informacin Bsica";
"Estructura de la Informacin";
"Metodologa de la Programacin";
161
162
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
164
165
166
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
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
i =
int
int
valor = StdIn.readInt();
0;
j = n - 1;
k;
do {
k = (i + j) / 2;
if (valor > A[k]) {
i = k + 1;
} else {
j = k - 1;
}
} while (A[k] != valor && i <= j);
if (A[k] == valor) {
StdOut.println("valor encontrado en pos " + k);
} else {
StdOut.println("valor no encontrado");
}
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
0
1
2
3
4
5
999
votos
Kenny
Kenny
Kyle
Stan
Kenny
Stan
Jimmy
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 <= 49; i++) {
if (votos[i] > mayor) {
mayor = votos[i];
mejorCandidato = candidatos[i];
}
}
StdOut.println(mejorCandidato + mayor);
} // fin main
}// Fin votos
172
Algoritmos de Ordenamiento
173
174
{
1; der--) {
- 1]) {
- 1];
175
PROGRAM Eliminar
BEGIN
Leer arreglo Leer X
Buscar la posicin donde est X en el arreglo
IF (X est en el arreglo)
Corrimiento
NN-1
Imprimir arreglo resultante
ENDIF
END
Primera posicin a correr
0
X
N1
176
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
NN+1
Imprimir arreglo resultante
END
0
Posicin a insertar x
N-1
Primera
correr
posicin
178
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
181
Refino 1
Begin.
Generar tabla de productos
Procesar archivo de ventas
Emitir salidas
End.
cod_prod
stock cantidad
Refino 2
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
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
Carga de datos
Proceso estadstico
Resultados
Proceso B
Proceso C
La coordinacin entre el programa principal y las rutinas se logra por el algoritmo del programa y
mediante la utilizacin de parmetros.
186
end
Begin Principal
Llamado al subprograma
Llamado al subprograma
Llamado al subprograma
End
187
Dividir la funcionalidad del programa en partes ms sencillas, donde cada parte tenga una funcionalidad
clara y especfica.
Ejemplo:
Programa Principal
Carga de datos
Proceso estadstico
Resultados
188
Program Principal
// Declaracin de variables visibles para el programa completo
Subprograma Carga de datos
//Declaracin de variables del subprograma Carga de datos
begin
.....
end
Subprograma Proceso estadstico
//Declaracin de variables del subprograma
begin
.....
end
Subprograma Resultados
//Declaracin de variables del subprograma
begin
.....
end
begin
//del programa principal. Equivalente al main en Java
....
end //Fin del main
end //fin de todo el programa
189
Funciones
Una funcin es una operacin que toma uno o ms valores llamados Parmetros, los cuales
procesa por medio de sus instrucciones y retorna un solo valor (resultado).
Se localiza dentro de una instruccin
Ejemplo:
public static int calcularBono(int sueldo)
{
int bono = 0;
if (sueldo <= 450000) {
bono = 100000;
} else {
bono = 50000;
}
return bono;
}
190
9.6.2
Procedimientos
Ejemplo
public static void imprimir(int valor, String mensaje)
{
StdOut.println("************************");
StdOut.println("Valor: " + valor + " " + mensaje);
StdOut.println("************************");
}
191
9.6.3
192
9.6.4
Aplicacin completa
import ucn.*;
public class App
{
public static int calcularBono(int sueldo)
{
int bono = 0;
if (sueldo <= 450000) {
bono = 100000;
} else {
bono = 50000;
}
return bono;
}
public static void imprimir(int valor, String mensaje)
{
StdOut.println("************************");
StdOut.println("Valor: " + valor + " " + mensaje);
StdOut.println("************************");
}
public static void main(String args[]) throws IOException
{
StdOut.print("Ingrese sueldo: ");
int sueldo = StdIn.readInt();
int bono = calcularBono(sueldo);
imprimir(bono, "El valor del bono es: ");
}
}
193
9.6.5
SI i = 5
S S + X*7
public static int
.
}
PRIMO(int I) {
194
Los parmetros entregados a la funcin deben coincidir con los definidos en la construccin de
la rutina.
195
Los parmetros deben coincidir con los tipos de datos esperados en la rutina.
Los nombres de los parmetros pueden cambiar cuando son invocados, puesto que se tratan de
variables distintas.
196
9.6.6
Traspaso de Parmetros
parmetro formal
197
9.6.6.1
Ejemplo
import ucn.*;
parmetro formal
parmetro real
198
199
9.6.6.2
Por referencia
En ciertas circunstancias se desear escribir un subprograma que sea capaz de cambiar el valor de
una variable definida desde donde se llama al subprograma.
Para que un parmetro pueda cambiar el valor de la variable definida en el enunciado de llamada,
debe ser declarada como parmetro variable (por referencia) en el encabezado del subprograma.
Implica que en el subprograma se puede afectar el valor de la variable original. Se pasa una
referencia a la posicin de memoria donde se encuentra dicho valor.
Se utilizan tanto para recibir como para transmitir informacin entre el programa que llama y el
subprograma
parmetro real
parmetro formal
200
9.6.7
201
9.7 Ejemplo
Se tiene un programa en Java con:
Una rutina de tipo procedimiento denominada leeVector, que lee un vector de enteros. Se
traspasa como parmetros el vector y su tamao.
Una rutina de tipo procedimiento denominada imprimeVector, que imprime un vector de
enteros. El vector y su tamao se traspasan como parmetros.
Una rutina de tipo funcin que calcule la suma de los elementos del vector. El vector y su tamao
se traspasan como parmetros.
Una rutina de tipo procedimiento que modifique el contenido del vector, sumndole 1 a cada
elemento. Recibe como parmetro el vector y su tamao.
202
import ucn.*;
public class Ejemplo1
{
public static void leeVector(int n, int[] vector) throws IOException
{
for (int i = 0; i < n; i++) {
StdOut.print("Ingrese elemento " + i + " del vector");
vector[i] = StdIn.readInt();
}
}
public static void imprimeVector(int[] vector, int n)
{
for (int i = 0; i <= n - 1; i++) {
StdOut.println("V[" + i + "]: " + vector[i]);
}
StdOut.println("");
}
public static int calculaSuma(int[] vector, int n)
{
int suma = 0;
for (int i = 0; i <= n - 1; i++) {
suma = suma + vector[i];
}
return suma;
}
203
204
9.7.1
Versin 2
Y modificamos el
main:
205
9.7.2
V[0]:
V[1]:
V[2]:
V[3]:
5
10
8
3
V[0]:
V[1]:
V[2]:
V[3]:
6
11
9
4
206
Variables Globales
Son aquellas declaradas en la clase donde est el main. No son parte ni del main ni de ningn
subprograma.
La celda de memoria para una variable global existe durante toda la ejecucin del programa.
9.8.2
Variables Locales
Son aquellas que estn declaradas y definidas dentro de un subprograma, y son distintas de las
variables con el mismo nombre declaradas en cualquier parte del programa principal.
Las variables locales se crean especficamente para permitir al procedimiento ejecutar su tarea.
Las celdas de memoria para las variables locales se crean cada vez que el subprograma es llamado
y se borran cuando se sale de aqul.
207
9.9 Ejemplos
9.9.1
Ejemplo 1
Construir una rutina de tipo procedimiento que imprime un vector. La rutina se invoca como
imprime(V1,N)
public static void imprime(int[] V1, int N)
{
for (int i = 1; i <= N; i++) {
StdOut.println("V[" + i + "] =" + V1[i]);
}
}
208
9.9.2
Ejemplo 2
Construir una rutina que lea una matriz cuadrada de NxN
209
Funcin
public static int[][] leeMatriz(int N) throws IOException
{
int[][] matriz = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
StdOut.println("Ingresando datos de la fila " + i + "columna " + j);
matriz[i][j] = StdIn.readInt();
}
}
return matriz;
}
210
9.9.3
Ejemplo 3
Calcular la siguiente serie, en donde PRIMO(i) calcula el nmero primo de posicin I. Suponga que x
es entero.
N
x*primo(i) = x*1 + x*2 + x*3 + x*5 + x*7 + x*11 + .
i=1
Segundo nmero primo
Seudocdigo:
BEGIN
S0
READ (N,X)
FOR I = 1 TO N
S S + X * PRIMO(I)
ENDFOR
WRITE (S)
END
211
En Java:
import ucn.*;
public class Ejemplo3
{
public static int primo(int i)
{
// Posicion Primo
int posPrimo = 2;
// Numero que va a ser verificado si es primo o no
int numero = 1;
// Mientras no se calcule el primo en la posicion i
while (posPrimo <= i) {
numero++;
boolean esPrimo = true;
int divisor = 2;
// Verificacion de si numero es primo o no
while (divisor <= numero / 2 && esPrimo) {
if ((numero % divisor) == 0) {
esPrimo = false;
}
divisor++;
}
if (esPrimo == true) { posPrimo++; }
}
return numero;
}
212
213
9.9.4
Ejemplo 4
Procedimiento
214
Seudocdigo de SumaMatriz
funcion int [ ][ ] SumaMatriz (int [][] matriz1, int [][]matriz2){
int [][] matriz3 = new int[5][5];
for I = 0 to 4
for J = 0 to 4
matriz3[I] [J] = matriz1[I] [J] + matriz2[I] [J];
endfor
endfor
return matriz3
}
215
Seudocdigo de Imprime
procedimiento Imprime (int [][] matriz){
for I = 0 to 4
for J = 0 to 4
print (matriz [I] [J] + );
Endfor
println();
endfor
}
Seudocdigo de sumaElementos
funcion int sumaElementos (int [][] matriz) {
suma = 0;
for (int i = 0 ; i<= 4; i++)
for (int j = 0 ; j<= 4; j++)
suma = suma + matriz[i][j] ;
return suma;
}
216
Invocando a la funcin
LeeMat
int [][] M1 = LeeMat();
int [][] M2 = LeeMat ();
int [][] M3 = LeeMat ();
217
218
219
220
Modificamos el main:
public static void main(String[] Args) throws IOException
{
int[][] M1 = leeMat();
int[][] M2 = leeMat();
int[][] M3 = leeMat();
int[][]
int[][]
int[][]
int[][]
RA
RB
RC
RD
=
=
=
=
sumaMatriz(M1,
sumaMatriz(M2,
sumaMatriz(M2,
sumaMatriz(RB,
M3);
M3);
RA);
RC);
221
imprime(RA);
imprime(RB);
imprime(RC);
imprime(RD);
StdOut.println("Suma de los elementos de la matriz M1 es: " +
sumaElementos(M1));
} // fin main
222
9.9.5
Ejemplo 5
Una compaa ha subdivido sus empleados en dos grupos, GRUPO1 y GRUPO2. Cada empleado en GRUPO1
recibir un aumento de 25 dlares semanales, mientras que cada empleado del GRUPO2 recibir un aumento de
15 dlares a la semana.
import ucn.*;
public class AumentoSueldo
{
public static int aumento(int grupo, int salario)
{
// Calcula el nuevo salario y lo retorna
int nuevoSalario;
if (grupo == 1) {
nuevoSalario = salario + 25;
} else {
nuevoSalario = salario + 15;
}
return nuevoSalario;
}
public static void main(String[] Args) throws IOException
{
StdOut.print("Digite su grupo y su salario actual ");
int suGrupo = StdIn.readInt();
int suSalario = StdIn.readInt();
int nuevoValor = aumento(suGrupo, suSalario);
StdOut.println("Nuevo salario es $" + nuevoValor);
}
} // Fin AumentoSueldo
Cules sern los resultados emitidos del programa si ejecutamos los siguientes ejemplos?
223
224
9.9.6
Ejemplo 6
Construir un programa que contenga una funcin que lea una matriz de N x M de enteros. Los datos
vienen en un archivo datos.txt y en cada lnea viene una fila de la matriz.
N y M vienen en la primera lnea del archivo.
225
import ucn.*;
public class Ejemplo6_Funcion
{
public static int[][] leeMatriz()
{
In arch = new In("matriz.txt");
int N = arch.readInt();
int M = arch.readInt();
int[][] Mat = new int[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
Mat[i][j] = arch.readInt();
}
}
arch.close(); // Se cierra el archivo
return Mat;
Archivo matriz.txt:
3 5
5 7 3 1 0
2 4 5 1 3
0 1 0 2 0
}
public static void main(String[] args)
{
int[][] matriz = leeMatriz();
int N = matriz.length;
int M = matriz[0].length;
StdOut.println("N = " + N);
StdOut.println("M = " + M);
}// Fin main
} // fin Ejemplo6_Funcion
226
227
9.9.7
Ejemplo 7
Disear un programa que contenga una rutina que sume todos los elementos de una matriz de N x M
e imprima el resultado). N y M se leen desde pantalla
import ucn.*;
public class Ejemplo7
{
public static void sumaElementos(int N, int M, int[][] Mat)
{
int suma = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
suma = suma + Mat[i][j];
}
}
StdOut.println("Suma de los elementos: " + suma);
}
public static void main(String[] args)
{
int N = StdIn.readInt();
int M = StdIn.readInt();
int[][] Mat = new int[N][M];
sumaElementos(N, M, Mat);
}
}
228
9.9.8
Ejemplo 8
Idem a 7, pero el resultado de la suma se debe desplegar en el main.
import ucn.*;
public class Ejemplo8
{
public static int sumaElementos(int N, int M, int[][] Mat)
{
int suma = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
suma = suma + Mat[i][j];
}
}
return suma;
}
public static void main(String[] args)
{
int N = StdIn.readInt();
int M = StdIn.readInt();
int[][] Mat = new int[N][M];
int suma = sumaElementos(N, M, Mat);
StdOut.println("Suma de los elementos: " + suma);
}
}
Qu relacin
hay entre estas
dos variables
"suma" ?
229
nombre
sueldo edad
Empleado Perez, Jorge $600.000 28
Empleado
String nombre;
int sueldo;
int edad;
230
10.1 Ejemplo
Se requiere un vector con los datos (nombre, sueldo y edad) de los 50 empleados de la empresa.
Solucin anterior: 3 vectores paralelos
nombre
0 juan
1 maria
2 pedro
49 teresa
sueldo
250
329
499
edad
29
34
58
1000
25
231
juan
250
29
maria
329
34
pedro
499
58
teresa
1000
25
49
232
import ucn.*;
public class Ejemplo
{
public static void main(String[] args)
{
Empleado[] vecEmpl = new Empleado[50];
for (int i = 0; i <= 49; i++) {
StdOut.println("Ingreso de empleado" + (i + 1));
StdOut.print("Nombre: ");
String nom = StdIn.readString();
StdOut.print("sueldo: ");
int sueldo = StdIn.readInt();
StdOut.print("edad: ");
int edad = StdIn.readInt();
// Se crea al empleado
Empleado emp = new Empleado(nom, sueldo, edad);
vecEmpl[i] = emp; // Se ingresa el empleado al vector
}
// Despliegue de los empleados
for (int i = 0; i <= 49; i++) {
StdOut.println("nombre: " + vecEmpl[i].getNombre() +
" sueldo: " + vecEmpl[i].getSueldo() +
" edad: " + vecEmpl[i].getEdad());
}
}
}
233
Cmo le cambiamos el sueldo al empleado que est en la posicin 5 del vector de empleados?
// El nuevo sueldo es de 200
vecEmpl[5].setSueldo(200);
234
235
236
237
10.3 Ejercicio
Representar en Java los siguientes datos de una persona: nombre, celular, sexo
nombre
Luna, Laura
celular
98768907
sexo
f
238
Archivo Persona.java
public class
{
private
private
private
Persona
String nombre;
int celular;
char sexo;