Programacion en c++

March 21, 2018 | Author: ErEl CaMa | Category: C++, Division (Mathematics), Algorithms, Numbers, Interest


Comments



Description

PROGRAMACIÓNALGORITMO Y CODIFICACIÓN End E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Dedico este libro a mis padres (María y Joaquín) a mis queridos hermanos (Jhoselin y Fernando) y a la persona que cambio mi mundo (Yesica Y.C.L)… mi Ys!. 1 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ INTRODUCCIÓN Hola mi nombre es Edgar y los voy a conducir en la introducción a la programación en el lenguaje C++. C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma. Desde ya auguro un gran interés en este libro, que será, sin duda alguna, material obligado de consulta y de útil ejercicio. 2 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ INDICE PROGRAMACION ESTRUCTURADA EN C++ MARCO CONCEPTUAL -.-.-.-(4) I. PROCESOS SECUENCIALES -.-.-.-(6) 1.1 Calculando una función. 1.2 Interés Ganado. 1.3 Representar una hora en: Hrs, min, seg. 1.4 Calculando varias funciones. 1.5 Encontrar la distancia y velocidad final de un automóvil. II. PROCESO CONDICIONAL SIMPLE (if) -.-.-.-(12) 2.1 Pago bruto de un obrero si trabaja horas extras. 2.2 Costo de una llamada telefónica. 2.3 Hallando la ecuación 𝑦 = (𝑥 − 3)/(𝑥 2 − 25). 2.4 Rendimiento de un alumno teniendo su promedio. 2.5 Pago de acuerdo al consumo en un encuentro gastronómico. III. PROCESOS CONDICIONAL MULTIPLE (switch) -.-.-.-(19) 3.1 Cuantos días tiene un mes. 3.2 Importe a pagar por la cantidad de diskettes. 3.3 La fecha es correcta? 3.4 Importe a pagar en un instituto. 3.5 Descuento de una U. Privada según la profesión del tutor. IV. PROCESOS REPETITIVOS (while) 4.1 El cociente y residuo por restas sucesivas. 4.2 Divisores comunes de dos números. 1 1 1 4.3 La suma de N primeros 𝑆 = 2 + 4 + 6 + ⋯ 𝑁. 4.4 Lea un número e invierta sus cifras. 4.5 Halle si un número es cubo perfecto. -.-.-.-(27) V. PROCESOS REPETITIVOS (do-while) -.-.-.-(34) 5.1 Personas que ingresan a un museo de arte. 5.2 Máxima área que de un terreno. 5.3 Los múltiplos de 4 𝑦 𝑛 > 8, 𝑛 ≤ 32. 5.4 Cálculo del valor de 𝜋. 5.5 El costo menor de la institución que dictan cursos. VI. PROCESOS REPETITIVOS (for) -.-.-.-(41) 6.1 Suma, cuadrados y cubos de los N primeros números. 1 1 1 6.2 Encontrar la suma 𝑆 = + +. . + . 1+𝑥 1+2𝑥 1+𝑛𝑥 6.3 Velocidad promedio de un auto. 6.4 Artículos que podemos comprar con todo nuestro dinero. 6.5 Numero de 3 dígitos que aumenta en 297 al invertirlo. VII. VIII. IX. X. ARREGLOS Y MATRICES FUNCIONES PROPIAS LIBRERIAS PROPIAS DIAGRAMA DE FLUJO -.-.-.-(47) -.-.-.-(55) -.-.-.-(62) -.-.-.-(68) 3 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROGRACIÓN EN C++ 1 Tiene sus inicios por los años 70 y nace como una necesidad de establecer reglas en la programación. Reglas básicas: 1. Todo programa debe definir y establecer 3 partes: entrada, proceso, salida. 2. Todo proceso es solucionable con las siguientes estructuras de programación: secuencial, condicional, repetitivo. 3. Cualquier estructura de programación solamente debe tener una entrada y una salida. 4. Todo programa puede separarse en partes o módulos (procesos) cada vez más pequeños y fáciles de entender y cada módulo puede acceder a los datos globales del programa. ALGORITMO Es el conjunto ordenado de pasos u operaciones que permiten hallar la solución de un problema. DIAGRAMA DE FLUJO OPERADORES LÓGICOS 1 http://mySpace91.ucoz.com 4 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Más operadores ++ Incrementa una unidad -Disminuye una unidad += Incrementa el valor que esté a la derecha del igual -= Disminuye el valor que esté a la derecha del igual *=, /=, %= Multiplica, Divide, Residuo de dividir por el valor que este a la derecha del igual. Para comentarios /*Esto es un comentario en varias líneas*/ //Aquí tu comentario (para solo una línea) Para borrar pantalla clrscr() Salto de línea. cout<<endl; ó “\n” Funciones Gotoxy: Para poder posesionar el cursor en algún lugar de la pantalla; gotoxy(Columna,fila). Cin: Declara los datos de entrada para las variables. Cout: Muestra los datos que uno desea que se vean en la pantalla. Float: Para definir números reales. Int: Para definir números enteros. Strcpy(cadena1,cadena2): Asigna el contenido de la cadena2 hacia la cadena1. Librerías estándar del C++ Se llaman así debido a que forman parte de la librería del lenguaje C++ y están clasificadas según su utilidad. Las librerías más usadas: <conio.h>, contiene elementos de utlidad relacionados con el uso de la pantalla tales como: clrscr(), gotoxy(), textcolor(), getch(),etc. <iostream.h>, contiene elementos de utilidad relacionados con el uso de objetos para la entrada y salida de datos tales como: cin , cout, etc. <math.h>, contiene funciones y elementos utilizados en expresiones matemáticas tales como la función pow(),sqrt(),etc. <stdlib.h>, contiene elementos de utilidad relacionados con funciones estándar que vienen desde versiones anteriores del lenguaje de programación C, tales como: printf(), cprintf(), scanf(), etc. <string.h>, contiene elementos de utilidad relacionados con el manejo de cadenas tales como: strcpy(), strcat(), strlen(), etc. Recordar, que el c++ las tildes no son reconocidas. 5 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 6 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROCESOS SECUENCIALES Se llaman así porque cuando se ejecutan sus órdenes y tareas, estas se realizan en secuencia: una tras otra, no dependiendo de alguna condición que haga variar su secuencia. Una orden o tarea puede ser un ingreso de datos, el cálculo de alguna fórmula, la impresión de algún resultado. Ejm. Inicio Ingresar datos Calcular fórmulas Imprimir resultados Fin Problema CPP01-01 Ingresar el valor de la variable independiente y calcular 𝑓(𝑡) = 𝑡 2 + 4 DATOS D. Entrada: variable independiente (t) D. Salida: variable dependiente (f(t)) CODIFICACIÓN C++ /*........................ PROGRAMA CPP01.01.CPP Procesos Secuenciales ........................*/ //Inclusion de librerias #include<iostream.h> //Para cin, cout #include<conio.h> //Para clrscr(), getch() //funcion principal void main() { //Declaracion de variables float t,ft; //Ingreso de datos clrscr(); cout<<"Ingresar la variable independiente t:";cin>>t; //Calcular Funcion ft=t*t+4; //Escribir Resultado cout<<"El valor ft es= "<<ft; //Pausa para ver los resultados getch(); } DIAGRAMA DE FLUJO INICIO t ft=t^2+4 ft FIN S E 7 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP01-02 Calcular el interés generado por un capital depositado durante cierta cantidad de periodos a una tasa de interés determinada y expresada en porcentaje. Aplicar las siguientes fórmulas. 𝑀𝑜𝑛𝑡𝑜 = 𝑐𝑎𝑝𝑖𝑡𝑎𝑙 ∗ (1 + 𝑡𝑎𝑠𝑎 𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑃𝑒𝑟𝑖𝑜𝑑𝑜𝑠 ) 100 (*) (**) 𝐼𝑛𝑡𝑒𝑟é𝑠 = 𝑀𝑜𝑛𝑡𝑜 − 𝐶𝑎𝑝𝑖𝑡𝑎𝑙 donde, Tasa es el porcentaje de intereses por periodo. Un periodo puede ser un día, un mes, un año, etc. DATOS D. Entrada: Capital, Tasa de Interés (Tasa), Número de periodos (NumPer) D. Salida: Interés ganado (Interes) CODIFICACIÓN C++ /*........................ PROGRAMA CPP01.02.CPP Procesos Secuenciales ........................*/ //Inclusion de librerias #include<iostream.h> //Para cin, cout #include<conio.h> //Para clrscr(), getch() #include<math.h> //Para pow() //funcion principal void main() { //Declaracion de variables float Capital,Tasa,Monto,Interes; int NumPer; //Ingresar datos clrscr(); cout<<"\nIngresar Capital: ";cin>>Capital; cout<<"% de Tasa Interes: ";cin>>Tasa; cout<<"Numero de periodos: ";cin>>NumPer; //Calcular Monto de acuerdo a la formula Monto=Capital*pow((1+Tasa/100),NumPer); //Calcular valor de los intereses Interes=Monto-Capital; //Escribir resultado cout<<endl; //Cambio de linea cout<<"Intereses ganados: "<<Interes; //Pausa para ver los resultados getch(); } DIAGRAMA DE FLUJO INICIO Capital, tasa,NumPer E * ** Interes FIN S 8 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP01-03 Convertir un número real, que representa horas, a su equivalente en horas, minutos y segundos. DATOS D. Entrada: Un número real (NumReal) D. Salida: Horas (Hor), Minutos (Min), Segundos (Seg) CODIFICACIÓN C++ /*........................ PROGRAMA CPP01.03.CPP Procesos Secuenciales ........................*/ //Inclusion de librerias #include<iostream.h> //Para cin, cout #include<conio.h> //Para clrscr(), getch() //funcion principal void main() { //Declaracion de variables float NumReal; int Hor,Min,Seg; //Ingreso de datos clrscr(); cout<<"Ingrese un numero real: ";cin>>NumReal; //Conversion a unidades pedidas Hor=int(NumReal); NumReal=(NumReal-Hor)*60; Min=int(NumReal); Seg=(NumReal-Min)*60; //Escribir resultados cout<<endl; //endl es para salto de linea cout<<"Horas : "<<Hor<<endl; cout<<"Minutos : "<<Min<<endl; cout<<"Segundos : "<<Seg; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO NumReal E Hor=int(NumReal) NumReal=(NumReal-Hor)*60 Min=int(NumReal) Seg=(NumReal-Min)*60 Hor, Min, Seg S FIN Problema CPP01-04 Supongamos que X,Y,Z son las siguientes funciones: 𝑥 = 𝑡 4 − 8𝑡 + 4, 𝑦 = 𝑠𝑒𝑛(𝑡) + cos(2𝑡), 𝑧 = 𝑒 3𝑡+5 Escribir un programa que lea “t” e imprima x,y,z. DATOS D. Entrada: t D. Salida: x,y,z 9 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*........................ PROGRAMA CPP01.04.CPP Procesos Secuenciales ........................*/ //Inclusion de librerias #include<iostream.h> //Para cin,cout #include<conio.h> //Para clrscr(), getch() #include<math.h> //Para pow() //funcion principal void main() { //Declaracion de variables float t,x; double z,y; //Ingreso de datos clrscr(); //El "\n"para salto de linea cout<<"\nIngresar t: ";cin>>t; //Calcular funciones x=pow(t,3)-8*t+4; y=sin(t)+cos(2*t); z=pow(2.7183,3*t+5); //Escribir Resultados cout<<"\nEl valor de Z: "<<z; cout<<"\nEl valor de Y: "<<y; cout<<"\nEl valor de X: "<<x; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO t E x=t^4-8t+4 y=sen(t)+cos(2t) z=e^(3t+5) x,y,z FIN S Problema CPP01-05 Supongamos que un automóvil parte del reposo y tiene una aceleración constante “a”, por “t” segundos. La velocidad final “v” y la distancia “d”, recorrida por el automóvil, son dados por las formulas: 1 𝑑 = 2 𝑎𝑡 2 𝑣 = 𝑎𝑡 DATOS D. Entrada: tiempo (t), CODIFICACIÓN C++ aceleración (a) /*........................ D. Salida: distancia (d), PROGRAMA CPP01.05.CPP velocidad (v) INICIO t,a d=(½)at^2 v=at d,v FIN S E DIAGRAMA DE FLUJO Procesos Secuenciales ........................*/ //Inclusion de librerias #include<iostream.h> //Para cin, cout #include<conio.h> //Para clrscr(), getch() #include<math.h> //Para pow() //funcion principal void main() { float t,a,d,v; clrscr(); cout<<"\nIngresamos t= ";cin>>t; cout<<"Ingresamos a= ";cin>>a; d=(1/2)*a*pow(t,2); v=a*t; cout<<"\nla distancia es:\nd= "<<d; cout<<"\n\nla velocidad es:\nv= "<<v; getch(); } 10 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. Determinar el valor de la HIPOTENUSA de un triángulo rectángulo aplicando el teorema de Pitágoras, el perímetro y el área que representa conociendo solamente el valor de sus catetos. 2. De acuerdo a un principio aritmético, un número es múltiplo de 5 si termina en 0 o en 5. Aplicando este principio determinar si un número entero es múltiplo de 5. 3. Muestre el algoritmo lea 2 valores a,b; y los intercambie. Por ejemplo si a=2 y b=5 el algoritmo debe hacer que a=5 y b=2. 4. Determinar la suma de los N primeros números enteros de acuerdo a la siguiente formula: 𝑁 ∗ (𝑁 + 1) 𝑆𝑢𝑚𝑎 = 2 5. Calcule el volumen de un cilindro recto conociendo su radio y su altura. 6. Calcule la media aritmética de los n primeros números enteros positivos. 7. Calcule la distancia entre 2 puntos de coordenadas conocidas. 8. Calcule la longitud de una circunferencia de radio conocido. 9. Cuál es el área total de un paralelepípedo. 10. En una reunión asistieron n personas, ¿Cuántos apretones de mano hubieron? 11 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 12 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROCESOS CONDICIÓN SIMPLE (if-else) Se llaman así porque para ejecutar ciertas órdenes y tareas dependen de una condición cuyo resultado puede ser verdadero o puede ser falso. Toda condición implica una comparación. Ejm. Inicio Ingresar nota SI(nota>10) Imprimir “APROBADO” SINO Imprimir “DESAPROBADO” FIN del SI Fin a) b) CONDICIÓN CONDICIÓN ACCIONES ACCIÓN V ACCIÓN F La condición, puede ser cualquiera de los siguientes elementos: variable, expresión, Función; sin embargo, el valor que representa solamente podrá ser verdadero o falso. En C++ el calor 0 significa Falso y un valor diferente de 0 significa Verdadero. Acción V, Acción F: conjunto de sentencias. Si el número es sentencias es mayor que uno, se encierra en llaves. C++ a) if (CONDICIÓN) { ACCIONES; } b) if (CONDICIÓN) { ACCIÓN V; } else { ACCIÓN F } 13 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP02-01 Ingresar el código de un trabajador, el número de horas que trabaja a la semana; y la tasa o pago por hora de trabajo. Si el obrero trabaja más de 40 horas por cada hora extra se le pagará hora y media. Escribir como salida la identidad, la taza por hora y el pago bruto. DATOS D. Entrada: código (id), tasa por hora (tasa), número de hora a la semana (numh). D. Salida: id, tasa, pago bruto (pagof) CODIFICACIÓN C++ /*........................... PROGRAMA CPP02.01.CPP Procesos Condición Simple ...........................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int id,numh; float tasa, pagof; //Ingreso de datos clrscr(); cout<<"\nidentifiquese, ingrese su id= ";cin>>id; cout<<"Ingrese la tasa por hora= "; cin>>tasa; cout<<"Numero de horas trabajadas= ";cin>>numh; //Calculando el pago final if(numh<=40) pagof=tasa*numh; else pagof=tasa*40+(numh-40)*1.5*tasa; //Imprimir resultados cout<<"\nSu identidad= "<<id<<endl; cout<<"Tasa por hora= "<<tasa<<endl; cout<<"Su pago final= "<<pagof; //Pausa para los resultados getch(); } Si 𝑁𝑢𝑚ℎ 30: 𝑝𝑎𝑔𝑜𝑓 = 𝑡𝑎𝑠𝑎 ∗ 𝑛𝑢𝑚ℎ (*) Si Numh 50: 𝑝𝑎𝑔𝑜𝑓 = 𝑡𝑎𝑠𝑎 ∗ 40 ∗ (𝑛𝑢𝑚ℎ − 40) ∗ 1.5 ∗ 𝑡𝑎𝑠𝑎 (**) DIAGRAMA DE FLUJO INICIO id, tasa, Numh 0 Numh<=40 E 1 ** * id, tasa pagof S FIN Problema CPP02-02 Una llamada telefónica en cualquier teléfono público cuesta S/.0.5 por los primeros 3 minutos o menos. Cada minuto adicional es un paso de contador y cuesta S/.0.1. Calcule el monto de una llamada cualquiera. DATOS D. Entrada: Duración de llamada (duración). D. Salida: Costo de la llamada (costo). 14 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*........................... PROGRAMA CPP02.02.CPP Procesos Condición Simple ...........................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int duracion; float costo; //Ingreso de datos clrscr(); cout<<"\nDuracion de llamada= ";cin>>duracion; //Calculando el costo de llamada if(duracion<=3) costo=0.5; else costo=0.5+0.1*(duracion-3); //Imprimir resultados cout<<"\nEl costo de la llamada: S./"<<costo; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO durac 0 durac<=3 cos=0.5+0.1* (durac-3) E 1 cos=0.5 cos S FIN Problema CPP02-03 Conociendo x, encuentre el valor numérico de la siguiente expresión. 𝑥 − 3 𝑦 = 2 𝑥 − 25 DATOS CODIFICACIÓN C++ D. Entrada: x D. Salida: y /*........................... DIAGRAMA DE FLUJO PROGRAMA CPP02.03.CPP Procesos Condición Simple ...........................*/ #include<iostream.h> #include<conio.h> //funcion principal void main() { //declaraciom de varibles float x,y; //ingreso de datos clrscr(); cout<<"\nIngrese x= ";cin>>x; //impimiemdo costo de la llamada if(x==5||x==-5) cout<<"\n\tLa funcion es discontinua en ese punto"; else { y=(x-3)/(x*x-25); cout<<"\nLa funcion vale: "<<y; cout<<"\tCuando x vale: "<<x; } //pausa para los resultados getch(); } INICIO x 0 x==5v x==-5 E 1 Y=(x-3)/(x^2-25) Funcion discontinua Y S S FIN 15 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP02-04 El rendimiento de un alumno se califica según lo siguiente: Bueno si su promedio está entre 16 y 20. Regular si su promedio está entre 11 y 15. Deficiente si su promedio está entre 6 y 10. Pésimo si su promedio está entre 0 y 5. Escriba un algoritmo que lea el promedio de un alumno y diga cuál es su rendimiento. DATOS D. Entrada: promedio (prom) D. Salida: Rendimiento (bueno, regular, deficiente, pésimo) CODIFICACIÓN C++ /*........................... PROGRAMA CPP02.04.CPP Procesos Condición Simple ...........................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int prom; //Ingreso de datos clrscr(); cout<<"\nIngrese su promedio= ";cin>>prom; //Escribiendo el rendimiento del alumno if(prom<0||prom>20) cout<<"\n\tDatos erroneos"; else { if(prom<=5) cout<<"\nRendimiento PESIMO"; else if(prom<=10) cout<<"\nRendimiento DEFICIENTE"; else if(prom<=15) cout<<"\nRendimiento REGULAR"; else cout<<"\nRendimiento BUENO"; } //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO prom 0 0 prom<=5 0 prom<=10 0 prom<=15 DEFICIENTE 1 PESIMO S 1 prom<0v Prom>20 1 E 1 Datos Erróneos S S S BUENO S REGULAR S FIN Problema CPP02-05 Si el ingreso del encuentro gastronómico es de 3 soles y de acuerdo al consumo correspondiente un descuento respecto a la tabla 1. Determinar, el pago final del comensal, el descuento es al consumo. 16 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Tabla 1: DATOS D. Entrada: Consumo (Cons) D. Salida: Pago final a pagar (Pago) CODIFICACIÓN C++ /*........................... PROGRAMA CPP02.05.CPP Procesos Condición Simple ...........................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables float cons,desc,pago; //Ingreso de datos clrscr(); cout<<"\nIngrese el consumo= ";cin>>cons; //Calcular el pago final if(cons>=200) desc=cons*0.15; else { if(cons>=100) desc=cons*0.1; else if(cons>=50) desc=cons*0.05; else desc=cons*0.01; } pago=3+cons-desc; //Escribiendo los resultados cout<<"Lo que tiene que pagar: "<<pago; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO cns 0 cns>=200 0 cns>=100 0 cns<=50 dsc=cons*0.1 S dsc=cns*0.01 1 dsc=cns*0.15 1 E 1 S S S dsc=cns*0.05 S FIN SUGERENCIA Para el ejercicio 4 también se le podría poner de esta manera: //Escribir el rendimiento del alumno if(prom<0||prom>20) cout<<"\n\tDatos erroneos"; else if(prom<=5) cout<<"\nRendimiento PESIMO"; else if(prom<=10) cout<<"\nRendimiento DEFICIENTE"; else if(prom<=15) cout<<"\nRendimiento REGULAR"; else cout<<"\nRendimiento BUENO"; //Pausa para los resultados getch(); } Así se podría ahorrar un poco de espacio, y estructurar un poco mejor la codificación. 17 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. Encuentre el mayor de 3 números ingresados por el teclado. 2. Determinar las raíces de una ecuación de segundo grado. Tener en cuenta que las raíces pueden ser imaginarias. 3. Diga si un número es par o impar. 4. Si dos números son positivos calcule su producto, en caso contrario calcule la suma. 5. Muestre un algoritmo que nos permita evaluar la función: 𝑥 2 + 1 , 𝑠𝑖 𝑥 ≤ 0 𝑓(𝑥) {𝑥 2 + 3𝑥 + 2 , 𝑠𝑖 0 < 𝑥 < 3 𝑥 + 1 , 𝑠𝑖 𝑥 ≥ 3 6. Un profesor desea implementar un algoritmo que le permita bonificar equitativamente a todos sus alumnos de acuerdo a la nota conseguida en un examen, de la siguiente forma: NOTA BONIFICACION < 5 3 < 10 2 >=10 pero < 15 1 >=15 pero <= 20 se le descuenta El residuo de la nota/5 Determinar la nota bonificada para cualquier alumno. 7. Dos personas desean intercambiar sus identidades (Nombre, dirección, teléfono, edad) siempre y cuando la edad del primero fuese mayor que la edad del segundo en no más de 4 años. Ingresar los datos de cada persona y mostrar sus nuevas identidades o un mensaje mostrando la diferencia de edades que impidiera el intercambio de identidades. 8. Un trabajador del estado percibe un sueldo básico mensual de 450 nuevos soles; además recibe incrementos de sueldo de acuerdo a los siguientes conceptos: También, por Ley está sujeto a un descuento de 10% si su sueldo excedo de S/. 700. Determinar el sueldo neto que recibe un trabajador. 9. El gobierno ha implementado como parte de su programa social, un subsidio familiar bajo la siguiente reglamentación : a. Las familias que tienen hasta 2 hijos reciben S/.70.00, las que tienen entre 3 y 5 hijos reciben S/. 90.00 y las tienen 6 hijos o más reciben S/. 120.00 mensual. b. Por cada hijo en edad escolar reciben S/. 10.00 adicionales. Se considera la edad escolar entre 6 y 18 años. c. Si la madre de familia fuera viuda, la familia recibe S/. 20.00 adicionales. Determinar el monto mensual que recibirá una familia de acuerdo a su propia realidad familiar. 10. Ordene 3 números a, b y c de tal manera que al final a, siempre sea el mayor, b sea el intermedio y c el menor. 18 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 19 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROCESOS CONDICIÓN MULTIPLE (switch) Se llama así porque la ejecución de sus órdenes y tareas dependen de la selección que se haga entre varias alternativas o casos. Ejm. Inicio Ingresar talla SELECCIONA (talla) de caso ‘S’: imprimir “talla caso ‘M’: imprimir “talla caso ‘L’: imprimir “talla caso ‘X’: imprimir “talla Fin de Selección Fin Selector 1 2 ... n default Small” Medio” Large” Extra Large” Accion 1 C++ Accion 2 Accion n Accion x Switch (selector) { Case alternativa 1: Acción 1: break; Case alternativa 2: Acción 2: break; Case alternativa 3: Acción 3: break; . . . Case alternativa n: Acción n: break; Default: Acción X; } El selector puede ser variable, expresión, función; sin embargo, el valor que representa debe ser escalar. Es decir: numérico entero, o carácter individual. De ninguna manera puede ser una cadena ni un float. Este selector será evaluado en cada alternativa hasta que encuentre su lugar, si encuentra una alternativa, ejecuta la acción correspondiente y termina la estructura. Cada alternativa está conformada por un único valor. Cada acción, al igual que en la estructura del tema anterior, puede estar conformada por una o varias sentencias (bloque se sentencias).El uso del default es opcional, sin embargo sirve para ejecutar algo (Acción X) cuando el selector no encuentra su lugar. “Encontrado un CASE el Break, es el que da como terminado el SWITCH”. 20 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP03-01 Lea un mes y un año y determine cuántos días tiene ese mes. Datos D. Entrada: mes y año. D. Salida: días Tener en cuenta si un año es bisiesto. CODIFICACIÓN C++ /*............................ PROGRAMA CPP03.01.CPP Procesos Condicion multiple .............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int m,a,dias; //Ingreso de datos clrscr(); cout<<"\nIngrese el mes= ";cin>>m; cout<<"\nIngrese el anio= ";cin>>a; //Determinar estacion switch(m) { case 1: case 3:case 5:case 7:case 8:case 10: case 12: dias=31;break; case 4:case 6:case 9:case 11: dias=30;break; case 2: if(!(a%4)&&(a%100)||(a%400)) dias=29; else dias=28; break; default: cout<<"Mes incorrecto"; } //Escribiendo los resultados cout<<"\nEl mes "<<m<<"\tdel anio "<<a<<"\ttiene "<<dias<<" dias"; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO m,a E m 1,3,5,7,8,10,12 dias=31 dias=30 4,6,9,11 2 0 aMOD4==0 AND aMOd100!=0 OR aMOD400==0 1 dias=28 dias=29 Default Mes incorrecto dias s Problema CPP03-02 FIN En una tienda de accesorios para computadores, el precio de venta unitario de los diskettes es el mismo para cualquier marca, sin embargo el descuento varía de acuerdo a la marca y se establece en la siguiente tabla. Determinar el importe a pagar por la cantidad de diskettes comprados de una sola marca, considerando que no se paga impuestos. Mostrar importe bruto, descuento e importe a pagar. DATOS D. Entrada: marca, precio, cantidad D. Salida: importe bruto (impbruto), descuento (dscto), importe a pagar (importe) 21 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*............................ PROGRAMA CPP03.02.CPP Procesos Condicion multiple .............................*/ //Inclusion de librerias #include<iostream.h> Asd #include<conio.h> //funcion principal void main() { //Declaracion de variables int marca,cantidad; float precio,impbruto,dscto,importe; //Escribir marcas a escoger clrscr(); textcolor(4); gotoxy(30,3);cprintf("MARCAS de DISKETTES"); gotoxy(29,4);cout<<"~~~~~~~~~~~~~~~~~~~~~"; gotoxy(35,6);cout<<"1.- 3M"; gotoxy(35,7);cout<<"2.- NCR"; gotoxy(35,8);cout<<"3.- Sentinel"; gotoxy(35,9);cout<<"4.- Burroughs"; gotoxy(35,10);cout<<"5.- GoldStar"; //Ingreso de datos gotoxy(35,12);cout<<"MARCA: ";cin>>marca; gotoxy(35,13);cout<<"PRECIO: ";cin>>precio; gotoxy(35,14);cout<<"CANTIDAD: ";cin>>cantidad; //Calcular el importe bruto impbruto=cantidad*precio; //Descuento de acuerdo a la MARCA switch(marca) { case 1:dscto=impbruto*0.1;break; case 2:dscto=impbruto*0.15;break; case 3:dscto=impbruto*0.2;break; case 4:dscto=impbruto*0.25;break; case 5:dscto=impbruto*0.3;break; default: cout<<"Lo sentimos no se encuentra esa marca"; } //Calcluar importe a pagar importe=impbruto-dscto; //Escribiendo los resultados cout<<"\nImporte bruto: "<<impbruto; cout<<"\nDescuento "<<dscto; cout<<"\nImporte a pagar: "<<importe; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO Menu Marcas S Marca,precio, E cantidad marca 1 2 3 4 5 Dsto=impbruto*0.1 Dsto=impbruto*0.15 Dsto=impbruto*0.2 Dsto=impbruto*0.25 Dsto=impbruto*0.3 No existe esta marca Default Impo=impbruto-Dsto Impbruto, Dsto,impo s Problema CPP03-03 FIN Lea tres números que representen el día, el mes y el año, y diga si forman una fecha correcta. Considere años bisiestos. DATOS D. Entrada: día (d), mes (m), año (a) D. Salida: fecha correcta, fecha incorrecta. 22 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*............................ PROGRAMA CPP03.03.CPP Procesos Condicion multiple .............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int d,m,a,maxdia; //Ingreso de datos clrscr(); cout<<"\nDia= ";cin>>d; cout<<"Mes= ";cin>>m; cout<<"Anio= ";cin>>a; //Determinar fecha correcta switch(m) { case 1:case 3:case 5:case 7:case 8: case 10:case 12: maxdia=31;break; case 4:case 6:case 9: case 11: maxdia=30;break; case 2:if(!(a%4)&&(a%100)||(a%400)) maxdia=29;break; else maxdia=28;break; default: cout<<"Mes incorrecto"; } //Escribiendo los resultados if((d>0)&&(d<=maxdia)&&(m>0)&&(m<13)&&(a>0)) cout<<"\nLa fecha es correcta"; else cout<<"\nLa fecha es incorrecta"; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO d,m,a E m 1,3,5,7,8,10,12 maxdia=31 maxdia=30 4,6,9,11 2 0 aMOD4==0 AND aMOd100!=0 OR aMOD400==0 1 dias=28 dias=29 Default Mes incorrecto 0 d>0 AND d<=maxdia AND m>0 AND m<13 AND a>0 1 s Mes incorrecto s Mes correcto Problema CPP03-04 FIN Determinar el importe a pagar por un alumno de un instituto cuya cuota tiene un porcentaje de descuento que se establece en la siguiente tabla y está en función al colegio de procedencia del alumno; asimismo los importes están exonerados de impuestos. DATOS D. Entrada: colegio,institut(op) /*............................ PROGRAMA CPP03.04.CPP Cuota. Procesos Condicion multiple D. Salida: Importe a pagar .............................*/ (importe) //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int colegio,op; float cuota,importe,Dscto; //Escribir colegio de procedencia clrscr(); textcolor(3); CODIFICACIÓN C++ 23 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ gotoxy(30,3);cprintf("COLEGIO DE PROCEDENCIA"); gotoxy(29,4);cout<<"~~~~~~~~~~~~~~~~~~~~~~~~"; gotoxy(35,6);cout<<"1.- NACIONAL"; gotoxy(35,7);cout<<"2.- PARTICULAR"; //Ingreso de colegio gotoxy(35,9);cout<<"OPCION: ";cin>>colegio; //Escribir INSTITUTO de estudios clrscr(); gotoxy(34,3);cprintf("INSTITUTO"); gotoxy(33,4);cout<<"~~~~~~~~~~~~~"; gotoxy(35,6);cout<<"1.- A"; gotoxy(35,7);cout<<"2.- B"; gotoxy(35,8);cout<<"3.- C"; //Ingreso de colegio gotoxy(35,10);cout<<"OPCION: ";cin>>op; gotoxy(28,11);cout<<"Ingresar cuota del mes: ";cin>>cuota; switch(colegio) { case 1:switch(op) { case 1:Dscto=cuota*0.5;break; case 2:Dscto=cuota*0.4;break; case 3:Dscto=cuota*0.3;break; } break; case 2:switch(op) { case 1:Dscto=cuota*0.25;break; case 2:Dscto=cuota*0.20;break; case 3:Dscto=cuota*0.15;break; } break; } //Calcluar importe a pagar importe=cuota-Dscto; //Escribiendo los resultados cout<<"\nImporte a pagar: "<<importe; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO Menu Colegio colegio Menu Instituto op S E S E colegio 1 op 1 Dsto=impbruto*0.5 2 Dsto=impbruto*0.4 3 Dsto=impbruto*0.3 2 op 1 Dsto=impbruto*0.25 2 Dsto=impbruto*0.20 3 Dsto=impbruto*0.15 Impo=impbruto-Dsto Impo s Problema CPP03-05 FIN Una universidad privada tiene una política de descuento en porcentajes sobre el pago de pensiones de enseñanza, que se basa en la profesión del tutor (policía, profesor de colegio, docente universitario, trabajador no docente y otros) y, el rendimiento del alumno (bueno, regular, deficiente), tal como se muestra en el cuadro siguiente: Tabla de descuento (en %) DATOS D. Entrada: ocupación (ocup), rendimiento (rend) D. Salida: descuento (d) 24 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*............................ PROGRAMA CPP03.05.CPP Procesos Condicion multiple .............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables char ocup,rend; float d; //Escribir ocupacion clrscr(); textcolor(3); gotoxy(35,3);cprintf("OCUPACION"); gotoxy(34,4);cout<<"~~~~~~~~~~~"; gotoxy(35,6);cout<<"P.- POLICIA"; gotoxy(35,7);cout<<"C.- PROF DE COLEGIO"; gotoxy(35,8);cout<<"D.- DOC UNIVERSITARIO"; gotoxy(35,9);cout<<"N.- NO DOCENTE"; gotoxy(35,10);cout<<"0.- OTROS"; //Ingreso de ocupacion gotoxy(33,12);cout<<"OCUPACION: ";cin>>ocup; clrscr(); gotoxy(34,3);cprintf("TIPO DE RENDIMIENTO"); gotoxy(33,4);cout<<"~~~~~~~~~~~~~~~~~~~~~"; gotoxy(35,6);cout<<"A.- BUENO"; gotoxy(35,7);cout<<"B.- REGULAR"; gotoxy(35,8);cout<<"C.- DEFICIENTE"; //Ingreso el rendimiento gotoxy(33,10);cout<<"RENDIMIENTO: ";cin>>rend; switch(ocup) { case 'P':switch(rend) { case 'A':d=0.6;break; case 'B':d=0.3;break; case 'C':d=0.1;break; } break; case 'C':switch(rend) { case 'A':d=0.5;break; case 'B':d=0.2;break; case 'C':d=0.1;break; } break; case 'D':switch(rend) { case 'A':d=0.4;break; case 'B':d=0.2;break; case 'C':d=0.0;break; } break; case 'N':switch(rend) { case 'A':d=0.4;break; case 'B':d=0.1;break; case 'C':d=0.0;break; } break; case 'O':switch(rend) { case 'A':d=0.3;break; case 'B':case 'C':d=0.0;break; } break; } //Escribiendo los resultados cout<<"\nEl descuento sera: "<<d<<"%"; //Pausa para los resultados getch(); } INICIO DIAGRAMA DE FLUJO S Menu Ocupación ocup E S Menu Rendimiento rend E ocup P rend A B C D=0.6 D=0.3 D=0.1 C rend A B C D=0.5 D=0.2 D=0.1 D rend A B C D=0.4 D=0.2 D=0.0 N rend A B C D=0.4 D=0.1 D=0.0 O rend A B,C D=0.3 D=0.0 D s FIN 25 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. Muestre las opciones de un menú, seleccione una opción e imprima el mensaje apropiado indicando la opción seleccionada. 2. Construya una calculadora que lea 2 números y un operador, y efectué la operación dada. La calculadora será capaz de realizar las siguientes operaciones básicas (suma, resta, multiplicación, división). 3. Lea un día y un mes cualesquiera y determine a que estación pertenece. Considere que primavera inicia el 23 de setiembre, verano inicia el 21 de diciembre, otoño empieza el 21 de marzo e invierno el 22 de junio. 4. Los signos del zodiaco son 12: Aries (marzo 21 – abril 20), tauro (abril 21 – mayo 20), géminis (mayo 21 – junio 21), cáncer (junio 22 – julio 22), leo (julio 23 – agosto 22), virgo (agosto 23 – setiembre 22), libra (setiembre 23 – octubre 22), escorpio (octubre 23 – noviembre 21), sagitario (noviembre 22 – diciembre 21), capricornio (diciembre 22 - enero 20), acuario (enero 21 – febrero 19) y piscis (febrero 20 – marzo 20). Escriba un programa que lea el día y mes de su nacimiento y determine a que signo pertenece. 5. Dada una fecha cuantos días faltan para que termine el año? 6. Todo el mundo sabe cuántos años tiene, pero ¿Podría contestar a la pregunta cuantos días tiene? 7. Una tienda de ropa ha establecido los porcentajes de descuento, que se indican a continuación, de acuerdo a ciertas características del comprador: nacionalidad (1,2) y del producto que compra: sexo (H,M), talla (Niño, Joven, Adulto). Se sabe que una persona puede comprar varios productos por lo que se desea mostrar como resultados lo siguiente: nombre del comprador, cantidad de productos comprados, importe comprado, importe descontado y el importe a pagar; para lo cual se deben ingresar los datos que sean necesarios. El proceso para la compra de una persona termine cuando al ingresar el nombre del comprador se presiona ENTER. 8. Dada una fecha obtenga el número de día dentro de ese año. Por ejemplo el 26/10/2000 es el día 300 del año 2000. 9. Un alumno es calificado con a, b, c o d. Será bueno si obtuvo un a, regular si obtuvo un b, malo si obtuvo un c, y pésimo si obtuvo un d. Lea un calificativo y escriba que tipo de alumno es. 10. Obtenga el número de días transcurridos entre dos fechas. 26 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 27 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROCESOS REPETITIVOS (MIENTRAS O while) Se llaman así porque la ejecución de sus órdenes y tareas se realizan reiterativamente dependiendo del cumplimiento de una condición para que continúe o para que termine. Ejm. Inicio Contador=1 MIENTRAS (contador<=10) Inicio Ingresar nota Acumular nota Incrementar contador Fin Calcular promedio Imprimir promedio Fin Observe que las ordenes de ingresar nota, acumular nota e incrementar contador se repiten mientras el contador no pase de 10; cuando esto suceda, el proceso repetitivo termina para seguir con el cálculo del promedio y su respectiva impresión. 0 Condicion sea verdad 1 Acciones C++ While (condición sea verdad) { Acciones; } (1) (2) Evalúa la condición Se el resultado es VERDADERO Ejecuta la Acción Regresa al punto (1) Termina la estructura cuando el resultado de la condición es Falso. (3) La condición puede ser: variable, expresión o el valor de una función; sin embargo, el valor que representa sólo puede ser Verdadero o Falso. La acción, al igual que en los temas anteriores puede estar conformada por una o varias sentencias. Si estuviera conformada por varias sentencias (bloques de sentencias) deben de estar entre llaves. 28 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP04-01 Obtenga el cociente y el residuo de una división calculando la cantidad de veces que un número está contenido en otro, mediante restas sucesivas. Por ejemplo, si el dividiendo es a=5236 y el divisor b=1247, entonces tendremos: 5236 - 1247 = 3989 3989 - 1247 = 2742 2742 - 1247 = 1495 1495 – 1247 = 248 ya no seguimos restando pues 248 es menor que 1247: El cociente estará dado por el número de restas (4) y el residuo por el último número obtenido (248). DATOS D. Entrada: dividendo (a), divisor (b) D. Salida: cociente (coc), Residuo DIAGRAMA DE FLUJO CODIFICACIÓN C++ /*.............................. PROGRAMA CPP04.01.CPP Procesos Repetitivos: Mientras ..............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int num,den,coc; float a,b; //Ingresando datos clrscr(); cout<<"\n\tIngrese dividendo: ";cin>>a; cout<<"\tIngrese divisor: ";cin>>b; //calculando coc=0; while(a>b) { a=a-b; coc=coc+1; } //Escribiendo los resultados cout<<"\n\tCociente: "<<coc<<endl; cout<<"\tResiduo: "<<a; //Pausa para los resultados getch(); } INICIO E a,b coc=0 0 a>b 1 a=a-b coc++ a,coc FIN s 29 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP04-02 Calcule los divisores comunes de dos números. divisores comunes de 6 y 18 son 1, 2, 3 y 6. DATOS D. Entrada: números (a,b) D. Salida: divisores CODIFICACIÓN C++ /*.............................. PROGRAMA CPP04.02.CPP Procesos Repetitivos: Mientras ..............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int i,a,b; //Ingresando datos clrscr(); cout<<"\n\t\tDivisores comunes de dos numeros"<<endl; cout<<"\n\tIngrese primer numero: ";cin>>a; cout<<"\tIngrese segundo numero: ";cin>>b; //calculando y escribiendo resultados i=1; while(i<=a&&i<=b) { if(a%i==0&&b%i==0) cout<<"\t"<<i; i++; } //Pausa para los resultados getch(); } Por ejemplo los DIAGRAMA DE FLUJO INICIO E a,b i=1 0 i<=a AND i<=b 1 0 a%i==0 AND b%i==0 1 i s i++ FIN Problema CPP04-03 Hallar la suma de los N primeros términos de la serie. 1 1 1 𝑆 = 2 + 4 + 6 + ⋯ 𝑁 términos. DATOS D. Entrada: cantidad de términos (n) D. Salida: suma de términos (S) 30 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*.............................. PROGRAMA CPP04.03.CPP Procesos Repetitivos: Mientras ..............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int cont,n; float s,par; //Ingresar dato clrscr(); cout<<"Ingresar cantidad de terminos: ";cin>>n; //calculando la suma cont=1;s=0;par=2; while(cont<=n) { s=s+(1/par); par=par+2; cont=cont+1; } //Inmprimiendo resultados cout<<"La suma de la secuencia es: "<<s; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO n cont=1,s=0, par=2 0 E cont<=n 1 s=s+1/par par+=2 cont++ s FIN s Problema CPP04-04 Lea un número y forme otro número con las cifras en orden inverso. Así si el número es 12345 el nuevo número será 54321. DATOS D. Entrada: numero (n) D. Salida: inverso (inv) DIAGRAMA DE FLUJO INICIO E n inv=0 0 CODIFICACIÓN C++ /*.............................. PROGRAMA CPP04.04.CPP Procesos Repetitivo: Mientras ..............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //unsigned long da mayor rango unsigned long int n,inv; //Ingresar datos clrscr(); cout<<"Ingresar numero: ";cin>>n; //calculando El inverso inv=0; while(n>0) { inv=10*inv+n%10; n=n/10; } cout<<"El inverso es: "<<inv; getch(); } n>0 1 inv*=10-n%10 n/=10 inv FIN s 31 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP04-05 Los números Amstrong o cubos perfectos, son aquellos que sumados los cubos de sus dígitos nos dan el mismo número. Por ejemplo 153 es un cubo perfecto pues 13 + 53 + 33 = 153. Lea un número y diga si es o no un cubo perfecto. DATOS D. Entrada: número (n) D. Salida: Es o no es un número Amstrong DIAGRAMA DE FLUJO CODIFICACIÓN C++ /*.............................. PROGRAMA CPP04.05.CPP Procesos Repetitivos: Mientras ..............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> #include<math.h> //funcion principal void main() { //Declaracion de variables int n,temp,sc; //Ingresar datos clrscr(); cout<<"Ingresar numero: ";cin>>n; //calculando los cubos perfectos sc=0; temp=n; while(temp>0) { sc=sc+pow(temp%10,3); temp=temp/10; } //Inmprimiendo resultados if(n==sc) cout<<"\nEs cubo perfecto"; else cout<<"\nNo es cubo perfecto"; //Pausa para los resultados getch(); } INICIO E n sc=0, temp=n 0 temp>0 1 sc+=(temp%10)^3 temp/=10 0 n==sc 1 No es s Es s FIN 32 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. La secuencia de Fibonacci, es muy conocida en los círculos matemáticos y tiene la particularidad que cada número es igual a la sumas de los 2 anteriores términos. La serie de Fibonacci comienza con los números 0 y 1, produciendo la siguiente secuencia: 0, 1, 1, 2, 3, 5, 8, 13, …, etc. Muestre todos los números de Fibonacci que sean menores que un número dado, además indicando la suma de los mismos. 2. Escriba un algoritmo que diga si un número es primo. 3. Escriba un programa que permita reducir una fracción a su mínima 28 7 expresión. Por ejemplo 64 = 16. 4. Determinar la cantidad de dígitos que tiene un número entero y además mostrar la suma delos dígitos pares é impares. Considerar cero (0) como dígito par. 5. El máximo común divisor (mcd) de un conjunto de números es el máximo número; que divide exactamente a todos ellos. Construya un programa que encuentre el MCD de dos números. 6. El factorial de un número se define como el producto de todos los números consecutivos desde la unidad hasta el número y se denota por el símbolo de (!). Por ejemplo 4!=4x3x2x1, teniendo en cuenta esto, lea un número y encuentre su factorial. 7. Un número es capicúa o políndromo, si el número es tal que invirtiendo sus cifras da el mismo número. Asi 12321 es capicúa porque invirtiendo sus cifras 12321. Escriba un algoritmo que diga si un número ingresado es capicúa. 8. Se sabe que 𝑛2 = 1 + 3 + 5 + 7 + 2𝑛 − 1. Se pide leer un número y calcular su cuadrado haciendo uso de esta relación. 9. El mínimo común múltiplo (mcm) de 2 o más números, es el menor número que lo contiene a todos ellos una cantidad exacta de veces. Construya un algoritmo para calcular el mcm de 2 números leídos por teclado. 10. Mostrar los N primeros términos de la siguiente serie, indicando además la suma de los mismos. 7,9,12,16,21, … 33 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 34 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROCESOS REPETITIVOS (HACER-MIENTRAS O do-while) Se llaman así porque la ejecución de sus órdenes y tareas se realizan reiterativamente dependiendo del cumplimiento de una condición para que continúe o para que termine. Es un proceso complementario al anterior. Ejm. Inicio Contador=1 HACER Ingresar nota Acumular nota Incrementar contador MIENTRAS (contador<=10) Calcular promedio Imprimir promedio Fin Observe que en este proceso, primero se ejecutan las órdenes y luego se evalúa la condición; a diferencia del proceso anterior que era al contrario. Sentencias 1 Cond sea verdad do{ sentencias; }while(condición sea verdad) (1) (2) (3) Ejecuta las sentencias Evalúa la condición Si el resultado es VERDADERO regresa al punto (1) Termina cuando el resultado de la condición es FALSO Lo que va entre llaves son las sentencias a ejecutar repetitivamente mientras la condición sea verdad. La condición, al igual que en los temas anteriores puede ser: variable, expresión, función; sin embargo, el valor que representa solo puede ser verdadero o falso. 35 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP05-01 En el museo de arte un estudiante desea determinar para cierto día, el promedio de edad así como el número de visitantes por sexo para lo cual anota, desde que se abre las puertas hasta el cierre de las mismas, el sexo (H,M) y la edad de cada visitante. Al final del día dicho estudiante escriba cero como sexo para dar por terminado su proceso y mostrar los resultados requeridos. DATOS D. Entrada: sexo, edad D. Salida: Número de visitantes Hombres(contH) Número de visitantes Mujeres(contM) Promedio de edad para Hombres(sumedH/contH) Promedio de edad para Mujeres(sumedM/contM) CODIFICACIÓN C++ /*...................................... PROGRAMA CPP05.01.CPP Procesos Repetitivos: Hacer-Mientras ......................................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables unsigned int sumedH,sumedM; int contH,contM,edad; float prom; char sexo; //Inicializar elementos contH=contM=sumedH=sumedM=0; //Proceso Repetitivo clrscr(); do{ do{ cout<<"Ingrese sexo <M,H, F=FIN>: ";cin>>sexo; }while(sexo!='M'&&sexo!='H'&&sexo!='F'); if(sexo!='F') { cout<<"Ingrese la edad: ";cin>>edad; switch(sexo) { case 'H':sumedH=sumedH+edad; contH++;break; case 'M':sumedM=sumedM+edad; contM++;break; } } }while(sexo!='F'); //Mostrar resultados cout<<"\nNumero de visitantes Hombres: "<<contH; cout<<"\nPromedio de edad para Hombres: "<<sumedH/contH; cout<<"\nNumero de visitantes Mujeres: "<<contM; cout<<"\nPromedio de edad para Mujeres: "<<sumedM/contM; //Pausa para los resultados getch(); } INICIO DIAGRAMA DE FLUJO sexo E Sexo!=M!=H!=F 0 Sexo!=F 1 edad E sexo H M sumedH+=edad sumedH+=edad contH++ contH++ Sexo!=F contH,PromH contM,promM s FIN 36 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP05-02 ¿Cuál es la máxima área de terreno que se puede obtener si las longitudes de un terreno son x y (20-x)? DATOS D. Salida: Área máxima (areamax), Dimensiones INICIO x=areamax=0 DIAGRAMA DE FLUJO CODIFICACIÓN C++ /*...................................... PROGRAMA CPP05.02.CPP Procesos Repetitivos: Hacer-Mientras ......................................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables float x,xmax,area,areamax,inc; //Inicializar elementos x=areamax=0; inc=0.0001;//Incremento //Proceso Repetitivo clrscr(); do{ x=x+inc; area=x*(20-x); if(area>areamax) { areamax=area; xmax=x; } }while(x<=20-inc); //Mostrar resultados cout<<"\nArea maxima: "<<areamax; cout<<"\nDimensiones: "<<xmax<<"\tx: "<<(20-xmax); //Pausa para los resultados getch(); } inc=0.0001 x+=inc area=x(20-x) area>areamax areamax=area xmax=x x<=20-inc Areamas dimensiones s FIN Problema CPP05-03 Para “n” múltiplo de 4 y “n” mayor que 8 y menor igual que 32, escribir los enteros positivos desde el 1 al “n” de manera que a la salida sea 4 números en una línea. DATOS D. Entrada: n: múltiplo de 4 y mayor que 8 y menor igual que 32 D. Salida: i i+1 i+2 i+3 37 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*...................................... PROGRAMA CPP05.03.CPP Procesos Repetitivos: Hacer-Mientras ......................................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int i,n; //Proceso Repetitivo do{ clrscr(); cout<<"\nIngresar 8<n<=32;multiplo de 4, n: "; cin>>n; }while((n%4)!=0||n<=8||n>32); //Inicializar elementos i=0; //Mostrar Resultados cout<<endl; do{ cout<<i<<"\t"<<i+1<<"\t"<<i+2<<"\t"<<i+3<<endl; i=i+4; }while(i<=n); //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO n 1 (n%4) != 0 OR n<=8 OR n>32 E 0 i=0 i,i+1,i+2, i+3 s i=i+4 i<=n FIN Problema CPP05-04 Encuentre el valor de 𝜋 sabiendo que la suma de la serie 1 − + − + 1 9 1 3 1 5 1 7 − ⋯ es igual a 𝜋/4.sugerencia considere los términos cuyo valor absoluto sea mayor a 0.000001. CODIFICACIÓN C++ DATOS D. Salida: valor de pi DIAGRAMA DE FLUJO INICIO i=1 Pi4=0 n Signo=-1 signo=-signo pi4+=signo(1/i) i+=2 1 1/i>0.000001 0 pi s FIN /*...................................... PROGRAMA CPP05.04.CPP Procesos Repetitivos: Hacer-Mientras ......................................*/ #include<iostream.h> #include<conio.h> void main() { float i,pi4,signo; //Inicializar elementos i=1; pi4=0; signo=-1; //Proceso Repetitivo clrscr(); do{signo=-signo;//cambia signo en cada iteracion pi4=pi4+signo*(1/i); i+=2;//actua similar al i=i+2 }while(1/i>0.000001); //Mostrar Resultados cout<<"\n\tPi vale: "<<4*pi4; getch(); } 38 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP05-05 Un estudiante ha registrado 10 instituciones que dictan un curso de computación de su interés, a diferentes costos. Desea determinar el costo promedio del curso, el costo más elevado, el costo más bajo y el nombre de la institución que ofrece el costo más bajo. Se sabe además que ningún costo llega a tener 4 cifras. DATOS D. Entrada: nombre de institución (N), costo del curso (costo) D. Salida: costo promedio (cosprom) CODIFICACIÓN C++ costo mayor (cosmay) /*...................................... costo menor (cosmen) PROGRAMA CPP05.05.CPP nombre de quien tiene Procesos Repetitivos: Hacer-Mientras el costo menor (M) ......................................*/ INICIO cont=1 suma=0 n cosmay=0 Cosmen=999 N, costo E Suma+=costo DIAGRAMA DE FLUJO 0 costo>cosmay 1 cosmay=costo 0 costo>cosmen 1 cosmen=costo M=N cont++ 1 1/i>0.000001 0 cosprom=suma/5 Cosprom Cosmay, Cosmen M s FIN //Inclusion de librerias #include<iostream.h> #include<conio.h> #include<string.h> //funcion principal void main() { //Declaracion de variables int cont; float costo,suma,cosprom,cosmay,cosmen; char N[30],M[30]; //Inicializar elementos cont=1;//contador de instituciones suma=0;//acumulador de costos cosmay=0;//supuesto falso del mayor costo cosmen=999;//supuesto falso del menor costo //Proceso Repetitivo do{ clrscr(); cout<<"\nNombre de institucion"<<cont<<": "; cin>>N; cout<<"Costo del curso: ";cin>>costo; //Acumular costos suma+=costo;//actua igual a suma=suma+costo //Determina el costo mayor if(costo>cosmay) cosmay=costo; //Determinar el costo menor e idenftifica su nombre if(costo<cosmen) { cosmen=costo; strcpy(M,N); } cont++; }while(cont<=5); //Calcular costo promedio cosprom=suma/5; //Mostrar resultados cout<<"\nCOSTO PROMEDIO: "<<cosprom; cout<<"\nCOSTO MAYOR: "<<cosmay; cout<<"\nCOSTO MENOR: "<<cosmen; cout<<"\nNombre de la Institucion: "<<M; //Pausa para los resultados getch(); } 39 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. Lea una serie de números hasta ingresar el valor de cero. Luego indique cuantos números positivos, negativos, pares e impares fueron ingresados. 2. Hallar la raíz cuadrada de un número por el método de Newton. 3. A una fiesta ingresan personas de diferentes edades, no se permite el ingreso de menores de edad. Se pide hallar la edad menor, la mayor y el promedio de edades. El ingreso debe terminar cuando la edad ingresada sea cero. 4. Mostrar los N primeros términos de la siguiente serie, donde N debe estar entre 5 y 30. 5,7,10,14,19,… 5. Se tiene una lámina rectangular de largo y ancho conocidos a la que se recorta un cuadrado de lado x en cada esquina con el objeto de formar una caja. ¿Cuáles son las dimensiones de esta caja, si se desea que el volumen sea el máximo posible? 6. Lea un número positivo y pártalo en dos sumandos de forma que su producto tenga un valor máximo. 7. En un cajero se muestra un menú de opciones retiro, saldo, depósito y salir; un cliente realiza sucesivos retiros desde este cajero, si posee 1000 al inicio de las operaciones. Escriba un algoritmo que efectué dichas operaciones y que permita a un cliente retirar dinero mientras tenga fondos. 8. Una vendedora de pan tiene n unidades de pan al comenzar el día. Si cada cliente le pide m panes, ¿Cuántos clientes son atendidos completamente?¿Cuántos panes quedan para el último cliente? 9. En una universidad se pueden llevar hasta 22 créditos en un ciclo. Escriba un algoritmo que permita a un alumno matricularse, si pasarse del límite de créditos permitido. 10. Una ventana tiene forma de rectángulo culminado por un semicírculo. El perímetro de la ventana es 6m. ¿Cuáles son sus dimensiones si debe dejar pasar el máximo de luz? 40 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 41 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROCESOS REPETITIVOS (PARA o for) Se llaman así porque la ejecución de sus órdenes y tareas se realizan reiterativamente dependiendo del cumplimiento de una condición para que continúe o para que termine. Es un proceso complementario a los anteriores. Ejm. Inicio PARA (contador=1;contador<=10;incrementar contador) Inicio Ingresar nota Acumular nota Fin Calcular promedio Imprimir promedio Fin Observe que este proceso inicializa el contador, evalúa la condición e incrementa el contador en una sola línea; sin embargo, la inicialización lo hace una sola vez, la condición la evalúa cada vez que va a realizar el proceso y el incremento del contador lo hace cada vez que termina el proceso repetitivo. inic;cond;incr Accion C++ for(inicialización;condición;incremento) { Accion; } (1) Contador toma como valor inicial el valor de valor_inicial (2) Si contador <=valor_final, entonces Ejecuta acción Incrementa el contador en una unidad Regresa al punto (2) (3) Termina cuando el contador sea MAYOR que el valor_final En la parte de inicialización se debe dar un valor inicial a la variable que va a controlar el proceso repetitivo. La condición establece la continuidad o el término del proceso. Normalmente en esta condición interviene la variable inicializada. En el incremento se debe hacer el incremento necesario a la variable de inicialización para que ésta pueda hacer variar la condición. La Acción, al igual que en los temas anteriores, puede estar conformada por una ó por varias sentencias. Si estuviera conformada por una sentencia no necesita llaves. 42 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP06-01 Calcular la suma, suma de cuadrados y la suma de cubos de los N primeros números naturales. DATOS D. Entrada: cantidad de números naturales (numN) D. Salida: suma (s), suma cuadrados (sc), suma cubos (scu) CODIFICACIÓN C++ /*............................ PROGRAMA CPP06.01.CPP Procesos Repetitivos: Para ............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> #include<math.h> //funcion principal void main() { //Declaracion de variables long s,sc,scu; int num,numN; //Ingresar cantidad de numeros naturales clrscr(); cout<<"Cantidad de numeros: ";cin>>numN; //Inicializar ACUMULADORES s=sc=scu=0; //Acumular Sumas for(num=1;num<=numN;num++) { s+=num;//s=s+cont sc+=pow(num,2); scu+=pow(num,3); } //Mostrar resultados cout<<"\nLa suma es: "<<s; cout<<"\nLa suma de cuadrados es: "<<sc; cout<<"\nLa suma de cubos: "<<scu; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO numN s=sc=scu=0 E num=1;num<=numN;num++ s+=num sc+=num^2 scu+=num^3 s, sc, scu S FIN Problema CPP06-02 Hallar la suma S: 𝑆 = 1 1 1 + +⋯+ 1 + 𝑥 1 + 2𝑥 1 + 𝑛𝑥 DATOS D. Entrada: valor de D. Salida: suma (s) x, cantidad de sumandos (n) 43 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*............................ PROGRAMA CPP06.02.CPP Procesos Repetitivos: Para ............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables float x,s; int i,n; //Ingresar variables clrscr(); cout<<"Ingresar el valor de x: ";cin>>x; cout<<"Ingresar n: ";cin>>n; //Inicializar ACUMULADORES s=0; //Acumular Sumas for(i=1;i<=n;i++) s+=1.0/(1+i*x); //Mostrar resultados cout<<"\nLa suma total es: "<<s; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO n,x s=0 E i=1;i<=n;i++ s+=1.0/(1+i*x) s S FIN Problema CPP06-03 Un vehículo recorre n distancias en n tiempos diferentes ¿Cuál será su velocidad promedio para toda la trayectoria? DATOS D. Entrada: numero de tramos (n) Distancia (d), tiempo (t) D. Salida: velocidad media (dt/tt) DIAGRAMA DE FLUJO INICIO n dt=tt=0 CODIFICACIÓN C++ /*............................ PROGRAMA CPP06.03.CPP Procesos Repetitivos: Para ............................*/ #include<iostream.h> #include<conio.h> //funcion principal void main() { float d,t,dt,tt; int i,n; clrscr(); cout<<"Numero de tramos: ";cin>>n; dt=tt=0; for(i=1;i<=n;i++) { cout<<"TRAMO "<<i<<endl; cout<<"Distancia (m): ";cin>>d; cout<<"Tiempo (t): ";cin>>t; dt+=d; tt+=t; } cout<<"\nVelocidad media del trayecto: "<<dt/tt<<"m/s"; getch(); } i=1;i<=n;i++ D,t dt+=d E tt+=t dt/tt S FIN 44 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP06-04 Cuatro artículos cuestan 3, 7, 19 y 23 soles respectivamente. ¿Cuáles son las posibles cantidades que podemos adquirir de cada artículo, si disponemos de 113 soles y deseamos gastarlo todo? DATOS D. Salida: cantidad de artículos CODIFICACIÓN C++ /*............................ PROGRAMA CPP06.04.CPP Procesos Repetitivos: Para ............................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int a,b,c,d; //calculando posibles cantidades for(a=0;a<=113/3;a++) for(b=0;b<=113/7;b++) for(c=0;c<=113/19;c++) for(d=0;d<=113/23;d++) //imprimiendo cantidades if(3*a+7*b+19*c+23*d==113) cout<<"\n"<<a<<","<<b<<","<<c<<","<<d; //Pausa para los resultados getch(); } DIAGRAMA DE FLUJO INICIO a=0;a<=113/3;a++ b=0;b<=113/7;b++ c=0;c<=113/19;c++ d=0;d<=113/23;d++ 03a+7b+19c+23 1 d==113 a,b,c,d S Problema CPP06-05 FIN Muestre todos los números de 3 dígitos tales que si invertimos sus cifras el número original aumente en 297. DATOS D. Salida: números (i) DIAGRAMA DE FLUJO INICIO CODIFICACIÓN C++ /*............................ PROGRAMA CPP06.05.CPP Procesos Repetitivos: Para ............................*/ #include<iostream.h> #include<conio.h> void main() { int i,inv,nro; for(i=100;i<1000;i++) {nro=1;inv=0; while(nro>0) {inv=10*inv+nro%10; nro=nro/10; } if(i+297==inv)cout<<i; } getch(); } i=1;i<=n;i++ nro=1, inv=0 nro>0 inv=10*inv+nro%10 nro/=10 nro>0 i S FIN 45 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. Mostrar la tabla de multiplicar del 1 al 12 para cualquier número. 2. Encuentre el promedio de n números. 3. Mostrar los 20 primeros términos de la siguiente serie, determinando además la suma de ellos: 7, 10, 13, 16, 19 4. Los números enteros que satisfacen la ecuación 𝑎2 + 𝑏 2 = 𝑐 2 , se les conoce como ternas pitagóricas. Encuentre todas las ternas pitagóricas menores que n. 5. Muestre todos los pares entre a y b, y diga cuantos son. 6. De cuantas maneras podemos tomar p elementos de un total de n elemento? (𝑛 ≥ 𝑝) 7. Imprima el número 1, una vez; el 2, dos veces; el 3, tres veces; y así sucesivamente hasta llegar a un número n ingresado. 8. Dada una fecha dd/mm/aaaa, imprima el calendario correspondiente a ese mes. 9. Determine la suma de los n primeros términos de la serie: 𝑥 𝑥 2 𝑥 3 𝑥 4 𝑥 5 − + − + −⋯ 1 22 32 42 52 10. Mostrar todos los divisores de un número. Si el número solo tiene por divisores al 1 y al propio número, mostrar el mensaje “Número primo”. 46 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 47 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ ARREGLOS Y MATRICES Un ARREGLO es un conjunto de elementos dispuestos uno a continuación de otro donde cada elemento conserva su propio espacio (cantidad de bytes). Además el espacio de cada elemento es igual para todos y lo que se puede almacenar en cada uno de ellos si bien pueden ser de diferentes valor, el tipo de información (tipo de dato) es el mismo, ejem. si un elemento tiene un valor numérico, todos los elementos contendrán valores numéricos y sólo numéricos. Para poder referirnos a un elemento del arreglo en particular es necesario utilizar un índice que vendría a ser la numeración consecutiva de cada espacio que ocupa un dato en el arreglo. Esta numeración generalmente empieza en 1; sin embargo, está sujeto a la iniciativa del programador y los requerimientos del algoritmo que se emplee. Cuando un arreglo tiene un única numeración (un solo índice) se le conoce como un arreglo UNIDIMENSIONAL, aunque algunos preferimos usar el nombre VECTOR. Ejemplos figurativos de algunos VECTORES índice //Declaración int A[7] índice //Declaración char B[10] En C++ for(indice=0;indice<10;indice++) cout<<B[indice]; //sin cambiar de línea Rpta: ABCDEFGHIJ Cuando un arreglo tiene 2 o más numeraciones (2 o más índices) se le conoce como arreglo BIDIMENSIONAL (2 índices), TRIDIMENSIONAL (3 índices), etc., aunque algunos preferimos usar el nombre MATRIZ. Para el especial con ésta queremos manejo de los elementos en las matrices se deben tener cuidado en la numeración establecida para cada índice ya que numeración es que se tendrá acceso al espacio del dato que manejar. 48 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Debido a que los datos se conservan en los ARREGLOS y MATRICES, pueden ser accesados en cualquier momento y cuantas veces se los necesite, mientras dure la ejecución del programa. Ejemplo figurativo de una MATRIZ de dos índices (BIDIMENSIONAL), donde uno de ellos indica la ubicación de 5 datos y el otro indica de 7 datos. El primer índice se ve representado por las filas y el segundo por las columnas. índice1 índice2 //Declaración int A[5][7] //5 filas y 7 columnas También se dice que ésta matriz es de 5 x 7, debido a los límites de sus índices. Obsérvese que las filas van en primer orden y las columnas en segundo orden. Esta matriz es capaz de conservar 35 datos (5*7) El acceso a los datos individuales de la matriz, A[1,3]=10 En C++ for(indice1=0;indice1<5;indice1++) for(indice2=0;índice2<7;indice2++) { cout<<“A[<<indice1<<“,”<<indice2<<“]= ”; cin>>A[indice1][indice2] } Rpta: Ingresa todos los datos de la matriz fila por fila. Ejemplo figurativo de una matriz de tres índices donde el primero indica la ubicación de 5 datos, el segundo indica la ubicación de 4 datos y el tercero indica la ubicación de 2 datos. Observe con atención el siguiente dibujo: índice1 índice2 índice3 A[3,4]=12 A[4,1]=3 A[6,5]=mal! Excede el primer índice 49 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ También se dice que ésta matriz es de 5 x 4 x 2, debido a los límites de sus índices. La definición de la matriz sería así: int A[5][4][2]. Observe que el tercer índice “pertenece” al segundo índice por lo que podríamos decir, figurativamente, que cada fila tiene 4 columnas y cada columna tiene 2 columnas más. Esta matriz es capaz de conservar 40 datos (5*4*2) El acceso a los datos individuales de la matriz sería: A[0,1,1]=8 En C++ for(indice1=0;indice1<5;indice1++) for(indice2=0;indice2<4;indice2++) for(indice3=0;indice3<2;indice3++) { cout<<A[indice1,indice2,indice3]; } Rpta: Mostrar todos los datos de la matriz. A[1,3,1]=2 A[2,0,1]=19 A[4,2,0]=12 DECLARACIÓN de arreglos en C++ //Para un arreglo de UN solo índice Tipo de dato variable[dimensión]; Ejem: int números[10]; //Para un arreglo de DOS índices Tipo de dato variable[dimensión1][dimensión2] Ejm: float precios[5][10]; //Para un arreglo de TRES índices Tipo de dato variable[dimensión1][dimensión2][dimensión3] Ejm: char tridimensional[20][15][4] 50 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP07-01 Lea n números, almacénelos en un array e imprímalos. DATOS D. Entrada: número de elementos del array (n) D. Salida: array (X[]) CODIFICACIÓN C++ /*....................... PROGRAMA CPP07.01.CPP Arreglos y Matrices .......................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int i,n; float X[50]; //Ingreso de datos clrscr(); cout<<"Nro. de datos a leer>> "; cin>>n; //Ingreso del array for(i=0;i<n;i++) { cout<<"X["<<i+1<<"]= ";cin>>X[i]; } //Mostrar array cout<<"\n\nX["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"]"; //Pausa para los resultados getch(); } Problema CPP07-02 Ordene un conjunto de datos de menor a mayor por el método de la burbuja. DATOS D. Entrada: número de elementos del array (n), Ingresando array (X[]) D. Salida: Salida del array ordenado (X[]) CODIFICACIÓN C++ /*....................... PROGRAMA CPP07.02.CPP Arreglos y Matrices .......................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int n,i,j; float temporal,X[50]; //Ingreso de datos clrscr(); cout<<"Nro. de datos a leer>> "; cin>>n; //Ingreso datos en array for(i=0;i<n;i++) { cout<<"X["<<i+1<<"]= ";cin>>X[i]; } //Ordena por metodo de la burbuja for(i=1;i<n;i++) for(j=n-1;j>=i;j--) if(X[j-1]>X[j]) { temporal=X[j-1]; X[j-1]=X[j]; X[j]=temporal; } //Mostrar array ordenado cout<<"\nELEMENTOS ORDENADOS\nX["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"]"; //Pausa para los resultados getch(); } 51 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP07-03 Ordene un conjunto de datos de menor a mayor por el método de selección. DATOS D. Entrada: número de elementos del array (n), Ingresando array (X[]) D. Salida: Salida del array ordenado (X[]) CODIFICACIÓN C++ /*....................... PROGRAMA CPP07.03.CPP Arreglos y Matrices .......................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int n,i,j,k; float temporal,X[50]; //Ingreso de datos clrscr(); cout<<"Nro. de datos a leer>> "; cin>>n; //Ingreso datos en array for(i=0;i<n;i++) { cout<<"X["<<i+1<<"]= ";cin>>X[i]; } //Ordena por metodo de seleccion for(i=0;i<n-1;i++) { k=i; temporal=X[i]; for(j=i+1;j<n;j++) { if(X[j]<temporal) { k=j; temporal=X[j]; } } X[k]=X[i]; X[i]=temporal; } //Mostrar array ordenado cout<<"\nELEMENTOS ORDENADOS\nX["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"]"; //Pausa para los resultados getch(); } Problema CPP07-04 Ordene un conjunto de datos de menor a mayor por el método de la burbuja. DATOS D. Entrada: número de elementos del array (n), Ingresando array (X[]) D. Salida: Salida del array ordenado (X[]) CODIFICACIÓN C++ /*....................... PROGRAMA CPP07.04.CPP Arreglos y Matrices .......................*/ //Inclusion de librerias #include<iostream.h> #include<conio.h> //funcion principal void main() { //Declaracion de variables int n,i,j,k; float temporal,X[50]; //Ingreso de datos clrscr(); cout<<"Nro. de datos a leer>> "; cin>>n; //Ingreso datos en array for(i=0;i<n;i++) { cout<<"X["<<i+1<<"]= ";cin>>X[i]; } //Ordena por metodo de insercion for(i=0;i<n;i++) { temporal=X[i]; for(j=i-1;j>=0&&temporal<X[j];j-) X[j+1]=X[j]; X[j+1]=temporal; } 52 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ //Mostrar array ordenado cout<<"\nELEMENTOS ORDENADOS\nX["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"]"; //Pausa para los resultados getch(); } Problema CPP07-05 Lea dos matrices A y B cuadradas y halle la suma de las matrices ingresadas. DATOS D. Entrada: matrices A[][] y B[][] D. Salida: suma C[][]=A[][]+B[][] CODIFICACIÓN C++ /*....................... PROGRAMA CPP07.05.CPP Arreglos y Matrices .......................*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //Funcion principal void main (void) { //Declaracion de variables clrscr(); int i,j,k,m,n,p,q; float a[10][10],b[10][10],c[10][10]; //Ingreso orden de la matriz cout<<"SUMA DE MATRICES : A(n,n) + B(n,n):\n\n"; cout<<"INGRESE ORDEN DE LA MATRIZ>> ";cin>>n; //Ingreso de matrices gotoxy(2,8);cout<<"INGRESE LA MATRIZ A:\n"; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { gotoxy(6*j,8+2*i);cin>>a[i][j]; } gotoxy(42,8);cout<<"INGRESE LA MATRIZ B:\n"; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { gotoxy(40+6*j,8+2*i);cin>>b[i][j]; } //ALGORITMO DE CALCULO A+B E IMPRIMIENDO gotoxy(15,20); cout<<"A + B = "; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { c[i][j]=a[i][j]+b[i][j]; gotoxy(20+6*j,16+2*i);cout<<c[i][j]; } //Pausa los resultados getch(); } 53 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS Para cada uno de los siguientes problemas, deberá desarrollarse con su respectivo Diagrama de Flujo. 1. Lea dos vectores A y B y halle la multiplicación vectorial y escalar. 2. Determine la cantidad de veces que aparece cada elemento de un array. 3. Encontrar el mayor y menor valor en un arreglo de 20 números determinando además el índice al que corresponden. 4. Calcular la media, varianza y desviación estándar de N valores, aplicando las siguientes formulas: 𝑛 𝑀𝑒𝑑𝑖𝑎(𝑋) = ∑ 𝑉𝑎𝑟𝑖𝑎𝑛𝑧𝑎 (𝑉) = ∑ 𝑖=1 (𝑋𝑖)/𝑛 (𝑋𝑖 − 𝑋)/𝑛 𝑖=1 𝑛 𝐷. 𝐸𝑠𝑡á𝑛𝑑𝑎𝑟 (𝐷) = √𝑉 5. Ingresar 2 números e imprimir las cifras comunes que tengan considerando un máximo de 10 cifras por número. Ejm, sean los números: 19832322 y 87321231; cifras comunes: 1,2,3,8. 6. Lea dos matrices A y B de nxn. Realizar el producto AxB. 7. Suma de los elementos que se encuentran bajo la diagonal principal de una matriz cuadrada. 8. Lea una matriz mxn, y arbitrariamente pueda cambiar cualquier elemento de ésta. 9. Ingrese una matriz de nxn y luego halle su determinante. 10. Por el método de Gauss Jordan, halle la solución de un sistema de ecuaciones. 54 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 55 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ FUNCIONES PROPIAS Al llegar a éste tema se asume que Ud. ya ha logrado un entrenamiento lógico adecuado, reconociendo y aplicando correctamente cada estructura de programación de tal forma que planteado un problema no tenga dudas en utilizarlas convenientemente, construyendo el algoritmo que dé solución al problema. Ahora de lo que se trata es de darle un entorno, una forma, un ambiente, un lugar a cualquier algoritmo construido; al cual le llamaremos PROCESO o FUNCIÓN. Una función es un proceso que realiza una determinada tarea, tiene un nombre y es capaz de recibir datos y devolver resultados a través de variables especiales que toman el nombre de parámetros e inclusive a través de su propio nombre. Las funciones se declaran como prototipos antes de la función principal (void main()) y se desarrollan después de la función principal. C++ Prototipo: Tipo de dato de la función nombre_de_funcion(lista de parámetros); Desarrollo Tipo de dato de la función nombre_de_funcion(lista de parámetros) { declaración LOCALES; sentencias de la función; } Observaciones El tipo de dato de la función identifica el valor que la función retornará como resultado a través de su nombre. El nombre_de_funcion es justamente el nombre que identifica a la función y debe empezar con una letra y luego puede combinarse con letras y/o números y/o el subrayado. Si bien es cierto que el identificador puede estar compuesto de letras y/o dígitos, se recomienda que éstos sean expresivos y <<digan algo>> respecto al proceso que identifican. La lista de parámetros son variables con su respectico tipo de dato separados por comas (,). Cada parámetro debe tener si propio tipo de dato así sean del mismo tipo dos o más parámetros. Las declaraciones locales SOLAMENTE serán de utilidad para la función y nada más que para ella. Fuera de la función dichos elementos NO SON CONOCIDOS. Las sentencias, determinan la tarea de la función. 56 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Ejemplos de Funciones cuyo tipo de dato es void Problema CPP08-01 Mediante el uso de funciones, muestre los primeros m múltiplos de n. CODIFICACIÓN C++ i: sucesivos factores n: # cuyo múltiplos deseamos m: Cantidad de múltiplos En el bloque principal leemos n y m e invocamos a la función tablamult(), pasándoles estos valores como parámetros. Al terminar la ejecución de tablamult(), el control regresa al bloque principal, para que éste termine el programa. /*....................... PROGRAMA CPP08.01.CPP FUNCIONES PROPIAS .......................*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO void tablamult(int,int); //Funcion principal void main () { //Declaracion de variables clrscr(); int n,m; cout<<"\nCual tabla desea?= ";cin>>n; cout<<"Cuantos multiplos desea?= ";cin>>m; tablamult(n,m); getch(); } //DESARROLLO DEL PROTOTIPO void tablamult(int n,int m) { int i; cout<<"\n*TABLA DE MULTIPLICAR DEL "<<n<<"*\n\n"; for(i=1;i<=m;i++) cout<<"\t"<<n<<" x "<<i<<" = "<<i*n<<endl; } Problema CPP08-02 Usando funciones encuentre los divisores comunes de dos números. CODIFICACIÓN C++ /*....................... PROGRAMA CPP08.02.CPP FUNCIONES PROPIAS .......................*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO void comunes(int,int); //Funcion principal void main () { //Declaracion de variables clrscr(); int a,b; cout<<"\tDIVISORES COMUNES DE DOS NUMEROS\n"; cout<<"\nIngrese primer numero= ";cin>>a; cout<<"Ingrese segundo numero= ";cin>>b; comunes(a,b); getch(); } //DESARROLLO DEL PROTOTIPO void comunes(int a,int b) { int i; i=1; while(i<=a&&i<=b) { if(a%i==0&&b%i==0) cout<<i<<endl; i++; } } a: Primer # a inspeccionar b: Segundo # a inspeccionar i: Posibles divisores 57 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Problema CPP08-03 Usando funciones, ordene un conjunto de datos de menor a mayor por el método de la burbuja. n: # de elementos del array X[]: Array unidimensional aux: Utilizada para el intercambio Comenzamos leyendo n e invocando a LeerArray(). Observe otra de las ventajas de definir funciones: las escribimos para una aplicación, pero podemos usarlas en otras. Esto es una propiedad importante conocida como “Reusabilidad del código”. Una vez leídos los elementos del array X[], invocamos a la función Burbuja(), en donde se procede al ordenamiento. Después de ordenar X[] y de regreso al bloque principal, solo nos queda imprimir los elementos ordenados, labor que delegamos a la función MuestraArray(). CODIFICACIÓN C++ /*....................... PROGRAMA CPP08.03.CPP FUNCIONES PROPIAS .......................*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO void LeerArray(int,float []); void Burbuja(int, float []); void MuestraArray(int, float []); //Funcion principal void main () { //Declaracion de variables clrscr(); int n; float X[50]; cout<<"\nNro de datos a leer: ";cin>>n; LeerArray(n,X); //Hace ingreso datos en array Burbuja(n,X); //Ordena por burbuja cout<<"\n\tELEMENTOS ORDENADOS:\n"<<endl; MuestraArray(n,X); //Muestra array ordenado getch(); } //DESARROLLO DEL PROTOTIPO void LeerArray(int n,float X[]) { int i; for(i=0;i<n;i++) { cout<<"X["<<i+1<<"]= ";cin>>X[i]; } } void Burbuja(int n, float X[]) { int i,j; float aux; for(i=1;i<n;i++) for(j=n-1;j>=i;j--) if(X[j-1]>X[j]) { aux=X[j-1]; X[j-1]=X[j]; X[j]=aux; } } void MuestraArray(int n, float X[]) { int i; cout<<"X["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"\t]"; } 58 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Ejemplos de Funciones cuyo tipo de dato NO ES void Problema CPP08-04 El teorema del coseno es muy utilizado en geometría para calcular la longitud del tercer lado de un triángulo, cuando se conocen los otros 2 lados y el ángulo que forman. Siendo a el lado desconocido, b y c los lados conocidos, 𝛼 el ángulo formado por b y c; el teorema del coseno se enuncia como: 𝑎 = √𝑏 2 + 𝑐 2 − 2𝑏𝑐(𝑐𝑜𝑠𝛼) Calcule el tercer lado de un triángulo aplicando este teorema. Use funciones. CODIFICACIÓN C++ /*....................... PROGRAMA CPP08.04.CPP FUNCIONES PROPIAS .......................*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> #include<math.h> //PROTOTIPO float LadosAngulo(float,float,float); //Funcion principal void main () { //Declaracion de variables clrscr(); float a,b,c,alfa; cout<<"\n\tSOLUCIONA UN TRIANGULO\n"; cout<<"\tCASO LADO-ANGULO-LADO\n"; cout<<"\nIngrese lado b= ";cin>>b; cout<<"Ingrese lado c= ";cin>>c; cout<<"Angulo Formado (n rad)= ";cin>>alfa; a=LadosAngulo(b,c,alfa); cout<<"El tercer lado mide "<<a; getch(); } //DESARROLLO DEL PROTOTIPO float LadosAngulo(float b,float c, float alfa) { float a; a=sqrt(b*b+c*c-2*b*c*cos(alfa)); return a; //Retorna el valor de a } a: Lado desconocido b, c: Lados conocidos alfa: Ángulo formado (b y c) Primero hay que leer los lados b y c y el ángulo alfa en radianes, esto debido a que la función cos(), provista por C++, solo calcula las funciones trigonométricas de ángulos en radianes. A diferencia de los ejercicios anteriores está función retorna un valor (a), el cual se envía al bloque principal para su impresión. Problema CPP08-05 Usando funciones. Escriba un algoritmo que diga si un número es primo o no. n: Número a evaluar i: posible divisor 59 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*....................... PROGRAMA CPP08.05.CPP FUNCIONES PROPIAS .......................*/ //Inclusion de librerias #include<conio.h> #include<iostream.h> //PROTOTIPO int EsPrimo(int); //Funcion principal void main () { //Declaracion de variables clrscr(); float n; cout<<"Ingrese numero= ";cin>>n; if(EsPrimo(n)) cout<<"El numero es primo"; else cout<<"El numero no es primo"; getch(); } //DESARROLLO DEL PROTOTIPO int EsPrimo(int n) { int i; i=n/2; while(i>1) { if(n%i==0) return 0; //No es primo i--; } return 1; //Es primo } OBS: Nótese que todas las ejecuciones se han hecho desde la función principal; sin embargo recuerde que también se pueden hacer desde el desarrollo de cualquier función. Ahora que ya sabe ejecutar una función, debe saber que las funciones propias que utiliza un programa puede estar en el mismo programa (como en los ejemplos anteriores) pero también puede estar fuera del programa conformado lo que se llama una LIBRERÍA. Entonces la pregunta es ¿Qué funciones deben estar en el mismo programa y que funciones deben estar en una librería? La respuesta es que si las funciones van a poder ser utilizadas en otros programas lo más lógico y recomendable es que estén en una librería, pero si las funciones son específicas y sólo sirven a un programa pueden estar junto al programa. ¿Cómo se construyen librerías propias?, lo veremos en el siguiente tema. 60 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PROBLEMAS PROPUESTOS 1. Escriba una función que calcule la raíz cuadrada de un número por el método de Newton. 2. Mediante funciones cree una calculadora que lea 2 números y un operador. La calculadora será capaz de realizar las operaciones (suma, resta, multiplicación, división, potencia). 3. Mediante una función diga si un número es divisible por otro. 4. Usando funciones, calcule el área sombreada formada por una circunferencia inscrita en un cuadrado de lado a. 5. Escriba una función que retorne el mayor elemento de un array. 6. Escriba una función que ordene un array por el método de selección. 7. Escriba una función que ordene un array por el método de inserción. 8. Escriba una función para calcular la media aritmética, la geométrica armónica, la cuadrática (𝑚𝑐 = √𝑥 2 /𝑛 , la ponderada, la varianza y la desviación estándar de los datos. 9. Dada una temperatura t, convertirla a su equivalente en una diferente escala (°C, °F y K). Hacer uso de funciones. 10. Construir una función que reciba una cadena de caracteres y los devuelva todas sus letras convertidas en minúsculas . 61 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 62 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ LIBRERIAS PROPIAS Una librería es considerada como una caja de herramientas que contiene diversos elementos de utilidad para cualquier programa o para un programa específico o para otras librerías que lo necesitan. Dichos elementos pueden ser constantes, variables, funciones. CARACTERISTICAS PRONCIPALES Una librería NUNCA SE EJECUTA sola directamente, sino que más bien sus elementos son utilizados por los programas cuando estos son ejecutados. Una librería en C++ se compone de 2 archivos, uno con extensión h y otro con extensión cpp. El archivo con extensión h se le conoce como archivo de cabecera y allí se declaran todos los prototipos de las funciones que conformaran la librería. El archivo con extensión cpp contiene todos los desarrollos de las funciones. Una librería simplifica la codificación de los programas debido a que los elementos que van a ser utilizados NO SON CODIFICADOS en los programas. La compilación de una librería se puede realizar individualmente, compilando el archivo de extensión cpp (nunca el de extensión h) o también se puede realizar en automático cuando se compile o ejecute el proyecto construido para la ejecución del programa que la utiliza. Una librería puede ser utilizada por otras librerías y/o por cualquier programa que necesite de por lo menos un elemento contenido en la librería. Sin embargo, cuando se utilizan librerías propias es obligatorio la construcción de un Proyect como lo veremos en los ejemplos. - - - - ESTRUCTURA GENERAL DE UN ARCHIVO DE CABECERA (extensión h) #if!defined _nombrearchivo_h_ #define _nombrearchivo_h_ //Declaraciones Globales //Constantes //Variables //Prototipos de Funciones propias #endif Este archivo debe grabarse con extensión h, por ejemplo: lib.h 63 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ ESTRUCTURA GENERAL DE UN ARCHIVO DE DESARROLLO (extensión cpp) //Inclusión del archivo de cabecera #include “lib.h” //Desarrollo de los Prototipos declarados en el archivo de cabecera Este archivo debe grabarse con extensión cpp pero con el mismo nombre que se dio al archivo de cabecera, por ejemplo: lib.cpp Observaciones 1. Todos los elementos contenidos en el archivo de cabecera estarán disponibles para los programas o librerías que lo necesiten. 2. Solamente se debe compilar el archivo de extensión cpp, nunca el de extensión h. 3. Normalmente nos referimos al archivo de cabecera cuando hablamos de librería ya que este archivo es el que se incluye (#include) en los programas. CREACIÓN DE LIBRERIAS PROPIAS Normalmente se dan los siguientes pasos: (1) (2) Codificar la librería o archivo de cabecera con extensión h Codificar el desarrollo de los prototipos en otro archivo con el mismo nombre que el archivo de cabecera pero con extensión cpp. Compilar el cpp con ALT + F9 Si hay errores Corregir Regresar al paso (2) La librería esta lista para ser utilizada (3) (4) (5) EJERCICIOS 1. Construir una librería de nombre IngDatos que contenga los siguientes elementos: - Una función que permita escribir una cadena a partir de cualquier coordenada de la pantalla según los parámetros recibidos. - Una función que permita devolver una cadena compuesta por un determinado número de caracteres del mismo valor dados como parámetros. Por ejemplo una cadena de 30 asteriscos, una cadena de 60 rayas, etc. - Una función que permita ingresar un dato alfanumérico a partir de cualquier coordenada de la pantalla, considerando una longitud máxima para el dato alfanumérico. La función debe devolver el dato ingresar. - Una función que permita ingresar un dato numérico entero con las mismas características a la función anterior. - Una función que permita ingresar un dato tipo float con las mismas características de la función anterior. 64 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ CODIFICACIÓN C++ /*.................................. Archivos de cabecera: ingdatos.h ..................................*/ #if!defined _ingdatos_h_ #define _ingdatos_h_ //Prototipo de funciones void EscribeCad(int columna, int fila,const char * cadena); char * RepiteCad(int longitud, char caracter); unsigned char * IngresaCad(int columna,int fila, int longitud); int IngresaEnt(int columna,int fila, int longitud); float IngresaReal(int columna,int fila, int longitud); #endif //fin del archive cabecera NOTA.- Las instrucciones #if, #define, #endif se requieren para evitar que éste archivo de cabecera se repita su inclusión en un mismo programa. De esta manera estamos protegiendo la posibilidad de error de “Múltiple inclusión” Grabar archivo como ingdatos.h Abrir un nuevo archivo y codificar el desarrollo de dichas funciones, así: CODIFICACIÓN C++ /*..................................... Archivo de desarrollo: ingdatos.cpp .....................................*/ #iclude<iostream.h> #include<conio.h> #include<iomanip.h> #include<string.h> //para strlen()… #include<stdlib.h> //para atoi()… #include<ctype.h> //para toupper()… #include “ingdatos.h” //para reconocer a nuestros prototipos. //-----------------------------------------------------------Void EscribeCad(int columna,int fila, const char * cadena) { gotoxy(columna,fila); cprintf(“%s”,cadena); //para que respete atributo de color } //-----------------------------------------------------------char * RepiteCad(int longitud, char caracter) { char * cadena=new char[longitud+1]; memset(cadena,0,longitud+1); memset(cadena,carácter,longitud); return cadena; } //-----------------------------------------------------------unsigned char * IngresaCad(int columna,int fila, int longitud) { const char asterisco=´*´; const char nulo=´0´; const char enter=13; int posicion; unsigned char character; unsigned char * cadena=new char[longitude+1]; 65 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ unsigned char * cadena=new char[longitude+1]; //inicializar contenido de cadena con asteriscos strcpy(cadena,RepiteCad(longitud,asterisco)); //inicializar posición del carácter en la cadena posicion=0; do{ EscribeCad(columna,fila,cadena); gotoxy(columna+posición,fila); carácter=getch(); if(carácter>=32) //carácter imprimible { cadena[posición]=carácter; posición++; } if(carácter==8) //backspace if(posición>0) { cadena[posición]=0; posición--; cadena[posición]=asterisco; } }while(carácter!=enter&&posición!=longitud); if(posición==longitud) EscribeCad(columna,fila,cadena); char * posast=strchr(cadena,asterisco); if(posast) //existe un asterisco en la cadena ingresada *posast=nulo; //corta la cadena return cadena; } //-----------------------------------------------------------int IngresaEnt(int columna,int fila,int longitud) { int Numero; char * cadena=new char[longitud+1]; strcpy(cadena,IngresaCad(columna,fila,longitud)); Numero=atoi()cadena; Retusn Numero; } //-----------------------------------------------------------float IngresaReal(int columna,int fila,int longitud) { float Numero; char * cadena=new char[longitude+1]; strcpy(cadena,IngresaCad(columna,fila,longitud)); Numero=atof(cadena); return Numero; } //------------------------------------------------------------ Grabar es archivo como como ingdatos.cpp Compilarlo con ALT+F9 Nota: la inclusión de una librería del C++ se hace con los símbolos <……>, por ejemplo #include< iostream.h> ya que sólo de esta manera el compilador buscara dicha librería en su ruta correspondiente. Sin embargo la inclusión de una librería propia se hace utilizando los símbolos “……”, por ejemplo #include “ingdatos.h” ya q ue de esa manera el compilador buscara dicha librería en el directorio actual de trabajo o en el directorio indicando a través de la opción: options directorios. 66 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ 2. Codificar un programa que utilice la librería IngDatos codificada en el ejercicio anterior. CODIFICACIÓN C++ Grabar este programa como plngDatos.cpp Compilarlo con ALT+F9 NO EJECUTAR TODAVIA Nota: observe que las funciones utilizadas EscribeCad(), IngresaCad(), IngresaEnt() y IngresaReal() NO ESTAN EN EL PROGRAMA, sino que están en la librería propia ingdatos.h e ingdatos.cpp /*........................ PROGRAMA pnlgDatos.cpp ........................*/ #include<conio.h> #include<string.h> #include “ingdatos.h” //funcion principal void main() { char Nombre[81]; int Edad; float peso; clrscr(); //de la libreria conio.h EscribeCad(10,5,“NOMBRE : ”); //de la librería EscribeCad(10,6,“EDAD : ”); //ingdatos.h EscribeCad(10,7,“PESO en Kg. : ”); Strcpy(Nombre,IngresaCad(23,5,25)); Edad=IngresaEnt(23,6,2); Peso=IngresaReal(23,7,6); getch(); } Para poder ejecutar el programa, debemos construir un proyecto de la siguiente manera: Elegir opción Project. Abrir presionando [ENTER] en open. Digitar un nombre, por ejemplo plngDatos.PRJ. En la parte inferior de la pantalla aparece una ventana con el nombre dado. Presionar la tecla [Insert]. Presionar la tecla [TAB]. Usando las flechas direccionales elegir el archivo plngdatos.cpp Usando las flechas direccionales elegir el archivo ingdatos.cpp Presionar tecla [ESC]. Construir el proyecto presionando [F9] Si no hubo errores se generó un archivo ejecutable de nombre plngdatos.exe, el cual ya puede ser ejecutado desde el mismo ambiente C++ presionando [CTRL] + [F9] o saliendo del ambiente C++ y ejecutándolo como cualquier programa ejecutable. Antes de abandonar el ambiente C++ debe cerrar el proyecto: Project-Close. Nota: para cualquier proyecto se debe elegir un archivo que contiene la función principal y todos los archivos cpp propios que son los desarrollos de las librerías propias utilizadas. El nombre del proyecto generalmente es el mismo nombre del archivo que contiene a la función principal, pero puede ser otro. 67 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ DIAGRAMA DE FLUJO Los diagramas de flujo son una manera de representar visualmente el flujo de datos a través de sistemas de tratamiento de información. Los diagramas de flujo describen que operaciones y en que secuencia se requieren para solucionar un problema dado. Un diagrama de flujo u organigrama es una representación diagramática que ilustra la secuencia de las operaciones que se realizarán para conseguir la solución de un problema. Los diagramas de flujo se dibujan generalmente antes de comenzar a programar el código frente a la computadora. Los diagramas de flujo facilitan la comunicación entre los programadores y la gente del negocio. Estos diagramas de flujo desempeñan un papel vital en la programación de un problema y facilitan la comprensión de problemas complicados y sobre todo muy largos. Una vez que se dibuja el diagrama de flujo, llega a ser fácil escribir el programa en cualquier idioma de alto nivel. Vemos a menudo cómo los diagramas de flujo nos dan ventaja al momento de explicar el programa a otros. Por lo tanto, está correcto decir que un diagrama de flujo es una necesidad para la documentación mejor de un programa complejo. Un 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. Es importante resaltar que el Diagrama de Flujo muestra el sistema como una red de procesos funcionales conectados entre sí por " Tuberías " y "Depósitos" de datos que permite describir el movimiento de los datos a través del Sistema. Este describirá : Lugares de Origen y Destino de los datos , Transformaciones a las que son sometidos los datos, Lugares en los que se almacenan los datos dentro del sistema , Los canales por donde circulan los datos. Además de esto podemos decir que este es una representación reticular de un Sistema, el cual lo contempla en términos de sus componentes indicando el enlace entre los mismos. 68 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ PARA EL LECTOR DEL AUTOR Quise hacerlo mejor, pero si no logras entenderlo. ---Grrrr--- (:@) Amigo lector; si tú que estas al otro lado de este libro. He tratado de escribir algo motivador, algo como “ Que culpa tengo yo de que sea mejor que tú?”, mentira, no!, no era eso, lo único que te voy a decir como un gran Físico <<Espero serlo>> [Se creativo, piensa diferente y no seas mecánico]. Este libro está hecho para todas las personas que piensan diferente, que tengan preguntas, que no estén satisfechas con las respuestas, que no estén satisfechas de lo que saben, que quieran mejorarse y mejorar la educación. Me hubiera gustado mucho que este libro fuese autodidacta, como siempre se sabe no hay mejor profesor que uno mismo. Espero que hayas disfrutado siguiendo esta publicación y espera por el siguiente -.-Matlab, el fin de C++ o simplemente una remodelación?-.<<Sabemos lo que hacemos, sabemos lo que no hacemos>> Para sus Dudas..?? Comentarios.. http://mySpace91.ucoz.com CyberBullyng.. Visítenos en El programa con el cual se trabaja es llamado Bc31 y lo puedes conseguir también en la ---web--- que se encuentra debajo. -.-he agregado pasos a seguir en la instalación/ejecución -.He aquí un programa para que puedan correr los Diagramas de flujo. -.-En mi opinión personal, esto me parece de gran ayuda para corregir los procesos antes de aventurarnos a la codificación-.Programa DFD. ---web------ http://myspace91.ucoz.com/load ---He puesto todo mi empeño en realizar este libro, con agrado puedo decirles, que aunque estoy contento de haberlo concluido, no estoy totalmente satisfecho pues no es posible dejar impreso algunas cosas o ideas que tengo por decir. Si en caso, quieras hacer alguna corrección, o añadir sugerencia puedes contactarme a: [email protected] O dejar tu comentario en la misma Web -.-la cual ya ha sido antes mencionada -.alguna ¿Por qué no me haces tu amigo?. Creo que me lo merezco ¿No? 69 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ AGRADECIMIENTOS Esta primera edición ha sido posible gracias al apoyo de todos mis amigos, por darme su invalorable ayuda y sus muchísimas ganas puestas en esta publicación. A mi padre, por su forma de decirme que me quiere y que siga estudiando, que siga adelante; y diciéndome PARA TODO HAY TIEMPO. A mi madre, por estar siempre a mi lado y apoyándome en todo momento, comprenderme y decirme que siga adelante a pesar de todo. A mis hermanitos, por estar ahí conmigo en las buenas y malas, por molestarme y por los grandes momentos de alegría que compartimos y compartiremos. A mi amor, por confiar, creer en mí, dándome apoyo, y diciendo siempre que si puedo lograrlo, por eso y más te quiero mí niña. A mis amigos DKM, NyD, por brindarme en todo momento su ayuda y disponibilidad permanente para intercambiar ideas. A usted, amigo lector por su interés en adquirir este libro que estoy seguro contribuirá en incrementar su conocimiento actual. 70 E. EMMANUEL COAQUIRA M. Algoritmos y su codificación en C++ Copyright Autor E. EMMANUEL COAQUIRA M. Editor Leaders of the World Copyright © 2013 – End 71 E. EMMANUEL COAQUIRA M.
Copyright © 2024 DOKUMEN.SITE Inc.