programacion en c++

72
PROGRAMACIÓN End E. EMMANUEL COAQUIRA M. ALGORITMO Y CODIFICACIÓN

Upload: edgar-coaquira

Post on 03-Jan-2016

636 views

Category:

Documents


21 download

TRANSCRIPT

Page 1: Programacion en c++

PROGRAMACIÓN

End

E. EMMANUEL COAQUIRA M.

ALGORITMO Y CODIFICACIÓN

Page 2: Programacion en c++

Algoritmos y su codificación en C++

1 E. EMMANUEL COAQUIRA M.

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!.

Page 3: Programacion en c++

Algoritmos y su codificación en C++

2 E. EMMANUEL COAQUIRA M.

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.

Page 4: Programacion en c++

Algoritmos y su codificación en C++

3 E. EMMANUEL COAQUIRA M.

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) -.-.-.-(27)

4.1 El cociente y residuo por restas sucesivas. 4.2 Divisores comunes de dos números.

4.3 La suma de N primeros 𝑆 =1

2+

1

4+

1

6+ ⋯ 𝑁.

4.4 Lea un número e invierta sus cifras. 4.5 Halle si un número es cubo perfecto.

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.

6.2 Encontrar la suma 𝑆 =1

1+𝑥+

1

1+2𝑥+. . +

1

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. ARREGLOS Y MATRICES -.-.-.-(47) VIII. FUNCIONES PROPIAS -.-.-.-(55) IX. LIBRERIAS PROPIAS -.-.-.-(62) X. DIAGRAMA DE FLUJO -.-.-.-(68)

Page 5: Programacion en c++

Algoritmos y su codificación en C++

4 E. EMMANUEL COAQUIRA M.

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

Page 6: Programacion en c++

Algoritmos y su codificación en C++

5 E. EMMANUEL COAQUIRA M.

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.

Page 7: Programacion en c++

Algoritmos y su codificación en C++

6 E. EMMANUEL COAQUIRA M.

Page 8: Programacion en c++

Algoritmos y su codificación en C++

7 E. EMMANUEL COAQUIRA M.

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(); }

INICIO

tE

ft=t^2+4

ftS

FIN

DIAGRAMA DE FLUJO

Page 9: Programacion en c++

Algoritmos y su codificación en C++

8 E. EMMANUEL COAQUIRA M.

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

*

InteresS

FIN

**

Page 10: Programacion en c++

Algoritmos y su codificación en C++

9 E. EMMANUEL COAQUIRA M.

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) 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

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

NumRealE

Hor=int(NumReal)NumReal=(NumReal-Hor)*60

Hor, Min, Seg

S

FIN

Min=int(NumReal)Seg=(NumReal-Min)*60

Page 11: Programacion en c++

Algoritmos y su codificación en C++

10 E. EMMANUEL COAQUIRA M.

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), aceleración (a) D. Salida: distancia (d), velocidad (v)

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(); }

