Programacion en Lenguaje Estructurado
Programacion en Lenguaje Estructurado
Programacion en Lenguaje Estructurado
La programacin estructurada propone segregar los procesos en estructuras lo ms simples posibles, las
cuales se conocen como secuencia, seleccin e interaccin. Ellas estn disponibles en todos los
lenguajes modernos de programacin imperativa en forma de sentencias. Combinando esquemas
sencillos se pueden llegar a construir sistemas amplios y complejos pero de fcil entendimiento.
Un arreglo es una coleccin de variables del mismo tipo que se referencian por un nombre comn. A un
elemento especfico de un arreglo se accede mediante un ndice. En C todos los arreglos constan de
posiciones de memoria contiguas. La direccin ms baja corresponde al primer elemento y la ms alta al
ltimo. Los arreglos pueden tener una o varias dimensiones. El arreglo ms comn en C es la cadena,
que simplemente es un arreglo de caracteres terminado por uno nulo.
Los arreglos unidimensionales son listas de informacin del mismo tipo que se guardan en posiciones
contiguas de memoria segn el orden del ndice.
Tipo nombre_variable[tamao];
Los arreglos tienen que declararse implcitamente para que el compilador reserve espacio en memoria
para ellos. El tipo declara el tipo de los elementos del arreglo, el tamao indica cuntos elementos
mantendr el arreglo.
char p[10];
En este caso hemos declarado un arreglo que tiene 10 elementos, desde p[0] hasta p[9].
En C todos los arreglos tienen el 0 como ndice de su 1er elemento.
C no comprueba los lmites de los arreglos. Se puede pasar cualquier extremo de un arreglo y escribir en
alguna otra variable de datos e incluso en el cdigo del programa.
Los arreglos bidimensionales son estructuras de tamao fijo organizadas por filas y columnas. Estas
estructuras almacenan valores del MISMO TIPO de dato. Cada posicin se identifica por la fila y la
columna. Por lo general, estas estructuras se conocen con el nombre de matrices.
Si se va a definir un arreglo bidimensional de tipo entero de 3 filas y 5 columnas, llamado matriz, sera
as:
Por otro lado, si se va a definir un arreglo bidimensional de tipo real de 2 filas y 2 columnas llamado
matriz, sera as:
System.out.println(K[1][1]);
Si del mismo arreglo bidimensional queremos sumar 3 posiciones puntuales, lo haremos as:
Suma = 12 + 1 + 21
Suma = 34
APUNTADORES (Lenguaje C)
Los apuntadores son una parte fundamental de C. Si usted no puede usar los apuntadores
apropiadamente entonces est perdiendo la potencia y la flexibilidad que C ofrece bsicamente
Se debe entender un apuntador como una variable que tiene una direccin de memoria. Por esto se les
dice apuntan a un lugar de la memoria.
int *ptrTotal;
double *ptrLiquidacin;
OPERADORES
int x = 3;
int *ptr;
ptr = &x;
Desreferenciar (*)
Si hacemos:
Mostrara el valor 3 por pantalla, ya que el operador *, desreferencia el operando al cual se le aplica o
sea muestra el contenido que hay en la direccin de memoria a la cual esta apuntando en este caso el
valor de x.
*ptr = 10;
ARREGLOS Y APUNTADORES
Existe una estrecha relacin entre apuntadores y arreglos, tanto que pueden ser usados en
forma casi indistinta.
Una variable de tipo arreglo puede considerarse como un apuntador al tipo del arreglo
Los apuntadores pueden ser utilizados en cualquier operacin que involucre subndices de
arreglos.
Ejemplo.
#include<stdlib.h>
#include<stdio.h>
int main()
{
int table[10].i.x.*pt.*ptr:
pt = &tabla[0]
x=*pt:
for(i=0:i<10:i++)
printf(%d \n.*(ptr+i).tabla[i]);
}
ARREGLOS DE APUNTADORES
Sea la declaracin:
char * mensaje[4] = {Hola.Adios.Bye.Salir}
Cada cadena est almacenada en memoria como una cadena de caracteres terminada en NULL n0
En el arreglo no estn colocadas las cadenas, tan solo estn almacenados los apuntadores
Aunque el arreglo es de tamao fijo, permite el acceso a cadenas de caracteres de cualquier
longitud
#include<stdlib.h>
#include<stdio.h>
int main()
int x:
char * mes[] = {
mes ilegal.
enero.
febrero.
marzo.
abril.
mayo.
junio.
julio.
agosto.
septiembre.
octubre.
noviembre.
diciembre.
}:
x = rand()%12;
}
DETALLES INICIALIZACIN DE ARREGLOS DE CARACTERES
A diferencia de un apuntador. Un arreglo inicializado por un string puede ser modificado. Los caracteres
individuales pueden ser cambiados despus.
#include<stdio.h>
Int main()
char*esp[10]={
uno
dos
tres
un.
deux.
trois
}:
printf(Elemen: 123456789n);
for (i=:i<3:i++)
printf(Esp[%d]:%s\n.i.esp[i]);
for(i=0:i<3:i++)
printf(Fra[%d]:%s\n.i.esp[i]);
francs[3][4]=A:
int *a[10][20]
Como un arreglo de tamao 20 de vectores de longitud variable
Int *a[10]:
Como un apuntador de apuntadores a enteros
int **a
tab[i][i]*(*(tab+i)+j)
Se entiende por aproximacin numrica X* una cifra que representa a un nmero cuyo valor exacto es
X. En la medida en que la cifra X* se acerca ms al valor exacto X, ser una mejor aproximacin de ese
nmero. Ejemplos:
El error de aproximacin o error numrico es una medida del ajuste de la medida o clculo de una
magnitud con respecto al valor real o terico que dicha magnitud tiene. Un aspecto importante de los
errores de aproximacin es su estabilidad numrica. Dicha estabilidad se refiere a como dentro de un
algoritmo de anlisis numrico el error de aproximacin es propagado dentro del propio algoritmo.
El concepto de error es consustancial con el clculo numrico. En todos los problemas es fundamental
hacer un seguimiento de los errores cometidos a fin de poder estimar el grado de aproximacin de la
solucin que se obtiene.
Los errores asociados a todo clculo numrico tienen su origen en dos grandes factores:
Dentro del grupo de los primeros, se incluyen aquellos en los que la definicin matemtica del problema
es slo una aproximacin a la situacin fsica real. Estos errores son normalmente despreciables. En
aquellos casos en que estos errores no son realmente despreciables, nuestra solucin ser poco precisa
independientemente de la precisin empleada para encontrar las soluciones numricas.
Otra fuente de este tipo de errores tiene su origen en la imprecisin de los datos fsicos: constantes
fsicas y datos empricos. En el caso de errores en la medida de los datos empricos y teniendo en cuenta
su carcter generalmente aleatorio, su tratamiento analtico es especialmente complejo pero
imprescindible para contrastar el resultado obtenido computacionalmente.
En lo que se refiere al segundo tipo de error (error computacional), tres son sus fuentes principales:
Equivocaciones en la realizacin de las operaciones (errores de bulto). Esta fuente de error es bien
conocida por cualquiera que haya realizado clculos manualmente o empleando una calculadora. El
empleo de computadores ha reducido enormemente la probabilidad de que este tipo de errores se
produzcan. Sin embargo, no es despreciable la probabilidad de que el programador cometa uno de estos
errores (calculando correctamente el resultado errneo). Ms probabilidad de que el programador
cometa uno de estos errores (calculando correctamente el resultado errneo). Ms an, la presencia de
bus no detectados en el compilador o en el software del sistema no es inusual. Cuando no resulta
posible verificar que la solucin calculada es razonablemente correcta, la probabilidad de que se haya
cometido un error de bulto no puede ser ignorada. Sin embargo, no es esta la fuente de error que ms
nos va a preocupar.
El error causado por resolver el problema no como se ha formulado, sino mediante algn tipo de
aproximacin. Generalmente est causado por la sustitucin de un infinito (sumatorio o integracin) o
un infinitesimal (diferenciacin) por una aproximacin finita. Algunos ejemplos son:
El clculo de una funcin elemental (por ejemplo, Seno x) empleando slo n trminos de los
infinitos que constituyen la expansin en serie de Taylor.
Aproximacin de la integral de una funcin por una suma finita de los valores de la funcin,
como la empleada en la regla del trapezoide.
Resolucin de una ecuacin diferencial reemplazando las derivadas por una aproximacin
(diferencias finitas). Solucin de la ecuacin f(x)=0 por el mtodo de Newton-Raphson: proceso
iterativo que, en general, converge slo cuando el nmero de iteraciones tiende a infinito.
Denominaremos a este error, en todas sus formas, como error por truncamiento, ya que resulta de
truncar un proceso infinito para obtener un proceso finito. Obviamente, estamos interesados en
estimar, o al menos acotar, este error en cualquier procedimiento numrico.
Por ltimo, la otra fuente de error de importancia es aquella que tiene su origen en el hecho de que los
clculos aritmticos no pueden realizarse con precisin ilimitada. Muchos nmeros requieren infinitos
decimales para ser representados correctamente, sin embargo, para operar con ellos es necesario
redondearlos. Incluso en el caso en que un nmero pueda representarse exactamente, algunas
operaciones aritmticas pueden dar lugar a la aparicin de errores (las divisiones pueden producir
nmeros que deben ser redondeados y las multiplicaciones dar lugar a ms dgitos de los que se pueden
almacenar). El error que se introduce al redondear un nmero se denomina error de redondeo.
Son tcnicas mediante las cuales es posible formular problemas matemticos de tal forma que puedan
resolverse usando operaciones aritmticas.
1. Mtodo de Biseccin
2. Mtodo de Regula False (falsa posicin)
3. Mtodo de Newton
4. Mtodo de Newton Raphson
5. Mtodo de la secante
Mtodo de la secante
2x3 + 3x2 3x 5 = 0
Como 1er paso se grafica sustituyendo x en los siguientes valores. Se cambia de signo el resultado
deseado de Xi
x F(X)
-2 -3
-1 -1
0 -5
-3
2 17
Para encontrar el valor de xi es necesario realizar una serie de clculos para encontrar el valor de la
pendiente, despus de la ecuacin de la recta.
Frmula de la pendiente
Ecuacin de la recta
1 2 1.15 -3 17 20 -1.44075
El hablar de mtodos numricos conlleva a elaborar una gran cantidad de tablas como la que se muestra
arriba, en donde encontrar el resultado conlleva muchas operaciones que ahora se pueden hacer
mediante programas de cmputo.
Mtodo de biseccin
Es una funcin continua sobre el intervalo (a,b) y si f(b)<0 entonces f debe tener un cero de
signo en el intervalo (a,b) y por lo tanto tiene por lo menos un cero de intervalo.
El mtodo de biseccin consiste en dividir el intervalo en dos subintervalos de igual magnitud,
reteniendo el subintervalo en donde f cambia de signo, para conservar al menos una raz o cero
y repetir el proceso varia veces.
Siguiente funcin
1 Paso
Se grafican los valores para obtener la grafica y con esta ver donde se encuentra la posible solucin. Esto
es donde se presente un cambio de signo.
x y
17 -2 -3
14
11 -1 -1
8
0 -5
5
2 1 -3
-3 -2 -1 -1 0 1 2 3
2 +17
-4
-7
En la tabla se puede analizar que -3 y 17 presentan un cambio de signo, por lo que sern tomados estos
valores para el siguiente paso.
2 Paso
Elaborar la tabla de biseccin tomando en cuenta los valores de X1 y x2 como se haba mencionado
TABLA DE BISECCIN
X1 X2 Xm F(X1) F(Xm)
1 2
3 Paso
X1 X2 Xm F(X1) F(Xm)
1 2 1.5
4 Paso
El valor de f(x1) utilizaremos la funcin inicial (2x3 + 3x2 3x 5) en el cual se sustituir en X el valor de
X1(2(1)3+3(1)2-3(1)-5)
X1 X2 Xm F(X1) F(Xm)
1 2 1.5 -3
5 Paso
Para obtener este valor se hace el mismo procedimiento que para f(x1) pero en este caso el valor que se
sustituir en (x) ser el de Xm (2(1.5)3+3(1.5)-5)
X1 X2 Xm F(X1) F(Xm)
1 2 1.5 -3 +4
6 Paso
MTODO DE NEWTON-RAPHSON
Este mtodo es iterativo, adems de ser uno de los ms usados y efectivos. A diferencia de los mtodos
anteriores, el mtodo de Newton-Raphson no trabaja sobre un intervalo sino que basa su frmula en un
proceso iterativo.
Ejemplo, se tiene la siguiente funcin: y= x2-2
Se tabulan dando valores en x para obtener valores de y
8 y
x
6 7
-3
4 2
-2
2 -1
-1
0 -2
-4 -2 0 2 4 0
-2
-1
1
-4
2
2
7
3
x1
x0 y0 m
1.5
2 2 4
1.416666667
1.5 0.25 3
1.4142156862745100
1.4166666666667 0.006944444 2.83333333
1.4142135623746900
1.4142156862745 6.0073E-06 2.82843137
1.4142135623730900
1.4142135623747 4.51061410445E-12 2.82842712
1.4142135623730900
1.4142135623731 0.0000000000000 2.82842712
INTERPOLACIN NUMRICA
Interpolacin de Lagrange
Es una de las interpolaciones ms tiles en integracin numrica, sta consiste en una representacin de
polinomios de la funcin:
Para hallar la interpolacin de Lagrange se tiene que seguir ciertas frmulas, nosotros veremos un
algoritmo en el cual no es necesario utilizar las frmulas basta con lo siguiente:
Este sera el cdigo en C++
#include<iostream.h>
#include<conio.h>
void main(){
float x[50],y[50],z,l, valor=0;
int n;
cout<<"ingrese el numero de elementos: "; cin>>n;
cout<<"ingrese x: ";
for(int i=0; i<n; i++){
cin>>x[i];
}
cout<<endl;
cout<<"ingrese y: ";
for(int i=0; i<n; i++){
cin>>y[i];
}
cout<<endl;
cout<<endl<<"ingrese z: "; cin>>z;
for(int i=0; i<n ;i++){
l=y[i];
for(int j=0; j<n; j++){
if(i!=j){
l=(l*(z-x[j]))/(x[i]-x[j]);
}
}
valor=valor+l;
}
cout<<endl<<endl<<"El valor al polinomio de interpolacion en Z= "<<z <<" es
: "<<valor;
getch();
}
La POO es una de las ideas de programacin ms extraordinaria de los ltimos aos y es una materia
que puede ser estudiada y practicada por muchos aos, sin embargo, la idea central es simple: organizar
los programas de modo que reflejen la forma de organizacin de los objetos en el mundo real.
Pensando en Objetos
La programacin orientada a objetos, es, desde su raz, una forma de concebir un programa de
computadora. Un programa es una serie de instrucciones que le indican a la computadora que hacer. La
manera en que la POO ve a un programa es como un conjunto de objetos que operan juntos en formas
predefinidas para realizar tareas.
Un ejemplo de cmo funciona esta clase de programacin, es haciendo una comparacin con los
bloques de construccin LEGO. LEGO son pequeas piezas de plstico en varios colores y tamaos. Estos
bloques pequeas protuberancias redondas en un lado las cuales se ajustan en los huecos de los otros
bloques. La combinacin de piezas crea formas ms grandes y se pueden usar muchas otras piezas LEGO
como llantas, motores, bisagras y poleas.
Con los bloques LEGO se pueden hacer todo tipo de cosas: castillos, automviles, trailers, etc. Casi
cualquier cosa que se pueda imaginar. Cada pieza de LEGO es un objeto que se une con otros objetos en
forma especfica para crear un objeto ms grande.
La POO es muy parecida es muy similar a construir estructuras a partir de bloques LEGO. Mediante la
POO, todo su programa est formado por objetos diferentes llamados objetos.
Objetos y Clases
La programacin orientada a objetos se basa en la observacin de, en el mundo real, los objetos se
construyen a partir de objetos ms pequeos. Sin embargo, la capacidad de combinar objetos es slo un
aspecto general de dicha programacin. Tambin incluye conceptos y caractersticas que hacen la
creacin y el uso de objetos sea ms sencilla y flexible. La clase es la ms importante.
Una clase es una plantilla que se utiliza para crear mltiples objetos con caractersticas similares.
Las clases engloban todas las caractersticas de un conjunto particular de objetos. Cuando se escribe un
programa en un lenguaje orientado a objetos, no se definen objetos individuales, sino que se definen
clases de objetos.
La mayora de los lenguajes orientados a objetos incluyen un grupo de clases que implementan la
mayora de la funcionalidad bsica que necesitar. A estas agrupaciones se les denomina bibliotecas.
Una biblioteca de clases es un grupo de clases diseadas para su uso con otros programas.
Comportamientos y Atributos
1. Atributos
2. Comportamiento
Atributos
Los atributos son las cosas individuales que diferencan una clase de objetos de otros y determinan la
apariencia, estado y otras cualidades de la clase.
Tambin pueden incluir informacin acerca del estado de un objeto. En una clase, los atributos estn
definidos por variables. Cada objeto puede tener valores distintos para sus variables y a stas se les
denomina variables de instancia.
La clase del objeto define que tipo de atributo es y cada instancia almacena su propio valor para ese
atributo. A las variables de instancia tambin se les denomina variables de objeto.
Cada atributo de clase tiene una variable correspondiente sencilla al cambiar de valor de la variable
puede cambiar ese atributo en un objeto.
Las variables de instancia pueden tomar un valor cuando se crea un objeto y permanece constante a
travs de la vida del objeto o bien pueden tomar valores diferentes mientras el objeto se usa en un
programa en ejecucin.
Para describir toda una clase de objetos se usa otro tipo de atributo en vez de objetos especficos desde
la clase. A stas se les denomina variables de clase.
Una variable de clase es un elemento de informacin que define un atributo de toda una clase. La
variable aplica para la clase por s misma y para todas sus instancias, de modo que solo se almacena un
valor, no importa cantos objetos de clase hayan sido creados.
El comportamiento, es la manera en que una clase de objetos puede hacer cualquier cosa para s o para
otros objetos.
El comportamiento de una clase determina qu objetos de esa clase hacen cambiar sus atributos y
tambin qu hacen cuando otros objetos les piden hacer algo. El comportamiento para una clase de
objetos se implementa a travs de mtodos.
Los mtodos son grupo de instrucciones asociadas en una clase de objetos que actan en si mismos y e
otras clases y objetos. Se usan para realizar tareas especficas, del mismo modo que las funciones se
usan en otros lenguajes de programacin.
Los objetos se comunican entre s utilizando mtodos. Una clase o un objeto pueden llamar mtodos en
otra clase u objeto para muchas razones, incluyendo las siguientes:
As como hay variables de instancia y de clase, tambin hay mtodos de instancia y de clase. Los
mtodos de instancia, que son tan comunes que slo se llaman mtodos, se aplican a un objeto de la
clase. Si el mtodo hace un cambio para un objeto individual, debe ser un mtodo de instancia. Los
mtodos de clase aplican para una clase en s misma.
Herencia
La herencia es un mecanismo que hace posible que una clase herede todo el comportamiento y los
atributos de otra clase.
A travs de la herencia, una clase tiene inmediatamente toda la funcionalidad de una clase existente.
Debido a esto, las nuevas clases se pueden crear indicando nicamente en que se diferencian de la clase
existente
A una clase que hereda de otra clase se le denomina subclase y a la clase que proporciona la herencia se
le llama superclase.
Una clase puede tener nicamente una superclase, pero cada clase tiene una cantidad ilimitada de
subclases. Las subclases reciben por herencia todos los atributos y comportamiento de sus superclases.
En trminos prcticos, esto significa que si la superclase tiene comportamiento y atributos que la clase
que estas creando necesita, no tendr que redefinirlos o copiar el cdigo para tener el mismo
comportamiento y atributos. Su clase recibe automticamente todo esto de su superclase, la cual a su
vez las obtiene de su superclase y as sucesivamente por toda la jerarqua de clases. La clase que usted
est creando se convierte en una combinacin de todas las caractersticas de las clases superiores en la
jerarqua, as como de las propias.
Generalmente, en todos los lenguajes que soportan la POO el objeto base de todas las clases es Object.
Object es la clase ms general de la jerarqua y define el comportamiento y atributos heredados por
todas las clases de la biblioteca de clases del lenguaje. Conforme desciende la jerarqua, las clases se
construyen para un propsito especfico. Una jerarqua de clases define conceptos abstractos en la parte
superior de la jerarqua. Estos conceptos se vuelven ms concretos conforme desciende la lnea de
subclases.
La generacin de subclases es la creacin de una nueva clase que hereda de una clase existente. La nica
tarea de la subclase es indicar las diferencias de comportamiento y atributos entre ella y la superclase.
Si una clase define totalmente un nuevo comportamiento y no es subclase de otra, puede heredar
directamente de la clase Object. De hecho, si crea una definicin de clase que no ndique una
superclase, el lenguaje (ya sea Java, C++, C#, etc) asume que la clase nueva es herencia directa de
Object.
Jerarqua de Clases
Si ests creando un gran conjunto de clases, tendr sentido que stas hereden de la jerarqua de clases y
conformen una jerarqua por s mismas. Organizar clases de esta manera implica invertir un tiempo
considerable de planeacin, pero las ventajas son las siguientes:
Cuando se crea un objeto nuevo, lenguaje registra cada variable definida para el objeto y cada variable
definida para cada superclase del objeto. De este modo, todo lo que contienen en las clases se combina
para formar una estructura descriptiva del objeto en uso y cada objeto aporta la informacin apropiada
para su situacin
Los mtodos trabajan de manera parecida: los objetos nuevos tienen acceso a todos los nombres de los
mtodos en su clase y superclase. Esto determina de manera dinmica cuando se usa un mtodo en un
programa en ejecucin. Si se hace un llamado a un mtodo en un objeto en particular, el intrprete del
lenguaje primero revisar la clase del objeto para este mtodo. Si no lo encuentra, lo busca en la
superclase y as sucesivamente hasta encontrar la definicin del mtodo.
Las cosas se complican cuando una subclase define un mtodo que tiene el mismo nombre, tipo de valor
de retorno y argumentos que otro mtodo definido tiene en una superclase. En este caso, la definicin
del mtodo que se localiza primero (comenzando por el fondo de la jerarqua y desplazndose hacia
arriba) es la que se ha empleado. En consecuencia, puede crear un mtodo en una clase que evite que
se use un mtodo de una superclase. Para hacerlo, cree un mtodo con el mismo nombre, topo de valor
de retorno y argumentos como el mtodo de la superclase. A este proceso se le denomina
sobreposicin.
La Herencia Sencilla es aquella en la que cada clase solo puede tener una superclase (aunque
cualquier superclase dada pueda tener mtliples subclases)
La Herencia Mltiple es aquella en la que una clase puede tener ms de una superclase y
heredar variables y mtodos de forma combinada de todas aquellas superclases
Interfaces
La herencia sencilla hace que la relacin entre clases y su funcionalidad que estas clases implementan
sea ms fcil de comprender y disear. Sin embargo, tambin podra ser restrictiva (sobre todo cuando
se cuenta con comportamientos similares que necesitan ser duplicados a lo largo de brazos distintos de
la jerarqua de clases). Con el uso de Interfaces, los lenguajes que soportan POO resuelven el problema
de comportamiento compartido.
Una Interfaz es un conjunto de mtodos que indican que una clase tiene un comportamiento particular
adems del que hereda de sus superclases.
Paquetes
Los paquetes son una forma de agrupar clases en interfaces asociadas. Habilitan los grupos de clases
para estar disponibles slo si son necesarios y eliminan los conflictos potenciales entre los nombres de
clases en grupos diferentes de clases.
Diseo de Jerarqua
En POO, las abstracciones pueden ordenarse y clasificarse, a esto se le conoce como Jerarqua.
Un gato ES UN mamfero.
En el ejemplo anterior, podemos observar que la clase perro especializa a la clase mamfero, sabemos
que todos los mamferos lactan, pero la clase perro le est dando la especialidad de que ese mamfero
ladra, muerde, etc.
Herencia Mltiple: Como su nombre lo indica, se refiere a la caracterstica en la que una clase puede
heredar comportamientos de una o ms superclases.
Ejemplo:
SubClase perroCocker:
o Caractersticas: travieso, juguetn
SuperClase Perro:
o Caractersticas: Ladrar, aullar, etc.
SuperClase Volador
o Caractersticas: iniciarVuelo, iniciarAterrizaje, etc.
Ahora bien, si la Subclase PerroCocker heredara de ambas superclases (Perro y Volador), obtendramos
qu:
La Relacin de Objetos
Esta relacin se enfoca en la abstraccin de la vida real de un objeto, esta relacin denota el <<parte
de>>, esto permite hablar de niveles de abstraccin altos y bajos, los indican la dependencia de una
clase a otra.
Una clase tiene un nivel ms alto de abstraccin que cualquiera de las clases que dependen de ella.
Ejemplo:
Una llanta es <<parte de>> un carro.
Pero tambin es <<parte de>> una moto, un camin, etc.
If-else
Esta clase de sentencia if ofrece 2 alternativas a seguir, basadas en la comprobacin de la condicin. La
palabra reservada else separa las sentencias utilizadas para ejecutar cada alternativa. La sintaxis de la
sentencia if-else es:
If (condicin) if (condicin)
sentencia1; {
else //Secuencia de sentencias1
sentencia2; }
else
{
//Secuencia de sentencias2
}
Ejercicio
import java.io.*;
public class Juego
{
public static void main (Stirng args[]);
{ InputstreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader (isr);
String cadena;
try
{
System.out.print("Introduzca un nmero entero entre 1 y 3");
cadena = br.readLine();
int n = (int)(Math.random()*3)+1;
//Math.random() devuelve un double aleatorio entre 0.0 y 1.0
int i= Integer.parseInt(cadena);
if (i == n);
System.out.println("Acert");
else
System.out.println("No acert, el nmero era "+n);
}
catch(Exception e)
System.out.println("Cualquier tipo de error");
}
}
}
Es posible que alguna de las sentencias a ejecutar especificadas en una instruccin if sea a su vez otra
sentencia if
If (condicin1)
If(condicin2
sentencia1;
else
sentencia 2;
/*la palabra reservada else se corresponde con la sentencia if ms cercana, es decir corresponde al
segundo if*/
if(condicin1)
{
if(condicin1)
sentencia1;
}
else
sentencia2;
/*a pesar de la sangra, este else corresponde al primer if*/
if(condicin1)
if (condicin2)
sentencia1;
else
sentencia2;
else
if (condicin3)
sentencia3;
else
sentencia4;
//puede existir anidacin
//en ambas ramas
If (condicin1)
sentencia1;
else
{
//secuencia de sentencias2
if(condicin2)
sentencia3;
}
/*El if o if-else anidado puede ser una ms de la secuencia de sentencias que se pueden colocar en
cualquiera de las ramas */
if (condicin1)
sentencia1;
else
if (condicin)
sentencia2;
//la anidacin en la rama else
//puede ser un if
If (condicin)
sentencia1;
else
if (condicin)
sentencia2;
else
sentencia3;
/*la anidacin en la rama else puede ser otro if-else*/
La construccin if-else-if mltiple, tambin denominada de alternativas mltiples if-else, es muy habitual
en programacin y se suele escribir de la forma siguiente:
if(condicin1)
sentencia1;
else if (condicin2)
sentencia2;
else if (condicin3)
sentencia3;
else if (conducinN)
sentenciaN;
else
sentenciaX; //opcional
La sentencia anterior realiza una serie de test en cascada hasta que se produce una de las siguientes
condiciones:
Una de las clasulas especificadas en las sentencias if se cumple; en ese caso la sentencia
asociada se ejecuta y no se tiene en cuenta el resto
Ninguna de las clusulas especificadas se cumple y entonces, si exsite, se ejecuta la ltima
sentencia else.
Ejercicio. Programa que ordena de mayor a menor tres nmeros ledos desde teclado.
import java.io.*;
String cadena;
double a, b, c;
try
System.out.print(Introduzca un nmero );
cadena = br.readLine();
cadena = br.readLine();
cadena = br.readLine();
a= d1.doubleValue();
b=d2.doubleValue();
c=c2.doubleValue();
if (a > b)
if(b>c)
System.out.println(a+ + b + +c);
else
else
else
if (a > c)
System.out.println(b+ +a +c);
else
if(c >b)
System.out.println(c++b+ +a);
else
catch(Exception e)
()
Ejercicio. Obtener las soluciones, reales e imaginarias, de una ecuacin de segundo grado.
import java.io.*;
try
System.out.print(a ? );
cadena = br.readLine();
System.out.print(b ?);
cadena = br.readLine();
System.out.print(c ?);
cadena = br.readLine();
a = d1.doubleValue();
b = d2.doubleValue();
c = d3.doubleValue();
if (a==0)
else
double d = (b*b-4*a*c);
if (d>0)
x2 = (-b-Math.sqrt(d))/(2*a);
System.out.println(x1 = +x1);
System.out.println(x2 = +x2);
}
else if (d==0)
x1=x2(-b)/(2*a);
System.out.println(x1=x2=+x1);
else
d=Math.abs(d);
catch(Exception e)
System.out.println(Exception +e);
//Exception es superclase
SENTENCIA SWITCH
Cuando se tienen muchas alternativas posibles a elegir, el uso de sentencias if-else-if puede resultar
bastante complicado, siendo en general ms adecuado en estos casos el empleo de la sentencia switch.
La sintaxis de una sentencia switch es la siguiente:
switch (expresion)
case constante1:
sentencias1;
break;
case constante2:
sentencia2;
break;
case constanteN;
sentenciasN;
break;
default
sentenciasX;
Cuando el valor de la expresin coincide con una constante de case, se ejecutan el grupo de sentencias
asociadas y si la ltima sentencia de un grupo es break, tras llegar a ella, el programa sale de la
estructura switch. Si la sentencia break se omite, la ejecucin sigue en el siguiente grupo de sentencias,
con independencia del valor de la constante case. Generalmente la palabra reservada break se omite
cuando se desea ejecutar la misma accin para dos o ms constantes de case.
La clusula default es un caso especial de case. Las sentencias que vienen a continuacin de ella se
ejecutan si ninguna de las constantes que siguen a las diferentes sentencias case coincide con el valor de
la expresin switch.
Para comprender mejor cmo utilizar la sentencia switch consideremos un programa que muestra un
men de opciones (una de sus aplicaciones ms tpicas).
import java.io.*;
try
System.out.println(MEN);
System.out.println(C.Cargar archivo);
System.in.skip(System.in.available());
switch (opcion)
case C: case c:
break;
case G: case g
break;
case I: case i:
break;
case S: case: s
break;
default;
System.out.println(Opcin no vlida);
}
catch(Exception e)
{}
Nota: En una sentencia switch no pueden aparecer constantes case iguales, pero las sentencias a
ejecutar en una sentencia switch pueden ser a su vez sentencias switch y las sentencias switch anidadas
s pueden tener constantes case iguales.
SENTENCIA FOR
El bucle for est diseado para ejecutar una secuencia de sentencias un nmero fijo de veces. La sintaxis
de la sentencia for es:
Las sentencias podrn ser cero, una nica sentencia o un bloque, y sern lo que se repita durante el
proceso del bucle.
La inicializacin fija los valores iniciales de la variable o variables de control antes de que el bucle for se
procese y ejecute solo una vez. Si se desea inicializar ms de un valor, se puede utilizar un operador
especial de los bucles for en Java, el operador, para pegar sentencias. Cuando no se tiene que inicializar,
se omite este apartado; sin embargo, nunca se debe omitir el punto y coma que acta como separador.
La condicin de terminacin se comprueba antes de cada iteracin del bucle y ste se repite mientras
que dicha condicin se evale a un valor verdadero. Si se omite no se realiza ninguna prueba y se
ejecuta siempre la sentencia for.
El incremento se ejecuta despus de que se ejecuten las sentencias y antes de que se realice la siguiente
prueba de la condicin de terminacin. Normalmente esta parte se utiliza para incrementar o
decrementar el valor de la/las variables de control y, al igual que en la inicializacin, se puede usar en
ella el operador coma para pegar sentencias. Cuando no se tienen valores a incrementar se puede
suprimir este apartado.
Nota:
Por ejemplo, para ejecutar una sentencia 10 veces se puede utilizar cualquiera de los dos siguientes
bucles for:
System.out.println(i);
//System.out.println(i);
int I;
for(i=1; i<=10;i++)
System.out.println(i);
System.out.println(i);
//i vale 11
En estos ejemplos, la sentencia for inicializa I a 1, comprueba que I es menor o igual a 10 y ejecuta la
siguiente sentencia que muestra el valor de i. A continuacin se incrementa i y se compara con 10, como
todava es menor, se repite el bucle hasta que se cumpla la condicin de terminacin (i = 11).
Si en lugar de una sola sentencia se desea ejecutar un grupo de sentencias, stas se encierran entre
llaves.
System.out.println(i);
System.out.println(i * 10 =+ i * 10);
EL siguiente bucle for, sin embargo, no ejecuta ninguna sentencia, slo la inicializacin y los sucesivos
incrementos de la variable de control hasta alcanzar la condicin de terminacin:
Los ejemplos anteriores muestran un incremento de la variable de control del bucle, con lo que la
cuenta, realmente, era siempre ascendente. Un bucle for puede tambin decrementar su variable de
control produciendo un bucle que cuente en sentido descendente.
System.out.println(i);
Nota: La variable de control de una sentencia for puede ser de cualquier topo simple.
System.out.println(i);
System.out.print(i);
La expresion de incremento de un bucle for no siempre sern sumas o restas simples. Se puede utilizar
cualquier expresin que tenga sentido en el problema que se est resolviendo. As por ejemplo, para
visualizar los valores 1,2,4,8,16,32,64,128 se puede utilizar la expresin i*2 para realizar el incremento.
System.out.println(i);
System.out.print(i+ + +j+ = );
System.out.println(i+j);
}
Cada parte del bucle for es opcional, de forma que se pueden omitir las secciones de control si ese
tratamiento es el adecuado para el problema a resolver. Por ejemplo, el siguiente bucle for incrementa
la variable de control del bucle, con independencia del mecanismo de iteracin:
int i=0;;
System.out.println(i);
Es posible poner como condicin en un bucle for cualquier expresin de tipo boolean, incluso
expresiones no relacionadas con la variable de control.
import java.io.*;
String cadena;
try
cadena = br.readLine();
int i= Integer.parseInt(cadena);
If (i % d == 0)
primo = false;
if( i == 0 || ! primo)
else
catch(Exception e)