Está en la página 1de 8

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Facultad de Ingeniería de Sistemas e informática


CURSO: Programacion Fundamnetos de Algoritmica
Prof. G. A. Salinas A.

S02 Laboratorio Estructura de Control Secuencial y Selectiva.


DURACIÓN ESTIMADA : 01:50 horas.

I. Objetivos
Analizar, diseñar soluciones algorítmicas adecuadas utilizando ls estructuras de control secuencial y
selectiva en la solución de problemas siguiente las etapas del análisis y diseno.
II. Actividades
• Analice las soluciones desarrolladas identificando el conjunto de datos entrada, salida y procesos
seguidos para la solución.
• Analice y diseñe a partir del enunciado de los problemas identificando el conjunto de datos de
entrada y salida.
• Implemente el algoritmo que resuelva el problema identificando los datos de entrada, de
procesamiento y de salida.

Proceso de solución de problemas:

Problema Analisis del Diseno del Implementacion


del algoritmo
Programa
Problema algoritmo

Algoritmo.
Todo algorimo tiene al menos una salida de datos

Entrada de Proceso de Salida de


datos Datos datos

No Si
Programa
Ok

Análisis y diseño
Después de entender bien el problema debemos hacer un diseno de caja negra que consiste en determinar
el que y no el como del algoritmo. Mas adelante especificaremos la entrada y salida de datos.

Datos de Algoritmo Datos de


entrada solucion salida

1
Tomado de [ Solano et al: 2018]
Dentro del ciclo de vida del software, en el análisis se busca comprender la necesidad, es decir, entender
el problema.

El análisis es el proceso para averiguar qué es lo que requiere el usuario del sistema de software o
programa (análisis de requisitos). Esta etapa permite definir las necesidades de forma clara y concisa
(especificación de requisitos).

Por lo tanto, la etapa del análisis consiste en conocer qué es lo que está solicitando el usuario. Para ello es
importante identificar dos grandes conjuntos dentro del sistema: el conjunto de entrada y el conjunto de
salida de datos.
El conjunto de entrada de datos está compuesto por todos aquellos datos que pueden alimentar al
sistema.
El conjunto de salida de datos está compuesto por todos los datos que el sistema devolvera como
resultado del proceso. Estos datos se obtienen a partir de los datos de entrada.
La unión del conjunto de entrada y el conjunto de salida forman lo que se conoce como el dominio del
problema, es decir, los valores que el problema puede manejar.

La etapa de análisis es crucial para la creación de un software de calidad, ya que si no se entiende qué es
lo que se desea realizar, no se puede generar una solución. Sin embargo, es común caer en ambigüedades
debido al mal entendimiento de los requerimientos iniciales.

Algoritmos
Una vez realizado el análisis, es decir, ya que se entendió qué es lo que está solicitando el usuario y ya
identificado el conjunto de datos de entrada y el conjunto de datos de salida, se puede proceder al diseño
de la solución, esto es, a la implementación o generación del algoritmo.
Dentro del ciclo de vida del software, la creación de un algoritmo se encuentra en la etapa de diseño.
Durante el diseño se busca proponer una o varias alternativas viables para dar solución al problema y con
base en esto tomar la mejor decisión para iniciar la construcción.
Un problema matemático es computable si éste puede ser resuelto, en principio, por un dispositivo
computacional.

La teoría de la computabilidad es la parte de la computación que estudia los problemas de decisión que
pueden ser resueltos con un algoritmo.
Un algoritmo se define como un conjunto de reglas, expresadas en un lenguaje específico, para realizar
alguna tarea en general, es decir, un conjunto de pasos, procedimientos o acciones que permiten alcanzar
un resultado o resolver un problema. Estas reglas o pasos pueden ser aplicados un número ilimitado de
veces sobre una situación particular.
Un algoritmo es la parte más importante y durable de las ciencias de la computación debido a que éste
puede ser creado de manera independiente tanto del lenguaje como de las características físicas del equipo
que lo va a ejecutar.

