Está en la página 1de 10

SOLUCIN DE ALGORITMOS

Escriba un programa en C++ que:


1. Codifica un programa que reciba 06 nmeros todos diferentes entre s y devuelve el menor
de los positivos y el mayor de los negativos, si no hay uno de ellos devolver 0

2. Muestre en pantalla los nmeros enteros del 1 a N (N es un nmero natural).

#include <iostream>
using namespace std;
int main(){
int N,i;
cin >> N;
for (i = 1; i <= N ; i++) cout << i << " " ;
cout << endl;
}

2.1 Muestre en pantalla los nmeros enteros del 1 a N (N es un nmero natural). de


3 en 3.

#include <iostream>
using namespace std;
int main(){
int N,i;
cin >> N;
for (i = 1; i <= N ; i= i+3) cout << i << " " ;
cout << endl;
}

2.2.- Convertir una cantidad en metros a yardas, pies y pulgadas (y viceversa).

#include<iostream>
using namespace std;
main(){
float n,Y,P,Pu,m1,m2,m3;
cout<<"ingrese una cantidad en metros : ";cin>>n;
Y=n*(0.3048);
m1=Y/(0.3048);
P=n*(0.914);
m2=P/(0.914);
Pu=n*(39.3701);
m3=Pu/(39.3701);
cout<<"cantidad en yardas es : "<<Y<<endl;
cout<<"cantidad en METROS es : "<<m1<<endl;
cout<<"cantidad en pies es : "<<P<<endl;
cout<<"cantidad en METROS es : "<<m2<<endl;
cout<<"cantidad en pulgadas es :"<<Pu<<endl;
cout<<"cantidad en METROS es : "<<m3<<endl;
return 0;
}
3.- Muestre en pantalla los nmeros enteros de N (N es un nmero natural mayor que 1).al 1.

#include <iostream>
using namespace std;
int main(){
int N,i;
cin >> N;
for (i = N; i >= 1 ; i--) cout << i << " " ;
cout << endl;
}
4. Muestre en pantalla todos los mltiplos de 3 entre los nmeros 1 y N (N es un nmero
natural).

#include <iostream>
using namespace std;
int main(){
int N,i;
cin >> N;
for (i = N; i >= 1 ; i= N-3) cout << i << " " ;
cout << endl;
}

5. Genere la siguiente serie: 5, 10, 15, 20, 25,30 El programa preguntar primero cuantos
trminos se quieren mostrar y despus mostrar la serie correspondiente.

#include<iostream>
using namespace std;
main(){
int i, numTerminos, contador;
printf("Introduzca el nmero de trminos de la serie: ");
scanf("%d", &numTerminos);
contador = 0;
for (i = 1; i<=numTerminos; i++){
contador = contador + 5;
printf (" %d ,", contador);
}
return 0;
}

6. Pida al usuario un nmero, y muestre el mensaje "has introducido el numero ---"


(mostrando el nmero que ha sido introducido). Esta accin debe repetirse hasta que el
usuario introduzca el nmero 0. En ese momento se mostrar el mensaje "Finalizando: Se ha
introducido el nmero 0". Adems, se debe mostrar cuntos nmeros se han introducido y su
suma.

#include<iostream>
using namespace std;
main(){
int numero, cantidad, suma;
suma=0;
cantidad=0;
printf ("Introduzca un numero: ");
scanf ("%i", &numero);
while (numero!=0){
printf ("Ha introducido el numero %i\n", numero);
cantidad=cantidad+1;
suma=suma+numero;
printf ("Introduzca un numero: ");
scanf ("%i", &numero);
}
printf ("Finalizando: Se ha introducido el numero 0\n");
printf ("La cantidad de numeros introducidos es %d\n", cantidad);
printf ("La suma de los numeros introducidos es %d\n", suma);
return 0;
}

