• No se han encontrado resultados

JSP

N/A
N/A
Protected

Academic year: 2021

Share "JSP"

Copied!
18
0
0

Texto completo

(1)

GUIA 02

Ejercicios Resueltos

1. Desarrollar un Algoritmo que permita calcular el área de un círculo, ingrese su radio y visualizar el área #include<iostream.h> #include<math.h> void main(){ int radio; double area; cout<<"Ingrese el radio: "; cin>>radio; area=M_PI*radio*radio;

cout<<"El area del circulo es "<<area; }

2. Desarrolle un Algoritmo para SEDAPAL, que permita el ingreso de los siguientes datos: número de contrato y la cantidad de metros cúbicos consumidos. Calcule y visualice los siguientes pagos:

• Importe: que representa el precio por cada metro cúbico por los metros cúbicos consumidos • Relleno Sanitario: representa 1.4% del Importe

• Mantenimiento General: representa 2.1% del Importe

• IGV: representa el 19% de la Suma de Importe, Relleno y Mantenimiento • Pago Total: representa la Suma del los pagos

#include<iostream.h> #include<conio.h> const float precio=0.45; void main(){ char contrato[15]; float mc,importe,relleno,mantgral,igv,ptotal; clrscr(); cout<<"Ingrese el Contrato"; cin>>contrato;

cout<<"Ingrese el Consumo de Agua:"; cin>>mc; importe=precio*mc; mantgral=importe*0.028; relleno=importe*0.014; igv=0.19*(importe+mantgral+relleno); ptotal=importe+mantgral+relleno+igv; clrscr(); cout<<"Contrato :"<<contrato<<endl; cout<<"Importe :"<<importe<<endl; cout<<"Mantenimiento:"<<mantgral<<endl; cout<<"Relleno :"<<relleno<<endl; cout<<"Igv :"<<igv<<endl; cout<<"Pago Total :"<<ptotal<<endl; }

(2)

3. Desarrollar un Algoritmo donde ingrese un número de dos dígitos, visualice la suma de sus dígitos #include<iostream.h> void main(){ int numero,unidad,decena; cout<<"Ingrese el numero: "; cin>>numero; unidad=numero%10; decena=int(numero/10);

cout<<"La suma es: "<<(unidad+decena); }

4. Ingrese por Teclado el nombre de un Trabajador y su sueldo básico, calcule y visualice: Bonificación : 5% del sueldo básico

Descuento : 2% del sueldo básico

Sueldo Neto : Sumar el sueldo básico y la Bonificación y restarlo con el descuento #include<iostream.h>

#include<conio.h> void main(){

char ntrab[45];

float sueldo,bonif,dscto,neto;

cout<<"Ingrese el Nombre del Trabajador:"; cin>>ntrab;

cout<<"Ingrese el Sueldo Basico:"; cin>>sueldo; bonif=0.05*sueldo; dscto=0.02*sueldo; neto=sueldo+bonif-dscto; clrscr(); cout<<"Trabajador :"<<ntrab<<endl; cout<<"Sueldo :"<<sueldo<<endl; cout<<"Bonificacion :"<<bonif<<endl; cout<<"Descuento :"<<bonif<<endl; cout<<"Sueldo Neto :"<<neto<<endl; }

5. Ingrese por Teclado el sueldo de un Trabajador, asumiendo que éste es un valor entero, visualizar la mejor distribución de billetes y monedas que se utilizaran para pagar el sueldo:

Considere billetes de 100, 50, 20, 10. Monedas de 5, 2 y 1 #include<iostream.h> #include<conio.h> void main(){ int sueldo,d100=0,d50=0,d20=0,d10=0,d5=0,d2=0,d1=0; clrscr(); cout<<"Ingrese el Sueldo:"; cin>>sueldo;

//Cuantos billetes de 100 recibirá d100=int(sueldo/100);

(3)

//Cuantos billetes de 50 recibirá d50=int(sueldo/50);

sueldo - =50*d50;

//Cuantos billetes de 20 recibirá d20=int(sueldo/20);

sueldo - =20*d20;

//Cuantos billetes de 10 recibirá d10=int(sueldo/10);

sueldo - =10*d10;

//Cuantas monedas de 5 recibirá d5=int(sueldo/5);