Las principales características con las que debe cumplir un algoritmo son:
• Preciso: Debe indicar el orden de realización de paso y no puede tener ambigüedad
• Definido: Si se sigue dos veces o más se obtiene el mismo resultado.
• Finito: Tiene fin, es decir tiene un número determinado de pasos.
• Correcto: Cumplir con el objetivo.
• Debe tener al menos una salida y esta debe de ser perceptible
• Debe ser sencillo y legible
• Eficiente: Realizarlo en el menor tiempo posible
• Eficaz: Que produzca el efecto esperado

Por tanto, un buen algoritmo debe ser correcto (cumplir con el objetivo) y eficiente (realizarlo en el
menor tiempo posible), además de ser entendible para cualquier persona.
Las actividades a realizar en la elaboración de un algoritmo para obtener una solución a un problema de
forma correcta y eficiente se muestran en la figura 2:

2
Resultados del análisis del problema
•Con qué datos se cuenta, cuáles son necesarios como valores de entrada, qué restriciones deben
considerarse, cómo debe ser la salida para que el problema se resuelva.

Contrucción del algoritmo


•Se refiere a la descripcion detallada de los pasos que deben seguirse para resolver el problema.

Verificaión del algoritmo


•Consiste en el seguimento del mismo, empleando datos que son representativos del problerma que se
desea resolver (esto se conoce como prueba de escritorio).

El algoritmo consta de módulos básicos:


Módulo de Entrada
•Representa los datos que requieren para resolver el problema. Estos datos se pueden solicitar al
usuario, leer de un archivo, consultar de una base de datos, etc.

Módulo de Procesamiento
•Representa las operaciones necesarias para obtener un resultado a partir de los datos de entrada.

Módulo de Salida
•Permite mostrar los resultados obtenidos a partir del módulo de procesamiento de datos. Los
resultados pueden mostrarse en diversos sitios: en la pantalla, en un archivo, en una base de datos, etc.

Prueba de escritorio
El diseño de la solución de un problema implica la creación del algoritmo y la validación del mismo. La
validación se suele realizar mediante una prueba de escritorio.
Una prueba de escritorio es una matriz formada por los valores que van adquiriendo cada una de las
variables del programa en cada iteración. Una iteración es el número de veces que se ejecuta un código y
permite ver los valores que van adquiriendo las variables en cada repetición.
Para el ejemplo en cuestión la prueba de escritorio quedaría de la siguiente manera (considerando a X
como el número solicitado):

E.C.S. SIMPLE: E.C.S. SIMPLE:


SI (Condicion) if (Condicion) {
//Instrucciones //Instrucciones
no si
FIN_SI }
condicion
E.C.S. SIMPLE: E.C.S. SIMPLE:
SI (Condicion) if (Condicion) {
//Instrucciones //Instrucciones instrucciones instrucciones
SINO }
//Instruccion else {
FIN_SI //Instruccion
}

3
E.C.S. MULTIPLE: E.C.S. MULTIPLE:
SIM (Condicion) switch (Condicion) {
1: //instrucciones case 1: condicion
2. //Instrucciones //Instrucciones
… break; 1 2 n sino
n: //instrucciones case 2:
SINO …
instruccion instruccion instruccion instruccion
//instrucciones case n:
FIN_SIM //Instrucciones
break;
default:
//Instrucciones
}

Ejemplos
Analizar los ejercicios resueltos para su comprensión, además muchos de los ejercicios no cumplen con la
buenas practicas indentado inadecuado, nombre de variables en mayúsculas lo cual usted debe reescribir
correctamente.

1. Dado el tiempo en segundo convertir a horas, y seguros.


