introducción - tongoy.ucn.cltongoy.ucn.cl/ftello/ici/semestre 5/introduccion a la...
TRANSCRIPT
1
1 Introducción
1.1 Conceptos Básicos
Dato
Representación simbólica (numérica, alfanumérica).
Se puede procesar.
Información
Conjunto organizado de datos procesados.
Constituye un mensaje válido para un receptor.
Computador
Máquina electrónica que procesa datos según programas previamente almacenados en memoria,
de manera de obtener información
Posee características de multipropósito.
Computación
Ciencia que estudia el proceso electrónico de datos y a las
computadoras.
2
Informática
Ciencia que estudia el proceso de la información: captación, proceso,
generación y distribución; con el uso de tecnologías como la
computación y las telecomunicaciones.
Programa
Conjunto de instrucciones lógicamente ordenadas que realizan una
tarea específica en el computador por un periodo finito.
Computación Programación
3
Bit (BInary digiT)
Unidad mínima de procesamiento de información 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 mínima 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
2 Lenguajes de programación
Un lenguaje de programación es el medio mediante el cual la máquina acepta y entiende
algoritmos, expresados en una forma compatible con los seres humanos.
Un algoritmo es un conjunto de instrucciones que lógicamente ordenadas y que requieren un
tiempo finito de desarrollo, ejecutan una tarea en el computador.
Programar o programación: Especificar mediante un lenguaje de programación lo que una
máquina debe hacer.
Programa: Conjunto de instrucciones y datos especificados mediante un lenguaje de
programación que pueden ser entendibles por una máquina o software de forma automática
A diferencia de la mayoría de los humanos, las máquinas no tienen sentido común, por lo que
harán “exacta y literalmente” lo que uno le indique.
5
Ejemplo de algoritmo
Leer (N1, N2, N3)
R N1*0.3 + N2*0.3 + N3*0.4
Escribir (R)
Qué hace ?
6
Otro ejemplo de Algoritmo
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)
Y este ejemplo, qué hace?
7
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 colección de instrucciones, cada una con su estructura semántica bien definida y una sintaxis
no ambigua, para describir un algoritmo, se denomina lenguaje de programación.
La traducción de una idea (algoritmo) a un lenguaje, se llama "programar"
Para poder programar una máquina necesitamos un Lenguaje de programación, que de forma
similar al lenguaje natural que utilizamos los humanos, nos permitirá comunicarnos con las
máquinas 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 instrucción y por
semántica, su significado. Un programa sintácticamente correcto, no necesariamente es
semánticamente correcto.
El lenguaje de programación 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 tecnologías
o Pero aún así será la misma solución al mismo problema.
8
Ejemplos de sentencias
Ada
C#
Algol
Fortran
Objective-C
C++
Python
Basic
C
Java
9
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 máquina (0 y 1).
Un programa de computador, es decir un algoritmo escrito en algún lenguaje de programación,
para ser ejecutado por la máquina debe ser convenientemente traducido al lenguaje que entiende el
procesador, es decir, a lenguaje de máquina.
Para convertir los programas escritos en algún lenguaje de programación a código de máquina, se
debe ejecutar un proceso de traducción, de alguna de estas formas:
Proceso de compilación, realizado por un programa llamado compilador.
Proceso de interpretación, realizado por un intérprete, o bien un enfoque híbrido (código
intermedio).
La diferencia entre un compilador y un intérprete, es que el compilador traduce todas las
sentencias del programa a ceros y unos, y luego lo ejecuta. En cambio, un intérprete traduce de a
una las sentencias y las va ejecutando inmediatamente.
Proceso de compilación
Compilador
Programa en
lenguaje de alto nivel
Programa Fuente
Programa
Objeto
10
¿Qué es programar?
La programación moderna, al igual que la ciencia de la computación, es un área del conocimiento
que tiene poco más de medio siglo de existencia.
Prácticamente toda la tecnología actual incluye programación de una u otra forma, desde un
sencillo reloj, hasta los costosos equipos médicos o servicios de telecomunicaciones e información.
Programar o programación será para nosotros: especificar mediante un lenguaje de
programación lo que una máquina debe hacer.
Para poder programar necesitamos (definiciones generales e incompletas por ahora):
Problema: Un problema o tema a solucionar que requiere automatización.
Algoritmo: Una idea general de como resolver el problema
Lenguaje de Programación: Lenguaje que define una mecanismo, forma y significado de lo
que podemos indicarle a la máquina para implementar el algoritmo y resolver el problema
mediante un programa.
Un compilador/intérprete: Un software especializado que permite transformar o interpretar
los programas para una máquina específica
Máquina: La máquina para ingresar el problema y visualizar la solución
11
2.1 Errores
Al momento de programar, se cometen errores. Éstos se pueden clasificar en varios tipos.
a. Errores en tiempo de compilación: El compilador de un lenguaje detecta los errores de sintaxis
en un programa fuente y otros errores básicos. Si existe este tipo de errores, no se genera el
programa ejecutable.
b. Errores en tiempo de ejecución: Son problemas que se presentan durante la ejecución de un
progama. Por ejemplo, tratar de realizar una división por cero, lo que causaría el término anormal
del programa.
c. Errores lógicos: Un programa puede correr, y parecer que funiona, pero produce resultados
erróneos. Por ejemplo, algún cálculo mal realizado ya que la forma de hacer el cálculo se escribió
en forma incorrecta. El computador no tiene forma de saber que lo que uno escribe en este caso
está incorrecto!
12
2.1.1 Errores de Sintaxis Simples en Java
Mensaje de error Causa común
Error: ')' expected Falta un paréntesis
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
válida del lenguaje
Error: class, interface, or enum expected Sobra una palabra clave, está mal escrita o sobra
una llave de cierre
13
2.1.2 Errores de Sintaxis en Símbolos y Tipos de Datos
Mensaje de error Causa común
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, instrucción
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
14
3 Elementos Básicos de Programación
3.1 Resolución de problemas con el computador
Algoritmo de Computador
Conjunto de instrucciones ordenadas lógicamente que realizan una tarea
específica 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 automóvil 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 enseñar a los computadores a través de los
lenguajes de programación.
15
Ejemplo: Calcular el área de un triángulo
1. Obtener la base del triángulo, variable b.
2. Obtener la altura del triángulo, variable h.
3. Multiplicar la base por la altura (b*h)
4. Dividir el resultado de la multiplicación en 2 y
guardar el resultado en la variable A, o sea,
A=(b*h)/2
5. Comunicar el resultado de la operación.
16
Ejemplo: Calcular el promedio de las tres notas de un alumno y determinar si el alumno aprobó o
no el curso. (La condición de aprobación 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ó”
17
Ejemplo: Conversión de decimal a binario
1. Obtener el número a convertir.
2. Guardar el número 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 división en la variable R.
6. Formar el binario.
mientras
PE > 0
18
3.2 Conceptos Involucrados
Concepto Significado
Pseudocódigo Describe un algoritmo utilizando una mezcla de frases en
lenguaje común, instrucciones de lenguaje de programación y
palabras claves
Programa de computador Algoritmo escrito en un lenguaje de programación, que
ingresado a un computador y traducido al código binario,
permite que la máquina ejecute alguna función.
Instrucciones de computador Comandos imperativos que dirigen a la máquina a ejecutar
una acción específica: Leer, escribir, asignar, preguntar,
repetir.
Lenguaje de programación Conjunto de normas que determinan una forma específica de
escribir un algoritmo para computador.
19
Programa
Computador
Algoritmo: Estructura Lógica
Lenguaje: Formato de escritura
Pensar en lo que haría Lo que la máquina debe hacer
20
3.3 Estrategia iterativa (refino sucesivo)
Iterativamente se definen las tareas a realizar (se refinan las tareas)
El refino sucesivo es la búsqueda de la solución de un problema, detallando nivel a nivel la
solución, es decir, las tareas necesarias de realizar para llevar a cabo una función.
Un problema determinado es separado funcionalmente en distintas tareas que permiten su
solución.
Las tareas definidas, por su parte, pueden nuevamente ser detalladas en sub niveles, que
determinan un tercer nivel de solución.
Así, es posible continuar hasta alcanzar cierto nivel de detalle que permita claras y sencillas
instrucciones de programación que den cuenta de la solución.
21
3.4 Ejemplos de refino
3.4.1 Se deben leer 2 datos desde pantalla y se debe imprimir el mayor.
Programa mayor
BEGIN
“Leer datos”
“Ver cuál es el mayor”
“Imprimir el mayor”
END
22
3.4.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
23
3.4.3 Ejemplo: Cálculo de promedio
La “idea”:
Esto nos lleva a …
begin Leer notas desde pantalla Calcular nota promedio Informar nota calculada
end
24
“Seudocódigo”
Lo que finalmente se traduce en ….
Begin Read (nota1, nota2, nota3) NF nota1*0.3 + nota2 * 0.3 + nota3 * 0.4 Write(NF) end
25
Código 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
26
3.5 Aspectos básicos asociados a un programa
3.5.1 Concepto de Variable
Todo dato que el programa necesita lo representa a través de un símbolo.
Todo símbolo 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 tamaño de la misma no variará a lo largo de la ejecución del programa.
Variable, cuando el tamaño de la misma puede variar a lo largo de la ejecución.
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 ejecución de un
programa
Memoria RAM, dividida en celdas
NF (N1 + N2 + N3)/3
N1 N2
N3 NF
27
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
28
Todas las variables poseen una declaración de tipo que determina los valores que puede
almacenar y las operaciones en que puede participar.
Ejemplo: int, double, String, etc.
29
3.5.2 Concepto de Constante
Las constantes son objetos cuyo valor permanece invariable a lo largo de la ejecución de un
programa.
Una constante es la denominación de un valor concreto, de tal forma que se utiliza su nombre
cada vez que se necesita referenciarlo.
Debe tener un tipo y nombre
30
Ejemplo:
Celdas de memoria asociadas a las constantes PI y E
En algún lugar están definidos dos bloques de memoria, que contiene dichos valores:
3.141592 2.710281
31
3.5.3 Tipos de Datos Básicos
3.5.3.1 Números Enteros
32
3.5.3.2 Números Reales
33
3.5.3.3 Booleano
3.5.3.4 Carácter
3.5.3.5 Cadena de caracteres
34
3.5.4 Operadores
3.5.4.1 Operadores Aritméticos
Operador Uso Descripción
+ 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
Nota: Aun cuando parezca extraño, los textos (o sea, los String) también se pueden "sumar". El
resultado de sumarle algo a un String es la concatenación 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 ????
35
3.5.4.2 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
<= v1 <= v2 v1 es menor o igual que v2
== v1 == v2 v1 y v2 son iguales
!= v1 != v2 v1 y v2 son distintos
36
3.5.4.3 Operadores Lógicos
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
37
3.5.5 Instrucciones
3.5.5.1 Asignación de datos
Dar un valor a una variable de acuerdo a su tipo.
Ejemplo:
En pseudocódigo: var expresión
En Java: variable = expresión;
Se guarda el resultado de la expresión en la celda de memoria asociada a var.
Ejemplo:
n1 = 6.1;
edad = 21;
NF = (n1 + n2)/3;
38
Ejemplos:
n1 = 10;
n2 = 20;
n1 = n2 + 6;
n1 = 10;
n1 = n1 + 6;
n2 = 10;
n1 = n2;
n1 n2
39
3.5.5.1.1 Algunos usos de la sentencia de asignación:
3.5.5.1.1.1 Esquema contador
Uso de una variable para contar.
Sintaxis: i = i + 1; i ++;
Ejemplo:
…..
int i = 1; while (i <= 4) { …… i++; // i = i + 1; }
1
2
3
4
5
i
40
3.5.5.1.1.2 Esquema sumador o acumulador
Variable que suma números de cualquier valor y su resultado lo guarda en la variable de asignación
involucrada.
Sintaxis: sumEdades = sumEdades + edad;
Ejemplo:
…..
int i = 1; int sum = 0; while (i <= 4) {
sum = sum + i; //sum es un acumulador
i++; // i = i + 1; }
0
1
3
6
10
sum
1
2
3
4
5
i
41
3.5.5.2 Orden de Evaluación de los Operadores en una expresión
En toda expresión, al realizar operaciones de todo tipo (aritméticas, lógicas), la expresión siempre
se evalúa en un orden específico:
1. Paréntesis (comenzando por los más internos).
2. Signo.
3. Potencias.
4. Productos y divisiones.
5. Sumas y restas.
6. Concatenación.
7. Operadores Relacionales.
8. Operador de Negación.
9. Operador de Conjunción (AND, &&).
10. Operador de Disyunción (OR, ||).
La evaluación de operadores de igual orden se realiza siempre de izquierda a derecha.
42
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
43
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
44
3.5.5.3 Lectura de datos
Adquirir datos de dispositivos como teclado, discos, etc.
READ (n1, n2, n3) (pseudocódigo)
En Java:
int n1 = StdIn.readInt(); double n2 = StdIn.readDouble(); String s1 = StdIn.readString();
45
3.5.5.4 Salida de datos
Enviar datos y mensajes a dispositivos como pantalla, discos, impresora, etc.
WRITE (n1, n2, n3) (pseudocódigo)
En Java:
StdOut.print(n1); StdOut.println(n2);
46
3.5.5.4.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
47
3.5.5.5 Instrucciones condicionales
Permite definir distintos cursos de acción dentro de un algoritmo.
Alternativa Simple:
if (condición) { // instrucciones si se cumple la condición }
48
Alternativa Completa:
Condición: Expresión booleana que puede resultar Verdarera o Falsa. Compara a través de
operadores y expresiones con conectores lógicos.
Las instrucciones pueden ser otros IF.
Si es una sola instrucción, no son necesarias las llaves
if (condición) {
// instrucciones si se cumple la condición } else{
// instrucciones si no se cumple la condición }
49
Alternativa Múltiple:
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 sección en donde se indican
las instrucciones que se ejecutarán 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 }
50
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
51
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
52
3.5.5.5.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
53
ii) Indicar si un alumno repite aprueba o va a recuperativa, según las reglas de notas y taller
dadas en el curso.
Programa CalculoNF
begin
“Leer notas”
“Sacar Promedio”
“Imprimir nota final y mensaje”
end
54
3.5.5.6 Instrucciones para ciclos
Posibilita la repetición de una o más instrucciones (ciclos)
3.5.5.6.1 for
Repite un conjunto de sentencias un número específico de veces
for (inicio; condicion_termino; incremento){ ……// Conjunto de Sentencias
}
Ejemplo: Leer las edades de 10 personas
int edad; for(int i=1; i<=10; i++){ PantallaSalida.print("“Ingrese edad: "); edad = StdIn.readInt();
}
55
3.5.5.6.2 while
Repite la ejecución de un conjunto de sentencias, de tal forma que estas se ejecutan
mientras la condición sea verdadera. La condición, será evaluada siempre antes de cada
repetición.
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();
}
56
3.5.5.6.3 do…while:
Repite un conjunto de sentencias de tal forma que estas se ejecutan mientras la condición
sea verdadera. La condición será evaluada siempre después de cada repetición. 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 = 0; do { edad = StdIn.readInt();
} while (edad < 0);
57
Ejemplos:
o int i = 1; while (i <= 100) { //Sentencias i = i + 1; //i++
}
o int i = 0; do { //Sentencias i++; } while(i<100);
o for (int i = 1; i <= 100; i++){ //Sentencias
}
58
4 Algoritmos: Promedios, Búsqueda 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”
end for
“Calcular e imprimir promedio”
end
Refino
59
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); } }
60
4.2 Determinar al mejor alumno (con la mejor nota), en 1000 estudiantes. Por cada alumno
se debe leer su matrícula y su promedio de notas. Se debe desplegar el número de
matrícula 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); } }
61
4.3 El arancel de matrícula es calculado por la fórmula:
AM = SUELDO_PADRES * 10 – NHERMANOS * EDAD_ESTUDIANTE + IMPUESTO_POR_REGION_PROCEDENCIA
Dependiendo de la región, el impuesto es:
1. 5000
2. 1000
3. 4000
4. 10000
Cualquier otra región: 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 región.
62
Programa Arancel
Begin
“Leer datos”
“Calcular arancel”
“Imprimir arancel”
End
Refino
63
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); } }
64
Nota: Hacer los cambios en el código para reemplazar el switch por if
65
4.4 Leer datos de alumnos, matrícula, 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
66
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); } } }
67
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 <= N; i++) { // Leemos de la edad de un alumno int edad = StdIn.readInt(); StdOut.println(edad); } } }
68
4.6 Leer varios números 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
69
4.7 Leer una secuencia de números hasta encontrar un -1, y determinar cuántas 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); } }
70
4.8 Leer una secuencia de 100 números y determinar cuántos son divisibles por 2 y cuántos
por 3.
71
Refino:
PROGRAMA Divisibles por 3 y por 2
BEGIN
“Inicializar 2 contadores”
FOR i = 1 TO 100
“Leer número”
“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 número divisible por 2”,
Contador de los divisibles por 2)
WRITE (“Total número divisible por 3”,
Contador de los divisibles por 3)
END
72
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); } }
73
Nota: Hacer los cambios en el código para usar la función resto de Java
74
4.9 Leer un número 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 <= mitad && ok) { int auxiliar = numero; while (auxiliar > 0) { auxiliar = auxiliar - i; } if (auxiliar == 0) { ok = false; } i = i + 1; // o también "i++" } StdOut.println("El número " + numero); if (ok) { StdOut.println(" es primo"); } else { StdOut.println(" no es primo"); } } }
75
Nota: Hacer los cambios en el código para usar la función resto de Java
76
4.10 Calcular la integral entre A y B, con precisión de DX para la ecuación. A, B y DX deben
leerse desde pantalla.
f(x) = x4 - 3 x3 - 2x + 6
77
PROGRAM Integral
BEGIN f(x)
“Leer datos”
FOR cada rectángulo
“Calcular el área”
“Acumular el área” f(x)
ENDFOR
“Imprimir el área resultante” a dx b x END
78
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); } }
79
4.11 Leer registros de alumnos (matrícula, promedio) y determine los 2 números de
matrículas correspondientes a los alumnos de mejores promedios. Fin de datos: matrícula
= -1.
Refino:
PROGRAMA Los dos mejores
BEGIN
“Leer matricula”
WHILE (matrícula < > “-1”)
“Leer promedio”
“Determinar el primer mayor”
“Determinar el segundo mayor”
“Leer matrícula”
ENDWHILE
“Imprimir el primer mayor”
“Imprimir el segundo mayor”
END
80
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 matrícula: "); 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 matrícula: "); 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
81
5 Algoritmos de sucesiones y series
5.1 Conceptos básicos
5.1.1 Sumatorias
Definición: tttt N
N
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
82
5.1.2 Productos
Definición: tttt N
N
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
83
5.1.3 Función Recursiva
Es aquella que permite evaluar una infinidad de términos, cada uno de los cuales después de
un cierto punto, está definido en término 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 Definición del N factorial
n! = 1 si n = 0
n! = n (n-1)! Si n 1
También: ti = t i-1 * i i > 0
t0 = 1
1, 1, 2, 6, 24, 120,......
84
5.1.3.3 El primer término de una sucesión es igual a 1 y los siguientes a 3 veces el término anterior.
ti = 3t i-1 i 2
t1 = 1
1, 3, 9, 27,.......
85
5.1.4 Función Posicional
Es aquella en que cada término es evaluado de acuerdo a su posición en la sucesión o serie, no
requiriéndose la evaluación de términos anteriores. Por ejemplo:
5.1.4.1 Sucesión de los números naturales: 1, 2, 3, 4, 5, ........
Función
Recursiva
Función
Posicional
t1 = 1
ti = t i-1 + 1 i > 1
ti = i i > 0
5.1.4.2 Sucesión de los números impares: 1, 3, 5, 7, 9, ........
Función
Recursiva
Función
Posicional
t1 = 1
ti = t i-1 + 2 i > 1
ti = 2i - 1 i > 0
86
5.1.4.3 Sucesión de los números pares: 2, 4, 6, 8, ........
Función
Recursiva
Función
Posicional
t1 = 2
ti = t i-1 + 2 i > 1
ti = 2i i > 0
5.1.4.4 Progresión Aritmética, término inicial 5, diferencia 3:
5, 8, 11, 14 ........
Función
Recursiva
Función
Posicional
F1 = 5
Fi = F i-1 + 3 i > 1
Fi = 5 + 3(i-1)
i > 0
5.1.4.5 Progresión Aritmética en general, término inicial a, diferencia d:
a, a+d, a+2d, ........, a+(i-1)d
Función Recursiva Función Posicional
F1 = a
Fi = F i-1 + d i > 1
Fi = a + d(i-1) i > 0
87
5.1.4.6 Progresión Geométrica, término inicial 5, razón 2:
5, 10, 20, 40, 80, ........
Función Recursiva Función Posicional
F1 = 5
Fi = F i-1 * 2 i > 1
Fi = 5 * 2(i-1) i > 0
5.1.4.7 Progresión Geométrica en general, término inicial a, razón r:
a, ar, ar2, ar3, ar4, .....,ar i-1
Función Recursiva Función Posicional
F1 = a
Fi = F i-1 * r i > 1
Fi = a * r(i-1) i > 0
88
5.1.5 Ejercicios
5.1.5.1 Determinar la función posicional y recursiva de la sucesión:
12, 22, 32, 42, 52,......
5.1.5.2 Expresar S mediante notación recursiva
....141185 S
5.1.5.3 Expresar S mediante notación recursiva
.........8532
8532
xxxxxxS
5.1.5.4 Expresar S mediante notación recursiva y posicional
NS ...321.....321211
89
5.1.5.5 Expresar S mediante notación recursiva
.......7531 ttttS
t1 = 1 ; t2 = 1 ; t3 = 2 ; t4 = 3; t5 = 5
5.1.5.6 Expresar S mediante notación recursiva
......!7!5!3!1
753
xxxxS
1
90
5.1.5.7 Construir un algoritmo para calcular la serie 1/xi hasta que el término sea menor a 0.0000005 (no incluir ese término). El valor x debe ser leído.
Refino: PROGRAM Serie
BEGIN
“Leer x”
“Calcular término”
WHILE ( término >= 0.0000005) DO
“Acumular término”
“Obtener nuevo término”
END WHILE
WRITE (S)
END
91
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; } StdOut.println(s); } }
92
5.1.5.8 Genere el término M de la secuencia de Fibonacci.
S = 0, 1, 1, 2, 3, 5, 8, 13, … M > 3
93
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); } }