sueldo - =5*d5;

//Cuantos monedas de 2 recibirá d2=int(sueldo/2);

sueldo - =2*d2;

//Cuantos billetes de 50 recibirá d1=sueldo; cout<<"Billetes de 100:"<<d100<<endl; cout<<"Billetes de 50:"<<d50<<endl; cout<<"Billetes de 20:"<<d20<<endl; cout<<"Billetes de 10:"<<d10<<endl; cout<<"Monedas de 5:"<<d5<<endl; cout<<"Monedas de 2:"<<d2<<endl; cout<<"Monedas de 1:"<<d1<<endl; }

Laboratorio Nº 2 Estructuras Condicionales y Selectivas Ejercicios Resueltos

1. Desarrollar un Algoritmo donde ingrese dos números visualizar el mayor numero #include<iostream.h>

void main(){ int n1,n2;

cout<<"Ingrese el Primer Numero"; cin>>n1;

cout<<"Ingrese el Segundo Numero"; cin>>n2;

if (n1= =n2)

cout<<"El mayor es"<<n1; else

cout<<"El mayor es"<<n2; }

2. Desarrollar un Algoritmo que permita calcular la remuneración del empleado. Ingrese el básico, número de hijos y cargo; si su cargo es obrero[O] recibirá 100 por Bonificación, si su cargo es empleado[E] recibirá una Bonificación de 120. Si tiene hijos recibirá por cada uno 41 soles por concepto de Asignación. El total será la suma del básico, bonificación y Asignación

(4)

void main(){

float basico, bonificacion, asignacion; int nhijos; char cargo; cout<<"Ingrese el Basico,Hijos,Cargo"<<"\n"; cin>>basico; cin>>nhijos; cin>>cargo; if (cargo= ='E') bonificacion=120; else if (cargo= ='O')

bonificacion=100; else bonificacion=0; if (nhijos>0) asignacion=nhijos*41; else asignacion=0;

cout<<"Total a Recibir: "<<(basico+bonificacion+asignacion); }

3. Desarrollar un Algoritmo que permita calcular la comisión total que recibe un vendedor donde ingrese el monto de ventas, si el monto es menor a 10000 recibirá solamente 5% de su ventas por comisión; si sus ventas se encuentran entre 10000 a 50000 su comisión será de 7.5% de las ventas y 200 por bonificación, pero si sus ventas es mayor a 50000 su comisión será de 9% de sus ventas y su bonificación es 300.Visualizar el total

#include<iostream.h> void main(){

float ventas, bonificacion=0, comision=0, total=0; cout<<"Ingrese en Monto de las Ventas:";

cin>>ventas; if (ventas<10000)

comision=ventas*0.05;

else if ((ventas>=10000) && (ventas<=50000)){ comision=ventas*0.075; bonificacion=200; } else if (ventas>50000){ comision=ventas*0.09; bonificacion=300; } total=ventas+bonificacion+comision; cout<<"Total a Recibir: "<<total; }

(5)

#include<iostream.h> void main(){ int digito; cout<<"ingrese un digito"; cin>>digito; switch(digito){

case 1: cout<<"Uno"; break; case 2: cout<<"Dos"; break; case 3: cout<<"Tres"; break; case 4: cout<<"Cuatro"; break; case 5: cout<<"Cinco"; break; case 6: cout<<"Seis"; break; case 7: cout<<"Siete"; break; case 8: cout<<"Ocho"; break; case 9: cout<<"Nueve”; break; default:

cout<<"2 digitos"; break; }

}

5. Ingrese por Teclado el Nombre del Obrero, las horas trabajadas y el Tipo de Actividad (Pintado, Laqueado, Barnizado), por cada hora trabajada se le pagara:

a) Si el Servicio es Pintado se le pagara s/. 10 a) Si el Servicio es Laqueado se le pagara s/. 12 a) Si el Servicio es Barnizado se le pagara s/. 14

Por cada hora extra se le pagara 30% mas sobre el pago por hora trabajada, sabiendo que semanalmente trabaja 40 horas. Calcule y visualice El Jornal Semanal que recibirá el Obrero, el Jornal Extra y el Total del Jornal.

#include<iostream.h> #include<string.h> #include<conio.h> void main(){ char nombre[40]; char actividad[20]; int ht,he,ph,jornal; clrscr();

