Fundamentos de Programación 2008
UNIDAD 7 Operadores y Estructuras de Control en C++ Prof. Gerardo Sas
Respuestas a los ejercicios de la Guía Nº 7
Ejercicio 7.1 Utilice la notación de los operadores aritméticos y funciones matemáticas que provee C++ para escribir las siguientes expresiones. Si le facilita la tarea, puede utilizar variables auxiliares. b+ b2 4 ac 2a
a) b)
ln 2 x
c)
a
ea
x
e2 x
1
e
a+z
5
x a 3 ax 2x 1
sen a 2
x +e x
2
b+ b2 4 ac 2a
a= ( - b + sqrt ( pow( b , 2 ) - 4 * a * c ) / ( 2 * a ) ; ( - b + sqrt ( pow( b , 2 ) - 4 * a * c ) / ( 2 * a ) ; b= LN( 2 * x – 1 ) + ( - EXP( 2 * x ) + pow( pow(x,a) – 3 * a * x ) , ( 1 / 5 ) ) ) / ( 2 * x – 1 ) c= EXP( a ) / ( a – x ) + (EXP( a + z ) + sin( a – x ) + EXP( pow(x,2) ) ) / 2; Ejercicio 7.2 Utilice los operadores aritméticos de C++ para plantear las expresiones que se proponen coloquialmente. Si es posible exprese también la forma abreviada correspondiente. a) El cociente entre m y n. m / n; b) El resto de la división entera entre p y q. p % q; c) Incrementar x en 1. x = x+1; x++; ++x; x += 1 d) Incrementar x sumando a x el contenido de c. x= x+c; x += c; e) Modificar z, asignándole el valor que precede a z. z= z-1; --z; z--; z -= 1
Unidad 7
2
Ejercicio 7.3 Considere las declaraciones de un programa C++, donde se definen las variables x, y, z, u como se indica abajo: float int char
x = 4.5; y = 12.3 z = 10; u = 8; letra = ‘m’;
Determine el resultado de las siguientes expresiones lógicas: a) b) c) d) e)
x < y (verdad) (x <= y) || (letra == 'j')(verdad) letra <= 'G' (falso) abs(x-y) > 7.0 (verdad) u++ >= z-- && 1(falso)
f) (z>x)&&(letra<'m')||(letra=='h')(falso) g) '2' <= letra (verdad) h) ('q' < 's') || false (verdad) i) sin(y-x) <= 1 (verdad) j) touper(letra) == ‘M’ (verdad)
#include//Pequeño programa que cumple con el enunciado del Ej 7.3 #include #include<math.h> int main(void) { float x = 4.5, y = 12.3; int z = 10, u = 8; char letra = 'm'; cout<<"\na) x < y"; if (x 7.0"; if (abs(x-y) > 7.0) cout<<"\nVerdadero"; else cout<<"\nFalso"; cout<<endl; cout<<"\ne) u++ >= z-- && 1"; if (u++ >= z-- && 1) cout<<"\nVerdadero"; else Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
3
cout<<"\nFalso"; cout<<endl; cout<<"\nf) (z>x)&&(letra<'m')||(letra=='h')"; if ((z>x)&&(letra<'m')||(letra=='h')) cout<<"\nVerdadero"; else cout<<"\nFalso"; cout<<endl; cout<<"\ng) '2' <= letra"; if ('2' <= letra) cout<<"\nVerdadero"; else cout<<"\nFalso"; cout<<endl; cout<<"\nh) ('q' < 's') || false"; if (('q' < 's') || false) cout<<"\nVerdadero"; else cout<<"\nFalso"; cout<<endl; cout<<"\ni) sin(y-x) <= 1"; if (sin(y-x) <= 1) cout<<"\nVerdadero"; else cout<<"\nFalso"; cout<<endl; cout<<"\nj) touper(letra) == 'M'"; if (toupper(letra) == 'M') cout<<"\nVerdadero"; else cout<<"\nFalso"; cout<<endl; getch(); //Profesor Gerardo Sas - Fundamentos de Programacion - IIA - FICH - UNL. } Ejercicio 7.4 Utilice las variables x, y, z, u definidas en el ejercicio anterior para calcular las siguientes expresiones matemáticas a) b) c) d) e)
++u / 2 (4) letra + 2 (111) (x-y)/2+abs(u-y) (-0.9) 3 + u % 3 (3) u++ / 2 (4)
Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
f) 2*--u+x/3 (19.5) g) letra += 1 (‘n’) h) pow( z,3) (1000) i) x = (x+1 ) / 2 (2.75) j) u += (z<100) (10)
Unidad 7
4
Ejercicio 7.5 Observe las siguientes porciones de código C++ siguientes. Trate de determinar la información que se obtendrá como salida a través del flujo cout.
51 51
99
a)
int x=50; cout << ++x << “ cout << x;
b)
int y=100; int z = --y; cout << z << “
“ << y;
int y=200; int z = y--; cout << z << “
“ << y;
50
99 c)
“ << x;
200 199 Ejercicio 7.6 A continuación se plantea una definición de tipo enumerado, y un grupo de expresiones lógicas que emplean datos de ese tipo. Determine el resultado de cada expresión. enum lenguajes=(fort,cob,bas,pas,ada,cpp,sql); expresión -----------------cob < pas fort <= ada ((int)bas)-- == cob (int)ada < 5 3==((int)cpp )++
resultado ------------------Verdadero Verdadero ERROR (Falso) Verdadero ERROR (Falso)
En todos los casos en que el problema proponga escribir un programa, Ud. debe además salvar en diskette, compilar, --si es necesario-- depurar, y ejecutar (probar) el programa propuesto. //Encabezado: aquí se incluyen las librerías //Profesor Gerardo SAS - Fundamentos de Programación #include #include using namespace std; int main(void){ enum lenguajes {fort,cob,bas,pas,ada,cpp,sql}; int h=30; cout<<setw(20)<<" expresion resultado\n"; cout<<setw(20)<<" ------------------ -------------------\n"; cout<<setw(20)<<" cob < pas"<<setw(h); if (cob < pas) cout<<"Verdadero\n"; else cout<<"Falso\n"; cout<<setw(20)<<"fort <= ada"<<setw(h);; if (fort <= ada) cout<<"Verdadero\n"; else cout<<"Falso\n"; cout<<setw(20)<<"(int)bas)-- == cob )++ "<<setw(h); if ((int)bas== cob) cout<<"Verdadero\n"; Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
5
else
cout<<"Falso\n"; cout<<setw(20)<<"(int)ada < 5"<<setw(h); if ( (int)ada < 5) cout<<"Verdadero\n"; else cout<<"Falso\n"; cout<<setw(20)<<"3==((int)cpp )++"<<setw(h); if (3==((int)cpp )) cout<<"Verdadero\n"; else cout<<"Falso\n"; return 0; }
Ejercicio 7.7 Ingrese un número e informe: a) si es par o impar; b) si es múltiplo de 5 y 3 a la vez. #include using namespace std; int main(int argc, char *argv[]) { int n; cout<<"Ingrese un Numero: "; cin>>n; if (n%2==0) cout<<"Es par"<<endl; else cout<<"Es Impar"<<endl; if ((n%3==0)&&(n%5==0)) cout<<"Es Multiplo de 3 y de 5."<<endl; else cout<<"No es Multiplo de 3 y de 5."<<endl; return 0; } Ejercicio 7.8 Ingrese tres números e informe el mayor. #include using namespace std; int main(int argc, char *argv[]) { int a,b,c,mayor; cout << "Ingrese 3 numeros:"<<endl; cin>>a; cin>>b; cin>>c; if ((a>b)&&(a>c)) mayor= a; else if ((b>a)&&(b>c)) mayor= b; else mayor= c; cout<<"El mayor es: "<<mayor<<endl; return 0;} Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
6
Ejercicio 7.9 Deseamos saber si un estudiante de primer año vota en las próximas elecciones, para ello debe ser mayor de 18 años. Se ingresan la fecha de nacimiento y de votación con formato día, mes y año. Informe con un mensaje alusivo. #include using namespace std; int main(int argc, char *argv[]) { int av,mv,dv, an,mn,dn; cout<<"Ingrese anio, mes y dia de nacimiento"<<endl; cin>>an; cin>>mn; cin>>dn; cout<<"Ingrese anio, mes y dia de Votacion"<<endl; cin>>av; cin>>mv; cin>>dv; if (((av*10000+mv+100+dv)-(an*10000+mn+100+dn))>=180000) cout<<"Tiene 18 anios o mas, puede votar"<<endl; else cout<<"No tiene 18 anios, NO puede votar"<<endl; return 0; } Ejercicio 7.10 Resolver una ecuación de segundo grado, cuyas soluciones pueden ser reales o complejas, ingresando los coeficientes a, b y c. Si las raíces fueran complejas mostrarlas en forma binómica (ej: -2+3i) #include #include <math.h> using namespace std; int main(int argc, char *argv[]) { float a,b,c,d,x,y; cout<<"Ingrese los coeficientes a b c de la ecuacion de 2do grado"<<endl; cin>> a; cin>> b; cin>> c; d = pow(b,2) - 4* a * c; if (d>0){ x= (-b + sqrt(d))/(2*a); y= (-b - sqrt(d))/(2*a); cout<<"X1 = "<<x<<endl; cout<<"X2 = "<
Unidad 7
7
Ejercicio 7.11. Escriba un programa C++ que permita ingresar natural N como dato. Obtener todos los pares menores a N. Tener en cuenta que el dato puede ser tanto par como impar. Debe dar al usuario la posibilidad de seleccionar por un menú la opción de visualizar el listado: a) En forma creciente. b) En forma decreciente. //Encabezado: aquí se incluyen las librerías //Profesor Gerardo SAS - Fundamentos de Programación #include #include using namespace std; int main(void){ int x,N; char op; cout<< "Ingrese un numero: "; cin>>N; if ( (N%2)!= 0) x=N+1; else x=N; cout<<"\n\nIngrese una Opcion\n\n\n\n"; cout<<"\na) En forma creciente.\n"; cout<<"\nb) En forma decreciente.\n"; do{ cin>>op;} while ((op!='a') && (op!='b')); if (op=='a'){ cout<< "\nNumeros Pares crecientes menores "<2){ x=x-2; cout << setw(8) << x << setw(8); }; } return 0; }
Ejercicio 7.12 Leer un número natural N. Determinar con un mensaje alusivo si es primo.
#include #include using namespace std; int main(void){ int x,n; cout<<"Ingrese un Numero: "; cin>>n; Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
8
bool bandera= true; x=2; while ((x < n/2)&&(bandera)) { x++; if ( (n%x) == 0 ) bandera= false; }; if (!bandera) cout << n << setw(15)<< "No es Primo"; else cout << n << setw(10)<< "Es Primo"; return 0; } Ejercicio 7.13. Determine los 1000 primeros primos.
//Encabezado: aquí se incluyen las librerías //Profesor Gerardo SAS - Fundamentos de Programación #include #include using namespace std; int main(void){ int x,n,r,cp=0; n=1; while (cp<1000){ bool bandera= false; n++; x=1; while (x < n/2) { x+=1; r= n%x; if ( r == 0 ) {bandera=true; break;}; }; if (!bandera){ cp++; cout << setw(8)<< n; }; }; return 0; }
Ejercicio 7.14. Calcular la suma de los N primeros términos de la serie infinita, que calcula aproximadamente el seno del parámetro x. Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
x
x3 3!
x5 5!
x7 7!
. . . . .. . . . . .. . . .
Unidad 7
9
Se leen como datos N y x. Obtener además, la diferencia con el valor de la función standard que provee C++.
//Profesor Gerardo SAS - Fundamentos de Programación #include #include<math.h> using namespace std; int main(void){ int n,t,z,sig = -1; float x,sum=0; cout<<"Ingrese la cantidad de terminos N: "; cin>>n; cout<<"\nIngrese la parametro X: "; cin>>x; x=x*M_PI/180; for (t=1; t<(n*2); t+=2){ int f=1; for (z=t; z>0; z--) f=f*z; sig*=(-1); sum = sum+sig*(pow(x,t)/f); }; cout<<"\n Resultado Serie(x)= "<<sum; cout<<"\n Resultado Sin(x) = "<<sin(x); return 0; } Ejercicio 7.15 Escribir un programa C++ que exhiba en pantalla el siguiente menú: Diseño de menús en C++ ABCDE-
CALCULOS Ingresar nuevo dato. Calcular el doble del dato. Determinar si es par. Determinar si es primo. Salir. Elija una Opción (A..E): _
El programa debe resolver las opciones propuestas en el menú. Además debe validar la entrada de la opción (A..E) indicando un mensaje de error si corresponde. Si el usuario intenta elegir las opciones B,C,D o E sin haber pasado antes por A, indicar dicha situación con un mensaje alusivo, para que vuelva al menú e ingrese el dato faltante.
//Profesor Gerardo SAS - Fundamentos de Programación #include #include #include #include<math.h> using namespace std; int main(void) { Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
10
bool bandera=false; int dato; char op=' '; while (op!='E'){ cout<<"Diseño de menúes en C++"<<endl<<endl; cout<<" CALCULOS"<<endl; cout<<" A- Ingresar nuevo dato."<<endl; cout<<" B- Calcular el doble del dato. "<<endl; cout<<" C- Determinar si es par."<<endl; cout<<" D- Determinar si es primo."<<endl; cout<<" E- Salir."<<endl; cout<<"Elija una Opción (A..E): "; do{ do{ cin>>op; op= toupper(op); if (op=='A') bandera=true; } while ((op<'A')||(op>'E'));//valida opciones de A - E. } while ((op!='A')&&(!bandera));//mientras los 2 sean verdad switch (op){ case 'A':{ cout<<"A- Ingresar nuevo dato: "; cin>>dato; break;}; case 'B':{//Calcula el doble del dato cout<<"B - El doble de "<
Unidad 7
11
cout << setw(8)<< " no es Primo"; break;}; case 'E':{ cout<<"Gracias por utilizar nuestro programa\n\n"; break;}; };//fin del switch. cout<<"\n\n\n\n\n\nPulse una tecla para continuar"; getch(); };//del while op }//del main //Profesor Gerado Sas - Fundamentos de Programación Ejercicio 7.16 Escriba todos los caracteres del código ASCII. b) Sólo las letras del abecedario en mayúsculas. c) Las letras del abecedario en minúsculas.
//Profesor Gerardo SAS - Fundamentos de Programación #include #include using namespace std; int main(void){ char letra, inicio, fin; int x; //--------------------------------------inicio =1;//la tabla ASCII tiene 256 caracteres fin =120;// los demas no los muestra en pantalla for (letra=inicio; letra <= fin; letra+=1) cout<
Unidad 7
12
..... ..... for (z=fort; z<sql; ++(int)z) cout << z << “ “; getch( ); }
//fin del programa
SALIDA: invalid conversión from ‘int’ to ‘lenguajes’
#include using namespace std; typedef enum lenguajes {fort,cob,bas,pas,ada,cpp,sql}; int main(void){ lenguajes z; for (z = fort; z <= sql; z=z+1) {cout << z << " ";}; return 0; } // De esta manera si funciona. #include using namespace std; typedef enum lenguajes {fort,cob,bas,pas,ada,cpp,sql}; int main(void){ lenguajes z= fort; cout << z << endl; z= cob; cout << z << endl; z= bas; cout << z << endl; z= pas; cout << z << endl; z= ada; cout << z << endl; z= cpp; cout << z << endl; z= sql; cout << z << endl; return 0; } //SALIDA: 0 1 2 3 4 5 6 Ejercicio 7.18 Una Empresa paga a sus 100 operarios semanalmente de acuerdo con la cantidad de horas trabajadas, a razón de X pesos la hora hasta 40 hs. y un 50% más por todas las horas que pasan de 40. Informar el total de salario a cobrar por cada trabajador.
#include using namespace std; Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
13
int main(int argc, char *argv[]) { float x,sueldo, extras; int operario=0, horas; cout<<"Ingrese el valor de la hora:"<<endl; cin>>x; while (operario<100){ operario++; cout<<"Ingrese la cantidad de horas trabajadas por este operario en la semana:"<<endl; cin>>horas; if (horas > 40) sueldo= (horas-40) * 1.5 * x + x * 40; else sueldo= x * horas; cout<<"Cantidad de horas trabajadas: "<
//Profesor Gerardo SAS - Fundamentos de Programación #include #include using namespace std; int main(void){ int x,c,ma1,ma2,me; float media=0,ds=0; //El primer dato sera el mayor y menor de la lista ma1= 0; me= 5000; for (x=1; x<= 50; x++){ c= rand()%5000+1; cout<<"dato "<<x+1<<" :"<ma1){ ma2=ma1; ma1=c; };//del if media+=c; };//del for media= media/50.0; cout<<"\na) La media: "<<media; cout<<"\nb) Los 2 mayores: "<<ma1<<" - "<<ma2; cout<<"\nc) El menor de la lista: "<<me; return 0; Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación
Unidad 7
14
}
Facultad de Ingeniería y Ciencias Hídricas de la UNL Ingeniería Informática – Fundamentos de Programación