Algoritmia - cap5-1

39
ALGORITMIA Y C++ ALGORITMIA C++ Págin a 1

Transcript of Algoritmia - cap5-1

Page 1: Algoritmia - cap5-1

ALGORITMIA Y C++

ALGORITMIA

C++

Página 1

Page 2: Algoritmia - cap5-1

ALGORITMIA Y C++

CAPÍTULO 1: CONCEPTOS BÁSICOS DE ALGORITMIA

1.1 AlgoritmoUn algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solución de un problema. En la vida cotidiana ejecutamos constantemente algoritmos. Por ejemplo, al instalar un equipo de sonido ejecutamos las instrucciones contenidas en el manual del equipo, este conjunto de instrucciones constituyen un algoritmo. Otro caso de algoritmo es el algoritmo matemático de Euclides para la obtención del máximo común divisor de dos números.

Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en caso contrario, se dice que es un algoritmo no computacional. Según esto, el algoritmo de Euclides es un algoritmo computacional; pero el algoritmo para instalar el equipo de sonido es un algoritmo no computacional. Para que un algoritmo pueda ser ejecutado por una computadora se necesita expresar el algoritmo en instrucciones comprensibles por la computadora, para esto se requiere de un determinado lenguaje de programación. Al algoritmo expresado en un determinado lenguaje de programación, se denomina programa. Puesto de otra manera, podemos decir que, un programa es la implementación o expresión de un algoritmo en un determinado lenguaje de programación siguiendo las reglas establecidas por el lenguaje elegido. En la Figura 1.1 que sigue se muestra la relación entre problema, algoritmo y programa.

Figura 1.1 Problema, algoritmo y programa

Todo algoritmo debe tener las siguientes características:

• Debe ser preciso, es decir, cada instrucción debe indicar de forma inequívoca que se tiene que hacer.

• Debe ser finito, es decir, debe tener un número limitado de pasos.

• Debe ser definido, es decir, debe producir los mismos resultados para las mismas condiciones de entrada.

Todo algoritmo puede ser descompuesto en tres partes:

• Entrada de datos.

• Proceso.

• Salida de resultados.

Ejemplo 1.1:- Algoritmo para preparar ceviche de bonito para 6 personas.

Entradas:

- 1 kilo de bonito - 3 camotes sancochados - 3 cebollas cortadas a lo largo - 1 rocoto en rodajas - 3 ramas de apio picado - 2 ramitas de culantro picado - 4 vasos de jugo de limón - 4 cucharadas de ajo molido - 2 cucharadas de ají amarillo molido - sal y pimienta

Proceso:

- Cortar la carne de pescado en pequeños trozos.

Página 2

Page 3: Algoritmia - cap5-1

PROGRAMA

ALGORITMIA Y C++

- Mezclar la carne con el jugo de limón, el ajo, la pimienta, el culantro, el ají amarillo y el apio.

- Dejar reposar 30 minutos. - Agregar sal al gusto y echar las cebollas cortadas. - Servir acompañando el cebiche con el camote sancochado

y el rocoto en rodajas

Salida:

-.El ceviche

Evidentemente este es un algoritmo no computacional, no podrá ser ejecutado por una computadora, pero sí por una persona. Por si acaso el ceviche es peruano.

Ejemplo 1.2:- Algoritmo para expresar en centímetros y pulgadas una cantidad dada en metros.

Entrada: La cantidad M de metros

Proceso: Cálculo de centímetros : C = M*100 Cálculo de pulgadas : P = C/2.54

Salida: La cantidad C de centímetros y la cantidad P de pulgadas

Este es un algoritmo computacional escrito en lenguaje natural, puede ser convertido en un programa de computadora, pero también puede ser ejecutado manualmente por una persona.

1.2 Desarrollo de un algoritmoEl desarrollo de un algoritmo y el programa de computadora es parte creativa del especialista pero se recomienda tener en cuenta ciertas fases para alcanzar el éxito al final de cada producto, estas fases son las siguientes:

1. Análisis.2. Creación de Algoritmo.3. Codificación del Programa

Describiremos cada uno de los pasos:

1. AnálisisEl análisis nos permite conocer el problema o caso de estudio, de esta forma podemos saber que debemos conseguir con el desarrollo del algoritmo.

Ya sabemos que el algoritmo tiene tres partes (entrada, proceso y salida), por los tanto debemos realizar tres preguntas básicas:

1. ¿Qué resultados necesitas obtener?

3. ¿Qué procesos se realizan para obtener el resultado?

Después de estas preguntas debemos organizar los pasos que debemos realizar para llevar a cabo el algoritmo.

Página 3

123

Page 4: Algoritmia - cap5-1

ALGORITMIA Y C++

Ejemplo de Análisis para calcular el área del cuadrado

¿Qué resultado necesitas obtener?

El área del cuadrado Área

¿Qué datos necesitamos para obtener el área? El valor del Lado del cuadrado Lado

¿Qué procesos se realizan para obtener el área del cuadrado?Multiplicar el lado del cuadrado Área = Lado * Lado

Entonces según las partes de un algoritmo tenemos:

Entreda:El valor del lado del cuadrado

Proceso:Calcular el área: área = lado * lado

Salida:El área

1. Creación de AlgoritmoPara la creación del algoritmo se tienen varias herramientas: Pseudocódigo, Diagramas de flujo y Diagramas NS.

• Diagramas de FlujoUn Diagrama de Flujo representa la esquematización gráfica de un algoritmo, el cual muestra gráficamente los pasos o procesos a seguir para alcanzar la solución de un problema. Su correcta construcción es sumamente importante porque, a partir del mismo se escribe un programa en algún Lenguaje de Programación. Si el Diagrama de Flujo está completo y correcto, el paso del mismo a un Lenguaje de Programación es relativamente simple y directo

Cuadro 1.0 Símbolos de Diagramas de Flujo

SÍMBOLO SIGNIFICADO

Página 4

Page 5: Algoritmia - cap5-1

ALGORITMIA Y C++

Indica el inicio y final de un diagrama de flujo

Indica Entrada o Salida de datos o mensajes

Representan los procesos, operaciones aritméticas y asignación de valores.

Representan las Decisión o comparaciones de datos usando operadores de relación y lógicos.

Decisión múltiple (también es con operaciones lógicas o de comparación, solo sigue uno pero de varios caminos)

Indica el sentido de ejecución del diagrama de flujo

Indica una llamada a una subrutina (es un subprograma que realiza un determinado proceso y retorna luego al programa principal).

Página 5

SI

NO

Page 6: Algoritmia - cap5-1

Leer LadoÁrea = Lado * Lado N2

Imprimir ÁreaFIN

ALGORITMIA Y C++

Cuadro 2.0 Diagrama para calcular el área del cuadrado

• El PseudocódigoEl pseudocódigo es un lenguaje de pseudoprogramación utilizado para escribir algoritmos computacionales. Como lenguaje de pseudoprogramación, el pseudocódigo es una imitación de uno o más lenguajes de programación. De esta manera podemos encontrar pseudocódigos orientados a lenguajes de programación como Pascal, Java, C, C++, etc. En el caso de este curso orientaremos los pseudocódigos a los lenguajes Java, C y C++. El objetivo del pseudocódigo es permitir que el programador se centre en los aspectos lógicos de la solución, evitando las reglas de sintaxis de los lenguajes de programación. No siendo el pseudocódigo un lenguaje formal, los pseudocódigos varían de un programador a otro, es decir, no hay un pseudocódigo estándar.

Ejemplo de Pseudocódigo: Programa para calcular el área del cuadrado

Real ladoReal áreaInicio Visualizar "Introduce el lado del cuadrado" Leer lado Área = lado * lado Visualizar "El área del cuadrado es", área Fin

1. Codificación del ProgramaPara que un algoritmo pueda ser ejecutado por un ordenador debemos usar un lenguaje de programación donde escribiremos el algoritmo con instrucciones que pueda interpretar la computadora.

Existen diversos lenguajes de Programación pero el que usaremos es el lenguaje de programación C++.

Cuando se ha terminado el programa se debe EJECUTAR y verificar los errores y depurar según los datos ingresados.

Página 6

INICIO

Page 7: Algoritmia - cap5-1