ACCION principal ( ) int main()
ENTERO cs, h, m. s {
LEER (cs) int cs, h, m, s;
h  cs/3600 scanf("%d", &cs);
m  (cs MOD 3600)/60 h=(cs/3600);
s  (cs MOD3600) MOD 60 m=(cs % 3600)/60;
ESCRIBIR( “Hora: ”, h) s=(cs % 3600) % 60;
ESCRIBIR(“Minutos: ”, m) printf("Horas : %d\n", h);
ESCRIBIR(“Segundos: ”, s) printf("Minutos : %d\n", m);
FIN_ACCION printf("Segundos: %d\n", s);

system("pause");
return(0);
}

2. Hallar el área de un triángulo rectángulo.

ACCION principal ( ) int main()


REAL b, h, at {
LEER (b) float b, h, at;
LEER (h) scanf("%f", &b);
scanf("%f", &h);
at  b*h/2
at=(b*h)/2;
ESCRIBIR (“Area: ”, at)
printf("Area: %6.1f\n", at);
FIN_ACCION
system("pause");
return(0);
}

4
3. Un obrero necesita calcular su salario semanal ordinario y extraordinario el cual se obtiene de la
siguiente manera; si trabaja 40 horas o menos se le paga S/.16 por hora, si trabaja mas de 40 horas se
le abona S/.20 por cada hora extra adicional.

int main ( ){//Salario


ACCION Salario ( ) float ht, he, ss;
REAL he, ht, ss, scanf(“%f”, &ht);
LEER (ht) if(ht > 40) {
SI(ht> 40) he = ht – 40;
he  ht - 40 ss = he * 20 + 40 * 16;
ss  he * 20 + 40 * 16 }
SINO else{
ss  ht * 16 ss = ht * 16;
FIN_SI }
ESCRIBIR( ss) printf(“Salario total : %10.2f”, ss);
FIN_ACCION system(“pause”);
return(0);
}

4. Determinar la cantidad de dinero que recibirá un trabajador por concepto de horas extras trabajadas en
una empresa, sabiendo que horas extras es lo que excede a 40 horas. Por las primeras 8 horas se
abonaran el doble de la tarifa normal y el resto horas el triple. Modifique el siguiente algoritmo para
informar detalladamente, pago por horas normales, horas extras de tarifa doble y tarifa triple.

ACCION Sueldo () Pago normal


LEER( ht, pph)
ht
ppt Horas Extras
SI (ht < = 40)
TOTAL
tp  ht * pph
SINO ppt
he  ht - 40
SI (he < = 8)
pe  he * pph * 2
SINO
pd  8 * pph * 2
pt  (he - 8) * pph * 3
pe  pd + pt
FIN_SI
tp  40 * pph + pe
FIN_SI
ESCRIBIR( tp)// Mejore esta salida
FIN_ACCION

5. Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si a este se le asigna
como un porcentaje de su sueldo mensual que depende de su antigüedad en la empresa de acuerdo
con la siguiente tabla:

Tiempo (Años) Utilidad (% Sueldo) Categoria


Menor a un 1 5 A
<1a2] 7 B
< 2 a 5] 10 C
< 5 a 10] 15 D
< 10 o mas] 20 E

5
ACCION Utilidad ()
LEER (sm, antig)
SI (antig < 1 )
util  sm * 0.05
SINO
SI ((antig > = 1) Y (antig < 2) )
util  sm * 0.07
SINO
SI ((antig > = 2) Y (antig < 5) )
util  sm * 0.10
SINO
SI ((antig > = 5) Y (antig < 10))
util  sm * 0.15
SINO
util  sm * 0.20
FIN_SI
FIN_SI
FIN_SI
FIN_SI
ESCRIBIR( util)
FIN_ACCION

6. Dado un número entero, determinar si es positivo o negativo.

ACCION positivoNegtivo ( )
ENTERO n
LEER(n)
SI(n >= 0)
ESCRIBIR(n,” es positivo”)
SINO
ESCRIBIR(n,” es positivo”)
SIN_SI
FIN_ACCION

7. Dado el sualdo de un trabajador, determinar el nuevo sueldo para cada de los trabajadores según la
siguiente tabla utilizando Si Y SI Múltiple.
TIPO SUELDO % AUMENTO
A 500-1000 20
B 1001-2000 15
C 2001-3000 10
D 3001- ++ 5

