Professional Documents
Culture Documents
y doble
Programacin 1
Ctedra de Programacin
Departamento de Computacin
Escuela de Ingeniera de Sistemas
Estructuras no secuenciales
z Los programas que hemos escrito hasta ahora han
consistido en una serie de sentencias que se ejecutan
secuencialmente, una despus de la otra (asignacin,
lectura y escritura).
z Flujo de control: Habilidad de definir el orden en el
cual las sentencias de un programa son ejecutadas
Marzo 2004
Estructuras de decisin
z Permite seleccionar la prxima sentencia a ejecutarse
basndose en una condicin (expresin lgica o una
variable lgica) que es evaluada y, en funcin del
resultado (cierto o falso) de la evaluacin, se bifurcar
a un determinado punto para continuar la ejecucin del
programa
z Tipos:
{Simple
{Doble
{Mltiple
Marzo 2004
condicin
cierto
acciones
Marzo 2004
falso
z Pseudocdigo en espaol
Si (<condicin>) entonces
S1
.
Sn
fsi
z Cdigo en C/C++
if (<condicin>)
{
S1
.
Sn
}
Departamento de Computacin. Ctedra de Programacin.
Programacin 1.
Marzo 2004
Cdigo en C/C++
Marzo 2004
Cdigo en C/C++
if( nota > 15 )
{ conta++;
cout << Eximido << endl;
};
if( x >= 0.0 )
{ y += x;
cont++;
};
Ejemplo 1
#include <iostream.h>
#define falso 0
#define cierto 1
void main ()
{
int miPrimeraLogica, miSegundaLogica;
miPrimeraLogica = cierto;
miSegundaLogica = !miPrimeraLogica;
if ( miSegundaLogica == cierto)
cout << "miSegundaLogica debe tener el valor cierto" << endl;
if ( !miSegundaLogica == cierto)
cout << "miSegundaLogica debe tener el valor falso" << endl;
}
Marzo 2004
Ejemplo 2
Dados tres nmeros enteros, determinar si la suma de cualquier
pareja de ellos es igual al tercer nmero. Si se cumple esta
condicin, escribir Iguales y, en caso contrario, escribir
Distintos.
Anlisis E-P-S
Entradas: A, B, C Z
Proceso:
- Determinar si A + B = C
Iguales
- Determinar si A + C = B
Iguales
- Determinar si B + C = A
Iguales
- Si no se cumple ninguno de los anteriores Distintos
Salida: Mensaje indicando si la suma de dos nmeros es
igual Iguales o diferente Distintos a un tercero.
Marzo 2004
{pre: ninguna}
1
2
3
4
5
6
1
2
A = 0, B = 0, C = 0 -> Iguales
A = 4, B = 3, C = 8 -> Distintos
Caso exitoso
Caso exitoso
Marzo 2004
10
11
Anidamiento de estructuras de
decisin
z Se anidan colocando una en el interior de la otra
Diseo
Cdigo en C/C++
12
Ejemplo de anidamiento
Diseo
Cdigo en C/C++
Marzo 2004
13
Ejemplo de anidamiento
Diseo
Cdigo en C/C++
Marzo 2004
14
Ejemplo de anidamiento
Diseo
Cdigo en C/C++
Marzo 2004
15
Ejercicios
1. Si x = 15 determinar su valor despus de la ejecucin
del siguiente segmento de programa en C++:
if( x > 0 )
x+=32;
16
Ejercicios
3. Si z = 6.7 determinar el valor de la variable conta despus
de la ejecucin del siguiente segmento de programa en
C++:
conta = 0;
neg = 0;
if (z < 0.0)
{
neg = neg + z;
conta = neg + 1;
conta = 0
}
neg = 0
(6.7 < 0.0) falso
conta = 0
Marzo 2004
17
Ejercicios
4.
Marzo 2004
18
Ejercicios
precioPasajeAvion
{pos: precio +}
{pre: ninguna}
1
2
3
Caso exitoso
Caso exitoso
Caso exitoso
1
2
3
4
5
6
7
8
Marzo 2004
19
condicin
acciones
Marzo 2004
falso
acciones
20
Marzo 2004
Cdigo en C/C++
if (<condicin>)
{
S11
.
S1n
}
else
{
S21
.
S2m
}
21
Marzo 2004
22
Cdigo en C/C++
if ( nota >= 10 )
{ notaMas+=nota;
cout << Aprobado\n
}
else cout << Reprobado\n;
Marzo 2004
23
Cdigo en C/C++
if ( nota >= 10 )
{ aprobado++;
cout << Aprobado\n;
}
else
{ reprobado++;
cout << Reprobado\n;
};
Marzo 2004
24
Ejemplo 3
#include <iostream.h>
void main ( )
{
int miEntero;
cout << Introduzca un numero entero << endl;
cin >> miEntero;
if ( miEntero == 0 )
cout << "miEntero es igual a cero << endl;
else
cout << "miEntero no es igual a cero << endl;
cout << termino el programa << endl;
}
Marzo 2004
25
Ejemplo 4
#include <iostream.h>
void main ()
{
int m;
cout << Introduzca un numero entero << endl;
cin >> m;
if ( (m >= 1) && (m <= 10) )
cout << m << esta entre 1 y 10" << endl;
else
cout << m << no esta entre 1 y 10" << endl;
}
Marzo 2004
26
Ejemplo 5
Calcular el salario mensual de un empleado, sabiendo que ste se
calcula en base a las horas semanales trabajadas y de acuerdo a un
precio especificado por hora. Si se pasa de las 40 horas
semanales, las horas extras se pagarn a razn de 1,5 veces la
hora ordinaria.
Anlisis E-P-S
Entradas: Horas semanales trabajadas (HST + )
Precio por hora (PH + )
Proceso: - Si horas semanales trabajadas (HST) <= 40
Calcular salario mensual (SM) = HST * PH
- Si horas semanales trabajadas (HST) > 40
Calcular salario mensual
(SM) = 40 * PH + PH*1,5*(HST-40)
Salida: salario mensual (SM + )
Marzo 2004
27
Diseo ejemplo 5
salarioMensual
{pre: ninguna}
1
2
3
4
5
{pos: SM + }
-HST: Real+. Horas
semanales trabajadas.
-PH: Real+. Precio por
horas.
-SM: Real+. Sueldo
mensual.
1
2
3
Caso exitoso
Caso exitoso
Caso exitoso
Marzo 2004
28
Ejemplo 6
Escriba un programa que lea un nmero entero y compruebe
si es correcto. En caso de que sea correcto, el programa
imprimir el mensaje CORRECTO, si no es correcto, el
programa imprimir el mensaje "ERROR - nmero
incorrecto". Considere los siguientes casos para decidir si un
nmero es o no correcto:
a) El nmero es correcto si se encuentra en el rango
definido por dos valores constantes MINIMO y MAXIMO.
(MINIMO < num < MAXIMO)
b) El nmero es correcto si es uno de los tres valores
constantes VALOR1, VALOR2 o VALOR3.
(num = VALOR1 o num = VALOR2 o num = VALOR3)
Marzo 2004
29
Continuacin ejemplo 6
c) El nmero es correcto si se encuentra en el
rango definido por dos valores constantes MINIMO
y MAXIMO, o bien es igual al valor constante
VALOR1.
Marzo 2004
30
Anlisis ejemplo 6
Anlisis E-P-S
Entradas: numero entero (num Z)
Proceso:
- Si (MINIMO < num < MAXIMO) o
(num = VALOR1 o num = VALOR2 o num = VALOR3) o
(MINIMO < num < MAXIMO o num = VALOR1) o
(MINIMO1 < num < MAXIMO1 o
MINIMO2 < num < MAXIMO2 ) el nmero es correcto
si el nmero no cumple ninguna de estas condiciones es
incorrecto
31
Diseo ejemplo 6
numeroCorrecto
{pre: ninguna}
{pos: ninguna }
1
2
3
-num: Entero.
Numero a verificar
su correctitud.
1
2
Caso exitoso
Caso exitoso
Marzo 2004
32
Codificacin ejemplo 6
#include <iostream.h>
#define MINIMO
#define MAXIMO
#define VALOR1
#define VALOR2
#define VALOR3
#define MINIMO1
#define MAXIMO1
#define MINIMO2
#define MAXIMO2
Marzo 2004
4
65
3
12
23
34
128
43
45
Los valores
constantes se
definen al inicio del
programa
33
Codificacin ejemplo 6
void main ()
{
int num;
cout << Introduzca el numero << endl;
cin >> num;
if ((num >= MINIMO && num < = MAXIMO) ||
(num == VALOR1 || num == VALOR2 || num == VALOR3) ||
(num >= MINIMO && num < = MAXIMO || num ==
VALOR1) || (num >= MINIMO1 && num < = MAXIMO1 ||
num >= MINIMO2 && num < = MAXIMO2))
cout << CORRECTO << endl;
else
cout << ERROR - numero incorrecto << endl;
}
Marzo 2004
34
Marzo 2004
If (<condicin1>)
{
sentencias1
}
else if(<condicin2>)
{ sentencias2
}
else if(<condicin3>)
{
sentencias3
}
Codificacin en C/C++
35
Ejemplo 7
#include <iostream.h>
void main ()
{
int a1;
cout << Introduzca un valor entero << endl;
cin >> a1;
if ( a1 >= 0 )
if ( a1 <= 10 )
cout << el numero esta entre 0 y 10 << endl;
else
cout << el numero no esta entre 0 y 10 << endl;
}
Marzo 2004
36
Ejemplo 8
#include <iostream.h>
void main ()
{
int a1;
cout << Introduzca un valor entero << endl;
cin >> a1;
if ( a1 >= 0 )
{
if ( a1 <= 10 )
cout el numero esta entre 0 y 10 << endl;
a1++;
}
else
cout << el numero es negativo << endl;
}
Marzo 2004
37
Ejemplo 9
z Dados tres nmero enteros, decidir cual es el central
Anlisis E-P-S
Entradas: A, B, C Z
Proceso: - Determinar si A es central o B es central o C es central
C
B
A
A > B > C B es central
B
C
A
A > C > B C es central
B > A > C A es central
B
C
A
B > C > A C es central
B
C
A
C > A > B A es central
B
C
A
C > B > A B es central
A
A = B = C No hay central
A = B A = C B = A No hay central
Salida: valor central, si lo hay
Marzo 2004
38
Diseo ejemplo 9
{pre: ninguna}
numeroCentral
{pos: ninguna }
1
2
3
1
2
3
4
Caso exitoso
Caso exitoso
Caso exitoso
Caso exitoso
Marzo 2004
39
Codificacin ejemplo 9
#include <iostream.h>
else if (A > C)
central = A;
else if (C > B)
central = B;
else
central = C;
cout << el nmero central es =
<< central << endl;
}
void main ()
{
int A, B, C, central;
cout << Introduzca tres nmeros enteros
<< endl;
cin >> A >> B >> C;
if((A == B) && (A == C) && (B == C))
cout << No hay central, los tres valores
son iguales\n;
else if((A == B) || (A == C) || (B == C))
cout << No hay central, hay dos
valores iguales\n;
else
{ if (A > B)
if (B > C)
central = B;
else if (A > C)
central = C;
else
central = A;
Marzo 2004
40
Ejercicios
Realice el anlisis E-P-S, algoritmo y codificacin para
cada uno de los siguientes problemas:
1.
2.
Marzo 2004
41
Ejercicios
3.
Marzo 2004
42
Ejercicios
4. Leer un caracter y deducir si est o no
comprendido entre las letras I y M ambas
inclusive.
5. Emitir la factura correspondiente a una compra de
un artculo determinado del que se adquieren una
o varias unidades. El IVA a aplicar es del 12% y
si el precio bruto (precio de venta + IVA) es
mayor de 50.000 Bs., se aplicar un descuento del
5%.
6. Leer las coordenadas cartesianas (x, y) de un
punto del plano y calcular e imprimir el cuadrante
al cual pertenece el punto (I, II, III, IV).
Marzo 2004
43
Ejercicios
7.
Marzo 2004
44
Ejercicios
8.
9.
Marzo 2004
45
Ejercicios
10. Resolver una ecuacin de primer grado. Si la ecuacin es
ax + b = 0, las posibles soluciones son:
{ a 0 entonces x = -b/a
{ a = 0 y b 0 entonces la solucin es imposible
{ a = 0 y b = 0 entonces la solucin es
indeterminada
46