ALGORITMIA Y C++

Imagen 1.0 Ejemplo de Programa en C++ para la suma de dos números

• EJECUTAR EL PROGRAMA

Para ejecutar el programa debemos presionar Ctrl + F9, en la imagen 02 nos muestra el mensaje para ingresar el valor del lado del cuadrado, después de ingresar presionamos ENTER y se muestra el resultado que vemos en la imagen 03.

Imagen 02 Ingresar el valor del lado del cuadrado

Imagen 03 Mostrar el resultado

• ESTRUCTURA DE UN PROGRAMA EN C++

El lenguaje de programación C++ como todo lenguaje tiene su propia sintaxis y estructura que es lo que debemos respetar para que el computador pueda entender lo que debe realizar.

Cuadro 02 Estructura de un programa en C++

Página 7

Page 8: Algoritmia - cap5-1

ALGORITMIA Y C++

• LIBRERÍAS INCLUIDASIniciaremos con describir las Cabeceras (#include <libreria.h>).- Las cabeceras son indispensables para programar en C++ ya que en ellas se encuentran todas las funciones de Entrada y Salida, Procesamiento de datos, como cadenas, etc. Sin dichos includes nuestro programa no funcionará.

Tabla 1.0 ALGUNAS DE LAS LIBRERÍAS Y FUNCIONES MÁS UTILIZADAS

LIBRERÍA DESCRIPCIÒN FUNCIONES

#include <conio.h>

Contiene funciones de E/S de cadenas, funciones de teclado, posición de pantalla, etc.

cprintf(), cscanf(), cgets(), cputs(), clrscr(), getch(),gotoxy(), gettext(), wherex(), wherey(), etc.

#include <iostream.h>Contiene las declaraciones de C++ cono E/S, clases, también utiliza plantillas, etc.

cin, cout, class, Template

#include <math.h>Contiene todas las funciones matemáticas como: raíz, coseno, seno , tangente, etc.

sqrt, acos, asin, cos, sin, log10, sqr,etc.

#include <dos.h>Contiene funciones, que nos permiten trabajar los discos, escribir en ellos, mostrar parámetros de la BIOS

int86, _int86, delay, abswrite, bdos, etc....

• void main()Un programa en C++, puede estar compuesto por varios sub programas (tema de próximos capitulos) y todos están controlados por un programa principal, entonces main() es el programa principal.

Página 8

CABECERA

void main()

{Instrucción 1;Instrucción 2;Instrucción 3;…;

}

}

#include <iostream.h>CUERPO

CUERPO

Page 9: Algoritmia - cap5-1

ALGORITMIA Y C++

Cada programa puede devolver un valor mediante el nombre en este caso por medio de main(), entonces void indica que no espera ningún valor de retorno.

• {}.-LLAVESEl código que escribiremos en el procedimiento va encerrado entre llaves "{ }", que significan inicio "{" y final "}", esto también se utilizan en las condiciones selectivas, bucles, etc.

• ;(Punto y coma)Cada instrucción en el programa escrito en C++ en punto y coma(;), es de esta forma como la computadora interpretará cada uno de los pasos de un programa.

1.3 DatosSe denominan datos a todo aquello que llega nuestro cerebro por medio de nuestros sentidos, en una computadora podemos distinguir los siguientes tipos de datos.

• NUMÉRICOSDatos de números enteros: 12, 20300, 15, etc.Datos de números reales: 3.1416, 2345.456, etc.

• CADENAS Y CARACTERDatos de tipo carácter: 'a', 'B', ';', '<', '+', etc.Datos de tipo cadena: "Hola", "Algoritmos Computacionales", etc.

• TIPOS DE DATOS EN EL LENGUAJE C++

C++ no soporta un gran número de tipos de datos predefinidos, pero tiene la capacidad para crear sus propios tipos de datos. Todos los tipos de datos simples o básicos de C/C++ son, esencialmente números. Los tres tipos de datos básicos son:

° Enteros.

° Números de como flotante (reales)

° Caracteres.

La siguiente tabla muestra sus tamaños en bytes y el rango de valores que puede almacenar en el lenguaje C++

Tabla 2.0 Tipos de Datos en C++

TIPO EJEMPLO BYTES RANGO

Char 'C' 1 0...255Short -15 2 -128...127Int 1024 2 -32768...32768unsigned int 42325 2 0...65535Long 262144 4 -2147483648...2147483637Float 1.05 4 3.4*(10-38)...3.4*(10 38)Double 0.00045 8 1.7*(10-308...1.7*(10 308))long double 1e-8 8 igual que el double

1.4 VariablesUna variable es una localización o casillero en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecución del programa. Cuando un programa necesita almacenar un dato, necesita una variable. Toda variable tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable es necesario declararla especificando su nombre y su tipo de dato. Para declarar variables usaremos los siguientes formatos:

Página 9

Page 10: Algoritmia - cap5-1

ALGORITMIA Y C++

Declaración de una variable: tipo nombre

Declaración de varias variables con el mismo tipo de dato: tipo nombre1, nombre2, nombre3, ..., nombren

Donde:

Tipo Es el tipo de dato de la variable que puede ser: ENTERO (si la variable almacenará un número entero) , REAL (si la variable almacenará un número decimal) , CARACTER (si la variable almacenará un carácter), CADENA (si la variable almacenará un conjunto de carácteres) o LOGICO (si la variable almacenará el valor verdadero o el valor falso).

nombre1, nombre2, ..., nombren

Nombres de las variables. El nombre de una variable debe comenzar con una letra, un símbolo de subrayado o un símbolo de dólar. Los demás caractéres del nombre puede ser letras, símbolos de subrayado o símbolo de dólar. Debe considerarse también que una letra mayúscula se considera diferente de una letra minúscula.

Ejemplo 1.3:- Declaración de variables.

• La siguiente instrucción declara la variable edad de tipo ENTERO y la variable descuento de tipo REAL.

ENTERO edadREAL descuento

• La siguiente instrucción declara las variables nota1, nota2 y nota3, todas de tipo ENTERO.

ENTERO nota1, nota2, nota3

1.5 Instrucciones Algorítmicas BásicasExisten tres instrucciones algorítmicas básicas que son las siguientes

1.5.1 EntradaConsiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable. En general, la acción de ingresar un dato a una variable se expresa en el pseudocódigo mediante la palabra LEER, de la siguiente forma:

LEER variable

Por ejemplo, la instrucción:

LEER estatura

Solicita el ingreso de un valor, desde algún dispositivo de entrada (como el teclado), para la variable estatura.

Página 10

DECLARACIÓN DE VARIABLES EN LENGUAJE C++

int edad;float descuento;

int nota1, nota2, nota3;

LEER EN UN PROGRAMA EN LENGUAJE C++

Para el ingreso de datos usaremos la función cin, función que necesita la librería <iostream.h>

Sintaxis cin>>variable;

Ejemplo int estatura; cin>>estatura;

Page 11: Algoritmia - cap5-1

ALGORITMIA Y C++

1.5.2 SalidaConsiste en mostrar el valor de una variable o un mensaje en un dispositivo de salida, como la pantalla. En general, la acción de mostrar el valor de una variable o mensaje se expresa en el pseudocódigo mediante la palabra IMPRIMIR de la siguiente forma:

IMPRIMIR variable o IMPRIMIR “Mensaje”

Por ejemplo, la instrucción:

IMPRIMIR importeCompra

Muestra, en algún dispositivo de salida (como la pantalla), el valor de la variable importeCompra.

IMPRIMIR “El Importe de compra es:”

Muestra, el mensaje “El Importe de compra es:” en el dispositivo de salida (como la pantalla).

1.5.3 Asignación Consiste en asignar a una variable el valor de una expresión. La expresión puede ser una simple variable, un simple dato o una combinación de variables, datos y operadores. La asignación se expresa en el pseudocódigo de la siguiente forma:

variable = expresión

Donde variable y el valor de expresión deben tener el mismo tipo de dato.

Ejemplo

N = 25M = 30

Página 11

SALIDA EN UN PROGRAMA EN LENGUAJE C++

La salida de datos y mensajes usaremos la función cout, función que necesita la librería <iostream.h>