cout<<"Ingrese el Nombre del Obrero:"; cin>>nombre;

cout<<"Ingrese la Actividad:"; cin>>actividad;

cout<<"Ingrese las horas trabajadas:"; cin>>ht;

//calculo del pago por la actividad if(strcmp(actividad,"pintado")= =0) ph=10; else if(strcmp(actividad,"laqueado")= =0) ph=12; else if(strcmp(actividad,"barnizado")= =0) ph=14; else return;

(6)

//calculo del jormal if(ht<=40) jornal=ph*ht; else{ he=ht-40; jornal=(ph*40) + (ph*1.30*he); }

cout<<"El Jornal Semanal es:"<<jornal; }

Ejercicios Propuestos

Laboratorio Nº 3 Estructuras Repetitivas Ejercicios Resueltos

1. Desarrollar un Programa donde Visualice los 80 primeros números naturales #nclude<iostream.h> #include<conio.h> void main(){ clrscr(); int n=1; while(n<=80){ cout<<"numero: "<<n<<endl; n++; } getch(); }

2. Genere y Visualice los 70 primeros impares positivos, al final visualice la suma #include<iostream.h> #include<conio.h> void main(){ int nimpar=1,suma=0; for(int i=1;i<=70;i++){ nimpar=2*i-1; cout<<"numero: "<<nimpar<<endl; suma+=nimpar; }

cout<<"suma de los impares: "<<suma<<"endl; getch();

}

3. Desarrolle un Programa donde digite 10 números de dos dígitos visualizar la suma de los números ingresados

#include<iostream.h> #include<conio.h> void main(){ clrscr();

(7)

int numero,suma=0,i=1; while(i<=10){ cout<<"ingreso numero: "; cin>>numero; if((numero>=10)&&(numero<=99)) suma+=numero; i++; }

cout<<"suma de nros de 2 digitos es: "<<suma<<endl; getch();

}

4. Desarrollar un Algoritmo donde permita ingresar Números, luego visualizar un Mensaje si desea continuar ingresar Números, al finalizar visualizar la Suma de los Números Ingresados

#include<iostream.h> #include<conio.h> void main(){ char op; int numero,suma=0; do{ clrscr(); cout<<"Ingrese el numero"; cin>>numero; suma+=numero;

cout<<"Desea ingresar otro numero [s/n]"; cin>>op;

}while(op!='n');

cout<<"La suma es: "<<suma; getch();

}

5. Ingrese por teclado un número de 3 cifras calcule y visualice, la cantidad de dígitos pares e impares que tiene el numero

#include<iostream.h> #include<conio.h> void main(){ int numero,par=0,impar=0,digito; do{ clrscr();

cout<<"Ingrese un Numero de 3 cifras:"; cin>>numero; }while((numero<100)||(numero>999)); while(numero>0){ digito=numero%10; if((digito%2)= =0) par++; else impar++; numero=int(numero/10); }

(8)

cout<<"Cantidad de digitos pares:"<<par<<endl; cout<<"Cantidad de digitos impares:"<<impar<<endl; }

Guía de Laboratorio Nº 02

Laboratorio Funciones y Procedimientos. Ejercicios Resueltos

1. Desarrollar un Programa donde ingrese dos números, calcule y visualice la Suma. #include<iostream.h>

void suma(int,int); /*prototipo*/

int a,b; /*variables globales*/

void main(){

cout<<"Ingrese dos numeros"; cin>>a; cin>>b;

suma(a,b); }

void suma(int x,int y){ cout<<x+y; }

2. Desarrollar un Programa que permita calcular el promedio de 3 notas ingresadas, si el promedio de las 3 notas es menor a 10.5 deberá ingresar la nota sustitutorio donde reemplaza la nota más baja de las 3 y se calcula el nuevo promedio

#include<iostream.h> float promedio(int, int, int); void main(){

int n1,n2,n3; float prom=0;

cout<<"Ingrese la Nota 1:"; cin>>n1; cout<<"Ingrese la Nota 2:"; cin>>n2; cout<<"Ingrese la Nota 3:"; cin>>n3; prom=promedio(n1,n2,n3);

cout<<prom; }