7. Pida al usuario su nombre y contrasea y le de tres oportunidades para introducir los datos
correctos, que sern root y 4321. Si los datos introducidos son correctos se mostrar por
pantalla Bienvenido al sistema. En caso contrario se mostrar un mensaje por pantalla
indicando que se ha superado el nmero de intentos permitido.
Notas:
Puesto que las cadenas de caracteres finalizan con el carcter nulo (\0), usuario y contrasea
se declararn como cadenas de longitud 5 (char usuario[5]). Para leer cualquiera de estas
cadenas con la funcin scanf se usar el descriptor de formato %s y dado que el nombre de
la cadena ya es una direccin, ste no debe ir precedido del smbolo &(scanf(%s, usuario)).
Para comparar cadenas se debe usar la funcin strcmp (string compare), por ejemplo
strcmp(usuario, "root"), que devolver un 0 si las cadenas son iguales y otro valor si son
distintas.

#include<iostream>
using namespace std;
int main(){
char user[5], pass[5];
int intentos=0;
int correcto=0;

do{
printf ("Nombre: ");
scanf ("%s", user);
printf ("Contrasea: ");
scanf ("%s", pass);
if ((strcmp(user, "root")==0) && (strcmp(pass, "1234")==0))
correcto=1;
else
intentos=intentos+1;
}while ((intentos<3) && (correcto==0));
if (intentos==3)
printf ("Se ha superado el numero maximo de intentospermitido\n");
else
printf ("Bienvenido al sistema\n");
return 0;
}
8. Eleve un nmero a una potencia, utilizando dos mtodos: a) utilizando la funcin potencia
y b) usando un bucle, sin recurrir al operador potencia. Nota: En C, para poder usar la funcin
potencia (pow(x, y)=xy) es necesario incluir la biblioteca math (#include <math.h>).

#include<iostream>
#include <math.h>
using namespace std;
int main(void){
float n,res1,res2;
int i,p;
printf ("elevar un numero a una potencia\n");
printf ("introduce el numero: \t");
scanf("%f", &n);
printf ("a que potencia lo quieres elevar \t");
scanf("%i", &p);
res1=1;
for (i=1;i<=p;i++)
res1 = res1 * n;
res2=pow(n,p);
printf("por el primer metodo el resultado es %8.2f y por el
segundo %8.2f \n", res1, res2);
return 0;
}

9. Solicite 10 nmeros enteros positivos al usuario y calcule y muestre los siguientes 2


valores:
Valores:
La suma de todos los nmeros ledos.
La media de los nmeros.
El mayor nmero introducido.
El menor nmero introducido.

#include<iostream>
using namespace std;
int main(){
int i=1;
int numero, mayor, menor, suma;
float media;
printf("Introduzca el numero %d: ", i);
scanf("%d", &numero);
mayor=numero;
menor=numero;
suma=numero;
for (i = 2; i<=10; i++){
printf("Introduzca el numero %d: ", i);
scanf("%d", &numero);
suma = suma + numero;
if (numero > mayor)
mayor = numero;
if (numero < menor)
menor = numero;
}
media=suma/10.0;
printf("La suma de todos los nmeros es: %d \n", suma);
printf("Su media es: %f \n", suma/10);
printf("El numero mayor es: %d \n", mayor);
printf("El numero menor es: %d \n", menor);
return 0;
}

10. Solicite nmeros al usuario hasta que se hayan introducido 10 nmeros o la suma de todos
los nmeros ledos sea mayor que 100. A continuacin mostrar un mensaje indicando qu
condicin se ha cumplido (es decir, si se han introducido 10 nmeros o si su suma es mayor
que 100).

#include<iostream>
using namespace std;
main(){
int n;
int suma, contador;
suma=0;
contador=0;
do{
printf ("Introduzca un numero: ");
scanf("%d", &n);
suma=suma+n;
contador=contador+1;
}while ((contador<10)&&(suma<=100));
if (contador==10)
printf ("Se han introducido 10 numeros\n");
if (suma>100)
printf ("La suma de los numeros introducidos es superior a 100\n");
return 0;
}

11. Para adivinar un nmero entre 1 y 100 que previamente se ha definido como una
constante. El programa ir pidiendo nmeros al usuario y, siempre que dicho nmero no
coincida con el nmero secreto, le indicar si el nmero introducido es mayor o menor que el
nmero secreto que tiene que adivinar. Al final, el programa indicar la cantidad de intentos
que se han necesitado para adivinar el nmero. Si el nmero de intentos es menor que 5 se
mostrar Enhorabuena!. Si es un valor entre 5 y 10 se mostrar el mensaje No est mal.
Si el nmero de intentos es mayor que 10 se mostrar el mensaje Debe practicar ms.

#include<iostream>
using namespace std;
#define SECRETO 57
main(){
int n;
int intentos=0;
do{
printf ("Introduzca un numero: \n");
scanf("%d",&n);
intentos=intentos+1;
if (SECRETO>n){
printf ("El nmero secreto es mayor que el introducido\n");
}
else
if (SECRETO<n){
printf ("El nmero secreto es menor que el introducido\n");
}
} while (n!=SECRETO);
if (intentos<5)
printf("Enhorabuena\n");
else if ((intentos>=5)&&(intentos<=10))
printf("No esta mal\n");
else
printf("Debe practicar mas\n");
return 0;
}
12. Modificar el ejercicio anterior para que el nmero mximo de intentos sea 5. Al terminar
el programa indicar si el usuario ha ganado (si ha adivinado el nmero en menos de cinco
intentos) o no.

#include<iostream>
using namespace std;
#define SECRETO 57
int main(void){
int intentos=5;
int adivinado=0;
int numero;
do{
printf("Introduzca un numero: ");
scanf("%d", &numero);
if (numero==SECRETO)
adivinado=1;
else{
if (SECRETO>numero)
printf ("El nmero secreto es mayor que %i\n", numero);
else
printf ("El nmero secreto es mayor que %i\n", numero);
intentos=intentos-1;
}
}while ((intentos>0) && (adivinado==0));
if (adivinado)
printf ("ENHORABUENA. HA ADIVINADO EL NUMERO SECRETO\n");
else
printf ("Ha superado el nmero de intentos permitido\n");
return 0;
}
13. Solicite al usuario nmeros positivos de tres o ms cifras y compruebe si son pares. Si el
nmero introducido es positivo pero de una o dos cifras, se solicitar un nuevo nmero. El
programa finaliza cuando se introduce 0 o un nmero negativo.

#include<iostream>
using namespace std;
main(){
int n;
do{
printf("Introduzca un numero positivo de tres o mas cifras:");
scanf("%i", &n);
while ((n>0)&&(n<=99)){
printf ("El numero introducido tiene menos de tres cifras. Introduzca nuevo numero :");
scanf("%i", &n);
}
if (n>0){
if (n%2==0)
printf ("El nmero introducido es par\n");
else
printf ("El nmero introducido es impar\n");
}
} while (n>0);
return 0;
}
14. Permita calcular el importe de una factura, a partir de una serie de artculos vendidos. Para
ello, el programa ir preguntando para cada artculo la cantidad de unidades vendidas y el
precio unitario.
El programa comprobar que tanto el precio como la cantidad son nmeros positivos, y en
caso contrario volver a solicitar los valores.
La lectura de artculos acabar cuando se introduzca un 0 en la primera pregunta. Entonces
se imprimir por pantalla el importe total de la factura.

#include<iostream>
using namespace std;
main(){
int n;
int precio, total=0;
do{
do{
printf("\nIntroduzca la cantidad vendida: ");
scanf("%d",&n);
if(n<0) printf("Cantidad no valida");
}while(n<0);
if (n>0){
printf("Introduzca el precio: ");
do{
scanf("%d",&precio);
if(precio<0) printf("Precio no valido");
}while(precio<0);
}
total=total+n*precio;
}while(n!=0);
printf("\n Total vendido = %d \n", total);
return 0;
}
15. Escribir un programa en C que escriba los nmeros comprendidos entre 1 y 1000. El
programa escribir en la pantalla los nmeros en grupos de 20, solicitando al usuario si quiere
o no continuar visualizando el siguiente grupo de nmeros. Generalizar el programa para que
escriba los nmeros comprendidos entre dos valores que introduzca el usuario, y sea ste
tambin quien decida el tamao del grupo a visualizar por pantalla.

#include<iostream>
using namespace std;
main(){
int main (int argc,char *argv[]);
{char r;
int x=1;
int tope = 1000;
int paso = 10;
do{
cout<<x<<" \t";
if(x%paso == 0 && x! = tope){
cout<< endl << "desea continuar (s/n)";
cin>>r;
}
}white(r! ="n"&& x++<tope);
cout<<endl;
system("pause");
return 0; }

}
16. Escriba un programa que lea nmeros por teclado hasta que se introduzca el cero. En ese
momento deber representar el nmero de introducciones efectuadas, y la mayor secuencia
de nmeros consecutivos iguales, indicando cul fue el nmero que se repiti y cuntas veces
seguidas apareci.
Ejemplo: Si se introduce 8 8 8 4 5 6 6 6 7 7 7 7 2 0, el resultado a mostrar ser. El nmero
ms repetido es el 7 y se ha escrito 4 veces.

17. Escriba un programa en C que solicite un nmero y calcule su factorial. La factorial de


un nmero n representado por n es el producto de todos los nmeros naturales desde 3
1 hasta n.
n! = 1 * 2 * 3 * * (n-1) * n.

#include<iostream>
using namespace std;
void factorial (int x)
{
int i;
long int fac = 1;
for (i=2; i<=x; i=i+1) fac=fac*i;
printf ("El factorial de %d es %ld", x, fac);
}
main ()
{
int a;
do
{
printf ("\n Introduce el numero ");
scanf ("%d", &a);
if (a>0)
factorial (a);
} while (a > 0);
}

18. Escriba un programa que calcule la raz cuadrada de un nmero con n decimales, por el
Mtodo de aproximaciones sucesivas.
Nota: Mtodo de las aproximaciones sucesivas
Se basa en 'ensayo y error'. A este tipo de algoritmos se les llama de aproximaciones
sucesivas: se empieza por un valor inicial y se va modificando para acercarse al resultado.
En este caso se comienza suponiendo que la raz es 1. Se comprueba si raiz*raiz=num y si
no es as se suma un incremento, y se vuelve a comprobar. Se repiten estos pasos hasta que
raiz*raiz>num.
Para computar el valor con un nmero determinado de decimales se repiten esos pasos con
un incremento cada vez menor (la primera vuelta 1, la segunda 0,1, la tercera 0,01
En cada paso la precisin es un decimal ms, por lo que se repite hasta que el nmero de
decimales sea el introducido por el usuario, o hasta que se encuentre el valor exacto.

19. Se quiere averiguar el nmero mgico de una persona. Para calcularlo se suman todos
los nmeros de su fecha de nacimiento y a continuacin se reducen a un solo dgito.
Ejemplo:
Fecha de nacimiento: 05/02/1973
5 + 2 + 1973 = 1980 => 1 + 9 + 8 + 0 = 18 =>9

#include<iostream>
using namespace std;
main(){
int d,m,a;
float Num;
cout<<"ingrese Dia de nacimiento:";cin>>d;
cout<<"ingrese mes de nacimiento:";cin>>m;
cout<<"ingrese ao de nacimiento:";cin>>a;
Num=d+m+a;
}
int sumaDigitos(int Num){
int Suma=0, Resto;
while(Num!=0){
Resto=(Num%10);
Suma=(Suma+Resto);
Num=(Num/10);
}
cout<<"numero magico es : "<<Num<<endl;
return (Suma);

20.- Realice un programa que:


a) Solicite al usuario el ao, el mes y el da que componen su fecha de nacimiento y
compruebe que la fecha introducida es una fecha vlida. La fecha se considerar vlida si:
ao >0; 1<=mes<=12; 1<=dia<=DIAS_MES. Se considerar que, con independencia del
ao, el nmero de das del mes de Febrero es 28.
b) Calcule el nmero mgico asociado a esa fecha.
c) Muestre el nmero mgico por pantalla
#include<iostream>
using namespace std;
main(){
int d,m,a,dmax =0;
string r="";
cout<<"Dia:";cin>>d;
cout<<"mes:";cin>>m;
cout<<"ao:";cin>>a;
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dmax = 31;
break;
case 4:
case 6:
case 9:
case 11:
dmax = 30;
break;
case 2:
if(a % 4 == 0 && (!(a % 100 == 0)|| a % 400 == 0))
dmax= 29;
else
dmax= 28;
}
if((d>0 && d <= dmax)&& (m>0&&m<13)&&a>0)
r="ES VALIDA";
else
r="ES ININVALIDA";
cout<<"LA FECHA INGRESADA ES: "<<r<<endl;
}