Sintaxis • cout<<variable;• cout<<”Mensaje”;• cout<<”Mensaje”<<variable;

Ejemploscout<<sueldo;

cout<<”El sueldo es:”<<sueldo;

Page 12: Algoritmia - cap5-1

ALGORITMIA Y C++

SUMA = N + MNombre = “Juan Pablo”

Cada una de las variables tienen un valor que se les asigno, la variable SUMA posee el valor 55.

Ejemplo 1.4:- Algoritmo para expresar en centímetros y pulgadas una cantidad dada en metros.

Esta es una solución en pseudocódigo del ejemplo 1.2 utilizando conceptos computacionales de variable, entrada de datos y salida de resultados. La solución considera que 1 metro = 100 centímetros y que 1 pulgada = 2.54 centímetros.

INICIOREAL M, C, P LEER M C = M*100 P = C/2.54IMPRIMIR C, P

FIN

Página 12

Page 13: Algoritmia - cap5-1

ALGORITMIA Y C++

Nota: \n es un código de escape para poder imprimir en líneas separadas.

• CÓDIGOS DE ESCAPE EN C++

Código Significado'\n' Nueva Línea'\r' retorno de carro'\t' Tabulación'\v' tabulación vertical'\a' alerta(pitido sonoro)'\b' retroceso de espacio'\f' avance de pagina'\\' Barra inversa'\'' comilla simple'\"' doble comilla'\?' signo de interrogación

'\000' numero octal'\xhh' número hexadecimal

1.6 Expresiones Aritméticas

Una expresión aritmética es una combinación de variables, literales y operadores aritméticos.

1.6.1 Operadores Aritméticos En la tabla que sigue se muestran los operadores aritméticos que vamos a utilizar.

Tabla 1.1 Operadores aritméticos

Página 13

Operador Significado Ejemplo+ Suma a+b- Resta a-b* Multiplicación a*b/ División a/b% Residuo a%b

PROGRAMA EN LENGUAJE C++

#include <iostream.h>void main(){ float M,C,P; cout<<”Ingresa valor en Metros :”;cin>>M; C=M*100; P=C/2.54; cout<<”\nLos Centímetros es:”<<C; cout<<”\nLas Pulgadas son :”<<P; }

Page 14: Algoritmia - cap5-1

ALGORITMIA Y C++

Los operadores aritméticos pueden utilizarse con tipos enteros y reales. Si en una operación con dos operandos, ambos operandos son enteros, el resultado es un entero; si alguno de ellos es real, el resultado es real. Así, 15/4 es 3 y no 3.75; en cambio, 15.0/4 es 3.75.

1.6.2 Reglas de jerarquía de los operadores aritméticos Cuando una expresión aritmética tiene más de un operador aritmético, el orden de aplicación de los operadores sigue un orden preciso determinado por las reglas de jerarquía de los operadores aritméticos, que se muestran en la siguiente tabla:

Tabla 1.2 Reglas de jerarquía de los operadores aritméticos

Operador Orden de evaluación() Se evalúan en primer lugar

*, /, % Se evalúan en segundo lugar+, - Se evalúan en tercer lugar

Si existen paréntesis anidados, se evalúa primero la expresión en el par más interno. Si varios operadores o paréntesis tienen la misma jerarquía, la evaluación será de izquierda a derecha.

• EJEMPLOS DE EXPRESIONES ALGEBRAICAS EN EXPRESIONES ALGORITMICAS

ALGEBRAICAS ALGORITMICAS

e = a/b/c

e = a*b*c/d/e

e = 4/((a+b)/(c/d)) + v/w/p + 5*m*n*q

• EVALUACIÓN DE CADA EXPRESIÓN

e = a/b/c

Como todos los operadores tienen la misma jerarquía, la evaluación será de izquierda a derecha:

○ Se dividirá a entre b.

○ El resultado ya obtenido de a/b se dividirá entre c.

Note que el orden de ejecución esta de acuerdo con la expresión algebraica, por lo que no se requiere ninguna pareja de paréntesis.

e = a*b*c/d/e

Como todos los operadores tienen la misma jerarquía, la evaluación será de izquierda a derecha:

○ Se multiplicará a por b.

○ El resultado ya obtenido de a*b se multiplicará por c.

○ El resultado ya obtenido de a*b*c se dividirá entre d.

Página 14

Page 15: Algoritmia - cap5-1

ALGORITMIA Y C++

○ El resultado ya obtenido de a*b*c/d se divivirá entre e.

Note que el orden de ejecución esta de acuerdo con la expresión algebraica, por lo que no se requiere ninguna pareja de paréntesis.

e = 4/((a+b)/(c/d)) + v/w/p + 5*m*n*q

Aplicando las reglas de jerarquía de los operadores aritméticos:

○ Se sumará a más b.

○ Se dividirá c entre d.

○ El resultado ya obtenido de a+b se dividirá entre el resultado ya obtenido de c/d.

○ Se dividirá 4 entre el resultado ya obtenido de ((a+b)/(c/d))

○ Se dividirá v entre w.

○ Se dividirá el resultado ya obtenido de v/w entre p.

○ Se multiplicará 5 por m.

○ Se multiplicará el resultado ya obtenido de 5*m por n.

○ Se multiplicará el resultado ya obtenido de 5*m*n por q.

○ Se sumará el resultado ya obtenido de 4/((a+b)/(c/d)) más el resultado ya obtenido de v/w/p.

○ Se sumará el resultado ya obtenido de 4/((a+b)/(c/d)) + v/w/p más el resultado ya obtenido de 5*m*n*q.

1.7 Expresiones LógicasUna expresión lógica combina variables, literales, operadores aritméticos, operadores relacionales y operadores lógicos. Los operadores relacionales y los operadores lógicos se muestran en las tablas 3.1 y 3.2.

Tabla 1.3 Operadores relacionales

Operador Significado Ejemplo> mayor que a > b>= mayor o igual que a >= b< menor que a < b<= menor o igual que a <= b== igual a a == b!= diferente de a != b

Tabla 1.4 Operadores lógicos

Operador Significado Ejemplo! No !a&& Y a && b|| Ó a || b

CAPÍTULO 2: ESTRUCTURAS DE SECUENCIA

2.1 ConceptoUna estructura secuencial es aquella en la que las instrucciones están una a continuación de la otra siguiendo una secuencia única, sin cambios de ruta. La estructura secuencial tiene una entrada y una salida.

Página 15

Page 16: Algoritmia - cap5-1

ALGORITMIA Y C++

En la Figura 4.1 se muestra el diagrama de flujo y el pseudocódigo de una estructura secuencial.

Diagrama de Flujo Pseudocódigo

Inicio . . acción 1 acción 2 acción 3 . . Fin

Figura 2.1 Estructura Secuencial: Diagrama de Flujo y Pseudocódigo

2.2 Ejercicios resueltos

Ejercicio 1:- Diseñe un pseudocódigo que halle el área y el perímetro de un rectángulo. Considere que: area = base x altura y perimetro = 2 x (base+altura).

Algoritmo

INICIO REAL base, altura, area, perímetro LEER base, altura area = base*altura perimetro = 2*(base+altura) IMPRIMIR area, perimetroFIN

Ejemplo 2:- Diseñe un pseudocódigo para convertir una longitud dada en metros a sus equivalentes en centímetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centímetros, 1 pulgada = 2.54 centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies.

Algoritmo

INICIO REAL cmetr,ccent,cpies,cpulg,cyard LEER cmetr ccent = cmetr*100 cpulg = ccent/2.54 cpies = cpulg/12 cyard = cpies/3 IMPRIMIR cpulg, cpies, cyard FIN

Ejercicio 3:- Una institución benéfica europea ha recibido tres donaciones en soles, dólares y marcos. La donación será repartida en tres rubros: 60% para la implementación de un centro de salud, 40% para un comedor de niños y el resto para gastos administrativos. Diseñe un algoritmo que determine el monto en euros que le corresponde a cada rubro. Considere que: 1 dólar = 3.52 soles, 1 dólar = 2.08 marcos, 1 dólar = 1.07 euros.

Algoritmo

INICIO

Página 16

Page 17: Algoritmia - cap5-1

ALGORITMIA Y C++

