UNIVERSIDAD TÉCNICA NACIONAL
CARRERA
INGENIERÍA DEL SOFTWARE
PRINCIPIOS DE PROGRAMACIÒN
PROFESORAS:
Lic. Ana Cecilia Odio
Lic. Marielos Murillo
TABLA DE CONTENIDO
TEMA I: INTRODUCCION AL PROCESAMIENTO ELECTRONICO DE DATOS 4
CICLO DE PROCESAMIENTO DE DATOS 4
Ejecución de un proceso 5
Definición de algoritmo 5
DEFINICIÓN DE VARIABLES 5
Creación de una variable 7
Asignación de valores a una variable 8
EXPRESIONES ARITMÉTICAS 9
Operadores aritméticos 9
Funciones interconstruidas 10
Conversión de expresiones aritméticas a expresiones algorítmicas 10
Reglas de prioridad de los operadores aritméticos 10
EXPRESIONES LÓGICAS O BOOLEANAS 15
Variables lógicas 14
Operadores Relacionales 16
Operadores Lógicos 16
Tablas de verdad de los operadores lógicos 17
Ejemplos de expresiones lógicas 18
TEMA II: ESTRUCTURAS DE CONTROL 18
ESTRUCTURAS DE SELECCIÓN 19
El Enunciado if 19
Selección múltiple (if anidado) 20
El Enunciado switch - case 21
ESTRUCTURAS ITERATIVAS O DE REPETICIÓN 24
Ciclo for 25
Ciclo while 29
Ciclo do – while 31
Ejecución del ciclo do - while 31
Diferencia entre el ciclo do – while y el while 31
Formas de controlar los ciclos while y do - while. 32
- Fin del ciclo determinado por un contador 32
- Fin del ciclo determinado por tarea terminada 33
- Fin del ciclo determinado por el usuario 34
Cómo seleccionar el ciclo que debe usar 34
Contadores y acumuladores 34
INTERFAZ DE LOS ALGORITMOS 35
Módulo main (principal) 35
TEMA III: PROGRAMACIÓN ORIENTADA A OBJETOS 38
Objetivo de la programación orientada a objetos 38
Definición de Objeto: 40
Atributos y métodos 40
Estado de un objeto 40
Mensajes 40
Interfaz de un objeto 40
Clases 40
IMPLEMENTACIÓN DE UNA CLASES 40
Diagramas de Clases 40
Instancia de un objeto 41
Implementación de las clases 43
Formato para la definición de una clase 43
Formato para definir los atributos de la clase 43
Observaciones acerca de la definición de los atributos 43
Diseño de los métodos de una clase 43
Formato para definir los métodos de la clase: 43
Observaciones acerca de la definición de los métodos: 43
Constructores 45
Utilización de las clases (método main) 46
Métodos set y get 50
Uso de menús de opciones 56
TEMA IV: VARIABLES DE TIPO ESTRUCTURADO 59
ARREGLOS UNIDIMENSIONALES 59
Declaración e inicializan de los arreglos 60
Inicializar arreglos con datos 60
Cómo guardar y recuperar valores almacenados en un arreglo 60
Forma de “recorrer” un arreglo 61
Variable length: 62
Ejemplos de segmentos de código que utilizan arreglos. 62
Paso de arreglos como parámetro en un método. 63
Ejemplos del uso de arreglos en la declaración y llamado a métodos 63
Utilidad de los arreglos en la resolución de problemas: 66
ARREGLOS MULTIDIMENSIONALES (matrices) 67
Declaración e iniciación de las matrices 68
TEMA I
INTRODUCCION AL PROCESAMIENTO ELECTRONICO DE DATOS
CICLO DE PROCESAMIENTO DE DATOS
Todo proceso, tanto en el mundo real como en el mundo de la computación está formado por un ciclo que consta de : datos , procesos y salidas .
DATOS : Son las entradas al proceso. Son valores obtenidos fuera del proceso y son utilizadas por este para producir las salidas. Es como si fueran la materia prima de un proceso. Muchas veces los datos o entradas de un proceso pueden ser las salidas producidas por otro proceso.
INFORMACION : Son las salidas del sistema, es decir, lo que se espera que el sistema produzca por medio del proceso, y que luego tendrá repercusión en el exterior.
PROCESO : Es el conjunto de operaciones o instrucciones que se realizan para convertir las entradas en salidas.
EJEMPLOS DE CICLOS DE PROCESAMIENTO DE DATOS
Ejemplo #1
Sistema para la construcción de mesas :
DATOS O ENTRADAS : madera , clavos , pintura
PROCESO : Medir , cortar, pegar, clavar las piezas de madera para formar las mesas y pintarlas. INFORMACION O SALIDAS : Mesas terminadas.
ENTRADAS PROCESO SALIDAS
_______________________
reglas madera medir, cortar piezas mesas clavos ---> pegar, clavar ---> terminadas pintura pintar las mesas.
_______________________
Es importante diferenciar entre los DATOS y las ACCIONES.
Las acciones de medir, cortar, pegar ,etc (en el ejemplo anterior) son las instrucciones que debe de ejecutar el proceso para producir la salida deseada.
EJECUCION DE UN PROCESO
Cuando se va a definir un proceso, es importante tener claro, cual es el objetivo de éste y como se desea lograr este objetivo. Hasta no tener clara la concepción del sistema, no debe de empezarse a diseñar, pues esto traerá atrasos mayores después.
DEFINICION DE ALGORITMO
Algoritmo: es el conjunto de instrucciones que especifican la secuencia de operaciones a realizar
para resolver algún problema específico. En otras palabras, un algoritmo es una fórmula para resolver un problema.Pseudocódigo: Lenguaje cercano a un lenguaje de programación que sirve para definir las acciones o instrucciones que se ejecutan en un algoritmo. Una vez escrito un algoritmo mediante un pseudocódigo, éste será fácil de trasladar a cualquier lenguaje de programación.
DEFINICIÓN DE VARIABLES
Variables
Son los nombres de las celdas de memoria que toman valores específicos en determinados momentos, y cuyo valor puede cambiar durante la ejecución del proceso. Los nombres de las variables constan de uno o más caracteres alfanuméricos. Es aconsejable que los nombres de las variables tengan relación con lo que representan.
Reglas para el uso de nombres de variables o de cualquier identificador a usar en los pseudocódigos que se desarrollarán en el curso.
a. Los nombres de variables pueden contener únicamente: letras
dígitos numéricos signo subrayado ( _ )
No se permiten espacios en blanco ni caracteres especiales
b. Los nombres de las variables deben empezar con una letra y no deben terminar con guión.
c. La longitud máxima del nombre de una variable es de 20 caracteres.
está formado por dos o más palabras, escribir la primera letra de cada palabra siguiente en mayúscula.
Ejemplos:
carnet nombreEstudiante cantidadEstudiantesNuevos
TIPOS DE VARIABLES DE ACUERDO A SU CONTENIDO.
Cada variable que aparece en el cuerpo de un pseudocódigo debe ser declarada de acuerdo al tipo de dato que le corresponde.
Existen tipos de variables de acuerdo al tipo de dato que almacenará.
Esquema de los tipos de datos simples existentes:
ENTEROS
NUMERICAS
PUNTO FLOTANTE
CARACTER ALFANUMÉRICAS
VARIABLES HILERA
LÓGICAS
VARIABLES NUMERICAS : Son las que almacenan datos con valores numéricos ya sean del tipo entero o real. Los contenidos de estas variable pueden ser utilizados para ejecutar operaciones aritméticas.
Variables numéricas enteras (int) : Contienen números negativos o positivos que no tienen decimales. También son llamados de punto fijo. Para este tipo de dato denotaremos con el identificador int en minùscula.
Ejemplos:
13 7 -6 -298 35 34 -1000
Variables numéricas de punto flotante(float) : Son las que contienen datos que presentan siempre un punto decimal, también pueden ser positivos o negativos. Para este tipo de dato denotaremos con el identificador float en minúscula.
Ejemplos:
VARIABLES ALFANUMÉRICAS :
Los datos no numéricos, también pueden ser manipulados por el computador. Las variable alfanuméricas son aquellas que contendrán datos compuestos por caracteres alfanuméricos, es decir dígitos, letras y caracteres especiales. Con el contenido de estas variables no se puede realizar cálculos matemáticos, aunque su contenido sea de dígitos numéricos.
Variables tipo cadena o hilera (String):
Un dato tipo cadena (String) es una secuencia de caracteres (es decir, letras, dígitos y caracteres especiales) encerrados entre comillas. Pueden utilizarse tanto letras mayúsculas como minúsculas. Ejemplos:
“ROJO” “ALAJUELA, APDO. 1040” “1-600-07413-0”
“[email protected]” “Juan Pérez”
Variables tipo carácter (char):
Una variable tipo carácter puede almacenar un valor que representa un único carácter, este puede ser una letra, un número, o un carácter especial.
Los datos tipo carácter deben ser encerrados entre comillas simples. Se denotan con el identificador char en minùscula
Ejemplo:
nota = 'B';
Con esta instrucción se asigna el carácter 'B' a la variable nota.
VARIABLES LÓGICAS O BOOLEANAS (boolean):
Son las variables que contienen datos que únicamente pueden tomar uno de dos valores permitidos : Cierto (TRUE) ó Falso (FALSE) . Se representan por false o true en minùscula.
Se utilizan para representar la alternativa (si / no) a determinadas condiciones.
CREACIÓN DE UNA VARIABLE
La creación de una variable requiere dos pasos:
1. Declarar la variable : definición del tipo y del nombre de la variable. 2. Iniciar la variable: asignación del valor inicial que contendrá la variable.
Ejemplo
- Crea en memoria una variable cuyo nombre de identificación única es peso
- Esta variable estará ubicada en algún lugar de la memoria RAM y su contenido será una secuencia de bits que corresponde al valor 240.6
ASIGNACION DE VALORES A UNA VARIABLE
Al ejecutar los algoritmos es necesario asignar valores a las variables para poder ir ejecutando los pasos que nos permitan resolver el problema y obtener las salidas esperadas. La operación de asignación se utiliza para especificar que una variable toma un valor dado.
La operación de asignación se utiliza para especificar que una variable toma un valor dado. La operación de asignación se denota con el símbolo = .
La forma general de un enunciado de asignación es:
variable = expresión
donde la expresión puede ser una constante, una variable , o una expresión aritmética más compleja. Cuando la computadora encuentra un enunciado de asignación, evalúa la expresión que se encuentra a la derecha del símbolo de asignación (=) y asigna el valor resultante a la variable que se encuentra a la izquierda de dicho símbolo.
Existen 3 formas básicas de asignar valores a una variable:
1. Asignando a una variable un valor constante Ejemplos:
A = 3 (A es de tipo int) Nombre = “Juan” (Nombre es de tipo String) Sexo = „F‟ (sexo es de tipo char)
Resultado = true (Resultado es de tipo boolean)
A una variable definida de un tipo, solo se le pueden asignar valores de ese mismo tipo o compatible, de lo contrario se producirá un error.
Cuando se realiza la operación de asignación a una variable, ésta pierde el valor anterior y se reemplaza por el nuevo valor asignado.
2. Asignando a una variable el contenido de otra variable.
Una variable puede obtener el valor de otra por medio de un enunciado de asignación:
Ejemplo 1: Si x y a son variables de tipo int y se realiza la siguiente secuencia de instrucciones
x = 0 (la variable x contiene el valor 0) a = 4 (la variable a toma el valor de 4)
Ejemplo 2: Si tanto a como b son variables de tipo String tenga en cuenta lo siguiente:
a = “Hola” ( a la variable a se le asigna la hilera Hola)
b = a ( a la variable b se le asigna el valor que contiene la variable a, es decir contiene Hola) b = “a” ( a la variable b se le asigna el carácter „a‟) Note que en este caso la a está entre comillas, por lo tanto no se refiere al contenido de la variable a sino al carácter „a‟.
3. Asignando a una variable el resultado de una expresión.
Ejemplo: Si x, a y b son variables de tipo float, la siguiente instrucción asignará el resultado de la operación la variable x:
x = a + b
Notas:
- Las asignaciones de valores a variables siempre se realizan de derecha a izquierda, es decir el contenido de la variable o resultado de la expresión que aparece a la derecha del signo =, se asigna a la variable que aparece a la izquierda.
- La variable receptora pierde el valor anterior para contener el valor asignado.
- La variable que pasa el valor a la variable receptora permanece con su valor inicial, es decir por asignar su contenido a otra variable, ésta no pierde el dato que tenía almacenado.
MEZCLA DE VALORES ENTEROS CON FLOTANTES:
Mezclar enteros con flotantes en un enunciado de asignación únicamente es válido cuando la variable del lado izquierdo es flotante, es decir:
1. No es valido asignar a una variable de tipo entero una expresión que contiene cualquier valor fraccionario o variable de tipo flotante.
2. Se permite asignar a una variable de tipo flotante una expresión o valor entero. Esto debido a que la celda de memoria donde se almacena una variable de tipo flotante tiene espacio para guardar una variable de tipo entero, pero la celda diseñada para guardar una variable entera no tiene espacio para guardar los decimales.
EXPRESIONES ARITMÉTICAS
Son las expresiones que involucran operandos numéricos con operadores aritméticos y funciones matemáticas.
Son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales.
+ suma,
- resta
* multiplicación / división
% residuo de la división
Nota: Si el resultado de una división de dos valores enteros se almacena en otra variable entera, este resultado no contendrá decimales.
Nota: Si el resultado de una división se almacena en una variable flotante, el contenido poseerá decimales.
El (%) Da el residuo de la división del primer operando entre el segundo. Ambos operandos deben ser de tipo int.
Ejemplo: Si x es una variable entera, en la expresión x = 9 % 4 A la x se le asignará el valor de 1
FUNCIONES INTERCONSTRUIDAS
sqrt(x ) Raíz Cuadrada de x donde x no puede ser negativo pow (x,y ) x elevado a la potencia y
CONVERSION DE EXPRESIONES ARITMETICAS A EXPRESIONES ALGORITMICAS
x = ab --- x = a * b x = 3x + y --- x = 3 * x + y x = 6 4 --- x = 6 / 4 x = 32 --- x = pow(3,2) x = 54 + 25 --- x = sqrt(54) + 25
REGLAS DE PRIORIDAD DE LOS OPERADORES ARITMETICOS
1. Las operaciones que están entre paréntesis ( ) , se evalúan primero. Si existen paréntesis anidados, las expresiones más internas se evalúan primero.
2. Dentro de una expresión, los operadores aritméticos, siguen el siguiente orden de prioridad.
Prioridad 1- * , / , % Multiplicación y división Prioridad 2- + , - Suma y resta.
Ejemplo de evaluación de una expresión aritmética tomando en cuenta las prioridades de los operadores. Asuma que la variable „
y‟
es entera.Expresión aritmética: y = ( (2 + 4 * 2) - 5 * (3 - 5)) / 3
Secuencia de evaluación: y = ( (2 + 8) - 5 * (3 - 5) ) / 3 y = ( (10) - 5 * (3 - 5) ) / 3 y = ( 10 - 5 * (3 - 5) ) / 3 y = ( 10 - 5 * (-2) ) / 3 y = ( 10 - 5 * -2 ) / 3 y = ( 10 - -10 ) / 3 y = (20) / 3 y = 20 / 3 y = 6
EJEMPLOS DE ALGORITMOS
1. Algoritmo que recibe como entrada 2 números enteros a y b y calcula e imprime la suma de ambos números.
Entradas: a b
Salidas: suma
void sumar(int a, int b) { int suma;
suma = a+ b;
out.print( “La suma de los números es “ + suma); }
2. Algoritmo que recibe como entrada el largo y ancho de un terreno rectangular y calcula e imprime su perímetro y área.
Entradas: largo, ancho
Salidas: perímetro, área
void medidasTerreno(float largo, float ancho) { float area,perimetro;
perímetro = 2* (largo + ancho); area = largo * ancho;
Es importante tener presente que el algoritmo es diseñado para ser ejecutado por la computadora y no por el usuario.
No se debe confundir el empleo de los términos Entradas y Salidas. Cuando se habla de Entradas se están indicando los datos mínimos necesarios que el computador necesita para poder resolver el problema, es decir, en nuestro caso, son los datos base provistos por el usuario, que se procesarán para producir las Salidas, las cuales, son los resultados esperados del proceso o algoritmo.
Si la acción indicada es outprint, entonces se le está indicando al computador que imprima o muestre en pantalla el resultado obtenido.
Ejecución del algoritmo que calcula el área y perímetro:
Esquema de la memoria del computador
Otra ejecución con datos diferentes de entrada
Esquema de la memoria del computador (otra corrida)
largo ancho
perimetro area
10 5
30 50
largo ancho
perimetro area
25 10
3. Algoritmo que lee el nombre, el salario por hora y las horas trabajadas en la semana por un trabajador. Calcula e imprime su nombre junto a su salario neto semanal, sabiendo que la deducción del Seguro Social es del 9% sobre el salario bruto(total).
Definición de entradas: Nombre SalarioHora HorasTrabajadas
Definición de salidas: Nombre SalarioNeto
Premisas para llegar de las entradas a las salidas: El descuento de la CCSS es de un 9%
void calculaSalario(String nombre, float salarioHora, float horasTrabajadas) {
float salarioBruto,salarioNeto,montoSeguro; salarioBruto=salarioHora*horasTrabajadas; montoSeguro=salarioBruto*0.09;
salarioNeto=salarioBruto-montoSeguro;
out.print(“El salario neto de “ + nombre + ” es ” + salarioNeto); }
Ejecución del algoritmo anterior:
Visualizar la memoria del computador
nombre horasTrabajadas salarioHora
salarioBruto montoSeguro salarioNeto
Juan Pérez 40 1000
Otra ejecución del algoritmo utilizando las mismas variables
Constantes : Son los valores que no cambian durante la ejecución de un programa. Ejemplo el porcentaje de 0.09 de Seguro Social es una constante en el algoritmo anterior ya que para todos los trabajadores se utiliza el mismo valor.
Por ejemplo, si se desea declarar una constante para almacenar el porcentaje del seguro social, sería de la siguiente forma:
void calculaSalario(String nombre, float salarioHora, float horasTrabajadas) { float salarioBruto,salarioNeto,montoSeguro;
final float PORCENTAJE_SEGURO=0.09;
salarioBruto=salarioHora*horasTrabajadas;
montoSeguro=salarioBruto* PORCENTAJE_SEGURO; salarioNeto=salarioBruto-montoSeguro;
out.print( “El salario neto de “ + nombre + ” es ” + salarioNeto); }
Nota: Como puede observarse en el ejemplo anterior, las constantes están definidas con el enunciado final seguido del tipo y el nombre en mayúscula.
Las constantes se deben usar cuando:
1. La referencia a cierto valor por un nombre descriptivo puede mejorar la claridad del programa.
2. Las constantes facilitan la actualización de un programa si, en una fecha posterior se ha de cambiar el valor de cierta cantidad.
nombre horasTrabajadas salarioHora
salarioBruto montoSeguro salarioNeto
Carlos Castro 20 5000
EXPRESIONES LÓGICAS
Variables lógicas o booleanas
Son las variables que contienen datos que únicamente pueden tomar uno de dos valores permitidos : Verdadero (true) ó Falso (false) .
Se utilizan para representar la alternativa (si / no) a determinadas condiciones. Para declarar una variable de tipo booleana se indica de la siguiente forma:
boolean resultado;
Esta instrucción declara que la variable resultado es una variable lógica o booleana y únicamente podrá almacenar valores booleanos.
Asignación de valores a una variable booleana
Asignar un valor a una variable booleana puede realizarse de dos formas:
1. Asignando el valor true o false directamente.
Ejemplos:
Si se declaran las siguientes variables:
boolean resultado, prueba;
Se podrán ejecutar las siguientes instrucciones:
resultado = true; prueba = false;
2. Asignando a la variable el resultado de una expresión lógica o booleana. Ejemplo:
resultado = edad >= 18;
En este caso, si el contenido de la variable edad es mayor o igual a 18, el resultado de la expresión es verdadero y entonces en la variable resultado se almacenará un valor true.
Expresiones lógicas o Booleanas
Las expresiones lógicas se forman combinando variables, valores constantes, operadores relacionales y operadores lógicos.
Operadores Relacionales
Los operadores relacionales sirven para comparar unos valores con otros. Es decir, permiten evaluar relaciones entre valores.
Por ejemplo:
¿Es el valor a mayor que el valor b?
El resultado de esta operación es un valor de tipo booleano.
Los operadores relacionales son:
Operador Ejemplo Significado
= = x = = y ¿ es X igual a Y?
!= x != y ¿ es X diferente a Y?
< x < y ¿ es X menor a Y?
> x > y ¿ es X mayor a Y?
<= x <= y ¿ es X menor o igual a Y?
>= x >= y ¿ es X mayor o igual a Y?
Nota: El = no es igual que el ==
Para asignar valores a una variable se usa el =. pero para comparar dos valores y obtener un valor verdadero o falso como resultado se utiliza el operador = =.
Ejemplos:
x = 10; Guarda un 10 dentro de x.
(x == 10) Compara el valor que está dentro de x para ver si es igual a 10. Produce un valor booleano (true ó false).
Los operadores relacionales permiten realizar comparaciones entre valores tanto de tipo numérico como de tipo caracter.
Los operadores lógicos se utilizan para diseñar expresiones lógicas más complejas ya que sirven para definir condiciones en las que se combina la ocurrencia de diferentes situaciones. Estos son:
! (not, negación) && (and, y) ║ (or, o )
&&: Una expresión de la forma expresión1 && expresión2 es verdadera únicamente si expresión1 y expresión2 son verdaderas.
║: Una expresión expresión1 ║ expresión2 es falsa solo si ambas expresiones expresión1 y expresión2 son falsas.
! : Una expresión ! (expresion1) toma el valor booolean opuesto al de expresion1. Es decir, si expresion1 es verdadera !( expresion1) es falsa y viceversa.
TABLAS DE VERDAD DE LOS OPERADORES LÓGICOS
La forma de trabajar de de los operadores lògicos (! && y ║) , se resumen en las siguientes tablas de verdad:
TABLA DE VERDAD DEL
!
(not)
Expresión1
! (Expresión1)
true
false
false
true
TABLA DE VERDAD DEL && (and)
Expresión1
Expresión2
Expresión1 && Expresión2
true true true
true false false
false true false
false false false
Expresión1
Expresión2
Expresión1
║Expresión2
true true Trae
true false Trae
false true Trae
false false False
Expresión1 ║ Expresión2 es falsa solo si ambas expresiones son falsas.
Ejemplos de expresiones lógicas
El resultado de una expresión lógica siempre será (true) o (false) y éste puede almacenarse en una variable lógica.
Ejemplo 1:
Suponga que existen dos variables de tipo entero: a = 4 y b = 3 y una variable x de tipo boolean. Al evaluar las siguientes expresiones se obtendrá:
1. x = a > b Asigna un true a la variable x
2. x = (a - 2) < (b - 4) Asigna un false a la variable x
Para comparar datos tipo se debe tomar en cuenta lo siguiente:
- Los valores de los caracteres que representan a los dígitos, están en su orden natural, es decir: '1' < '2' , '6' < '7'...
- Las letras mayúsculas A ---> Z siguen el orden alfabético. 'A' < 'B' 'C' < 'D'...
- Los caracteres especiales exigen la consulta del código de ordenación como el código ASCII.
En las expresiones lógicas se pueden mezclar los operadores de relación y los lógicos
Ejemplo 2:
1. x = (a > 2 && b <= 10) --- x es ( true ) 2. x = (a > 10 ║ b <= 3 ) --- x es ( true) 3. x = (! (a > b) && a >= 3 ) --- x es ( false)
ESTRUCTURAS DE CONTROL
Los programas ejecutan sus instrucciones de manera secuencial (una después de la otra).
Los lenguajes de programación proveen estructuras de control que permiten alterar el orden de ejecución cuando se dan ciertas condiciones.
Existen diferentes grupos básicos de estructuras de control:
- Estructuras de selección. - Estructuras de repetición.
ESTRUCTURAS DE SELECCIÓN
Las estructuras de selección permiten elegir entre ejecutar distintos grupos de instrucciones según una condición.
Existen 3 tipos básicos de estructuras de selección:
- Estructura “if”. - Estructura “if / else”. - Estructura “switch”.
EL ENUNCIADO if
Una instrucción de selección o un if, es una instrucción que sirve para permitir a la máquina, tomar la decisión de qué instrucciones ejecutar en caso de que se cumpla o no cierta condición.
La condición que se evalúa en un if, es una expresión lógica, por tanto, tendrá como resultado un true o un false únicamente; y de acuerdo a este resultado ejecutará o no las instrucciones correspondientes.
if simple : La selección simple, se utiliza cuando se quiere que la computadora efectúe una(s) instrucción, sólo cuando cierta condición es verdadera.
El formato general de la instrucción if simple es:
if (expresión lógica) {
instrucción1; instrucción2; .
Si la expresión lógica es verdadera, la computadora ejecuta la(s) instrucciones escritas entre las llaves { } y continúa después con la siguiente instrucción después del bloque encerrado entre ambas llaves.
Si la expresión lógica es falsa, la computadora no ejecuta las instrucciones encerradas entre las llaves si no que pasa directamente a ejecutar la(s) instrucción(es) que aparecen después de la llave cerrada ( } ), es decir, no ejecuta las instrucciones encerradas entre ambas llaves.
Nota: Observe que la expresión lógica dentro de un enunciado if, siempre debe encerrarse entre paréntesis.
Ejemplo 1
if (edad >= 18 ) {
out.print(“Puede ingresar”);
}
Ejemplo 2
if ( a > b && b > 3) { suma = a + b;
}
Estructura condicional (if) con dos alternativas (if … else).
En el if simple, la computadora ejecuta algo o no hace nada, dependiendo del resultado de la expresión.
Existen situaciones en que el computador debe efectuar algo en caso de que se cumpla cierta condición, pero también debe efectuar otra(s) acción(es) diferentes si dicha condición no se cumple, en este caso se utiliza el if con 2 alternativas.
Si la expresión es verdadera, la computadora ejecuta la(s) instrucción(es) escritas entre las llaves que abren y cierran inmediatamente después de la expresión. Pero si la expresión lógica es falsa efectúa la(s) instrucciones indicadas entre llaves en la sección else.
Ejemplo: if (calif >= 65 ) {
out.print(“Aprobado”); }
else {
out.print(“Reprobado”); }
SELECCION MULTIPLE (if anidado)
Ejemplo:
Una compañía realiza un aumento de salario de acuerdo al sexo y edad de los empleados de la siguiente forma:
A los varones de menos de 25 años se le aumentará un 5% del salario actual. A los varones de 25 o más años se le aumentará un 10% del salario actual. A las mujeres de menos de 21 años se les aumentará un 12% del salario actual. Las mujeres de 21 años o más se les aumentará un 15% del salario actual.
El siguiente algoritmo recibe como entrada el sexo y el salario actual de un empleado y mediante una estructura de if anidado, calcula e imprime el aumento y nuevo salario de cada empleado de acuerdo a su sexo y edad..
void aumentaSalario(char sexo, int edad, float salarioActual) { float aumento, nuevoSalario;
if (sexo = = 'm') { if (edad < 25 ) {
aumento = salarioActual * 0.05 }
else {
aumento = salarioActual * 0.10; }
} else {
if (edad < 21) {
aumento = salarioActual * 0.12; }
else {
aumento = salarioActual * 0.15; }
}
nuevoSalario = salarioActual + aumento;
out.print(“El nuevo salario del trabajador es “ + nuevoSalario); }
En el segmento de código anterior se puede observar que cada bloque de instrucciones que
pertenecen a cada una de las diferentes partes del if, se encierra entre llaves con el fin de enmarcar el código respectivo a cada condición.
EL ENUNCIADO switch - case
Ejemplo 1:
Suponga que se desea escribir un algoritmo que reciba el número del día de la semana y que muestre el nombre correspondiente de acuerdo a su número, donde el 0 es domingo, el 1 es lunes, el 2 es martes y así sucesivamente.
void imprimeDia(int dia) { switch (dia) { case 0:
out.print (“domingo”); break;
case 1:
out.print (“lunes”); break;
case 2:
out.print (“martes”); break;
case 3:
out.print (“miércoles”); break;
case 4:
out.print (“jueves”); break;
case 5:
out.print (“viernes”); break;
case 6:
out.print (“sábado”); break;
default:
out.print (“Número de día incorrecto); }
}
Ejemplo 2:
Algoritmo que recibe como entrada un número de mes y que muestra la cantidad de días que éste contiene.
void imprimeMes(int mes) {
switch (mes) { case 2:
out.print (“28 ó 29 DIAS” ); break;
case 4: case 6: case 9: case 11:
out.print ( “30 días” ); break;
case 1: case 3: case 5 case 7: case 8: case 10: case 12:
out.print ( “31 días” ); break;
} }
Observaciones:
1. El selector debe ser de tipo entero.
2. Si el valor del selector está en alguna de las listas alternativas, se ejecuta el enunciado de dicha lista, y luego se pasa a ejecutar el primer enunciado después del cierre del switch - case.
3. El default es opcional, si el valor del selector no es alguno de las listas alternativas, y hay un enunciado default, entonces éste es el ejecutado; si no hay enunciado default entonces no se ejecuta ninguna acción.
4. Si alguno de los valores case se repite en varias listas, solo el enunciado correspondiente a la primera de ellas será ejecutado.
5. La alternativa default, puede utilizarse para determinar valores de selector que están fuera del intervalo deseado, como se observa en el ejemplo de los días de la semana.
Ejemplo : Si estuviera seguro que los valores de meses que se tienen no va a ser mayor a 12 podría usarse:
switch (mes) { case 2:
out.print (“28 ó 29 DIAS” ); break;
case 4: case 6: case 9: case 11:
out.print ( “30 días” ); break;
default :
out.print ( “31 días” ); break;
}
ESTRUCTURAS ITERATIVAS O DE REPETICIÓN
(Ciclos)
Hasta ahora los algoritmos diseñados han sido lineales, es decir, comienzan por la primera instrucción y se ejecutan en forma secuencial hasta llegar a la última, sin embargo, cuando decidimos diseñar un algoritmo que resuelva un problema, la idea no surge ante la necesidad de resolver por una única vez dicho problema, ya que una de las ventajas del uso del computador, es que una vez que diseñemos las instrucciones que realizan una tarea, generalmente, éstas deberán ejecutarse un sin número de veces para datos diferentes cada vez.
Esto, nos lleva a la necesidad de contar con herramientas de programación que permitan indicar al computador que ejecute una serie de instrucciones en forma continua o repetitiva mientras que alguna condición se cumpla. Cuando la condición que controla la repetición ya no se cumpla será la indicación al computador de que la repetición del bloque de instrucciones ha finalizado.
A estos bloques de instrucciones, que se ejecutan en forma repetitiva mientras alguna condición especificada por el programador se cumpla, se les conoce como ciclos o bucles y a cada ejecución de este bloque se le llama iteración.
Existen 3 tipos básicos de ciclo. Aunque todos permiten ejecutar un bloque de instrucciones en forma repetitiva, cada uno de ellos tiene un esquema diferente para plantear la forma en que se realizará dicha iteración. Los 3 ciclos que estudiaremos son:
- Ciclo for (para)
- Ciclo while ( mientras)
- Ciclo do – while (haga mientras)
CICLO for
Muchas veces se conoce de antemano la cantidad de veces que se desean ejecutar las instrucciones de un bucle. En estos casos, en que la cantidad de iteraciones está definida por algún valor específico o por el valor que contenga una variable, se recomienda utilizar el ciclo for, ya que la naturaleza de este es precisamente ejecutar un grupo de instrucciones una determinada cantidad de veces.
Este ciclo está formado por un encabezado y por el cuerpo del ciclo.
En el encabezado determina el número de veces que deberán ejecutarse las instrucciones contenidas en el cuerpo del ciclo.
El cuerpo del ciclo for, es la línea o grupo de líneas que se deben ejecutar un número específico de veces y que se colocan inmediatamente después del encabezado y encerradas entre llaves.
La cantidad de veces que se ejecuta el ciclo for es controlado por una variable, la cual de acuerdo a su contenido, definirá cuando se debe finalizar la ejecución de este. A esta variable se le llama variable de control del ciclo for.
El formato general del ciclo for es el siguiente:
for (inicialización ; condición ; incremento) { instrucción1;
instrucción2; . . instrucciónN; }
Como se puede ver en el formato anterior, el encabezado del for se divide en tres secciones específicas que se deben separar por un punto y coma (;). A continuación se describe el objetivo de cada una de ellas.
- Inicialización : En esta sección se da un valor de inicio a la variable de control, la cual, dará seguimiento a las veces que se debe ejecutar el ciclo
que especifique en qué rango de valores puede encontrarse el valor de dicha variable, y cuando este valor se encuentre fuera del rango será la indicación al computador de que la ejecución del ciclo ha finalizado.
- Incremento: En esta sección se indica en cuánto se incrementa o decrementa la variable de control en cada iteración del ciclo.
Ejemplo de un ciclo for
for (i = 1 ; i <= 100 ; i= i+1) {
out.print(“Principios de programación”); }
El encabezado de este ciclo for indica lo siguiente:
- En la sección de inicialización, se indica que la variable de control i, va iniciar en 1.
- En la sección de condición se especifica que i sea menor o igual a 100, esto significa, que el ciclo se ejecutara continuamente mientras el valor de i sea cualquier valor menor o igual a 100 y en el momento en que la i tome algún valor que sea mayor a 100 se suspenderá la ejecución del ciclo y se procederá a ejecutar la instrucción que siga después del cierre del cuerpo del ciclo.
- En la sección de incremento, se indica en cuánto aumentará o disminuirá la variable de control i cada vez que se ejecute el cuerpo del ciclo.
De acuerdo a lo descrito, el cuerpo de este ciclo for se ejecutará 100 veces, ya que inicialmente la variable i toma el valor de 1 y luego, en cada iteración se incrementa en 1, así la segunda vez el valor de la i será 2, la próxima vez 3 y así sucesivamente hasta llegar a 100, cuando al incrementarse en 1 tomará el valor de 101 y por tanto la condición se hará falsa y finalizará la ejecución. Esto nos indica que el rótulo Principios de Programación aparecerá impreso 100 veces.
Otra forma de escribir el ciclo for anterior es:
for (i = 1 ; i <= 100 ; i++) {
out.print(“Principios de programación”); }
En este caso en la sección de incremento la sentencia i++ es equivalente a la sentencia anterior i = i+1
Ejecución del ciclo for:
- Antes de ingresar a ejecutar las instrucciones que forman el cuerpo del ciclo, se evalúa la condición (i <=100 ?), solo si ésta es verdadera, procede a ejecutarlas. Si la condición es falsa, entonces el programa omitirá ejecutar el cuerpo del ciclo y pasará a ejecutar la siguiente instrucción que aparece después del cierre de éste para continuar con el resto del algoritmo.
- Una vez ejecutadas las instrucciones del ciclo, el programa regresa al encabezado, e incrementa la variable de control de acuerdo a la expresión indicada en la sección de incremento. De nuevo evalúa la condición, si es verdadera, el programa procede a ejecutar otra vez las instrucciones del ciclo, pero si ésta es falsa pasa a la instrucción que aparece después del cierre del ciclo. Así se continúa sucesivamente.
Observaciones acerca del ciclo for
- Debe tenerse cuidado de no poner punto y coma después del paréntesis que cierra el encabezado, ya que esto lo convertirá en un ciclo vacío y las instrucciones del cuerpo del ciclo se ejecutarían entonces una única vez.
- Dado que la condición del ciclo se escribe en el encabezado, ésta se evalúa antes de ejecutar las instrucciones por primera vez, por tanto, podría ser que ésta no se cumpla desde un principio, si esto sucede, no se ejecutará el cuerpo del ciclo ni una sola vez.
- Si en el cuerpo del ciclo se utiliza la variable de control ya sea para realizar algún cálculo o para impresión, el valor de ésta será el valor que obtuvo la última vez que regresó el programa al encabezado y efectuó el incremento.
- Una vez que el programa sale del ciclo, el valor de la variable de control, será el último obtenido en el momento del incremento. En el ejemplo anterior, al salir del ciclo la variable i contiene el valor 101, que fue el valor que produjo que la condición no se cumpliera y por tanto finalizara la repetición.
- La variable de control debe ser de tipo entero al igual que el valor del incremento que puede ser cualquier número entero. La variable de control puede aumentar de 2 en 2 de 3 en tres, etc.
- Dentro de las instrucciones del ciclo no debe alterarse la variable de control pues ésta es la que utiliza el computador para controlar el número de veces que ejecuta el ciclo. La variable de control puede utilizarse, para imprimir, para contar el número de veces que se ejecutará un ciclo o para realizar cálculos en base a ella, pero nunca debe alterarse su contenido.
- En lugar de valores fijos como el 1 de inicio y de incremento o el 100 de tope utilizados en el ejemplo anterior, en el ciclo for se pueden utilizar variables que definan estos valores. Por ejemplo, si tanto a, b y c se declararon como variables de tipo entero, y se codifica el siguiente enunciado for:
for (i = a ; i<= b ; i= i+c) {
- Este enunciado imprimirá el título Principios de Programación tantas veces como lo determinen los valores contenidos en estas 3 variables, siguiendo la secuencia de ejecución del ciclo for.
- Si se desea que la variable de control inicie con un valor y que éste disminuya en cada repetición, entonces esto debe especificarse en la sección de incremento de forma que éste más bien sea negativo y teniendo presente que la condición se plantee de forma que llegue a cumplirse.
Por ejemplo, si se quisiera que la i iniciara en 100 y disminuyera hasta llegar a 1, entonces el encabezado del ciclo quedaría de la siguiente forma:
for (i = 100 ; i >= 1 ; i = i-1) {
out.print (“Este es el número ” + i ); }
Este enunciado producirá una salida de la lista de números enteros empezando en 100 y disminuyendo de uno en uno hasta llegar al uno, y el valor con que quedará la variable i una vez finalizado el ciclo será cero.
Otra forma de escribir el ciclo for anterior es:
for (i = 100 ; i >= 1 ; i--) {
out.print(“Este es el número ” + i ); }
En este caso en la sección de incremento la sentencia i - - es equivalente a la sentencia anterior i = i - 1
Ejemplo 1:
Algoritmo que recibe como entrada un número entero, calcula e imprime los primeros 20 múltiplos del número:
void calculaMultiplos(int numero) { int i, multiplo;
for (i = 1 ; i <= 20 ; i ++) { multiplo = i * numero; out.print(multiplo); }
}
Ejemplo 2:
Algoritmo que recibe dos números enteros a y b.
- Si a es menor que b entonces se imprimirán los números entre a y b inclusive, en forma ascendente.
void prueba (int a, int b){ int contador;
if (a< b) {
for( contador =a ; contador<=b ;contador++) { out.print(contador);
} }
else {
for(int contador=a ; contador>=b ;contador--) { out.print(contador);
} }
}//fin del algoritmo
CICLO while
No siempre que se va a ejecutar un ciclo, se sabe de antemano la cantidad específica de veces que éste se ejecutará, algunas veces la repetición de las instrucciones de un ciclo dependerá de que se cumpla una condición que no tenga que ver con el comportamiento de una variable contadora. El ciclo while (mientras), como su nombre lo indica, ejecutará las instrucciones del cuerpo del ciclo mientras la condición indicada sea verdadera y finalizara la repetición cuando la evaluación de dicha condición sea falsa.
Este ciclo, al igual que el ciclo for visto anteriormente, está formado por el encabezado y el cuerpo del ciclo.
- Encabezado: en él se define la condición que debe cumplirse para que el ciclo se ejecute; esta condición debe ser una expresión booleana.
- Cuerpo del ciclo: está formado por las instrucciones que se van a ejecutar repetidamente mientras la condición sea verdadera. El cuerpo del ciclo se escribe encerrado entre llaves inmediatamente después del encabezado.
Formato general del ciclo while:
while (condición) { instrucción1; instrucción2;
instrucción n; . }
Ejecución del ciclo while:
1. Cuando el programa encuentra la instrucción while, evalúa la expresión booleana que se indica en la condición.
2. Si ésta es falsa, entonces no ingresa al bloque de instrucciones que forman el ciclo, sino que pasa directamente a la siguiente instrucción después del cierre del ciclo.
3. Si la condición es verdadera, ingresa a ejecutar las instrucciones que se encuentran en el cuerpo del ciclo.
4. Cuando llega al fin del ciclo, automáticamente regresa al encabezado para evaluar el estado de la condición en ese momento. Si ésta es verdadera, de nuevo vuelve a ejecutar el ciclo, en caso contrario pasa a ejecutar la siguiente instrucción después del fin del ciclo.
Observaciones acerca del ciclo while
- La expresión booleana que indica la condición del ciclo siempre debe encerrarse entre paréntesis.
- Debe tenerse cuidado de no poner punto y coma después del paréntesis que cierra la expresión de la condición del ciclo, ya que esto lo convertirá en un ciclo vacío que dependiendo de la condición podría convertirse en infinito.
- Dado que la condición se encuentra en el encabezado, antes del cuerpo del ciclo, siempre se evalúa ésta antes de ingresar por primera vez, por tanto, si esta es falsa en la primera evaluación el ciclo, éste no se ejecutará ni una sola vez.
- La computadora nunca sale a la mitad del cuerpo del ciclo, únicamente sale al inicio del mismo (antes de ingresar) si la prueba de la condición resulta falsa.
- Dado que en el ciclo while la condición está antes del cuerpo del ciclo, el programador debe asegurarse de que las variables involucradas en ésta, tengan un valor asignado antes llegar allí, para que la evaluación de dicha condición se de basándose en dichos valores.
Ejemplo de un algoritmo que utilice ciclo while
Algoritmo que imprime los 20 primeros múltiplos de un número entero positivo que se recibe como entrada.
void calculaMultiplos(int numero) { int i , multiplo;
i = 1;
while (i <= 20 ) {
multiplo = i * numero; out.print(multiplo); i = i + 1;
Observe que en el ejemplo anterior la variable i no solo debe declararse como entera, si no que el programador debe asignarle un valor de inicio antes de ingresar al ciclo, de lo contrario la evaluación de la condición la primera vez daría falso y no se ejecutaría el ciclo.
CICLO do – while
El ciclo do – while es muy similar al ciclo while, ya que ambos ciclos ejecutan repetidamente un bloque de instrucciones mientras que se cumpla una condición, o, lo que es lo mismo, mientras que la condición del ciclo la cual, también debe ser una expresión booleana, dé cómo resultado un valor verdadero.
Las palabras do y while marcan el inicio y el final del ciclo respectivamente, es decir las instrucciones que se encuentran entre estos dos enunciados forman el cuerpo del ciclo.
El cuerpo del ciclo debe enmarcarse entre llaves y la condición debe estar encerrada por paréntesis.
Formato del ciclo do - while do
{
instruccion 1; instruccion 2; .
.
instruccion N; }while(condición);
Ejecución del ciclo do - while
1. Cuando se encuentra el enunciado do, el computador ingresa a ejecutar todo el cuerpo del ciclo hasta llegar al enunciado while, en ese momento, se evalúa la condición; si ésta es verdadera, se regresa al inicio del ciclo y vuelve a ejecutar todo el cuerpo de éste hasta llegar de nuevo al enunciado while y de nuevo vuelve a evaluar la condición. Este proceso se continúa ejecutando mientras que la evaluación de la condición resulte verdadera.
2. Si al llegar al enunciado while y evaluar la condición, ésta es falsa, entonces el algoritmo sale del ciclo y continúa con la siguiente instrucción después de éste.
Diferencia entre el ciclo do – while y el while
- En el ciclo while, la condición se escribe al inicio del ciclo (en el encabezado) y en el ciclo do– while la condición se escribe después del cuerpo del ciclo.
llegar a evaluar la condición, para decidir si se continúa o no con la ejecución de éste. En cambio, dado que el ciclo while presenta la condición en el encabezado, ésta se evalúa antes de ingresar al cuerpo del ciclo; y así, si en la primer evaluación de la condición, ésta no se cumple, no se ingresa al ciclo ni siquiera una primera vez.
Ejemplo 1: Algoritmo que imprime los 20 primeros múltiplos de un número entero positivo que se recibe como entrada.
void calculaMultiplos(int numero) { int i , multiplo;
i = 1; do {
multiplo = i * numero; out.print(multiplo); i = i + 1;
} while (i <= 20 ); }
Formas de controlar los ciclos while y do - while.
De acuerdo a la naturaleza de la condición que deba darse para determinar si se ejecuta o no el bloque de instrucciones del ciclo, se puede decir que existen tres formas básicas de controlar la ejecución del un ciclo while:
1. Fin del ciclo determinado por un contador
En este caso, el ciclo while o do - while funciona de forma similar al ciclo for, únicamente que el programador será el responsable de iniciar e incrementar la variable de control.
Ejemplo 2: Algoritmo que imprime los números enteros pares entre 2 y 100
Solución con ciclo while
void pares( ){ int contador=2;
while (contador<=100) { out.print(contador); contador=contador+2; }
}
Solución con ciclo do - while
void pares( ){ int contador=2; do {
contador=contador+2; } while (contador<=100); }
En este algoritmo, el incremento del contador va de dos en dos, cada vez que se ejecuta el ciclo se imprime un número par y se incrementa en dos unidades.
Cuando el contador alcanza el valor de 100, el último número impreso fue el 98, entonces, como todavía la condición es verdadera (98<=100), se ingresa de nuevo al ciclo para imprimir el 100 y se incrementa el contador a 102. En la siguiente evaluación, la condición da un resultado falso (102 no es <= 100) y por tanto, el algoritmo finalizará la ejecución del ciclo y el algoritmo continuará con la siguiente instrucción después del cierre.
2. Fin del ciclo determinado por tarea terminada
En algunas ocasiones, no se conoce la cantidad de veces que se ejecutará un bloque de instrucciones, es decir, la condición de salida de un ciclo no depende de un contador, si no de cualquier otro factor que suceda y que no nos permite saber de antemano cuántas veces debe repetirse el ciclo.
Ejemplo 3:
Algoritmo que calcula la suma de los números enteros secuenciales a partir de uno. La secuencia debe detenerse cuando la suma de éstos alcance o pase de 100. Imprimir el último número sumado.
Solución con ciclo while:
void calculaSuma() { int numero = 0, suma=0; while (suma < 100 ) { numero = numero + 1;
suma = suma + numero; }
out.print(“La suma de los números es “ + suma); out.print(“El último número sumado fue “ + numero);
}
Solución con ciclo do - while:
void calculaSuma() { int numero = 0, suma=0; do {
out.print(“La suma de los números es “ + suma); out.print(“El último número sumado fue “ + numero);
}
En este caso, no se conoce de antemano cuántos números será necesario sumar para que el resultado alcance o sobrepase el 100, por tanto, el fin del ciclo ésta vez no será determinado por un contador, sino, que la condición indicará que se cumplió la tarea de sumar la serie de números mientras esta diera un valor menor a 100.
3. Fin del ciclo determinado por el usuario
La ejecución de un ciclo while o do - while puede ser suspendida por el usuario, es decir, no es necesario saber cuántas veces se ejecutará un ciclo, sino que será el usuario quien determine e indique al programa si desea continuar procesando datos o nó. Más adelante se estudiará com más detalle esta forma de finalizar un ciclo.
Cómo seleccionar el ciclo que debe usar
1. Utilice ciclos for cuando conoce el número de veces que debe repetir una tarea.
2. Si existen circunstancias en las cuales no se debe ejecutar el ciclo ni siquiera una vez, utilice el ciclo while.
3. Si se sabe que el ciclo se debe ejecutar al menos una vez puede elegir el ciclo do – while.
CONTADORES Y ACUMULADORES
Muchas veces los programas requieren que se vaya llevando la cuenta de las veces que ocurre algún en evento como:
- La cantidad de clientes que llegaron a un evento. - La cantidad de estudiantes que aprobaron un curso, etc.
También a veces es necesario ir acumulando alguna cantidad para obtener un resultado final como por ejemplo:
- El total de dinero recolectado por la venta de entradas a un partido de futbol. - El total de kilos de mercadería transportada por una empresa, etc.
Para estos casos se necesita que se tenga una variable que se comporte como un contador o como un acumulador respectivamente.
Contador: variable que se incrementa en una cantidad fija cada vez que se ejecuta el cuerpo de un ciclo. Esta variable debe tener un valor de inicio antes de iniciar el ciclo.
Ejemplo del uso de un contador:
cantEstudiantes = cantEstudiantes + 1;
Ejemplo del uso de un acumulador:
sumaNotas = sumaNotas + notaExamen;
INTERFAZ CON LOS ALGORITMOS
MÓDULO main (principal)
Cómo se indicó anteriormente, la ejecución de un ciclo while o do - while puede ser suspendida por el usuario, es decir, no es necesario saber cuántas veces se ejecutará un ciclo, sino que será el usuario quien determine e indique al programa si desea continuar procesando datos o nó.
Vamos a suponer que las entradas al algoritmo las recibe el computador por parte del usuario a través del teclado. En muchas ocasiones, el usuario desea realizar un mismo proceso varias veces, aunque con diferentes datos.
Por ejemplo, un profesor realiza el proceso de calcular el promedio final de un estudiante tantas veces como estudiantes hayan matriculado el curso. El proceso de cálculo del promedio se debe codificar únicamente una vez, pero el profesor ejecutará éste proceso con datos diferentes cada vez, de acuerdo a las notas parciales obtenidas por cada estudiante. Dado que no siempre la cantidad de estudiantes matriculados se mantiene, no sería útil ejecutar este ciclo controlado por un contador, si no, que el programa debe proveer al usuario la forma de indicar que ya finalizó de procesar las notas que deseaba.
Para poder diseñar un algoritmo como se describe en el párrafo anterior, se requiere de un módulo más llamado main (principal), por medio del cual, se establecerá la comunicación del computador con el usuario, para solicitarle los datos de entrada y la indicación de si desea o nó continuar procesando más datos.
Este nuevo módulo, será el que marque el inicio de la ejecución del algoritmo y será el responsable de llamar al módulo del algoritmo que recibe las entradas y ejecuta el proceso. Para que el proceso se pueda ejecutar varias veces, el llamado debe incluirse dentro de un ciclo que se ejecute mientras el usuario indique que desea seguir procesando datos.
Ejemplo 1: Algoritmo que pide al usuario tres notas de un estudiante, calcula e imprime el promedio final obtenido. El algoritmo se continuará ejecutando para todos los estudiantes que el usuario desee procesar, hasta que sea él quien indique que ya finalizó.
void calculaPromedio(int nota1, int nota2, int nota3) { float promedio;
promedio = (nota1 +nota2 + nota3)/3;
- Llame al algoritmo para que se ejecute y envíele los datos que el usuario indicó.
Este módulo se define a continuación:
void main ( ){
int nota1,nota2,nota3; char continuar;
out.print(“Desea ingresar a procesar los promedios de los estudiantes ? S/N”); in.readLine(continuar);
while(continuar ==‟S‟║continuar ==‟s‟) {
out.print(“Digite la nota del primer examen: ”); in.readLine(nota1);
out.print(“Digite la nota del segundo examen: ”); in.readLine(nota2);
out.print(“Digite la nota del tercer examen: ”); in.readLine(nota3);
calculaPromedio(nota1,nota2,nota3);
out.print(“Desea continuar procesando notas? S/N”); in.readLine(continuar);
} }
Observaciones acerca del algoritmo anterior:
- La ejecución del algoritmo siempre comienza en el módulo main.
- Cuando el computador encuentra la instrucción que llama al módulo calculaPromedio, procede a trasladar los datos de entrada y ejecuta el módulo con los datos enviados.
- Una vez que finaliza la ejecución de calculaPromedio, el computador regresa al main a la siguiente instrucción que aparece después del llamado.
- Aparece una primer lectura de la variable continuar antes del encabezado del ciclo, esta lectura es para darle un valor de inicio a dicha variable, sino, de lo contrario la primera evaluación de la condición no contaría con un valor confiable en la variable continuar.
- La lectura de la variable continuar el final del ciclo, se ejecuta en cada repetición para que una vez que el usuario haya procesado las notas de un estudiante, indique si desea continuar procesando más o ya finalizó.
Ejemplo 2: Algoritmo que pide al usuario un número entero positivo y despliega la raíz cuadrada de dicho número. El algoritmo se continuará ejecutando para los diferentes números que el usuario desee consultar, hasta que sea él quien indique que ya finalizó.
void raiz(int num){ float resultado; resultado=sqrt(num);
out.print(“La raiz cuadrada de “+ num + ”es” + resultado); }
void main ( ){ int num; char continuar; do{
out.print(“Digite un número entero mayor a cero”); in.readLine(num);
raiz(num);
out.print(“Desea continuar S/N”); in.readLine(continuar);
}while(continuar==‟S‟║continuar==‟s‟); }
Observaciones acerca del algoritmo anterior:
- La ejecución del algoritmo siempre comienza en el módulo main.
- Cuando el computador encuentra la instrucción que llama al módulo raiz, procede a trasladar el número de entrada y ejecuta el módulo con éste número.
- Una vez que finaliza la ejecución de raiz, el computador regresa al main a la siguiente instrucción que aparece después del llamado.
- La lectura de la variable continuar se ejecuta al final del ciclo para que una vez que el usuario haya obtenido la raíz cuadrada de un número, indique si desea continuar procesando o ya finalizó.
TEMA III
PROGRAMACIÓN ORIENTADA A OBJETOS
Paradigmas de Programación
A través de la historia de las computadoras han existido diferentes formas de programar o lo que se llama “paradigmas de programación”. Un paradigma consiste en una forma de visualización del mundo real. Ya que por medio de las computadoras se trata de simular la realidad y de resolver los problemas basados en la mejor percepción que se tenga del entorno, en el caso específico de la programación, el paradigma consiste en la forma de ver el mundo real, la cual será la base para modelar la solución del problema planteado
Existen varios Paradigmas de programación dependiendo del objetivo:
- Paradigma Lógico: usado para la inteligencia artificial.
- Paradigma Imperativo: El computador dirige las acciones del usuario llevándolo por un proceso secuencial desde la entrada de datos hasta la salida de información.
- Paradigma Orientado a Objetos: Se visualiza el mundo como una serie de objetos que tienen una identidad, un estado y un comportamiento.
Introducción a la Programación en el Paradigma de Orientación a objetos
La Programación Orientada a Objetos (POO) pretende modelar la realidad como una serie de objetos que se mezclan e interactúan entre sí; es decir, todo el proceso de desarrollo de programas gira alrededor de la noción de una realidad compuesta de objetos.
Si se aplica correctamente, la POO facilita el mantenimiento y modificación de programas extensos. Una de las ventajas de la programación orientada a objetos es su parecido a la forma humana de pensar, ya que el mundo real está formado por objetos de diferentes tipos.
Objetivo de la programación orientada a objetos
El objetivo fundamental de la programación orientada a objetos es crear fragmentos de código fuente reutilizable que sean de fácil construcción y mantenimiento, ya que los mismos representarán objetos específicos.
Realidad vista desde una perspectiva de objetos
El entorno en que vivimos está formado de objetos. Los objetos pueden ser tangibles como una persona, una silla, un televisor, o, intangibles como una cuenta de banco o un curso.
o se pueden utilizar para que lleven a cabo acciones que pueden o no afectar a otros objetos en el medio en que se encuentran.
Siempre se pueden identificar características y acciones asociadas a los objetos que nos rodean.
Ejemplos:
– El estudiante Juan tiene pelo negro – El trabajador Pedro está hablando. – El cuaderno que tiene páginas amarillas. – El sartén sirve para cocinar.
– El televisor está encendido.
Otros ejemplos de objetos y sus atributos:
Objeto: Televisor
Un televisor tiene atributos como: – marca
– tipo de pantalla – diámetro – peso, etc.
Al televisor se le pueden efectuar las siguientes acciones: – apagarlo
– encenderlo – cambiar de canal
– subir y bajar el volumen.
Objeto: Estudiante
Un estudiante puede verse como un objeto que tiene como atributos: – carnet
– nombre – sexo – estado civil
– lugar de nacimiento – fecha de nacimiento, etc.
A un estudiante podemos asignarle un carnet, asignarle un nombre o también podemos matricularlo en un curso.
Objeto: Curso
Un curso puede verse como un objeto que tiene como atributos: – código
– nombre
Sobre un curso, entre otras cosas, podemos consultar la cantidad de créditos que representa o consultar su cupo.
Definición de Objeto:
Se puede decir que un objeto es un concepto o entidad con límites definido y con significado para un problema planteado.Posee una identidad única, exhibe un estado y tiene un comportamiento bien determinado.
Atributos y métodos
En términos de software a las características que definen un objeto se les llama atributos y a las acciones que se realizan con dichos objetos o que definen su comportamiento se les llama métodos. Por tanto, un objeto se podría definir también como una composición de atributos y métodos.
Estado de un objeto
Al conjunto de valores de todos los atributos de un objeto en un instante dado se le denomina estado del objeto. El estado de un objeto cambia cada vez que se ejecuta una acción que modifica el valor de al menos uno de sus atributos.
Mensajes
Los objetos actúan en el momento de recibir un mensaje. Un mensaje es una solicitud que le indica al objeto que se comporte de alguna forma definida.
Los métodos determinan como actúa el objeto cuando recibe un mensaje.
Interfaz de un objeto
Los métodos de un objeto se ejecutan como consecuencia de un estímulo externo, representado como un mensaje, es decir, para pedirle a un objeto que lleve a cabo una acción, se le debe enviar un mensaje, esto se hace utilizando el nombre de alguno de sus métodos. Por lo tanto, se define como interfaz de un objeto, a los métodos que permiten interactuar con él.
Clases
Para crear objetos lo primero que hay que hacer es definir sus características y comportamiento (atributos y métodos) en una especificación de clase.
Una clase es una descripción de las características generales que tienen en común un grupo específico de objetos. Es como un plano o plantilla con la que se construyen objetos de un tipo específico.
En cierta forma, la Clase es un Tipo de dato, y cada instancia de dicha Clase podría decirse que es un objeto de dicho tipo.
El conjunto de atributos y métodos son los miembros de la clase.
Implementación de una clase
Diagramas de Clases