CODIFICACIÓN C++ /*........................ PROGRAMA CPP01.05.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() { 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(); }

DIAGRAMA DE FLUJO

INICIO

tE

x=t^4-8t+4

x,y,zS

FIN

y=sen(t)+cos(2t)

z=e^(3t+5)

INICIO

t,aE

d=(½)at^2

d,vS

FIN

v=at

DIAGRAMA DE FLUJO

Page 12: Programacion en c++

Algoritmos y su codificación en C++

11 E. EMMANUEL COAQUIRA M.

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?

Page 13: Programacion en c++

Algoritmos y su codificación en C++

12 E. EMMANUEL COAQUIRA M.

Page 14: Programacion en c++

Algoritmos y su codificación en C++

13 E. EMMANUEL COAQUIRA M.

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

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++

if (CONDICIÓN) if (CONDICIÓN) { { ACCIONES; ACCIÓN V; } } else

{ ACCIÓN F }

CONDICIÓN

ACCIONES

CONDICIÓN

ACCIÓN FACCIÓN V

a) b)

a) b)

Page 15: Programacion en c++

Algoritmos y su codificación en C++

14 E. EMMANUEL COAQUIRA M.

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)

Si 𝑁𝑢𝑚ℎ 30: 𝑝𝑎𝑔𝑜𝑓 = 𝑡𝑎𝑠𝑎 ∗ 𝑛𝑢𝑚ℎ (*) Si Numh 50: 𝑝𝑎𝑔𝑜𝑓 = 𝑡𝑎𝑠𝑎 ∗ 40 ∗ (𝑛𝑢𝑚ℎ − 40) ∗ 1.5 ∗ 𝑡𝑎𝑠𝑎 (**)

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).

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(); }

DIAGRAMA DE FLUJO

INICIO

id, tasa,Numh

E

*

id, tasapagof

S

FIN

**

Numh<=40

10

Page 16: Programacion en c++

Algoritmos y su codificación en C++

15 E. EMMANUEL COAQUIRA M.

Problema CPP02-03 Conociendo x, encuentre el valor numérico de la siguiente expresión.

𝑦 =𝑥 − 3

𝑥2 − 25

DATOS D. Entrada: x D. Salida: y

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(); }

CODIFICACIÓN C++ /*........................... 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(); }

DIAGRAMA DE FLUJO

INICIO

duracE

cos=0.5

cosS

FIN

cos=0.5+0.1*(durac-3)

durac<=3

10

INICIO

xE

Funciondiscontinua

YS

FIN

Y=(x-3)/(x^2-25)

x==5vx==-5

10

S

DIAGRAMA DE FLUJO

Page 17: Programacion en c++

Algoritmos y su codificación en C++

16 E. EMMANUEL COAQUIRA M.

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) 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.

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

promE

DatosErróneos

S

FIN

prom<0vProm>20

10

Sprom<=5

prom<=10

prom<=15

S

S

SS

10

10

10 PESIMO

DEFICIENTE

REGULARBUENO

Page 18: Programacion en c++

Algoritmos y su codificación en C++

17 E. EMMANUEL COAQUIRA M.

Tabla 1: DATOS

D. Entrada: Consumo (Cons) D. Salida: Pago final a pagar (Pago)

SUGERENCIA Para el ejercicio 4 también se le podría poner de esta manera:

Así se podría ahorrar un poco de espacio, y estructurar un poco mejor la codificación.

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(); }

//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(); }

INICIO

cnsE

dsc=cns*0.15

S

FIN

cns>=200

10

Scns>=100

cns<=50S

SS

10

10

dsc=cons*0.1

dsc=cns*0.05dsc=cns*0.01

DIAGRAMA DE FLUJO

Page 19: Programacion en c++

Algoritmos y su codificación en C++

18 E. EMMANUEL COAQUIRA M.

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.

Page 20: Programacion en c++

Algoritmos y su codificación en C++

19 E. EMMANUEL COAQUIRA M.

Page 21: Programacion en c++

Algoritmos y su codificación en C++

20 E. EMMANUEL COAQUIRA M.

1

Selector

Accion 1 Accion 2 Accion n Accion x

2 n default...

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 Small”

caso ‘M’: imprimir “talla Medio”

caso ‘L’: imprimir “talla Large”

caso ‘X’: imprimir “talla Extra Large”

Fin de Selección Fin

C++ 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”.

Page 22: Programacion en c++

Algoritmos y su codificación en C++

21 E. EMMANUEL COAQUIRA M.

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. Problema CPP03-02 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)

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

FIN

m,a

m

dias=31

dias=30

dias=28 dias=29

aMOD4==0 ANDaMOd100!=0 ORaMOD400==0

Mes incorrecto

diass

E

10

1,3,5,7,8,10,12

4,6,9,11

2

Default

Page 23: Programacion en c++

Algoritmos y su codificación en C++

22 E. EMMANUEL COAQUIRA M.

Asd Problema CPP03-03 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.

CODIFICACIÓN C++

/*............................ PROGRAMA CPP03.02.CPP Procesos Condicion multiple .............................*/ //Inclusion de librerias #include<iostream.h> #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(); }