REAL c soles, cdolares, c marcos, ceuros, rubro1, rubro2, rubro3 LEER csoles, cdolares, cmarcos ceuros = (csoles/3.52 + cdolares + cmarcos/2.08)*1.07 rubro1 = ceuros*0.60 rubro2 = ceuros*0.40 rubro3 = ceuros*0.20 IMPRIMIR rubro1, rubro2, rubro3FIN

Ejercicio 4:- En una competencia atlética de velocidad el tiempo se mide en minutos, segundos y centésimas de segundo y, el espacio recorrido se mide en metros. Diseñe un algoritmo para determinar la velocidad promedio de un atleta en km/hr. Considere que: 1 hora = 60 minutos, 1 minuto = 60 segundos, 1 segundo = 100 centésimas de segundo, 1 kilómetro = 1000 metros.

Algoritmo

INICIO ENTERO tmin, tseg, tcen REAL thor, velkmhr, espmt, espkm LEER tmin, tseg, tcen, espmt thor = tmin/60 + tseg/3600 + tcen/360000 espkm = espmt/1000 velkmhr = espkm/thor IMPRIMIR velkmhrFIN

Ejercicio 5:- Diseñe un algoritmo que determine la cifra de las unidades de un número natural.

Solución 1

Análisis

Puede comprobarse que la cifra de las unidades de un número es igual al resto de la división del número entre 10. Observe para ello las siguientes divisiones:

3245 10

5 324

768 10

8 76

9 10

9 0Podemos concluir entonces que:Unidades = numero % 10Siendo % el operador residuo. Este operador permite obtener el residuo de una división, así como / permite obtener el cociente.

Algoritmo

INICIO ENTERO numero, unidades LEER numero unidades = numero % 10 IMPRIMIR unidadesFIN

Página 17

Page 18: Algoritmia - cap5-1

ALGORITMIA Y C++

Solución 2

Análisis

El residuo de una división entera puede obtenerse también sin recurrir al operador %, de la siguiente forma:

unidades = numero - (numero / 10) * 10

Observe para esto que en la división (numero/10) los operandos son enteros por lo que el cociente será un entero. Así por ejemplo, si numero es igual a 3245, la división (numero/10) produce 324, aunque matemáticamente sea 324.5; es decir, se descarta la parte decimal.

Algoritmo

INICIO ENTERO numero, unidades LEER numero unidades = numero - (numero/10)*10 IMPRIMIR unidadesFIN

Ejercicio 6:- Diseñe un algoritmo que determine la suma de las cifras de un número entero positivo de 4 cifras.

Solución 1

Análisis

Las cifras pueden ser obtenidas mediante divisiones sucesivas entre 10. Para el efecto, considere el caso de un número N igual a 3245:

3245 105 324

unidades = N%10cociente = N/10

324 104 32

decenas = cociente%10cociente = cociente/10

32 102 3

centenas = cociente%10millares = cociente/10

Algoritmo

INICIO ENTERO N, suma, millares, centenas, decenas, unidades, resto

LEER N unidades = N%10 cociente = N/10 decenas = cociente%10 cociente = cociente/10 centenas = cociente%10 millares = cociente/10 suma = unidades + decenas + centenas + millares IMPRIMIR suma FIN

Solución 2

Página 18

Page 19: Algoritmia - cap5-1

ALGORITMIA Y C++

Análisis 2

Considerando que el número tiene 4 cifras, las cifras también pueden ser obtenidas mediante divisiones sucesivas entre 1000, 100 y 10. Para el efecto, considere el caso de un número N igual a 3245:

3245 1000245 3

millares = N/1000resto = N%1000

245 10045 2

centenas = resto/100resto = resto%100

45 103 4

decenas = resto/10unidades = resto%10

Algoritmo

INICIO ENTERO N, suma, millares, centenas, decenas, unidades, resto LEER N millares = N/1000 resto = N%1000 centenas = resto/100 resto = resto%100 decenas = resto/10 unidades = resto%10 suma = unidades + decenas + centenas + millares IMPRIMIR sumaFIN

Ejercicio 7:- Diseñe un algoritmo que lea la hora actual del día HH:MM:SS y determine cuantas horas, minutos y segundos restan para culminar el día.

Algoritmo

INICIO ENTERO hor1, min1, seg1, hor2, min2, seg2, segres, resto LEER hor1, min1, seg1 segres = 86400 - (hor1*3600 + min1*60 + seg1) hor2 = segres/3600 resto = segres%3600 min2 = resto/60 seg2 = resto%60 IMPRIMIR hor2, min2, seg2FIN

Ejercicio 8:- Diseñe un algoritmo para sumar dos tiempos dados en horas, minutos y segundos.

Algoritmo

INICIO ENTERO hor1, min1, seg1, hor2, min2, seg2, hor3, min3, seg3, totseg, resto LEER hor1, min1, seg1, hor2, min2, seg2 totseg = (hor1+hor2)*3600 + (min1+min2)*60 + (seg1+seg2)

Página 19

Page 20: Algoritmia - cap5-1

ALGORITMIA Y C++

hor3 = totseg/3600 resto = totseg%3600 min3 = resto/60 seg3 = resto%60 IMPRIMIR hor3, min3, seg3FIN

Ejercicio 9:- El sueldo neto de un vendedor se calcula como la suma de un sueldo básico de S/.250 más el 12% del monto total vendido. Diseñe un algoritmo que determine el sueldo neto de un vendedor sabiendo que hizo tres ventas en el mes.

Algoritmo

INICIO REAL venta1, venta2, venta3, ventatot, comision, sueldoneto LEER venta1, venta2, venta3 ventatot = venta1 + venta2 + venta3 comision = 0.12*ventatot sueldoneto = 250 + comisión IMPRIMIR sueldonetoFIN

Ejercicio 10:- Diseñe un algoritmo que determine el porcentaje de varones y de mujeres que hay en un salón de clases.

Algoritmo

INICIO REAL porcvar, porcmuj ENTERO varones, mujeres, total LEER varones, mujeres total = varones + mujeres porcvar = varones*100.0/total porcmuj = mujeres*100.0/total IMPRIMIR porcvar, porcmujFIN

Ejercicio 11:- En países de habla inglesa es común dar la estatura de una persona como la suma de una cantidad entera de pies más una cantidad entera de pulgadas. Así, la estatura de una persona podría ser 3' 2" ( 3 pies 2 pulgadas ). Diseñe un algoritmo que determine la estatura de una persona en metros, conociendo su estatura en el formato inglés. Considere que: 1 pie = 12 plg, 1 plg = 2.54 cm, 1 m = 100 cm.

Algoritmo

INICIO REAL estmt ENTERO cpies, cplgs LEER cpies, cplgs estmt = (cpies*12 + cplgs)*2.54/100 IMPRIMIR estmtFIN

Ejercicio 12:- Diseñe un algoritmo que exprese la capacidad de un disco duro en megabytes, kilobytes y bytes, conociendo la capacidad del disco en gigabytes. Considere que: 1 kilobyte = 1024 bytes, 1 megabyte = 1024 kilobyte, 1 gigabyte = 1024 megabytes.

Algoritmo

Página 20

Page 21: Algoritmia - cap5-1

ALGORITMIA Y C++

INICIO REAL cgigabyte, cmegabyte, ckilobyte, cbyte LEER cgigabyte cmegabyte = cgigabyte*1024 ckilobyte = cmegabyte*1024 cbyte = ckilobyte*1024 IMPRIMIR cmegabyte, ckilobyte, cbyteFIN

Ejercicio 13:- Diseñe un algoritmo que intercambie las cifras de las unidades de dos números naturales.

Algoritmo

INICIO ENTERO numero1, numero2, unidades1, unidades2 LEER numero1, numero2 unidades1 = n1%10 unidades2 = n2%10 numero1 = numero1 - unidades1 + unidades2 numero2 = numero2 - unidades2 + unidades1 IMPRIMIR n1, n2FIN

EJERCICIOS PROPUESTOS

Elaborar un algoritmo y programa en C++ de los siguientes casos