float promedio(int x,int y,int z){ float p=(x+y+z)/3; if(p<10.5){ int susti; cout<<"Ingrese el Sustitutorio"; cin>>susti; if((x<y)&&(x<z)) x=susti; else if((y<x)&&(y<z)) y=susti; else if((z<x)&&(z<y)) z=susti;

(9)

p=(x+y+z)/3; }

return p; }

3. Desarrollar un Programa que permita calcular las 4 operaciones básicas a través de 2 números ingresados, utilice un menú de opciones

#include<iostream.h> #include<conio.h> void suma(int,int); void diferencia(int,int); void promedio(int,int); void division(int,int); void menu(); void main(){ int n1,n2,op=0;

cout<<"Ingrese el primer numero"; cin>>n1; cout<<"Ingrese el segundo numero"; cin>>n2; do{ menu(); cin>>op; switch(op){ case 1: suma(n1,n2);break; case 2: diferencia(n1,n2);break; case 3: promedio(n1,n2);break; case 4: division(n1,n2);break; } }while(op!=5); } void menu(){ clrscr(); cout<<"MENU DE OPCIONES"<<endl; cout<<"[1]Suma"<<endl"; cout<<"[2]Diferencia"<<endl; cout<<"[3]Promedio"<<endl; cout<<"[4]Division"<<endl; cout<<"[5]Salir"<<endl; cout<<"Ingrese una opcion"; }

void suma(int x, int y){ clrscr();

cout<<"La suma es:"<<(x+y); getch(); }

void diferencia(int x, int y){ clrscr();

cout<<"La diferencia es:"<<(x-y); getch(); }

void promedio(int x, int y){ clrscr();

cout<<"El promedio es:"<<((x+y)/2); getch(); }

(10)

clrscr();

cout<<"La division es:"<<(x/y); getch(); }

4. Desarrollar un Programa donde ingrese un número mayor a cero, calcule y visualice el inverso del número ingresado, utilice una función con parámetro por referencia.

#include<iostream.h>

int inverso(int *); /*prototipo*/ void main(){

int n;

cout<<"Ingrese el numero:"; cin>>n;

cout<<"El numero inverso es:"<<inverso(&n); /*llamar funcion*/ } int inverso(int *x){ int ninv=0; while(*x>0){ ninv=ninv*10 + (*x%10); *x/=10; } return(ninv); }

5. Ingrese por Teclado las tres notas de un alumno, visualice su promedio y su mensaje: 0 a 05 Repitente 06 a 10 Reprobado 11 a 14 Aprobado 15 a 18 Media Beca 19 a 20 Beca #include<iostream.h>

void mensaje(int*,int*,int*); /*prototipo*/ void main(){

int n1,n2,n3;

cout<<"Ingrese la nota1:"; cin>>n1; cout<<"Ingrese la nota2:"; cin>>n2; cout<<"Ingrese la nota3:"; cin>>n3; mensaje(&n1,&n2,&n3);

}

void mensaje(int *x,int *y,int *z){ float p=(*x+*y+*z)/3; char *msg[15]; if(p<=6) *msg="Repitente"; else if(p<=10) *msg="Desaprobado"; else if(p<=14) *msg="Aprobado"; else if(p<=18) *msg="Media Beca";

(11)

else if(p<=20)

*msg="Beca";

cout<<"El promedio es:"<<p<<endl; cout<<"La Condicion es:"<<*msg; }

6. Desarrollar un Programa que permita calcular la Liquidación de un Trabajador, ingrese el nombre del trabajador, su año de ingreso y haber básico, Calcule y visualice:

• Vacaciones; si tiene mas de 20 años será 5 haberes básico, caso contrario será 3 haberes básico.

• Bonificación de Servicios; que representa el haber básico por los años de servicio • Liquidación, suma de la bonificación y Vacaciones

#include<iostream.h> #include<conio.h> const int yactual=2005; void Planilla(float *,int *); void main(){

char trabajador[40]; float basico;

int yingreso;

cout<<"Ingrese el Nombre del Trabajador:"; cin>>trabajador; cout<<"Ingrese su Haber Basico:"; cin>>basico; cout<<"Ingrese el Año de Ingreso:"; cin>>yingreso; Planilla(&basico,&yingreso);

}