marca

INICIO

FIN

MenuMarcas

Dsto=impbruto*0.1

Dsto=impbruto*0.15

No existe esta marca

Impbruto,Dsto,impo

s

S

1

2

3

Default

EMarca,precio,cantidad

Dsto=impbruto*0.2

Dsto=impbruto*0.25

Dsto=impbruto*0.3

4

5

Impo=impbruto-Dsto

DIAGRAMA DE FLUJO

Page 24: Programacion en c++

Algoritmos y su codificación en C++

23 E. EMMANUEL COAQUIRA M.

Problema CPP03-04 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) Cuota. D. Salida: Importe a pagar (importe)

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(); }

CODIFICACIÓN C++

/*............................ PROGRAMA CPP03.04.CPP Procesos Condicion multiple .............................*/ //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);

INICIO

FIN

d,m,a

m

maxdia=31

maxdia=30

dias=28 dias=29

aMOD4==0 ANDaMOd100!=0 ORaMOD400==0

Mes incorrecto

s

E

10

1,3,5,7,8,10,12

4,6,9,11

2

Default

d>0 AND d<=maxdia AND m>0 AND m<13

AND a>0

10

Mes incorrecto

s Mes correcto

DIAGRAMA DE FLUJO

Page 25: Programacion en c++

Algoritmos y su codificación en C++

24 E. EMMANUEL COAQUIRA M.

Problema CPP03-05 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)

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(); }

2

colegio

INICIO

FIN

MenuColegio

Dsto=impbruto*0.5

Dsto=impbruto*0.4

Impos

S

1

1

Ecolegio

Dsto=impbruto*0.33

2

Impo=impbruto-Dsto

MenuInstituto

opE

S

op

op

Dsto=impbruto*0.25

Dsto=impbruto*0.20

Dsto=impbruto*0.15

1

2

3

DIAGRAMA DE FLUJO

Page 26: Programacion en c++

Algoritmos y su codificación en C++

25 E. EMMANUEL COAQUIRA M.

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(); }

B

ocup

INICIO

FIN

MenuOcupación

D=0.6

D s

S

A

Eocup

MenuRendimiento

rendE

S

rend

D=0.3

D=0.1C

B

D=0.5A

rend

D=0.2

D=0.1C

B

D=0.4A

rend

D=0.2

D=0.0C

B

D=0.4A

rend

D=0.1

D=0.0C

B,C

D=0.3A

rend

D=0.0

P

C

D

N

O

DIAGRAMA DE FLUJO

Page 27: Programacion en c++

Algoritmos y su codificación en C++

26 E. EMMANUEL COAQUIRA M.

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.

Page 28: Programacion en c++

Algoritmos y su codificación en C++

27 E. EMMANUEL COAQUIRA M.

Page 29: Programacion en c++

Algoritmos y su codificación en C++

28 E. EMMANUEL COAQUIRA M.

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. C++ While (condición sea verdad) { Acciones; }

(1) Evalúa la condición (2) Se el resultado es VERDADERO

Ejecuta la Acción Regresa al punto (1)

(3) Termina la estructura cuando el resultado de la condición es Falso.

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.

Condicion sea verdad

Acciones

0

50

E…

Co

m…

1

0

Page 30: Programacion en c++

Algoritmos y su codificación en C++

29 E. EMMANUEL COAQUIRA M.

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

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(); }

0

50

E…

Co

m…

1

0

INICIO

FIN

a,b

s

E

coc=0

a>b

a=a-b

coc++

a,coc

DIAGRAMA DE FLUJO

Page 31: Programacion en c++

Algoritmos y su codificación en C++

30 E. EMMANUEL COAQUIRA M.

Problema CPP04-02 Calcule los divisores comunes de dos números. Por ejemplo los divisores comunes de 6 y 18 son 1, 2, 3 y 6. DATOS D. Entrada: números (a,b) D. Salida: divisores Problema CPP04-03 Hallar la suma de los N primeros términos de la serie.

𝑆 =1

2+

1

4+

1