1. Permita sumar dos números enteros.2. Permita restar dos números enteros3. Permita reporta las cuatro operaciones básicas (+,-,* , /) de dos números ingresados.4. Calcular el área de un triangulo conociendo sus lados.5. Encontrar la raíz cubica de un número ingresado.6. Encontrar la raíz N de un número ingresado.7. Encontrar la potencia de un número elevado a otro número ingresado. P = nm 8. Convertir una cantidad ingresada en metros a centímetros y pulgadas, reportar centímetros

y pulgadas.C = M*100

P = C/2.549. Convertir una cantidad dada en segundos a Minutos.10.Calcular la edad de una persona, se debe ingresar el año de nacimiento y el año actual.11.Convertir una cantidad ingresada en soles a dólares, se debe ingresar el monto en soles y

el tipo de cambio.12.Convertir una cantidad ingresada en dólares a soles, se debe ingresar el monto en dólares

y el tipo de cambio.13.Calcular el sueldo neto de un trabajador que tiene una bonificación por el número de horas

extras trabajadas(10 soles por cada hora extra) y un descuento del 10% por seguro, se debe ingresar el sueldo bruto el número de horas extras.

14. Ingresar dos números y devolver su suma, resta, multiplicación y división.15. Permita ingresar grados Celsius y me reporte su equivalencia en grados Fahrenheit.

Formula:F= 9/5 * C + 32

16. Permita ingresar año de nacimiento de una persona y devolver su edad.17. Ingresar la cantidad y el precio de un artículo. Se debe reportar: Cantidad, Precio Unitario,

IGV y Monto a pagar.18. Permita ingresar a y b devuelvan ab

Página 21

Page 22: Algoritmia - cap5-1

ALGORITMIA Y C++

19. Escribir una función que dados 2 números, calcule el porcentaje que el primero representa respecto del segundo.

20. Calcular el sueldo de un operario conociendo la cantidad de horas que trabajó en el mes y el valor de la hora

21. Dado el radio de una esfera calcular el volumen

22. Elabore un algoritmo que dado los datos enteros A, B, escriba el resultado de la siguiente expresión:

R = ((A + B)2) / 3

23. En una casa de cambio necesitan construir un programa tal que dado como dato una cantidad expresado en dólares, convierta esa cantidad a nuevo soles.

24. Escriba un programa que obtenga tres números luego calcule y muestre su suma y su promedio.

25. Escribir un subprograma que dados a y b devuelva el cociente y el resto de la división.26. Calcular el tiempo transcurrido entre dos horas dadas de un mismo día (ingreso de horas y

minutos).27. Mostrar las horas, minutos y segundos de un tiempo ingresado sólo en segundos.28. Elabore un algoritmo que calcule el número de segundos, ingresando un número de días.29. Dada la matrícula y 5 calificaciones de un alumno obtenidas a lo largo del semestre

construya un algoritmo que imprima el promedio de sus calificaciones.30. Elabore un algoritmo que dado el radio de una esfera calcule e imprima su área

A= 4 π R231. Elabore un algoritmo que dado el radio de una esfera calcule e imprima su volumen

V = 4/3 π R3 32. Hallar el área de un triángulo dado sus lados:

