UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA
CURSO: C++
MODULO 01: Introducción ¿Que es un problema?
Un problema es definido por un conjunto de hipótesis y / o restricciones, y por lo menos un objetivo.
Una instancia de un problema esta dada por un conjunto ordenado de datos particulares del problema.
¿Que es un Algoritmo?
Es un método para resolver un problema mediante una serie de pasos precisos, definidos y finitos.
Un algoritmo debe producir un resultado en un tiempo finito.
Los métodos que utilizan algoritmos se denominan métodos algorítmicos en oposición a los métodos que implican algún juicio o interpretación que se denominan métodos heurísticos. ¿Que es un programa?
Un programa es un conjunto de instrucciones que nos permite resolver problemas mediante el uso de un ordenador, también se puede decir que es la traducción de un algoritmo en instrucciones que puede entender una maquina, para ello de hace uso de algún lenguaje de programación con en este caso el lenguaje C++.
¿Que es un lenguaje de programación?
Es un lenguaje, como cualquier otro, que tiene reglas de escritura que conforman su sintaxis. Para verificar la correcta escritura cuenta con un compilador quien identifica los errores que se pueda cometer en la escritura de un programa. Nosotros utilizaremos el lenguaje de programación C++.
Fases en la resolución de problemas.
El proceso de resolución de un problema mediante el uso de una computadora nos lleva a la escritura de un programa y la ejecución de la misma.
1.- Análisis del problema 2.- Diseño del algoritmo 3.- Codificación 4.- Compilación y ejecución 5.- Verificación 6.- Depuración 7.- Mantenimiento 8.- Documentación
Todo esto es un repaso nada mas de la parte de teoría, ahora nos dedicaremos a la parte esencial del curso que es la resolución del os problemas mediante el uso de este lenguaje C++.
Elementos básicos de programación 1.- Esquema de todo programa C++ // librerias … // funcion principal void main(){ // declaracion de variables … // entrada de datos … // proceso de calculo …. // salida de resultados …. }
2.- Librerias básicas a utilizar: #include <conio.h> #include <iostream.h> 3.- Cómo declaro variables?
Tipo_de_dato nombre_de_variable;
Tipo_de_dato nombre1, nombre2, nombre3; 4.- Qué tipos de dato puedo utilizar?
short entero corto: -127 a 128 byte entero corto: 0 a 255 int entero : -32767 a 32768
float real de baja precision double real de alta precision char caracter
Ejm : int x, y ; double area;
5.- Cómo guardo valores en una variable ? variable = valor;
Siempre la variable va al lado izquierdo. El valor puede ser fijo, variable o expresión.
Ejm:
x = 15; // valor fijo y = x; // valor variable x= 2.5*y+x; // valor expresión 6.- Cómo imprimo en pantalla en C++?
cout <<”texto”<<valor<<variable<<expresión<<endl; Ejm: cout <<”El valor de x es: “<<x<<endl;
7.- Cómo leo los datos ingresados por teclado en C++? cin >> variable;
Ejm: cout<<”ingrese valor de x”; cin >> x; PROBLEMA 1:
Encontrar el área de un terreno rectangular. Solución: // librerias #include <conio.h> #include <iostream.h> //funcion principal void main(){ // declaracion de variables double ancho, alto, area; // entrada
cout<<”Ingrese valor del ancho: “; cin >>ancho;
cout <<”Ingrese valor del alto : “; cin >>alto; // proceso de calculo
area = ancho * alto; // salida
cout<<”El area es: “<<area<<endl; }
PROBLEMA 2:
Una tienda, por liquidación, ofrece 50% de descuento en todos sus productos. Por la compra de cierta cantidad de unidades de un producto, se desea saber el monto de la compra, el monto del descuento y el monto a pagar.
Solución: // librerias #include <conio.h> #include <iostream.h> //funcion principal void main(){ // declaracion de variables
double precio, mcompra, mdscto, mpago; int cantidad; // entrada cout<<”Ingrese precio: “; cin>>precio; cout<<”Ingrese unidades: “; cin>>cantidad; // proceso
mcompra = precio * cantidad; mdscto = mcompra*0.50; mpago = mcompra – mdscto; // salida
cout << “Monto de compra: “<<mcompra<<endl;
cout << “Monto de dscto : “<<mdscto<<endl;
cout << “Monto a pagar : “<<mpago<<endl; }
PROBLEMA 3:
Dado un capital, encuentre los intereses correspondientes considerando una tasa de interes determinada y un cierto número de períodos financieros. Considere las siguientes fórmulas:
Monto = capital(1+tasa/100)^n Intereses= Monto – capital
Solución:
// librerias
#include <conio.h> #include <iostream.h>
#include <math.h> // para la funcion pow(base, exponente)
//funcion principal void main(){
// declarar variables
double capital, tasa, n, intereses, monto;
// entrada
cout<<”Ingrese capital: “; cin>>capital;
cout<<”Ingrese tasa de interes: “; cin >> tasa;
cout<<”Ingrese numero de periodos: “; cin>>n;
// proceso
monto = capital * pow(1+tasa/100,n); intereses = monto – capital;
// salida
cout<<”Monto final: “<< monto<<endl; cout<<”Intereses :
“<<intereses<<endl; }
PROBLEMA 4:
Encontrar el area de un triangulo conociendo sus 3 lados. Considere la siguiente formula:
Area = raiz cuadrada(p(p-a)(p-b)(p-c)) Donde p es el semiperimetro.
Solución: /*
Name: Calculo de areas
Author: Reyes Marzano, Alejandro
Description: Encontrar el area de un triangulo conociendo sus 3 lados.
Considere la siguiente formula: Area = raiz cuadrada(p(p-a)(p-b)(p-c))
Date: 22/01/08 12:23 Copyright: */ // librerías #include <conio.h> #include <iostream.h>
#include <math.h> // para la función pow(base, exponente) //funcion principal void main(){ // declarar variables float a, b, c, p, area,perimetro; // entrada
cout<<"Ingrese el lado a del triangulo : "; cin>> a; cout<<"Ingrese el lado b del triangulo : "; cin >> b; cout<<"Ingrese el lado c del triangulo : "; cin>> c; // proceso
p = (a+b+c)/2;//semi perimetro del triangulo area =pow((p*(p-a)*(p-b)*(p-c)),0.5); perimetro=2*p; // salida cout<<"perimetro: "<<perimetro<<endl; cout<<"área : "<<area<<endl; getche (); } PROBLEMA 5:
Dada una cantidad que representa grados centígrados, encontrar su equivalente en grados Fahrenheit, ranking y kelvin.
Solución: /*
Name: cambio de temperatura Author: Reyes Marzano, Alejandro
Description: Dada una cantidad que representa grados centigrados,encontrar su equivalente en
grados Fahrenheit,ranking y kelvin Date: 22/01/08 12:11
Copyright: fisi_unmsm lima peru 2008 */
// librerías
#include <stdlib.h> #include <iostream.h>
#include <math.h> // para la función pow(base, exponente)
//funcion principal int main(){
// declaracion variables double C, F, K, R;
// entrada de datos
cout<<"Ingrese la temperatura en grados centigrados C: \n"; cin>> C; // proceso de datos F=(9*C/5)+32; K=C+273; R=(9*C)/5+492; // salida de datos
cout<<"Los equivalentes en otros sistemas son: \n"; cout<<"Fahrenheit : "<<F<<endl;
cout<<"kelvin : "<<K<<endl; cout<<"Ranking : "<<R<<endl; cout<<"Celcius : "<<C<<endl;
system("PAUSE"); //espera la pulsacion de una tecla para salir
return 0; }
PROBLEMA 6:
Dado un número entero de 4 cifras, obtener el número invertido. Solución:
/* Name: invertir numero de 4 cifras Author: Reyes Marzano, Alejandro
Description: Dado un numero de 4 cifras como dato de entrada invierte el numero
Date: 22/01/08 12:32
Copyright: fisi_unmsm lima peru 2008 */
#include <conio.h> #include <iostream.h> void main(){
int N,a,b,c,d,num;
cout<<"Ingrese un numero de cuatro cifras\nNumero = ";cin>>N; //hallando cifras a=N/1000; b=(N/100)%10; c=(N/10)%10; d=N%10;
num=d*1000+c*100+b*10+a;
cout<<"El numero invertido es :"<<num<<endl; getche ();
}
PROBLEMA 7:
Evaluar el resultado de la siguiente función: F(x) = raíz cúbica de (5x+73)
Solución:
/* Name: evaluacion de una funcion Author: Reyes Marzano, Alejandro
Description: dado el valor de x evalua la funcion Date: 22/01/08 12:47 Copyright: */ #include <conio.h> #include <iostream.h> #include <math.h> void main(){ float x,f;
cout<<"funcion a evaluar\nF(x) = raiz cubica de (5x+73)\n"; cout<<"Ingrese el valor de x = "; cin>>x; f=pow((5*x+pow(7,3)),0.3); cout<<" X = "<<x<<endl; cout<<" F(X) = "<<f<<endl; getche (); } PROBLEMA 8:
Una persona tiene una cuenta en dólares, una en sóles y una en euros. Quiere saber cuanto dinero tiene en las tres cuentas pero expresado en dólares, en soles y en euros por separado.
Solución: /*
Name: Cambio de monedas
Author: Reyes Marzano, Alejandro
Description: es un programa que hace cambio de acuerdo al tipo de cambio
Date: 22/01/08 12:51 Copyright: */ //librerias #include <conio.h> #include <iostream.h> #include <math.h> #define tc1 3.2 #define tc2 0.8 #define tc3 4 //funcion principal void main(){ float a,b,c,A,B,C;
cout<<"Ingrese la cantidad en la cuenta en dolares = ";cin>>a;
cout<<"Ingrese la cantidad en la cuenta en soles = ";cin>>b;
cout<<"Ingrese la cantidad en la cuenta euros = ";cin>>c;
A=a+b*1.0/tc1+c*1.0/tc2; B=b+a*1.0*tc1+c*1.0*tc3; C=c+a*1.0*tc2+b*1.0/tc3;
cout<<"La cantidad total en dolares es = "<<A<<endl;
cout<<"La cantidad total en soles es = "<<B<<endl; cout<<"La cantidad total en euros es = "<<C<<endl; getche ();
Modulo 02: Estructuras de Control Condicionales: La sentencia If Sintaxis: If(expresión_logica){ <secuencia de sentencias> } En español seria: si(expresión_logica)entonces <Secuencia de sentencias> Fin_si
Si la expresión lógica es verdadera, entonces se ejecuta la secuencia de sentencias en caso contrario se salta la estructura. Después que la sentencia if se ha ejecutado, el control pasa a la siguiente sentencia. La sentencia if –else Sintaxis: if(expresión_logica){ <Secuencia de sentencias 01> } else{ <Secuencia de sentencias 02> } En español sería: si(expresión_logica)entonces <Secuencia de sentencias 01> Si_no <Secuencia de sentencias 02> Fin_si
Si la expresión lógica es verdadera, entonces se ejecuta la secuencia de sentencias 01 en caso contrario o sea cuando la expresión lógica es falso se ejecuta la secuencia de
sentencias 02.
Sentencias if –else anidados:
C++ permite anidar sentencias if_else anidados para crear una sentencia de alternativas múltiples: Sintaxis: if(expresión_logica_01){ <Secuencia 01> } else{ if(expresión_logica_02){ <Secuencia 02> } else{ if(expresión_lógica_n){ <secuencia n> } } } En español sería: si(expresión_logica_01)entonces <Secuencia 01> Si_no si(expresión_logica_02)entonces <Secuencia 02> Si_no si(expresión_lógica_n)entonces <secuencia n> Fin_si Fin_si Fin_si PROBLEMA 1
Una tienda ofrece 20% de descuento sobre el monto de consumo si es que éste supera los 30 soles, caso contrario el descuento es del 10%. El monto de consumo no incluye impuestos que se aplica al monto neto. Se desea saber el monto del descuento, el monto neto, el monto de los impuestos y el monto a pagar.
Solución:
// librerias
#include <conio.h> #include <iostream.h>
#include <iomanip.h> // para manipuladores setw, setiosflags, etc.
// definicion de constantes
#define Pdscto1 0.20 // 20% descuento #define Pdscto2 0.10 // 10% descuento #define Pimpto 0.19 // 19% impuesto // funcion principal
void main(){
// declaracion de variables
double Consumo,Dscto,Neto,Impuesto,Pago; // ingreso de consumo
cout << "Ingrese consumo : "; cin >> Consumo;
// Calcular Descuento if ( Consumo > 30)
Dscto = Consumo * Pdscto1; else
Dscto = Consumo * Pdscto2; // calcular el monto neto
Neto = Consumo - Dscto; // Calcular monto del impuesto Impuesto = Neto * Pimpto;
// Calcular monto del importe a pagar Pago = Neto + Impuesto;
// Escribir resultados cout << endl;
cout << setiosflags(ios::fixed| ios::showpoint); // formato para reales cout << "Consumo : "
// ancho 10, con 2 decimales, variable, cambio de linea << setw(10) << setprecision(2) << Consumo << endl <<"Descuento : " << setw(10) << setprecision(2) << Dscto << endl <<"Neto : " << setw(10) << setprecision(2) << Neto << endl
<< "Impuesto : "
<< setw(10) << setprecision(2) << Impuesto << endl
<< endl
<< "Importe a Pagar: "
<< setw(10) << setprecision(2) << Pago << endl;
getch(); }
nota 1: el manipulador ios::fixed fija formato para reales
el
manipulador ios::showpoint muestra punto decimal y decimales nota 2: el manipulador setw(nn) establece el ANCHO del dato
el
manipulador setprecision(2) establece 2 decimales para un real
nota 3: otra forma de escribir los mismos resultados es: cprintf("\r\nConsumo : %10.2f",Consumo); cprintf("\r\nDescuento : %10.2f",Dscto); cprintf("\r\nNeto : %10.2f",Neto); cprintf("\r\nImpuesto : %10.2f",Impuesto); cprintf("\r\nImporte a Pagar : %10.2f",Importe);
para lo cual debe incluir la libreria <stdio.h>
PROBLEMA 2
Dado 5 numeros cualquiera, encontrar el mayor y el numero de veces que se repite. Solución:
// librerias
#include <iostream.h> // function principal
void main(){
//declaracion de variables
double A,B,C,D,E,mayor, veces; // ingreso de 5 numeros
cout << "Ingrese 5 numeros separados por un espacio: ";
cin >> A >> B >> C >> D >> E;
// Determinar el mayor de los numeros ingresados mayor = A; // asume que es el primero if ( mayor < B ) mayor = B;
if ( mayor < C ) mayor = C; if ( mayor < D ) mayor = D; if ( mayor < E ) mayor = E; // cuantas veces se repite
veces=0; if (mayor == A) veces++; if (mayor == B) veces++; if (mayor == C) veces++; if (mayor == D) veces++; if (mayor == E) veces++; // Escribir resultado cout << endl;
cout << "Mayor valor ingresado: " << mayor <<endl;
cout << "Numero de veces que se repite: "<<veces<<endl;
getch(); }
PROBLEMA 3:
El estado ha puesto en marcha un plan de subsidio a las familias bajo las siguientes consideraciones:
a) hasta 2 hijos se le otorga S/.70.0
b) mas de 2 hasta 5 hijos se le otorga S/.90.0 c) mas de 5 hijos se le otorga S/.120,0
d) por cada hijo escolar se le otorga S/.10.0 adicionales e) si la madre es viuda se le otorga S/.50 adicionales
Se desea saber el subsidio total que debe recibir una familia. Solución: // librerias #include <conio.h> #include <iostream.h> #include <iomanip.h>
#include <ctype.h> // para la function toupper() // funcion principal
void main(){
// declaracion de variables int Nhijos, NhijosEsc;
char Ecivil; double Subsidio; // ingreso de datos
cout << "ingrese n£mero de hijos: "; cin >> Nhijos; cout << "ingrese n£mero de hijos escolares: "; cin >> NhijosEsc;
cout << "estado civil de la madre <Viuda,Otro> : "; cin>>Ecivil;
Ecivil = toupper( Ecivil ); // convierte a mayuscula // calcular subsidio por total de hijos
if ( Nhijos <= 2 ) Subsidio = 70; else if ( Nhijos <= 5 ) Subsidio = 90; else Subsidio = 120;
// incrementar subsidio por hijos en edad escolar Subsidio = Subsidio + NhijosEsc * 10;
// incrementar subsidio por viudez de la madre if ( Ecivil == 'V' )
Subsidio = Subsidio + 50; // escribir subsidio
cout << "\nSu familia recibie un subsidio de " << Subsidio << " soles."<< endl;
getch(); }
PROBLEMA 4:
Resolver una ecuación de 2do grado. 2 AX + BX + C = 0 solución: // librerias #include <conio.h> #include <iostream.h> #include <iomanip.h> #include <math.h> // definir constantes #define False 0 #define True 1 // funcion principal void main(){ // declaracion de variables double A,B,C,Disc,Raiz1,Raiz2; int Imaginario; // ingreso de 3 coeficientes
cout << "Ingresar los 3 coeficientes separados por espacios: ";
cin >> A >> B >> C;
// asumir que no hay raices imaginarias Imaginario = False;
// verificar si la ecuación tiene solucion if ( A == 0 && B == 0 )
cout << "Ecuacion sin solucion"; else{ if ( A == 0 ) { Raiz1 = C / B * (-1); Raiz2 = Raiz1; } else{ Disc = pow(B,2) - 4 * A * C; if ( Disc < 0 ) { Imaginario = True;
Disc = -Disc; }
Raiz1 = (-B + sqrt(Disc)) / (2 * A); Raiz2 = (-B - sqrt(Disc)) / (2 * A); }
// escribir resultados cout << endl;
cout << setiosflags(ios::fixed | ios::showpoint);
cout << "Ecuacion a resolver: " << endl << setw(12) << "2" << endl << setw(10) << setprecision(2) << A << "X + " << setw(0) << setprecision(2) << B << "X + " << setw(0) << setprecision(2) << C << " = 0" << endl << "Raiz 1 = " << setw(8) << setprecision(3) << Raiz1 << endl
<< "Raiz 2 = " << setw(8) << setprecision(3) << Raiz2 << endl;
if ( Imaginario )
cout << "Son raices imaginarias"<<endl; }
cin.ignore(); getch();
}
nota: otra forma de escribir resultados es:
cprintf("\r\nEcuacion a resolver: \r\n %12s","2"); cprintf("\r\n%10.2fX + %0.2fX + %0.2f = 0",A,B,C); cprintf("\r\nRaiz 1 = %8.3f",Raiz1); cprintf("\r\nRaiz 2 = %8.3f",Raiz2); cprintf("\r\n"); if ( Imaginario )
cprintf("Son raices imaginarias"); para lo cual debe incluir la libreria <stdio.h>
Una compañía de teléfonos necesita la siguiente información de cada cliente para emitir su recibo de pago: nombre, dirección, número telefónico y cantidad de minutos consumidos en el mes. Para el cálculo del importe de pago considere lo siguiente:
Los 50 primeros minutos son libres, los 100 siguientes tienen un costo de S/0.50 cada minuto. Los 100 siguientes tienen un costo de S/0.30 cada minuto. Los siguientes minutos tienen un costo de S/0.10 cada minuto. Se requiere emitir el recibo de pago correspondiente mostrando los montos calculados.
Solución: // librerias #include <conio.h> #include <iostream.h> #include <iomanip.h> // definicion de constantes #define tarifa0 0.00 #define tarifa1 0.50 #define tarifa2 0.30 #define tarifa3 0.10 // funcion principal void main(){ // declaracion de variables
char nombre[40], direccion[80], telefono[10]; int minutos, exceso0, exceso1, exceso2, exceso3;
double importe, importe0, importe1,importe2, importe3; // ingreso de datos
cout << "ingrese nombre : "; cin.getline(nombre,40);
cout << "ingrese direccion : "; cin.getline(direccion,80);
cout << "ingrese telefono : "; cin.getline(telefono,10);
cout << "minutos consumidos: "; cin >> minutos; // inicializar minutos en exceso
exceso0 = exceso1 = exceso2 = exceso3 = 0; // calcular minutos en exceso
if ( minutos <= 50 ) exceso0 = minutos; else if ( minutos <= 150 ){ exceso0 = 50;
exceso1 = minutos - 50; } else if (minutos <= 250){ exceso0 = 50; exceso1 = 100; exceso2 = minutos-150; } else{ exceso0 = 50; exceso1 = 100; exceso2 = 100; exceso3 = minutos-250; }
// calcular importes a pagar importe0 = exceso0 * tarifa0; importe1 = exceso1 * tarifa1; importe2 = exceso2 * tarifa2; importe3 = exceso3 * tarifa3;
importe = importe0 + importe1 + importe2 + importe3; // mostrar resultados
cout << endl;
cout << "Nombre : " << nombre << endl
<< "Direccion : " << direccion << endl << "Telefono : " << telefono << endl << endl;
cout << setiosflags(ios::fixed | ios::showpoint);
cout << setw(20) << "MINUTOS" << setw(10) << "TARIFA" << setw(15) << "IMPORTE" << endl
<< setw(20) << exceso0 << setw(10) << setprecision(2) << tarifa0
<< setw(15) << setprecision(2) << importe0 << endl
<< setw(20) << exceso1 << setw(10) << setprecision(2) << tarifa1
<< setw(15) << setprecision(2) << importe1 << endl
<< setw(20) << exceso2 << setw(10) << setprecision(2) << tarifa2
<< setw(15) << setprecision(2) << importe2 << endl
<< setw(20) << exceso3 << setw(10) << setprecision(2) << tarifa3
<< setw(15) << setprecision(2) << importe3 << endl;
<< setw(15) << setprecision(2) << importe << endl;
cin.ignore(); getch();
}
Sentencia de alternativa multiple: switch
La sentencia switch ofrece una forma de realizar decisiones de alternativas multiples. Sintaxis:
switch (variable) {
case valor1: acción1; break; case valor2: acción2; break; case valor3: acción3; break; // ...
default: acciónx;
}
Compara el valor contenido en la variable con cada uno de los valores situados después del case, ejecutando en caso de que exista coincidencia la acción correspondiente. Si no existe coincidencia, se ejecuta la acciónx correspondiente al caso default. Y si no se pusiera el default, simplemente no ejecuta ninguna instrucción dentro del switch.
La orden break hace que la ejecución salga del switch; de no ponerlo se ejecutarán todas las órdenes hacia abajo sin importar el valor de los case hasta encontrar un break o la llave de cierre del switch.
La variable del switch debe ser entera o de un solo caracter
Ejemplo 1: ingresar como numero entero el estado civil de una persona e imprimir su descripción:
inicio
int ecivil; Leer ecivil switch(ecivil){
case 1: Imprimir “soltero” break; case 2: Imprimir “casado” break; case 3: Imprimir “casado” break; case 4: Imprimir “casado” break; default: // ningun caso anterior
Imprimir “error” }
fin
Dado 5 números cualquiera, encontrar el mayor valor positivo si es que lo hubiera, de lo contrario de un mensaje adecuado.
Solución: /*
Name: comparador de numeros Author: Reyes Marzano, Alejandro
Description: Dado 5 números cualquiera, encontrar el mayor valor
positivo si es que lo hubiera, de lo contrario de un
mensaje adecuado. Date: 22/01/08 14:23
Copyright: fisi_2008 lima peru */ // librerias #include <conio.h> #include <iostream.h> // function principal void main(){ //declaracion de variables double A,B,C,D,E,mayor, veces; // ingreso de 5 numeros
cout <<"Ingrese 5 numeros enteros = ";cin>>A>>B>>C>>D>>E; // Determinar el mayor de los numeros ingresados
mayor = A; // asume que es el primero if ( mayor < B ) mayor = B; if ( mayor < C ) mayor = C; if ( mayor < D ) mayor = D; if ( mayor < E ) mayor = E; cout << endl; if (mayor>0){
cout << "Mayor valor positivo es : "<<mayor<<endl; }
else{
cout << " No hay un mayor valor positivo\n"<<endl; }
getche(); }
PROBLEMA 7:
Dado la cantidad de votos totales de 3 candidatos A, B, C. Determinar el ganador si es que lo hubiera, caso contrario indicar quienes pasan a la segunda vuelta. Considere que el ganador debe superar el 50% del total de los votos y pasan a la segunda vuelta quienes tengan los 2 puntajes más altos. De no darse las condiciones para una segunda vuelta se anula la elección.
Solución: /*
Name: Escruta votos
Author: Reyes Marzano, Alejandro
Description: ingrese los votos de los candidatos Date: 22/01/08 14:34 Copyright: */ #include <iostream.h> #include <conio.h> void main(){ int A,B,C,ganador,mitad,totalvotos,porcganador; cout<<"Ingrese los votos de A = ";cin>>A;
cout<<"Ingrese los votos de B = ";cin>>B; cout<<"Ingrese los votos de c = ";cin>>C; totalvotos=A+B+C;
cout<<"Total de votos = "<<totalvotos; ganador=A; if(ganador<B) ganador=B; if(ganador<C) ganador=C; cout<<endl; if(ganador>totalvotos/2){ if(ganador==A) cout<<"Ganador A"<<endl; if(ganador==B) cout<<"Ganador B"<<endl; if(ganador==C) cout<<"Ganador C"<<endl; cout<<"felicitaciones"<<endl; } else{
cout<<"No hay ganador"<<endl;
cout<<"Habra segunda vuelta"<<endl; }
cout<<"No hay ganador"<<endl;
cout<<"Se anulan las elecciones"<<endl; }
getche(); }
PROBLEMA 8:
Dado un número natural de 3 cifras, determine si es o no es un número capicúa. Se considera que un número es capicúa cuando se lee igual de derecha a izquierda que de izquierda a derecha. Verifique que le número dado tenga sólo 3 cifras, de lo contrario de un mensaje adecuado.
Solución: /*
Name: Numero Capicua
Author: Reyes Marzano, Alejandro Description: ingrese un numero
Date: 22/01/08 14:44 Copyright: */ //librerias #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> void main(){ int N,a,b,c,n;
cout<<"Ingrese un numero de tres cifras = ";cin>>N; cout<<endl; if(N>=100 && N<1000){ a=N/100; b=(N/10)%10; c=N%10; n=c*100+b*10+a;
cout<<"El numero invertido es = "<<n<<endl; cout<<endl;
} else{
cout<<"El numero no cumple con la condicion"<<endl; }
if(N==n){
cout<<"El numero ingresado es capicua"<<endl; }
else {
cout<<"El numero ingresado no es capicua"<<endl; }
getche(); }
PROBLEMA 9:
Dado un número natural de no más de 3 cifras, determine su escritura en el formato romano.
Solución: /*
Name: convierte un decimal a romano Author: Reyes Marzano, Alejandro
Description: Dado un número natural de no más de 3 cifras,
determine su escritura en el formato romano. Date: 22/01/08 14:48 Copyright: */ #include <stdio.h> #include <iostream.h> #include <conio.h> void main(){ int N,digito,r,j;
cout<<"Ingrese un numero de maximo tres cifras\n = ";cin>>N; if(N>0 && N<1000){ cout<<"EN ROMANOS:\n"; r=N; digito=r/100; r=r%100; if(digito==9) cout<<"C"<<"M"; else{ if(digito>4){ cout<<"D"; for(j=1;j<=(digito-5);j++){ cout<<"C"; } } else{ if (digito==4) cout<<"C"<<"D"; else{ for(j=1;j<=digito;j++) cout<<"C";
} } } digito=r/10; r=r%10; if(digito==9) cout<<"X"<<"C"; else{ if(digito>4){ cout<<"L"; for(j=1;j<=(digito-5);j++) cout<<"X"; } else{ if (digito==4) cout<<"X"<<"L"; else{ for(j=1;j<=digito;j++) cout<<"X"; } } } digito=r; if(digito==9) cout<<"I"<<"X"; else{ if(digito>4){ cout<<"V"; for(j=1;j<=(digito-5);j++) cout<<"I"; } else{ if(digito==4) cout<<"I"<<"V"; else{ for(j=1;j<=digito;j++) cout<<"I"; } } } } else{
cout<<"No se encuentra en el rango pedido\n"; }
getche (); }
PROBLEMA 10:
Dado 3 valores numéricos determine si pueden corresponder a un triángulo o no. Solución:
/*
Name: verifica si es un triangulo Author: Reyes Marzano, Alejandro
Description: Dado 3 valores numéricos determine
si pueden corresponder a un triángulo o no. Date: 22/01/08 15:27 Copyright: */ #include <conio.h> #include <iostream.h> void main(){ int A,B,C,mayor,medio,menor,n,m,r,x,y,z;
cout<<"Ingrese tres numeros separados por un espacio en blanco = "; cin>>A>>B>>C; n=A; m=B; r=C; x=n; y=m; z=r; mayor=A; if(mayor<B) mayor=B; if(mayor<C) mayor=C; cout<<endl; medio=n; if(medio<m) medio=m; if(medio<r) medio=r; cout<<endl; menor=x; if(menor<y) menor=y; if(menor<z) menor=z; cout<<endl;
if(mayor-medio<menor && menor<mayor+medio)
if(medio-menor<mayor && mayor<medio+menor) cout<<"Es un triangulo"<<endl;} else{ cout<<"No es un triangulo"<<endl; } getche (); }
Antes de describir el funcionamiento y la utilidad de las estructuras repetitivas, hagamos un repaso de los operadores disponibles en el lenguaje C++.
Operadores
Los operadores sirven para unir identificadores y literales formando expresiones, que son el resultado de una operación.
A continuación se muestran los operadores aritméticos:
Descripción SímboloExpresión de ejemplo Resultado del ejemplo Multiplicación * 2*4 8 Residuo de dividir enteros % 5%2 1 Suma + 2+2 4 Resta - 7-2 5 Aumenta en uno ++ c++ c = c + 1 Disminuye en uno -- c-- c = c - 1 Menos unario - -(2+4) -6 Suma al contenido += X += 4 X = X + 4 Resta al contenido -= X -= 4 X = X - 4 Multiplica al contenido *= X *= 4 X = X * 4 Divide al contenido /= X /= 4 X = X / 4
Residuo del contenido %= X %= 4 X = X % 4
Los operadores de comparación o también conocidos como relacionales y que devuelven un valor lógico que será true si la comparación fue verdad y false en caso contrario son los siguientes:
Descripción Símbolo de ejemploExpresión Resultado del ejemplo
Igualdad == 2 == 2 true
Desigualdad != 2 != 2 false
Menor que < 2 < 2 false
Mayor que > 3 > 2 true
Menor o igual
que <= 2 <= 2 true
Mayor o igual
que >= 1 >= 2 false
Los operadores lógicos que permiten evaluar expresiones lógicas compuestas son los siguientes:
Descripción Símbolo Expresión de ejemplo Resultado del ejemplo
Negación ! !(2 == 2) false
Y lógico && (2 == 2) && (2 >= 0) true
O lógico || (2 == 2) || (2 != 2) true
Separadores
Existen otros caracteres con significado especial. Son los separadores:
Separador Descripción
()
Contienen listas de parámetros, tanto en la definición de un método como en la llamada al mismo. También se utilizan para modificar la precedencia en una expresión, contener expresiones para control de flujo y realizar conversiones de tipo.
{}
Se utilizan para definir bloques de código, definir ámbitos y contener los valores iniciales de los vectores.
[] Se utiliza tanto para declarar vectores o matrices como para referenciar valores dentro de los mismos.
; Separa sentencias.
,
Separa identificadores consecutivos en la declaración de variables y en las listas de parámetros. También se utiliza para encadenar sentencias dentro de una estructura for.
. Separa un nombre de propiedad o método de una variable de referencia ú objeto.
ESTRUCTURA REPETITIVA: while
Repite la ejecución de la acción mientras la expresión lógica siga siendo verdad. Cuando sea falsa, el proceso termina.
Inicialización
while (condición) { acción
variación }
Por ejemplo, imprimir los 100 primeros números naturales: int n=1; // inicialización
Imprimir n
n++ // aumenta en 1 }
Mientras que la condición sea verdad, se seguirá ejecutando la acción ESTRUCTURA REPETITIVA: do – while
Igual que la anterior, con la única diferencia que la anterior evalúa la condición antes de ejecutar la acción. En cambio, el do while evalúa la condición después de realizar la acción por lo menos una vez.
Esta estructura de programación repetitiva es recomendable cuando la acción se va a realizar de todas maneras, por lo menos una vez, o cuando no se sabe la cantidad de veces que se va a repetir la acción.
inicialización do {
acción variación
}while (condición);
Por ejemplo, imprimir los 100 primeros números naturales: int n=1; // inicialización
do {
Imprimir n
n++ // aumenta en 1 } while (n <=100);
ESTRUCTURA REPETITIVA: for
Es un while simplificado, mucho mas rápido y eficaz. Muy preferido por los programadores. Veamos su forma general:
for (inicialización; condición; variación) { acción;
}
Por ejemplo, imprimir los 100 primeros números naturales: for (int n=1; n <=100; n++) {
Imprimir n; };
La variación se relaciona con la variable utilizada en la condición.
En este caso lo primero que hará será la inicialización ( n=1;) luego comprobará si es cierta la comparación (n <=100) y de ser verdad, ejecutará las instrucciones. Finalmente ejecutará
la variación ( n++ ) . Luego comprobará de nuevo la comparación para continuar con el proceso repetitivo o para finalizar cuando el resultado de la comparación sea falsa.
Observe que todo proceso repetitivo necesita de una previa inicialización de algún contador, acumulador, estado, lo cual permite la evaluación de la condición que controla la repetición del proceso.
La inicialización puede incluir la declaración de la variable pero no necesariamente debe ser así, por ejemplo:
int x;
for (x=1; x<=100; x++){ más ordenes
}
Cuál es la diferencia entre declararlo antes del for con hacer la declaración dentro de la inicialización?. Simplemente el alcance para la utilización de la variable.
Cuando se declara antes del for, el alcance de la variable se extiende dentro y fuera de las llaves del for; es decir que podemos utilizar la variable dentro y también fuera de las llaves; en cambio, cuando se declara dentro de la inicialización, el alcance se limita solamente dentro de las llaves del for; es decir que sólo se puede utilizar la variable dentro de las llaves del for y nó fuera de ellas.
PROBLEMA 1:
Dado el número de mes, determinar su nombre y la estación a la que pertenece. Verificar que el número esté entre 1 y 12, caso contrario dar un mensaje de error adecuado.
Solución: #include <conio.h> #include <iostream.h> // funcion principal void main(){ // declaracion de variables int n;
// ingreso del numero de mes
cout << "Ingrese Numero de Mes: "; cin >> n; // Determinar estaci¢n
cout<<endl<<"Estacion: "; switch ( n ) {
case 1: case 2: case 3:
cout<<"Verano"; break; case 4: case 5: case 6:
cout<<"Otoño"; break; case 7: case 8: case 9 :
cout<<"Invierno"; break; case 10: case 11: case 12 : cout<<"Primavera";break; default:
cout<<"Error en estación"; }
// Determinar nombre del mes cout<<endl<<"Nombre del Mes: "; switch ( n ) {
case 1 : cout<<"Enero"; break; case 2 : cout<<"Febrero"; break; case 3 : cout<<"Marzo"; break; case 4 : cout<<"Abril"; break; case 5 : cout<<"Mayo"; break; case 6 : cout<<"Junio"; break; case 7 : cout<<"Julio"; break; case 8 : cout<<"Agosto"; break; case 9 : cout<<"Setiembre"; break; case 10: cout<<"Octubre"; break; case 11: cout<<"Noviembre"; break; case 12: cout<<"Diciembre"; break; default: cout<<"Desconocido"; } cout<<endl; getch(); } PROBLEMA 2:
El mismo problema anterior ejecutarlo repetidamente hasta que el número de mes sea incorrecto. Solución: #include <conio.h> #include <iostream.h> // funcion principal void main(){ // declaracion de variables int n; do { // hacer esto
// ingreso del numero de mes
cout << "Ingrese Numero de Mes: "; cin >> n; // Determinar estaci¢n
cout<<endl<<"Estacion: "; switch ( n ) {
case 1: case 2: case 3:
cout<<"Verano"; break; case 4: case 5: case 6:
cout<<"Otoño"; break; case 7: case 8: case 9 :
cout<<"Invierno"; break; case 10: case 11: case 12 :
cout<<"Primavera"; break; default:
cout<<"Error en estación"; }
// Determinar nombre del mes cout<<endl<<"Nombre del Mes: "; switch ( n ) {
case 1 : cout<<"Enero"; break; case 2 : cout<<"Febrero"; break; case 3 : cout<<"Marzo"; break; case 4 : cout<<"Abril"; break; case 5 : cout<<"Mayo"; break; case 6 : cout<<"Junio"; break; case 7 : cout<<"Julio"; break; case 8 : cout<<"Agosto"; break; case 9 : cout<<"Setiembre"; break; case 10: cout<<"Octubre"; break; case 11: cout<<"Noviembre"; break; case 12: cout<<"Diciembre"; break; default: cout<<"Desconocido"; } cout<<endl; } while (n>=1 && n <=12); } PROBLEMA 3:
Dado un número entero, determinar cuántos dígitos tiene y cuánto suman entre ellos. Solución:
#include <conio.h> #include <iomanip.h>
void main(){
int n, cont=0, digito, suma=0; cout<<"Numero entero: "; cin>>n; do{ digito=n%10; suma += digito; cont++; n /= 10; }while(n!=0);
cout<<"cantidad de digitos: "<<cont<<endl; cout<<"suma de digitos: "<<suma<<endl; }
PROBLEMA 4:
Generar un número aleatorio entre 0 y 100 y trate de adivinarlo. El programa debe orientar según el resultado con los mensajes “alto”, “bajo”. Al final debe mostrar el número de intentos en los que adivinó el número.
Solución:
#include <conio.h> #include <iomanip.h> #include <iostream.h>
#include <stdlib.h> // para numeros aleatorios // adivina un numero
void main(){
int num, adivina, intentos=0; // genera numero aleatorio randomize();
num = random(101); do{
cout <<"Adivina: "; cin>>adivina; intentos++;
if (adivina>num) cout <<"alto"<<endl; if (adivina<num) cout <<" bajo"<<endl; }while(num!=adivina);
cout<<"felicitaciones, "<<"adivinaste en "<<intentos<<" intentos"<<endl;
}
Imprimir n términos de la serie de fibonacci: 1, 1, 2, 3, 5, 8, 13,.. Solución: #include <conio.h> #include <iomanip.h> void main(){ int n, a=1, b=1, c;
cout<<"Numero de terminos: "; cin>>n; for (int i=1; i<=n; i++){
if (i==1) cout <<a<<", ";
else if (i==2) cout <<b<<", "; else{
c = a + b; cout<<c<<", "; a=b;
b=c;
}// fin del else }// fin del for
cout<<endl; }
PROBLEMA 6:
Determinar la suma de los n primeros términos de la siguiente serie: 1, 4, 7, 10, 13,…
Solución: /*
Name: serie p0306
Author: Reyes Marzano, Alejandro
Description: Determinar la suma de los n primeros términos de
la siguiente serie:1,4,7,10,13, ... Date: 22/01/08 16:10
Copyright: fisi_2008 lima-peru */ #include <iostream.h> #include <conio.h> void main(){ int N,i,j; float Suma;
cout<<"Ingrese la cantidad de terminos a sumar = "; cin>>N; i=1;j=1;Suma=0; while(i<=N){ cout<<j<<", "; Suma+=j; i++; j+=3; } cout<<" = "<<Suma<<endl; cout<<endl;
cout<<"presione una tecla para continuar..."<<endl; getche();
}
PROBLEMA 7:
Determinar la suma de los n primeros términos de la siguiente serie:
Solución: /*
Name: p0307
Author: Reyes Marzano,Alejandro Description: Determinar la suma de los n
primeros términos de la siguiente serie: ?X^1+X?^2+X^(3 )+X^(4 )+? Date: 22/01/08 16:22 Copyright: */ #include <iostream.h> #include <conio.h> void main(){ int N,i,x; float Suma,j;
cout<<"Ingrese la cantidad de terminos a sumar = "; cin>>N; cout<<"ingrses x: ";cin>>x; i=1;j=x;Suma=0; while(i<=N){ cout<<j<<", "; Suma+=j; i++; j*=x;
}
cout<<" = "<<Suma<<endl; cout<<endl;
cout<<"presione una tecla para continuar..."<<endl; getche();
}
PROBLEMA 8:
Escriba un programa que calcule el promedio de cualquier número de calificaciones. Solución:
/*
Name: p0308
Author: Reyes Marzano, Alejandro
Description: Escriba un programa que calcule el promedio De cualquier número de calificaciones
Date: 22/01/08 16:26
Copyright: fisi_unmsm lima-peru */ #include <conio.h> #include <iostream.h> #include <math.h> void main(){ int i=1,n; float nota,suma=0,promedio,c;
cout<<"Ingrese la cantidad de notas = ";cin>>n; while(i<=n){
cout<<"Ingrese nota = ";cin>>nota; c=nota; suma=suma+c; i++; c+=nota; } promedio=suma*1.0/n;
cout<<"El promedio de notas es = "<<promedio<<endl; getche();
}
PROBLEMA 9:
Lea los pesos y tallas de los alumnos de una clase y determine la media de pesos y tallas. Solución:
/*
Author: Reyes Marzano, Alejandro
Description: Lea los pesos y tallas de los alumnos de una
clase y determine la media de pesos y tallas.
Date: 22/01/08 16:30
Copyright: fisi_unmsm lima peru */ #include <conio.h> #include <iostream.h> void main(){ int N,i=1,j=1; float talla,peso,suma1=0,suma2=0,promedio1,promedio2,c,v; cout<<"Ingrese la cantidad de alumnos = ";cin>>N;
while(i<=N){
cout<<"Ingrese talla = ";cin>>talla; c=talla; suma1=suma1+c; i++; c+=talla; } promedio1=suma1*1.0/N;
cout<<"El promedio de tallas es = "<<promedio1<<endl; while(j<=N){
cout<<"Ingrese peso = ";cin>>peso; v=peso; suma2=suma2+v; j++; v+=peso; } promedio2=suma2*1.0/N;
cout<<"El promedio de pesos es = "<<promedio2<<endl; getche();
}
PROBLEMA 10:
Escriba un algoritmo que permita calcular Xn. Solución:
/*
Name: p0310
Author: Reyes Marzano, Alejandro
Description: Escriba un algoritmo que permita calcular Xn
Date: 22/01/08 16:34
Copyright: fisi_unmsm lima peru */ #include <iostream.h> #include <conio.h> void main(){ int n,x,i=1; float exp=1;
cout<<"Ingrese el valor del exponente = ";cin>>n; cout<<"ingrses el valor de x: ";cin>>x;
while(i<=n){ exp*=x; i++; }
cout<<"El resultado es = "<<exp<<endl; cout<<endl;
cout<<"presione una tecla para continuar..."<<endl;
getche(); }
En esta parte del curso empezaremos con los tipos de datos estructurados, y con el más sencillo, los arrays (vector o arreglo).
Los arreglos permiten agrupar datos usando un mismo identificador. Todos los elementos de un arreglo son del mismo tipo, y para acceder a cada elemento se usan subíndices.
Sintaxis:
<tipo> <identificador_del_arreglo>[<número de elementos>][[<número de elementos>]...]; Los valores para el número de elementos deben ser constantes, y se pueden usar tantas dimensiones como queramos, limitado sólo por la memoria disponible.
Cuando sólo se usa una dimensión se suele hablar de listas o vectores, cuando se usan dos, de tablas.
Ahora podemos ver que las cadenas de caracteres son un tipo especial de arreglos. Se trata en realidad de arreglos de una dimensión de tipo char.
Los subíndices son enteros, y pueden tomar valores desde 0 hasta <número_de_elementos>-1. Esto es muy importante, y hay que tener mucho cuidado, por ejemplo:
int vector[25];
Creará un arreglo con 25 enteros a los que accederemos como vector[0] a vector[24]. Como subíndice podremos usar cualquier expresión entera.
En general C++ no verifica el ámbito de los subíndices. Si declaramos un arreglo de 25 elementos, no obtendremos errores al acceder al elemento 26. Sin embargo, si asignamos valores a elementos fuera del ámbito declarado, estaremos accediendo a zonas de memoria que pueden pertenecer a otras variables o incluso al código ejecutable de nuestro programa, con consecuencias generalmente desastrosas.
Ejemplo:
int Tabla[20][20];
double QuinTabla[5][15][15][10][25];
QuinTabla[3][11][0][4][6] = QuinTabla[0][12][5][3][1]; Tabla[0][0] += Tabla[9][9];
Cada elemento de Tabla, desde Tabla[0][0] hasta Tabla[9][9] es un entero. Del mismo modo, cada elemento de QuinTabla es un real de alta precisión.
Los arreglos pueden ser inicializados en la declaración. Ejemplos: float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; float M[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; int A[] = {1, 2, 3, 6}; int L[][3] = { 213, 32, 32, 32, 43, 32, 3, 43, 21}; char Mensaje[] = "Error de lectura";
En estos casos no es obligatorio especificar el tamaño para la primera dimensión, como ocurre en los ejemplos de las líneas 2, 3, 4 y 5. En estos casos la dimensión que queda indefinida se calcula a partir del número de elementos en la lista de valores iniciales.
En el caso 2, el número de elementos es 10, ya que hay diez valores en la lista. En el caso 3, será 4.
En el caso 4, será 3, ya que hay 9 valores, y la segunda dimensión es 3: 9/3=3.
Y en el caso 5, el número de elementos es 17, 16 caracteres más el cero de fin de cadena. ALGORITMOS DE ORDENACION, METODO DE LA BURBUJA:
Una operación que se hace muy a menudo con los arreglos, sobre todo con los de una dimensión, es ordenar sus elementos.
Dedicaremos más capítulos a algoritmos de ordenación, pero ahora veremos uno de los más usados, aunque no de los más eficaces, se trata del método de la burbuja.
Consiste en recorrer la lista de valores a ordenar y compararlos dos a dos. Si los elementos están bien ordenados, pasamos al siguiente par, si no lo están los intercambiamos, y pasamos al siguiente, hasta llegar al final de la lista. El proceso completo se repite hasta que la lista está ordenada.
Lo veremos mejor con un ejemplo:
Ordenar la siguiente lista de menor a mayor: 15, 3, 8, 6, 18, 1.
Empezamos comparando 15 y 3. Como están mal ordenados los intercambiamos, la lista quedará:
3, 15, 8, 6, 18, 1
Tomamos el siguiente par de valores: 15 y 8, y volvemos a intercambiarlos, y seguimos el proceso...
Cuando llegamos al final la lista estará así: 3, 6, 8, 15, 1, 18
Empezamos la segunda pasada, pero ahora no es necesario recorrer toda la lista. Si observas verás que el último elemento está bien ordenado, siempre será el mayor, por lo tanto no será necesario incluirlo en la segunda pasada. Después de la segunda pasada la lista quedará: 3, 6, 8, 1, 15, 18
Ahora es el 15 el que ocupa su posición final, la penúltima, por lo tanto no será necesario que entre en las comparaciones para la siguiente pasada. Las sucesivas pasadas dejarán la lista así:
3ª 3, 6, 1, 8, 15, 18 4ª 3, 1, 6, 8, 15, 18 5ª 1, 3, 6, 8, 15, 18
PROBLEMA 1:
Inicializar un arreglo con 8 números enteros y determinar el primer mayor, el primer menor, la suma de sus valores y el valor promedio entre ellos.
Solución: #include <conio.h> #include <iostream.h> // declaraciones globales int A[] = {22,32,25,67,54,78,26,17}; int n=8; // funcion principal void main(){ // declaracion de variables int mayor, menor, suma; int indMay, indMen, i; double promedio;
// Determinar indice del primer mayor y del primer menor
mayor = A[0]; indMay =0; // supuesto del primer valor
menor = A[0]; indMen =0; // supuesto del primer valor
suma = 0; // acumulador de suma for (i = 0; i < n; i++){ if ( A[i] > mayor ) indMay = i; if ( A[i] < menor ) indMen = i; suma += A[i]; } // calcular promedio promedio = suma*1.0/n; // Mostrar resultados
cout << setw(40) << "Arreglo Inicializado" << endl; for (i = 0; i < n; i++)
cprintf("%5d%10d\r\n",i,A[i]);
cprintf("\r\nMayor valor = %10d",A[indMay]);
cprintf(" corresponde al elemento nro. %10d",indMay); cprintf("\r\nMenor valor = %10d",A[indMen]);
cprintf(" corresponde al elemento nro. %10d",indMen); cprintf("\r\nLa suma es = %10d",suma);
cprintf("\r\nEl promedio es = %10.2f",promedio); getch();
}
PROBLEMA 2:
Considere un arreglo para guardar un máximo de 20 nombres y otro arreglo para guardar 20 notas correspondientes a los alumnos de un salón. Luego, ingrese los datos correspondientes y emita un reporte donde se asigne un grado de “satisfactorio” si la nota esta en el rango del promedio mas menos 10; “sobresaliente” si la nota esta por encima del promedio mas 10 y, “deficiente” si la nota esta por debajo del promedio – 10.
Solución:
#include <conio.h> #include <iostream.h>
#include <string.h> // para strcpy() // definicion de constantes
#define PtajeMax 100 // puntaje maximo
// declaraciones globales
int Notas[MaxAlum]; // arreglo de notas char Nombres[MaxAlum][20]; // arreglo de nombres int n =0; // cuántos se ingresaron // funcion principal void main(){ // variables int i, suma; double Promedio; char grado[30];
// ingresar numero de alumnos do {
cout << "Ingresar numero de alumnos <1.." << MaxAlum << ">: ";
cin >> n;
cin.ignore(); // ignorar el enter } while (n > MaxAlum || n < 1); // Ingreso de datos for (i = 0; i < n; i++) { cprintf("%10s%5d\r\n","Alumno # " ,i+1); cout << "Nombre : "; cin.getline(Nombres[i],20); do {
cout << "Nota <0.." << PtajeMax << "> : "; cin >> Notas[i];
cin.ignore(); // ignorar el enter } while ( Notas[i] > PtajeMax);
}
// calcular promedio suma = 0;
for (i = 0; i < n; i++) suma += Notas[i];
Promedio = (double) suma / n; // Mostrar resultados
for (i = 0; i < n; i++) {
cprintf("%2d)%-20s%15d",i+1,Nombres[i],Notas[i]); if ( (Notas[i] > Promedio - 10) &&
(Notas[i] < Promedio + 10) ) strcpy(grado," Satisfactorio"); else if ( Notas[i] > Promedio + 10 ) strcpy(grado," Sobresaliente"); else
strcpy(grado," Deficiente "); cprintf("%20s\r\n",grado);
}
cprintf("\r\nPuntaje Promedio: %10.2f",Promedio); getch();
}
PROBLEMA 3:
Considere un arreglo para un máximo de 20 números enteros e ingréselos evitando que se repitan.
Solución: /*
Name: p0403
Author: Reyes Marzano, Alejandro
Description: Considere un arreglo para un máximo de 20 números
enteros e ingréselos evitando que se repitan. Date: 23/01/08 20:00 Copyright: */ #include <iostream.h> #include <stdlib.h> int main(){ int A[20],aux,cont=0; bool sw=false;
cout<<"Ingrese los numero :\n"; while(cont<20){ cin>>aux; int i=0; while(i<cont && !sw){ if(A[i]==aux) sw=true; i++; } if(!sw){ A[cont]=aux; cont++; } else{ cout<<"Numero Repetido :";
sw=false; }
}
cont=0;
cout<<"Los numeros son:\n"; while(cont<20){ aux=A[cont]; cout<<aux<<endl; cont++; } system("PAUSE"); return 0; } PROBLEMA 4:
Considere dos arreglos de 10 números enteros cada uno. Inicialice los arreglos y en un tercer arreglo guarde la suma de cada casillero. Luego muestre el contenido de los 3 arreglos en forma de tabla marcando con un * aquellos que tengan la mayor suma.
Solución: /*
Name: p0404
Author: Reyes Marzano, Alejandro
Description: Considere dos arreglos de 10 números enteros cada uno.
Inicialice los arreglos y en un tercer arreglo guarde
la suma de cada casillero. Luego muestre el contenido
de los 3 arreglos en forma de tabla marcando con un * aquellos que tengan la mayor suma. Date: 23/01/08 20:17
Copyright: fisi_unmsm Lima-Peru */ #include <iostream.h> #include <stdlib.h> int main(){ int A[10]={15,16,2,33,36,38,92,856,5,12}; int L[10]={12,9,585,15,69,75,236,54,52,35}; int E[10]; for(int i=0;i<10;i++){ E[i]=A[i]+L[i]; } int suma=0,med;
for(int i=0;i<10;i++){ suma+=E[i]; } med=suma/10; cout<<"\nPromedio = "<<med<<endl; for(int i=0;i<10;i++){
cout<<" "<<E[i]<<" = "<<A[i]<<" + "<<L[i]; if(E[i]>med) cout<<" * "<<endl; else cout<<endl; } system("PAUSE"); return 0; } PROBLEMA 5:
Considere un arreglo para guardar un máximo de 10 nombres de producto diferentes, otro arreglo para guardar el precio de cada producto y otro arreglo para guardar la cantidad en stock. Escriba un programa que permita desarrollar el siguiente menú de opciones:
[1] Ingreso de datos [2] Listado general
[3] Listado de productos más caros
[4] Listado de productos bajo stock (menos de 10) [0] Fin
Solución:
Name: p0404
Author: Reyes Marzano, Alejandro
Description: Considere dos arreglos de 10 números enteros cada uno.
Inicialice los arreglos y en un tercer arreglo guarde
la suma de cada casillero. Luego muestre el contenido
de los 3 arreglos en forma de tabla marcando con un * aquellos que tengan la mayor suma. Date: 23/01/08 20:17
Copyright: fisi_unmsm Lima-Peru */
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #define NUM_MAX 10
int main(){ char nombres[NUM_MAX][10]; float stock[NUM_MAX]; float precios[NUM_MAX]; int op,tope=0; do{ system("cls");
cout<<"[1] para ingresar datos\n";
cout<<"[2] para Ver listado General\n";
cout<<"[3] para Ver los precios mas altos\n"; cout<<"[4] para Ver los stock mas bajos\n"; cout<<"[0] Salir del Programa\n";
cout<<"\nIngrese la opccion : "; cin>>op; switch(op){ case 1:{ system("cls"); //leer datos int val;
cout<<"ingrese numero de Productos:"; cin>>val;
if(tope+val<NUM_MAX){
for(int i=0;i<val;i++){
cout<<"\nIngrese nombres del "<<tope+i+1<<" producto: ";
gets(nombres[tope+i]);
cout<<"\nIngrese el precio del : "<<nombres[tope+i]<<" : ";
cin>>precios[tope+i];
cout<<"\nIngrese el stock del : "<<nombres[tope+i]<<" : "; cin>>stock[tope+i]; } tope+=val; } else{ cout<<"fuera de rango \n"; } }break; case 2:{system("cls"); //mostrar datos cout<<"Producto\t\tPrecio\t\t\tStock\n"; cout<<"********\t\t******\t\t\t*******\n"; for(int i=0;i<tope;i++){ printf("%s\t\t\t%f\t\t %f\n",nombres[i],precios[i],stock[i]); } printf("\n");
system("PAUSE"); }break;
case 3:{system("cls"); //productos mas caros
cout<<"PRECIOS MAS ALTOS : \n\n"; float temp1,temp2; char temp3[10]; for(int j=0;j<tope;j++){ for(int i=0;i<tope-1;i++){ if(precios[i]<precios[i+1]){ temp1=precios[i]; temp2=stock[i]; temp3=nombres[i]; precios[i]=precios[i+1]; stock[i]=stock[i+1]; nombres[i]=nombres[i+1]; precios[i+1]=temp1; stock[i+1]=temp2; nombres[i+1]=temp3; } } } //mostrar datos cout<<"Producto\t\tPrecio\t\t\tStock\n"; cout<<"********\t\t******\t\t\t*******\n"; for(int i=0;i<tope;i++){ printf("%s\t\t\t%f\t\t %f\n",nombres[i],precios[i],stock[i]); } printf("\n"); system("PAUSE"); }break; case 4:{system("cls"); //stock's mas bajos
cout<<"STOCK MAS BAJOS:\n"; float temp1,temp2; char temp3[10]; for(int j=0;j<tope;j++){ for(int i=0;i<tope-1;i++){ if(stock[i]>stock[i+1]){ temp1=precios[i]; temp2=stock[i]; temp3=nombres[i]; precios[i]=precios[i+1]; stock[i]=stock[i+1]; nombres[i]=nombres[i+1]; precios[i+1]=temp1;
stock[i+1]=temp2; nombres[i+1]=temp3; } } } //mostrar datos cout<<"Producto\t\tPrecio\t\t\tStock\n"; cout<<"********\t\t******\t\t\t*******\n"; for(int i=0;i<tope;i++){ printf("%s\t\t\t%f\t\t %f\n",nombres[i],precios[i],stock[i]); } printf("\n"); system("PAUSE"); }break; case 0: exit(0); break;
default:cout<<"No existe esa opcion \n"; } }while(op!=0); system("PAUSE"); return 0; } MODULO 05: FUNCIONES
CONCEPTO:
Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de retorno; aunque tanto unos como el otro pueden no existir.
Tal vez sorprenda que las introduzca tan pronto, pero como son una herramienta muy valiosa, y se usan en todos los programas C++, creo que debemos tener, al menos, una primera noción de su uso. Al igual que con las variables, las funciones pueden declararse y definirse. Una declaración es simplemente una presentación, una definición contiene las instrucciones con las que realizará su trabajo la función.
En general, la definición de una función se compone de las siguientes secciones, aunque pueden complicarse en ciertos casos:
Opcionalmente, una palabra que especifique el tipo de almacenamiento, puede ser
"extern" o "static". Si no se especifica es "extern". No te preocupes de esto todavía, de momento sólo usaremos funciones externas, sólo lo menciono porque es parte de la declaración. Una pista: las funciones declaradas como extern están disponibles para todo el programa, las funciones static pueden no estarlo.
El tipo del valor de retorno, que puede ser "void", si no necesitamos valor de retorno. Si no se establece, por defecto será "int". Aunque en general se considera de mal gusto omitir el tipo de valor de retorno.
Modificadores opcionales. Tienen un uso muy específico, de momento no entraremos en este particular, lo veremos en capítulos posteriores.
El nombre de la función. Es costumbre, muy útil y muy recomendable, poner nombres que indiquen, lo más claramente posible, qué es lo que hace la función, y que permitan interpretar qué hace el programa con sólo leerlo. Cuando se precisen varias palabras para conseguir este efecto existen varias reglas aplicables de uso común. Una consiste en separar cada palabra con un "_", la otra, que yo prefiero, consiste en escribir la primera letra de cada palabra en mayúscula y el resto en minúsculas. Por ejemplo, si hacemos una función que busque el número de teléfono de una persona en una base de datos, podríamos llamarla "busca_telefono" o "BuscaTelefono".
Una lista de declaraciones de parámetros entre paréntesis. Los parámetros de una función son los valores de entrada (y en ocasiones también de salida). Para la función se comportan exactamente igual que variables, y de hecho cada parámetro se declara igual que una variable. Una lista de parámetros es un conjunto de declaraciones de parámetros separados con comas. Puede tratarse de una lista vacía. En C es preferible usar la forma "func(void)" para listas de parámetros vacías. En C++ este procedimiento se considera obsoleto, se usa simplemente "func()".