6+ ⋯ 𝑁 términos.

DATOS D. Entrada: cantidad de términos (n) D. Salida: suma de términos (S)

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(); }

DIAGRAMA DE FLUJO

i<=a AND i<=b

1

0

INICIO

FIN

a,b

s

E

i=1

i++

i

a%i==0 AND b%i==0

10

Page 32: Programacion en c++

Algoritmos y su codificación en C++

31 E. EMMANUEL COAQUIRA M.

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)

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(); }

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(); }

DIAGRAMA DE FLUJO

cont<=n

1

0

INICIO

FIN

n

s

E

cont=1,s=0, par=2

cont++

s

s=s+1/par

par+=2

n>0

1

0

INICIO

FIN

n

s

E

inv=0

n/=10

inv

inv*=10-n%10

DIAGRAMA DE FLUJO

Page 33: Programacion en c++

Algoritmos y su codificación en C++

32 E. EMMANUEL COAQUIRA M.

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

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(); }

DIAGRAMA DE FLUJO

temp>0

1

0

INICIO

FIN

n

s

E

sc=0,temp=n

temp/=10

Es

sc+=(temp%10)^3

n==sc

No es s

10

Page 34: Programacion en c++

Algoritmos y su codificación en C++

33 E. EMMANUEL COAQUIRA M.

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

expresión. Por ejemplo 28

64=

7

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, …

Page 35: Programacion en c++

Algoritmos y su codificación en C++

34 E. EMMANUEL COAQUIRA M.

Page 36: Programacion en c++

Algoritmos y su codificación en C++

35 E. EMMANUEL COAQUIRA M.

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. do{ sentencias; }while(condición sea verdad)

(1) Ejecuta las sentencias (2) Evalúa la condición

Si el resultado es VERDADERO regresa al punto (1) (3) 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.

Cond sea verdad

Sentencias

1

Page 37: Programacion en c++

Algoritmos y su codificación en C++

36 E. EMMANUEL COAQUIRA M.

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

FIN

sexo

s

E

contH,PromHcontM,promM

10

Sexo!=M!=H!=F

sumedH+=edadcontH++

H

Sexo!=F

edad E

sexo

sumedH+=edadcontH++

M

Sexo!=F

DIAGRAMA DE FLUJO

Page 38: Programacion en c++

Algoritmos y su codificación en C++

37 E. EMMANUEL COAQUIRA M.

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 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

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(); }

INICIO

FIN

sAreamasdimensiones

x=areamax=0

x<=20-inc

inc=0.0001

x+=incarea=x(20-x)

area>areamax

areamax=areaxmax=x

DIAGRAMA DE FLUJO

Page 39: Programacion en c++

Algoritmos y su codificación en C++

38 E. EMMANUEL COAQUIRA M.

Problema CPP05-04

Encuentre el valor de 𝜋 sabiendo que la suma de la serie 1 −1

3+

1

5−

1

7+

1

9− ⋯ es igual a 𝜋/4.sugerencia considere los términos cuyo valor

absoluto sea mayor a 0.000001. DATOS D. Salida: valor de pi

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(); }

CODIFICACIÓN C++

/*...................................... 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(); }

INICIO

FIN

n

s

E

(n%4) != 0 OR n<=8 OR n>32

i=0

i<=n

1

0

i,i+1,i+2,i+3

i=i+4

DIAGRAMA DE FLUJO

INICIO

FIN

n

s

signo=-signo

1/i>0.0000011

0

i=1Pi4=0

Signo=-1

pi4+=signo(1/i)

i+=2

pi

DIAGRAMA DE FLUJO

Page 40: Programacion en c++

Algoritmos y su codificación en C++

39 E. EMMANUEL COAQUIRA M.

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) costo mayor (cosmay) costo menor (cosmen) nombre de quien tiene el costo menor (M)

CODIFICACIÓN C++

/*...................................... PROGRAMA CPP05.05.CPP Procesos Repetitivos: Hacer-Mientras ......................................*/ //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(); }

INICIO

FIN

n

EN, costo