AT =

))()(( cpbpapp −−−

Donde: P es perímetro

P = ( a + b + c ) / 2 a,b,c son los lados

33. Hallar el área del rombo conociendo sus diagonalesArea = diagonal 1 x diagonal 2 / 2

34. Hallar el volumen del cilindro sabiendo el radio y la altura.Volumen = π Radio2 Altura

35.Calcular el área de un círculo. Sabiendo que Área = π x Radio236. Hallar la hipotenusa de un triángulo rectángulo.

Sabiendo Hipotenusa =

22 21 catecate +37. Hallar el tercer lado de un triángulo. Sabiendo

Lado desconocido =

38. Hallar la distancia entre dos puntos conociendo las coordenadas.Distancia =

22 )12()12( ordenadaordenadaabscisaabscisa −+−

Página 22

))()(cos2)(1(221 22 alfaenoconocidoladoconocidoladoconocidoladoconocidolado −+

Page 23: Algoritmia - cap5-1

ALGORITMIA Y C++

39. Hallar el monto a devolver si presto un capital, a una tasa de interés, durante un tiempo o periodo determinado.

Monto a devolver = c (1 + interés)tiempo o periodo

40. Hallar el valor de 2 lados de un triangulo.LADO 1 = LADO CONOCIDO ( SENO (ALFA) / SENO (GAMMA) )LADO 2 = LADO CONOCIDO ( SENO (BETA) / SENO (GAMMA) )

41. Hallar el valor en grados centesimales y radianes conocido los grados sexagesimalesCentesimales =

)(9

10lessexagesima

Radianes =

)(180

lessexagesimaπ

42. Calcular área de un trapecioArea =

2

*)( alturabasemenorbasemayor+

CAPÍTULO 3: ESTRUCTURAS DE SELECCIÓN

3.1 IntroducciónLas estructuras de selección son estructuras de control utilizadas para la toma decisiones dentro de un programa. A estas estructuras se conocen también como estructuras selectivas o estructuras de decisión y son las siguientes:

• La estructura de selección simple (SI).

• La estructura de selección doble (SI-SINO).

• La estructura de selección múltiple (SEGUN)

3.2 Estructura de Selección Simple SILa estructura de selección simple permite ejecutar una acción o un grupo de acciones sólo si se cumple una determinada condición. Así, en el gráfico 3.1, si la condición es verdadera se ejecuta la acción acciona; en caso contrario, no se hace nada.

Diagrama de Flujo Pseudocódigo (acción simple)

SI( condicion ) acciona

Pseudocódigo (acción compuesta)

SI( condicion ){ acciona1 acciona2 . . . accionan}

Figura 3.1 Estructura de Selección Simple

Página 23

Page 24: Algoritmia - cap5-1

ALGORITMIA Y C++

Por ejemplo, si se desea cambiar el signo de un número únicamente en caso que sea negativo, podemos escribir:

SI( numero < 0 ) numero = -1 * numero

Si el número no es negativo, simplemente esta estructura se pasaría por alto y se continuaría en la siguiente instrucción después del SI.

3.3 Estructura de Selección Doble SI - SINOLa estructura de selección doble permite seleccionar una ruta de dos rutas posibles en base a la verdad o falsedad de una condición. Así, en la Figura 3.2, si la condición es verdadera, se ejecuta la acción A; en caso contrario, se ejecuta la acción B.

En la Figura 3.2 se muestra el diagrama de flujo y el pseudocódigo de la estructura de selección doble.

Diagrama de Flujo Pseudocódigo (acción simple)

SI( condicion ) accionaSINO accionb

Pseudocódigo (acción compuesta)

SI( condicion ){ acciona1 acciona2 . . . accionan}SINO{ accionb1 accionb2 . . . accionbn}

Por ejemplo, la siguiente estructura de selección doble determina si una persona es mayor o menor de edad:

SI( edad >= 18 ) estado = "Mayor de edad"SINO estado = "Menor de edad"

Esto imprime "Mayor de edad" si la persona tiene 18 años ó más e imprime "Menor de edad" si la persona tiene menos de 18 años. En cualquiera de los casos, después de efectuar la impresión, se ejecutará la primera instrucción que sigue a la estructura SI...SINO.

3.4 Estructura de Selección Doble en Cascada SI-SINO-SI La estructura de selección doble en cascada esta formada por varias estructuras de selección doble SI-SINO puestas una a continuación de otra de forma que a un SI-SINO le sigue otro SI-SINO.

En la estructura de selección doble en cascada, las condiciones se evalúan en orden descendente, pasando de una condición a otra si la condición anterior resulta falsa. En el momento que se encuentra una condición verdadera, se efectúa la acción correspondiente a

Página 24

Figura 3.2 Estructura de Selección Doble

Page 25: Algoritmia - cap5-1

ALGORITMIA Y C++

dicha condición y se corta el resto de la estructura. Si todas las condiciones resultan falsas, se efectúa la acción correspondiente al último SINO, que se considera como la acción por defecto.

En la Figura 3.3 se muestra el diagrama de flujo y el pseudocódigo de la estructura de selección doble en cascada.

Diagrama de Flujo Pseudocódigo ( Forma 1 )

SI( condicion1 ) accion1SINO SI( condicion2 ) accion2 SINO SI( condicion3 ) accion3 . . . SINO acciondefecto

Pseudocódigo ( Forma 2 )

SI( condicion1 ) accion1SINO SI( condicion2 ) accion2SINO SI( condicion3 ) accion3 . . .SINO acciondefecto

Figura 3.3 Estructura de Selección Doble en Cascada

Por ejemplo, la siguiente estructura de selección doble en cascada determina el signo de un número entre positivo, negativo o cero:

SI( n > 0 ) signo = "Positivo"SINO SI( n < 0 ) signo = "Negativo" SINO signo = "Cero"

Usando el otro formato tendríamos:

SI( n > 0 ) signo = "Positivo"SINO SI( n < 0 ) signo = "Negativo"SINO signo = "Cero"

3.5 Estructura de Selección Múltiple SEGUNLa estructura de selección múltiple SEGUN permite elegir una ruta de entre varias rutas posibles, en base al valor de una variable que actúa como selector. La estructura compara el valor del selector con las constantes c1, c2, ..., cn en orden descendente. En el momento en

Página 25

Page 26: Algoritmia - cap5-1

ALGORITMIA Y C++

que se encuentre una coincidencia, se ejecuta la acción correspondiente a dicha constante y se abandona la estructura.

En la Figura 3.4 se muestra el diagrama de flujo y el pseudocódigo de la estructura de selección múltiple.

Diagrama de Flujo Pseudocódigo

SEGUN( selector ){ CASO c1 : accion1 CASO c2 : accion2 CASO c3 : accion3 . . . CASO cn : accionn DEFECTO : acciondefecto}

Figura 3.4 Estructura de Selección Múltiple

Por ejemplo, la siguiente estructura de selección múltiple determina el nombre de la estación del año conociendo el número de la estación (1 para Primavera, 2 para Verano, 3 para Otoño y 4 para Invierno) :

SEGÚN (numeroEstacion){ CASO 1 : nombreEstacion = "Primavera" CASO 2 : nombreEstacion = "Verano" CASO 3 : nombreEstacion = "Otoño" DEFECTO : nombreEstacion = "Invierno"}

Página 26

Page 27: Algoritmia - cap5-1

ALGORITMIA Y C++

3.6 Ejercicios

Ejercicio 1:- En una playa de estacionamiento cobran S/. 2.5 por hora o fracción. Diseñe un algoritmo que determine cuanto debe pagar un cliente por el estacionamiento de su vehículo, conociendo el tiempo de estacionamiento en horas y minutos.

Algoritmo 1

INICIO ENTERO horas, minutos REAL pago LEER horas, minutos SI( minutos > 0 ) horas = horas + 1 pago = horas * 2.5 IMPRIMIR pagoFIN

Algoritmo 2

INICIO ENTERO horas, minutos, horasPagar REAL pago LEER horas, minutos SI( minutos > 0 ) horasPagar = horas + 1 SINO horasPagar = horas pago = horasPagar * 2.5 IMPRIMIR pagoFIN

Ejercicio 2:- Diseñe un algoritmo que determine si ún número es o no es, par positivo.

Algoritmo

INICIO REAL numero CADENA tipoNumero LEER numero SI( (numero%2==0) && (numero>0) ) tipoNumero = "El número es par positivo" SINO tipoNumero = "El número no es par positivo" IMPRIMIR tipoNumeroFIN

Ejercicio 3:- Diseñe un algoritmo que lea tres números y determine el número mayor.

Algoritmo

INICIO // Declaración de variables REAL numero1, numero2, numero3, numeroMayor

// Entrada de datos LEER numero1, numero2, numero3 // Determina el mayor numeroMayor = numero1 SI( numero2 > numeroMayor ) numeroMayor = numero2 SI( numero3 > numeroMayor )

Página 27

Page 28: Algoritmia - cap5-1

ALGORITMIA Y C++

numeroMayor = numero3 // Salida de resultados IMPRIMIR mayorFIN

Ejercicio 4:- Una tienda ha puesto en oferta la venta al por mayor de cierto producto, ofreciendo un descuento del 15% por la compra de más de 3 docenas y 10% en caso contrario. Además por la compra de más de 3 docenas se obsequia una unidad del producto por cada docena en exceso sobre 3. Diseñe un algoritmo que determine el monto de la compra, el monto del descuento, el monto a pagar y el número de unidades de obsequio por la compra de cierta cantidad de docenas del producto.

Algoritmo

INICIO // Declaración de variables REAL montopag, montocom, montodes, precio ENTERO docenas, obsequio // Entrada de datos LEER docenas, precio // Determina el monto de la compra montocom = docenas*precio // Determina el monto del descuento y el obsequio SI( docenas > 3 ){ montodes = 0.15*montocom obsequio = docenas-3 } SINO{ montodes = 0.10*montocom obsequio = 0 } // Determina el monto a pagar montopag = montocom - montodes // Salida de resultados IMPRIMIR montocom, montodes, montopag, obsequio FIN

Ejercicio 5:- Diseñe un algoritmo que lea un número de tres cifras y determine si es o no capicúa. Un número es capicúa si es igual al revés del número.

Observación

Como el número tiene tres cifras, para ser capicúa basta con que la cifra de las unidades sea igual a la cifra de las centenas. Por ejemplo: 353, 878, etc.

Algoritmo

INICIO // Salida de resultados ENTERO numero, unidades, centenas CADENA tipoNumero

// Entrada de datos LEER numero

// Si el número tiene tres cifras... SI(numero >= 100 && numero <= 999 ){

// Determina la cifra de las unidades y la cifra de las centenas unidades = numero%10

Página 28

Page 29: Algoritmia - cap5-1

ALGORITMIA Y C++

centenas = numero/100

// Determina el tipo de número entre capicúa o no capicúa SI( unidades == centenas ) tipoNumero = "El número es capicúa" SINO tipoNumero = "El número no es capicúa"

// Muestra el tipo de número IMPRIMIR tipoNumero } SINO IMPRIMIR "Ingrese un número de tres cifras"FIN

Ejercicio 6:- Diseñe un algoritmo que califique el puntaje obtenido en el lanzamiento de tres dados en base a la cantidad seis obtenidos, de acuerdo a lo siguiente: tres seis, excelente; dos seis, muy bien; un seis, regular; ningún seis, pésimo.

Algoritmo

INICIO // Declaración de variables ENTERO dado1, dado2, dado3 CADENA calificacion

// Entrada de datos LEER dado1, dado2, dado3

// Determina la calificación SI( dado1 + dado2 + dado3 == 18 ) calificacion = "Excelente" SINO SI( dado1+dado2 == 12 || dado1+dado3 == 12 || dado2+dado3 == 12 ) calificacion = "Muy bién" SINO SI( dado1 == 6 || dado2 == 6 || dado3 == 6 ) calificacion = "Regular" SINO calificacion = "Pésimo"

// Salida de resultados IMPRIMIR calificacion FIN

Ejercicio 7:- Una compañía dedicada al alquiler de automoviles cobra un monto fijo de $30 para los primeros 300 km de recorrido. Para más de 300 km y hasta 1000 km, cobra un monto adicional de $ 0.15 por cada kilómetro en exceso sobre 300. Para más de 1000 km cobra un monto adicional de $ 0.10 por cada kilómetro en exceso sobre 1000. Los precios ya incluyen el 18% del impuesto general a las ventas, IGV. Diseñe un algoritmo que determine el monto a pagar por el alquiler de un vehículo y el monto incluído del impuesto.

Algoritmo

INICIO // Declaración de variables REAL kilomrec, montopag, montoigv, montofijo = 30, igv = 0.18

// Entrada de datos LEER kilomrec

Página 29

Page 30: Algoritmia - cap5-1

ALGORITMIA Y C++

// Determina el monto a pagar SI( kilomrec <= 300 ) montopag = montofijo SINO SI( kilomrec <= 1000 ) montopag = montofijo + 0.15*(kilomrec-300) SINO montopag = montofijo + 0.15*700 + 0.10*(kilomrec-1000)

// Determina el monto del impuesto montoigv = igv*montopag /(1+igv)

// Salida de resultados IMPRIMIR montopag, montoigvFIN

Ejercicio 8:- Diseñe un algoritmo que determine quienes son contemporáneos entre Juan, Mario y Pedro.

Algoritmo

INICIO // Declaración de variables ENTERO juan, mario, pedro CADENA contemporaneos

// Entrada de datos LEER juan, mario, pedro

// Determina quienes son contemporáneos SI( juan == mario && mario == pedro ) contemporaneos = "Los tres son contemporáneos" SINO SI( juan == mario ) contemporaneos = "Juan y Mario son contemporáneos" SINO SI( juan == pedro ) contemporaneos = "Juan y Pedro son contemporáneos" SINO SI( mario == pedro ) contemporaneos = "Mario y Pedro son contemporáneos" SINO contemporaneos = "No hay contemporáneos"

// Salida de resultados IMPRIMIR contemporaneos FIN

Ejercicio 9:- El promedio de prácticas de un curso se calcula en base a cuatro prácticas calificadas de las cuales se elimina la nota menor y se promedian las tres notas más altas. Diseñe un algoritmo que determine la nota eliminada y el promedio de prácticas de un estudiante.

Algoritmo

INICIO // Declaración de variables REAL pc1, pc2, pc3, pc4, pcmenor, promedio

// Entrada de datos LEER pc1, pc2, pc3, pc4

// Determina la nota menor pcmenor = pc1

Página 30

Page 31: Algoritmia - cap5-1

ALGORITMIA Y C++

SI( pc2 < pcmenor ) pcmenor = pc2 SI( pc3 < pcmenor ) pcmenor = pc3 SI( pc4 < pcmenor ) pcmenor = pc4

// Determina el promedio promedio = (pc1 + pc2 + pc3 + pc4 - pcmenor )/3

// Salida de resultados IMPRIMIR promedio, pcmenorFIN

Ejercicio 10:- Diseñe un algoritmo que lea tres longitudes y determine si forman o no un triángulo. Si es un triángulo determine de que tipo de triángulo se trata entre: equilátero (si tiene tres lados iguales), isósceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales). Considere que para formar un triángulo se requiere que: "el lado mayor sea menor que la suma de los otros dos lados".

Algoritmo

INICIO // Declaración de variables REAL L1, L2, L3, suma CADENA tipoRectangulo // Entrada de datos LEER L1, L2, L3<

// Determina el lado mayor mayor = L1 SI( L2 > mayor ) mayor = L2 SI( L3 > mayor ) mayor = L3 // Determina la suma de los lados a excepción del lado mayor suma = L1 + L2 + L3 - mayor // Determina de que tipo de triángulo se trata SI( mayor < suma ){ SI( ( L1 == L2 ) && ( L2 == L3 ) ) tipoRectangulo = "Triángulo equilátero" SINO SI( ( L1 == L2 ) || ( L1 == L3 ) || ( L2 == L3 ) ) tipoRectangulo = "Triángulo isósceles" SINO tipoRectangulo = "Triángulo escaleno" } SINO tipoRectangulo = "No es un triángulo"

// Salida de resultados IMPRIMIR tipoRectangulo FIN

Ejercicio 11:- Diseñe un algoritmo que lea tres números enteros y determine el menor valor positivo. Si los números positivos son iguales, dar como menor a cualquiera de ellos.

Algoritmo

Página 31

Page 32: Algoritmia - cap5-1

ALGORITMIA Y C++

INICIO // Declaración de variables ENTERO a, b, c, menor // Entrada de datos LEER a, b, c // Determina el menor // Aquí a, b y c podrían ser positivos SI( a > 0 ){ menor = a SI( b > 0 && b < menor ) menor = b SI( c > 0 && c < menor ) menor = c } // Aquí sólo b y c podrían ser positivos SINO SI( b > 0 ){ menor = b SI( c > 0 && c < menor ) menor = c } // Aquí sólo c podrían ser positivos SINO SI( c > 0 ){ menor = c } // Guardamos el indicador -1 para saber que no hay positivos SINO menor = -1 // Salida de resultados SI( menor != -1 ) IMPRIMIR menor SINO IMPRIMIR "No se ingresó ningún número positivo" FIN

Ejercicio 12:- Diseñe un algoritmo que lea tres números y los imprima de mayor a menor y de menor a mayor.

Algoritmo

INICIO // Declaración de variables REAL n1, n2, n3, mayor, menor, medio // Entrada de datos LEER n1, n2, n3

// Determina el menor menor = n1 SI( n2 < menor ) menor = n2 SI( n3 < menor ) menor = n3 // Determina el mayor mayor = n1 SI( n2 > mayor ) mayor = n2 SI( n3 > mayor ) mayor = n3 // Determina el medio medio = n1+n2+n3-mayor-menor

Página 32

Page 33: Algoritmia - cap5-1

ALGORITMIA Y C++

// Imprime en orden ascendente IMPRIMIR menor, medio, mayor // Imprime en orden descendente IMPRIMIR mayor, medio, menorFIN

Ejercicio 13:- Diseñe un algoritmo para obtener el grado de eficiencia de un operario de una fábrica de tornillos, de acuerdo a las siguientes condiciones, que se le imponen para un período de prueba:

- Menos de 200 tornillos defectuosos. - Más de 10000 tornillos producidos. El grado de eficiencia se determina de la siguiente manera: - Si no cumple ninguna de las condiciones, grado 5. - Si sólo cumple la primera condición, grado 6. - Si sólo cumple la segunda condición, grado 7. - Si cumple las dos condiciones, grado 8.

Las condiciones impuestas por la fábrica son:

torpro < 200 siendo torpro el número de tornillos producidostordef > 10000 siendo tordef el número de tornillos defectuosos

Algoritmo 1

INICIO ENTERO torpro, tordef, grado LEER torpro, tordef SI( tordef < 200 ){ SI( torpro > 10000 ) grado = 8 SINO grado = 6 } SINO{ SI( torpro > 10000 ) grado = 7 SINO grado = 5 } IMPRIMIR gradoFIN

Algoritmo 2

INICIO ENTERO torpro, tordef, grado LEER torpro, tordef // Determina el grado de eficiencia SI( tordef < 200 && torpro > 10000 ) grado = 8 SINO SI( tordef < 200 ) grado = 6 SINO SI( torpro > 10000 ) grado = 7 SINO grado = 5 IMPRIMIR gradoFIN

Ejercicio 14:- Se cuenta con los votos obtenidos por Juan, Pedro y María en una elección democrática a la presidencia de un club. Para ganar la elección se debe obtener como mínimo el 50% de los votos más 1. En caso que no haya un ganador se repite la elección en una segunda vuelta. Van a la segunda vuelta los dos candidatos que obtengan la más alta

Página 33

Page 34: Algoritmia - cap5-1

ALGORITMIA Y C++

votación. Se anula la elección en caso de producirse un empate doble por el segundo lugar o un empate triple. Diseñe un algoritmo que determine el resultado de la elección.

Algoritmo

INICIO // Declaración de variables ENTERO vjuan, vpedro, vmaria, vmingan CADENA resultado LEER vjuan, vpedro, vmaria vmingan = (vjuan + vpedro + vmaria)/2 + 1 SI( vjuan >= vmingan ) resultado = "Gana Juan " SINO SI( vpedro >= vmingan ) resultado = "Gana Pedro" SINO SI( vmaria >= vmingan ) resultado = "Gana María" SINO SI( vpedro > vjuan && vmaria > vjuan ) resultado = "Pasan a la segunda vuelta Pedro y María" SINO SI( vpedro > vmaria && vjuan > vmaria ) resultado = "Pasan a la segunda vuelta Pedro y Juan" SINO SI( vmaria > vpedro && vjuan > vpedro ) resultado = "Pasan a la segunda vuelta María y Juan " SINO resultado = "Elección anulada" // Salida de resultados IMPRIMIR resultadoFIN

Ejercicio 15:- Diseñe un algoritmo que lea un número entero de 3 cifras, y forme el mayor número posible con las cifras del número ingresado. El número formado debe tener el mismo signo que el número ingresado.

Algoritmo

INICIO // Declaración de variables ENTERO num1, num2, numaux, uni, dec, cen, menor, mayor, medio // Entrada de datos LEER num1 // Si el número tiene tres cifras... SI( ( num1 >= 100 && num1 <= 999 ) && ( num1 >= -999 && num1 <= -100 ) ){ // Guarda el número en una variable auxiliar para preservar el signo numaux = num1 // Cambia el signo de num1 en caso de ser negativo SI( num1 < 0 ) num1 = -num1 // Determina las cifras del número cen = num1/100 dec = (num1%100)/10 uni = (num1%100)%10 // Determina la cifra menor menor = cen SI( dec < menor ) menor = dec SI( uni < menor )

Página 34

Page 35: Algoritmia - cap5-1

ALGORITMIA Y C++

menor = uni // Determina la cifra mayor mayor = cen SI( dec > mayor ) mayor = dec SI( uni > mayor ) mayor = uni // Determina la cifra del medio medio = cen+dec+uni-mayor-menor // Forma el nuevo número SI( numaux > 0 ) num2 = mayor*100 + medio*10 + menor SINO num2 = -1*(menor*100 + medio*10 + mayor) // Imprime el nuevo número IMPRIMIR num2 } SINO IMPRIMIR "El número no tiene tres cifras"FIN

Página 35

Page 36: Algoritmia - cap5-1

ALGORITMIA Y C++

EJERCICIOS PROPUESTOS (SELECTIVA O CONDICIONAL)

Realizar los diagramas estudiados para los siguientes ejercicios:

1. Hacer un diagrama que permita ingresar un número y devuelva si es Positivo, negativo o cero.

2. Escriba un programa que obtenga tres números, los almacene en variables y luego calcule y muestre un reporte sobre su suma y su promedio. Si su promedio es menor a 10.5 que me muestre el mensaje “desaprobado” en caso contrario “aprobado”

3. Dado un número entero decir si: ! Es par o impar4. Si dos números son positivos calcule su producto en caso contrario calcule su suma.5. Dado un número entero decir si es mayor, menor o igual a cero6. Dados tres números hallar el mayor.7. Dados tres números hallar el menor.8. Un número puede ser menor, igual o mayor que otro. Hacer un algoritmo que lea 2

números y determine como es uno respecto al otro.9. Ingrese dos números n y m y diga si n es múltiplo de m.10. Lea 3 números e indique cual es el valor intermedio.11. Algoritmo sobre una ecuación de primer grado. (ax + b = 0)12. Hacer un diagrama que permita ingresar los parámetros a,b,c de una ecuación de 2do

grado y se devuelva las raíces.X1 =

A

ACBB

2

42 −+−

X2 =

A

ACBB

2

42 −−−

13. Dado un número que representa un mes, escribir el nombre del mes correspondiente.14. Dado 3 longitudes verificar si se puede formar un triángulo. Se conoce que en todo

triángulo cada lado es menor que la suma de los otros dos, pero mayor que su diferencia.15. Dado 3 longitudes compruebe si se puede formar un triángulo y clasifique que tipo de

triángulo es. Se conoce lo siguienteTriángulo Equilátero: todos lados igualesTriángulo Isósceles: 2 lados igualesTriángulo escaleno: todos los lados diferentes

16. Dado un mes escribir la cantidad de días de dicho mes.17. Dados 3 números, mostrarlos por pantalla en orden creciente.18. Dados 3 números, mostrarlos por pantalla en orden decreciente.19. Dada una fecha día, mes y año (4 digitos), informar si es correcta o no.20. Desde un dispositivo de e/s se leen tres números. Indique cual de ellos es la suma de los

otros dos.21. Un año es bisiesto si es múltiplo de 4, pero no de 100, pero sí de 400. (ejemplos: 1984 es

bisiesto, 2000 es bisiesto, 1800 no es bisiesto). Determine un algoritmo que permita determinar si un año introducido desde el teclado es bisiesto o no.

22. Un tienda vende dos productos. Realice un diagrama que permita ingresar las unidades vendidas y sus respectivos precios y se devuelva: SubTotal, Descuento, IGV y Monto a pagar.El descuento se hará de la siguiente manera

Subtotal Descuento

1000 – 2000 5%

>2000 y <=3000 10%

>3000 15%

Página 36

Page 37: Algoritmia - cap5-1

ALGORITMIA Y C++

23. Los trabajadores de una empresa tienen 3 turnos: mañana, tarde y noche. Desde luego un trabajador solo pertenece a un turno. La tarifa de los turnos de mañana y tarde son iguales y los de la noche es 30% más. Se deberá saber el numero de horas trabajadas el costo por horas.

24.Trabajando con números se encontró que 12 * 12 = 144 y que 21 * 21 = 441, así también, 13 * 13 = 169 y 31 * 31 = 961. Escribe un programa que permite ingresar un número de 2 dígitos y colocar si cumple o no con dicha características.

25. Un número es un capicúa si su valor es el mismo tanto si es leído de izquierda a derecha como de derecha a izquierda. Por ejemplo: 353 es un capicúa. 354 no es un capicúa. Diseña un algoritmo que determine si un número de tres dígitos introducido es un capicúa o no.

26. Hacer un diagrama que permite ingresar un número (cantidad en soles) y devuelva ¿Cuál es el menor N° de billetes de 100, 50, 20, 10 y monedas de 5 y 1 son necesarias para reproducir la cantidad. Ejem; 1488 100=14 50=1 20=1 10=1 5=1 1=3

27. Realizar un DF para un programa que indique la condición de un alumno, dependiendo su promedio, su condición se basa en el siguiente cuadro

Promedio Condición>=18 y <=20 Excelente>=15 y <=17 Muy Bueno>=11 y <=14 Regular>=6 y <= 10 Malo>=0 y <= 5 Muy Malo

28. Calcular el sueldo de una persona de acuerdo a lo siguiente

Categoría Valor/Hora (S/.)

Administrador 5Técnico 7

Profesional 9Operario 3

– Horas extras son S/. 2.00 por cada hora extra sobre el sueldo base– El porcentaje por antigüedad es el siguiente:

Antigüedad %>=1 y <=3 5>=4 y <=6 10

>=7 y <=10 15>=11 y <=15

20

>=16 30

– El sueldo es sacado de la siguiente manera:Pago = (Valor/hora * horas trabajadas) + horas extras + % antigüedad – 3% de obra social – 10% jubilación

– Los porcentajes son sobre el sueldo base1. Si compramos al por mayor 100 o más artículos nos descuentan el 40%, si compramos

entre 25 y 100 nos descuentan un 20% y si compramos entre 10 y 25 un 10%. No hay descuento si adquirimos menos de 10 artículos. Cuánto se pagará al final.

Aporte del Ing. Miguel Segura Rojas

Página 37

Page 38: Algoritmia - cap5-1

Acción 1Acción 2CondiciónAcción 3VF Acción 4

ALGORITMIA Y C++

CAPÍTULO 4 : ESTRUCTURAS DE CONTROL REPETITIVOS

Existen problemas que se solucionan realizando un proceso repetidas veces, en los algoritmos tenemos estructuras que permiten el control de procesos que se repiten.

4.1 Mientras, Hacer Mientras y Para

Ejecuta uno o más procesos mientras una condición es verdadera

• Mientras

La condición se ejecuta primero que las acciones que se encuentran dentro de la estructura MIENTRAS.

Diagrama de Flujo Pseudocódigo

Acción 1

Mientras (Condición)

{

Acción 2

Acción 3

}

Acción 4

Hacer Mientras

La condición se ejecuta después que las acciones que se encuentran dentro de la estructura MIENTRAS.

Diagrama de Flujo Pseudocódigo

Página 38

Page 39: Algoritmia - cap5-1

Acción 1Acción 2Acción 3CondiciónAcción 4F

var=vi; var<=vf; var++Acción 2Acción 3Acción 4Acción 1

ALGORITMIA Y C++

Acción 1

hacer

{

Acción 2

Acción 3

}

mientras (condición)

Acción 4

• Para

La estructura Para ejecuta una o mas acciones o procesos en un número finito de repeticiones, usa una variable que cuenta el número de repeticiones, la variable debe tener un valor inicial y un valor final.

Diagrama de Flujo Pseudocódigo

{

Acción 2

Acción 3

}

mientras (condición)

Acción 4

Página 39

V