void Planilla(float *bas,int *ying){ float bonif=0,vacac=0,liq=0; int yserv=yactual-*ying; if(yserv<=20) vacac=(*bas)*3; else vacac=(*bas)*5; bonif=(*bas)*yserv; liq=bonif+vacac; cout<<"Bonificacion:"<<bonif<<endl; cout<<"Vacaciones :"<<vacac<<endl; cout<<"Liquidacion :"<<liq; } Ejercicios Propuestos 1

(12)

Guía de Laboratorio Nº 03

Laboratorio Funciones Recursivas Ejercicios Resueltos

1. Desarrollar un Programa que calcule y visualice la Suma de los 20 términos de la siguiente serie: 1, 1.5, 2, 2.5, 3 …. #include<iostream.h> float serie(int); void main(){ float suma; suma=serie(20);

cout<<"La suma de la Serie es:"<<suma; } float serie(int n){ float valor; if(n= =1) valor=1; else valor=1+0.5*(n-1)+serie(n-1); return(valor); }

2. Desarrollar un programa que permita obtener la sumatoria de la siguiente serie: 11 + 22 + 33 + 44 + 55 + ….Nn

#include<iostream.h> float serie(int);

void main(){ int n;

cout<<"Numero de elementos de la Serie:"; cin>>n;

cout<<"La suma de la Serie es:"<<serie(n); } float serie(int n){ float valor; if(n= =1) valor=1; else valor=n*n + serie(n-1); return(valor); }

3. Desarrollar un programa que permita obtener el Factorial de un Número ingresado #include<iostream.h>

float factorial(int); void main(){

int n;

(13)

cin>>n;

cout<<"El Factorial del Numero es:"<<factorial(n); } float factorial(int n){ float f; if(n= =1) f=1; else f=n*factorial(n-1); return(f); }

4. Desarrollar un programa que permita suma la Serie Fibonnaci: 1, 1, 2, 3, 5, 8, ….

(14)

Guía de Laboratorio Nº 04

Laboratorio Nº 1 Arreglos Ejercicios Resueltos

1. Desarrollar un Programa donde ingrese 100 Números en un Arreglo; visualice la Suma de los Números del Array.

#include<iostream.h> #include<conio.h> int n[100]; void main(){ int i=0; float suma=0; while(i<=99){ clrscr(); cout<<"Ingrese un Numero:"; cin>>n[i]; i++; } clrscr(); for(i=0;i<=99;i++) suma+=n[i];

cout<<"La Suma de los numeros es:"<<suma; }

2. Desarrollar un Programa donde ingrese en forma aleatoria 300 Números en un Array; visualice la cantidad de números de 1 cifra existen en el Array, así como la suma de los números de 1 cifra. . #include<iostream.h> #include<stdlib.h> int n[300]; void main(){ clrscr(); int i=0,contador=0; float suma=0; while(i<=299){ n[i]=rand()%100; if((n[i]>=0)&&(n[i]<=9)) i++; } i=0; while(i<=299){ if((n[i]>=0)&&(n[i]<=9)){ cout<<n[i]<<endl; contador++; suma+=n[i]; } i++; }

cout<<"La suma de los digitos es:"<<suma; }

(15)

3. Desarrollar un programa que permita generar y visualizar la Tabla de Multiplicar del 0 al 11. #include<iostream.h>

#include<conio.h> const int tabla=12; void main() { int x,i; int numeros[tabla][tabla]; /* rellenamos la matriz */ for (x=0;x<tabla;x++) for (i=0;i<tabla;i++) numeros[x][i]=x*i; int fila=1; clrscr(); /* visualizamos la matriz */ for (x=0;x<tabla;x++){ for (i=0;i<tabla;i++){ gotoxy((i+1)*4,fila); cout<<numeros[x][i]; } fila++; } }

4. Desarrollar un Programa que permita realizar el Ingreso, Búsqueda, Ordenamiento de 100 números aleatorios almacenados en un Array. Utilice un Menú de Opciones.

#include<iostream.h> #include<conio.h> #include<stdlib.h> void menu(); void ingreso(); void listado(); void ordenasc(); void ordendes(); void buscar(); int n[100]; void main(){ int op=0; do{ menu(); cin>>op; switch(op){