1/i>0.000001

10

cont=1suma=0cosmay=0Cosmen=999

Suma+=costo

cosmay=costo

s

costo>cosmay

costo>cosmen

cosmen=costo

M=N

cont++

10

1

0

cosprom=suma/5

CospromCosmay, Cosmen

M

DIAGRAMA DE FLUJO

Page 41: Programacion en c++

Algoritmos y su codificación en C++

40 E. EMMANUEL COAQUIRA M.

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?

Page 42: Programacion en c++

Algoritmos y su codificación en C++

41 E. EMMANUEL COAQUIRA M.

Page 43: Programacion en c++

Algoritmos y su codificación en C++

42 E. EMMANUEL COAQUIRA M.

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. 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.

Accion

inic;cond;incr

Page 44: Programacion en c++

Algoritmos y su codificación en C++

43 E. EMMANUEL COAQUIRA M.

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) Problema CPP06-02 Hallar la suma S:

𝑆 =1

1 + 𝑥+

1

1 + 2𝑥+ ⋯ +

1

1 + 𝑛𝑥

DATOS D. Entrada: valor de x, cantidad de sumandos (n) D. Salida: suma (s)

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(); }

s+=num

num=1;num<=numN;num++

EnumN

FIN

INICIO

s=sc=scu=0

sc+=num^2

scu+=num^3

s, sc, scu S

DIAGRAMA DE FLUJO

Page 45: Programacion en c++

Algoritmos y su codificación en C++

44 E. EMMANUEL COAQUIRA M.

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)

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(); }

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(); }

s+=1.0/(1+i*x)

i=1;i<=n;i++

En,x

FIN

INICIO

s=0

s S

DIAGRAMA DE FLUJO

dt+=d

i=1;i<=n;i++

E

n

FIN

INICIO

dt=tt=0

dt/tt S

D,t

tt+=t

DIAGRAMA DE FLUJO

Page 46: Programacion en c++

Algoritmos y su codificación en C++

45 E. EMMANUEL COAQUIRA M.

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 Problema CPP06-05 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)

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(); }

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(); }

a=0;a<=113/3;a++

FIN

INICIO

S

b=0;b<=113/7;b++

c=0;c<=113/19;c++

d=0;d<=113/23;d++

3a+7b+19c+23d==113

a,b,c,d

10

DIAGRAMA DE FLUJO

nro=1, inv=0

i=1;i<=n;i++

FIN

INICIO

i S

nro>0

inv=10*inv+nro%10

nro/=10

nro>0

DIAGRAMA DE FLUJO

Page 47: Programacion en c++

Algoritmos y su codificación en C++

46 E. EMMANUEL COAQUIRA M.

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:

𝑥

1−

𝑥2

22+

𝑥3

32−

𝑥4

42+

𝑥5

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”.

Page 48: Programacion en c++

Algoritmos y su codificación en C++

47 E. EMMANUEL COAQUIRA M.

Page 49: Programacion en c++

Algoritmos y su codificación en C++

48 E. EMMANUEL COAQUIRA M.

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 manejo de los elementos en las matrices se deben tener especial cuidado en la numeración establecida para cada índice ya que con ésta numeración es que se tendrá acceso al espacio del dato que queremos manejar.

Page 50: Programacion en c++

Algoritmos y su codificación en C++

49 E. EMMANUEL COAQUIRA M.

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 A[3,4]=12 A[4,1]=3 A[6,5]=mal! Excede el primer índice 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

Page 51: Programacion en c++

Algoritmos y su codificación en C++

50 E. EMMANUEL COAQUIRA M.

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 A[1,3,1]=2 A[2,0,1]=19 A[4,2,0]=12 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. 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]

Page 52: Programacion en c++

Algoritmos y su codificación en C++

51 E. EMMANUEL COAQUIRA M.

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[]) 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.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(); }

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(); }

Page 53: Programacion en c++

Algoritmos y su codificación en C++

52 E. EMMANUEL COAQUIRA M.

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[]) 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.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(); }

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; }

Page 54: Programacion en c++