6
int main(){ int main(){
float S=0.0, A=0.0, Ns=0.0; char Tipo;
printf("Ingrese sueldo de trabajador---> "); float S=0.0, A=0.0, Ns=0.0;
scanf("%f", &S); printf("Ingrese sueldo de trabajador---> ");
if(S>500 && S<=1000){ scanf("%f", &S);
A = 0.20*S; printf("Ingrese el Tipo de trabajador ---> ");
Ns = S + A; //scanf("%c", &Tipo);
} cin >>Tipo;
if(S>1000 && S<=2000){ switch(Tipo){
A = 0.15*S; case 'A' : A = 0.20*S;
Ns = S + A; Ns= S + A;
} break;
if(S>2000 && S<=3000){ case 'B' : A = 0.15*S;
A = 0.10*S; Ns= S + A;
Ns = S + A; break;
} case 'C' : A = 0.10*S;
if(S>3000) { Ns= S + A;
A = 0.05*S; break;
Ns = S + A; case 'D' : A = 0.05*S;
} Ns= S + A;
printf("\nSueldo :%10.2f\n", S); break;
printf("Aumento :%10.2f\n", A); default: printf("ERROR de tipo\n");
printf("Nuevo Sueldo :%10.2f\n\n", Ns); }
system("PAUSE"); printf("Sueldo :%10.2f\n", S);
return 0; printf("Aumento :%10.2f\n", A);
} printf("Nuevo Sueldo :%10.2f\n\n", Ns);
system("PAUSE");
return 0;
}

8. Resuelva la siguiente solución, utilizando SI-ENONCES-SINO. Que problemas tiene la solución


planteada?
ACCION calificación ( )
REAL nota
LEER (nota)
SI (nota> 0.0 Y nota <=10.0)
ESCRIBIR(“Desaprobado…”)
FIN_SI
SI (nota>=11.0 Y nota <=12.0)
ESCRIBIR(“Aprobado …”)
FIN_SI
SI (nota>12.0 Y nota <=14.0)
ESCRIBIR(“Bueno …”)
FIN_SI
SI (nota>14.0 Y nota <=17.0)
ESCRIBIR(“Muy Bueno …”)
FIN_SI
SI (nota>=17.0 Y nota <=20.0)
ESCRIBIR(“Excelente …”)
FIN_SI

FIN_ACCION

El Operador condicional ?: (Abreviación de la instrucción IF)

7
Por ser breve, permite incluir una condición dentro de una expresión.

FORMATO: condicion ? expresion1: expresion2

Es equivalente a:

SI(Condicion)
Expresion1
ELSE
Expresion2
FIN_SI
Ejemplo:
Max = (n1>n2) ? n1:n2

Ejercicios.

9. Construya los algoritmos para: a) determinar el mayor de tres números, b) determinar el primero y
segundo mayor de 3 números.

10. Una ferretería ofrece clavos con descuentos según la siguiente tabla. El programa debe informar los
descuentos en cada tramo.

Clavos (kilos) Descuento (% )


Menor a un 2 0
< 2.01 a 5.00 ] 10
< 5.01 a 10.00] 15
< 10.01 a 20.00] 20
< 20.01 a mas] 25

11. Dados a, b, c de tipo entero diferentes, implemente un programa para ordenarlos en forma descendente
utilizando estructuras de control selectivas if.
12. Dadas las coordenadas de los punto p1, p2 y p3 que corresponden a los vértices de un triangulo,
determinar el área y el perímetro del triángulo si este existe. Además informar si el triángulo
equilátero, isósceles o escaleno.

Referencias
Solano J., Garcia E., Sandoval L., Nkayama A., Artega T., y Castaneda M. (2018) Manul de practicas de
laboratorio de Fundamentos de Programacion. Departamento de Labporatorio de Computación. Facultad
de Ingenieria. UNAM: Mexico

También podría gustarte