case 1: ingreso(); break; case 2: listado(); break; case 3: ordenasc();break; case 4: ordendes();break; case 5: buscar();break; }

(16)

}while(op!=6); } void menu(){ clrscr(); cout<<"[1]Ingreso de Numeros"<<endl; cout<<"[2]Listado de Numeros"<<endl; cout<<"[3]Orden Ascendente"<<endl; cout<<"[4]Orden Descendente"<<endl; cout<<"[5]Salir"<<endl;

cout<<"Ingrese una Opcion:"; }

void ingreso(){ clrscr();

for(int i=0;i<=99;i++) n[i]=rand(); cout<<"Ingrese realizado";

getch(); }

void listado(){ clrscr();

for(int i=0;i<=99;i++) cout<<n[i]<<endl; getch(); } void ordenasc(){ int aux=0,i,j; clrscr(); for(i=0;i<=99;i++){ for(j=i+1;j<=99;j++){ if(n[i]>n[j]){ aux=n[i]; n[i]=n[j]; n[j]=aux; } } }

cout<<"Numeros ordenados en forma Ascendente"; getch(); } void ordendes(){ int aux=0,i,j; clrscr(); for(i=0;i<=99;i++){ for(j=i+1;j<=99;j++){ if(n[i]<n[j]){ aux=n[i]; n[i]=n[j]; n[j]=aux; }

(17)

} }

cout<<"Numeros ordenados en forma descendente"; getch();

}

void buscar(){ clrscr();

int num,contador=0;

cout<<"ingrese un numero a buscar"; cin>>num;

for(int i=0;i<=99;i++){ if(num==n[i])

contador++; }

cout<<"veces que se repite"<<contador; getch();

}

5. Desarrollar un programa que permita realizar el Ingreso, Listado y Ordenar 20 números aleatorios de dos cifras almacenados en Array, todos ellos diferentes. Utilice un Menú de Opciones.

#include<iostream.h> #include<conio.h> #include<stdlib.h> void menu(); void ingreso(); void listado(int []); void ordenar(int []); int n[20]; void main(){ int op=0; do{ menu(); cin>>op; switch(op){

case 1: ingreso(); break; case 2: listado(n); break; case 3: ordenar(n);break; } }while(op!=4); } void menu(){ clrscr(); cout<<"[1]Ingreso de Numeros"<<endl; cout<<"[2]Listado de Numeros"<<endl; cout<<"[3]Ordenar Numeros"<<endl; cout<<"[4]Salir"<<endl;

cout<<"Ingrese una Opcion:"; }

(18)

void ingreso(){ clrscr(); int i=0,j,num; while(i<=19){ do{ num=rand()%1000; }while((num<10)||(num>99)); j=0; while((j<=i)&&(n[j]!=num)){ j++; } if(j>i){ n[i]=num; i++; } } cout<<"Ingreso realizado"; getch(); } void listado(int x[20]){ clrscr(); for(int i=0;i<=19;i++) cout<<x[i]<<endl; getch(); } void ordenar(int x[20]){ int aux=0,i,j; clrscr(); for(i=0;i<=19;i++){ for(j=i+1;j<=19;j++){ if(x[i]>x[j]){ aux=x[i]; x[i]=x[j]; x[j]=aux; } } } cout<<"Números ordenados"; listado(x); }

Referencias

Documento similar

Análogamente a como sucedía en el caso del Teorema de los Números Primos, no existe una forma única de establecer un enunciado para el resultado y en la literatura se han

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

Pero antes hay que responder a una encuesta (puedes intentar saltarte este paso, a veces funciona). ¡Haz clic aquí!.. En el segundo punto, hay que seleccionar “Sección de titulaciones

El axioma que introduce Cantor para garantizar la correspondencia entre los números reales y los puntos de la recta afirma que, fijados un punto como origen y una unidad

d) que haya «identidad de órgano» (con identidad de Sala y Sección); e) que haya alteridad, es decir, que las sentencias aportadas sean de persona distinta a la recurrente, e) que

La siguiente y última ampliación en la Sala de Millones fue a finales de los años sesenta cuando Carlos III habilitó la sexta plaza para las ciudades con voto en Cortes de

Innega- blemente, los intereses, expectativas y sentidos que se construyen en torno a las fortalezas y debilidades de la consultoría política no son homogéneas, se