Algoritmos y su codificación en C++

53 E. EMMANUEL COAQUIRA M.

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[][]

//Mostrar array ordenado cout<<"\nELEMENTOS ORDENADOS\nX["; for(i=0;i<n;i++) { cout<<"\t"<<X[i]; } cout<<"]"; //Pausa para los resultados getch(); }

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(); }

Page 55: Programacion en c++

Algoritmos y su codificación en C++

54 E. EMMANUEL COAQUIRA M.

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.

Page 56: Programacion en c++

Algoritmos y su codificación en C++

55 E. EMMANUEL COAQUIRA M.

Page 57: Programacion en c++

Algoritmos y su codificación en C++

56 E. EMMANUEL COAQUIRA M.

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.

Page 58: Programacion en c++

Algoritmos y su codificación en C++

57 E. EMMANUEL COAQUIRA M.

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. 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. Problema CPP08-02 Usando funciones encuentre los divisores comunes de dos números. a: Primer # a inspeccionar b: Segundo # a inspeccionar i: Posibles divisores

CODIFICACIÓN C++

/*....................... 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; }

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++; } }

Page 59: Programacion en c++

Algoritmos y su codificación en C++

58 E. EMMANUEL COAQUIRA M.

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().

//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]"; }

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 []);

Page 60: Programacion en c++

Algoritmos y su codificación en C++

59 E. EMMANUEL COAQUIRA M.

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.

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

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 }

Page 61: Programacion en c++

Algoritmos y su codificación en C++

60 E. EMMANUEL COAQUIRA M.

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.

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 }

Page 62: Programacion en c++

Algoritmos y su codificación en C++

61 E. EMMANUEL COAQUIRA M.

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.

Page 63: Programacion en c++

Algoritmos y su codificación en C++

62 E. EMMANUEL COAQUIRA M.

Page 64: Programacion en c++

Algoritmos y su codificación en C++

63 E. EMMANUEL COAQUIRA M.

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

Page 65: Programacion en c++

Algoritmos y su codificación en C++

64 E. EMMANUEL COAQUIRA M.

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) Codificar la librería o archivo de cabecera con extensión h (2) Codificar el desarrollo de los prototipos en otro archivo con

el mismo nombre que el archivo de cabecera pero con extensión cpp.

(3) Compilar el cpp con ALT + F9 (4) Si hay errores

Corregir Regresar al paso (2)

(5) La librería esta lista para ser utilizada 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.

Page 66: Programacion en c++

Algoritmos y su codificación en C++

65 E. EMMANUEL COAQUIRA M.

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++

/*.................................. 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

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];

Page 67: Programacion en c++

Algoritmos y su codificación en C++

66 E. EMMANUEL COAQUIRA M.

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 que 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.

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; } //------------------------------------------------------------

Page 68: Programacion en c++

Algoritmos y su codificación en C++

67 E. EMMANUEL COAQUIRA M.

2. Codificar un programa que utilice la librería IngDatos codificada en el ejercicio anterior.

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 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.

CODIFICACIÓN C++

/*........................ 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(); }

Page 69: Programacion en c++

Algoritmos y su codificación en C++

68 E. EMMANUEL COAQUIRA M.

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.

Page 70: Programacion en c++

Algoritmos y su codificación en C++

69 E. EMMANUEL COAQUIRA M.

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.. CyberBullyng.. Visítenos en http://mySpace91.ucoz.com 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 alguna sugerencia puedes contactarme a: [email protected] O dejar tu comentario en la misma Web -.-la cual ya ha sido antes mencionada-.-

¿Por qué no me haces tu amigo?. Creo que me lo merezco ¿No?

Page 71: Programacion en c++

Algoritmos y su codificación en C++

70 E. EMMANUEL COAQUIRA M.

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.

Page 72: Programacion en c++

Algoritmos y su codificación en C++

71 E. EMMANUEL COAQUIRA M.

Copyright

Autor

E. EMMANUEL COAQUIRA M.

Editor

Leaders of the World

Copyright © 2013 – End