Practiquemos C++ (juntos)

Iniciado por micky123, 16 Febrero 2010, 02:46 AM

0 Miembros y 2 Visitantes están viendo este tema.

AlbertoBSD

#10
LOL no me habia dado cuenta que el titulo dice "C++" xD, bueno acepto que me haga falta stdlib.h y string.h xD, en FreeBSD los tendría que poner a fuerza, pero "conio.h", micky123 no necesitas conio.h.

Ahora sobre ejercicios fáciles asi, pues no se me ocurren muchos pero ahi va uno:

Escribir un programa que lea un numero ROMANO en forma de cadena de caracteres y lo convierta en un numero Arábigo. Si ya esta repetido por ahi en las chinchetas propongan otro.

Saludos


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

micky123

Holas gracias por continuar y bueno dando solucion al ultimo ejercicio mi forma de resolverlo solo convierte un numero romano comprendido entre 0 y 399, seria asía:

/*Escribir un programa que lea un numero ROMANO en forma de cadena de caracteres y lo convierta en un numero Arábigo realizado por Micky123*/

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

void main(void)
{
   char v[15];
   int i=1, cont=0,na=0,dim;
   clrscr();
   printf("Ingrse Numero Romano: ");
   fflush(stdin);
   fgets(v,15,stdin);

   //cputs(v);
   dim=strlen(v);
   //mayusculas
   for(i=0;i<dim;i++)
   v=toupper(v);

   for(i=0;i<dim;i++)
     if(v=='I')
       if(v[i+1]=='V')
       { na=na+4;i++;}
       else
    if(v[i+1]=='X')
    {  na=na+9;i++;}
    else
      if(v[i+1]=='L')
        {na=na+49;i++;}
      else
        if(v[i+1]=='C')
          {na=na+99;i++;}
        else
          na++;
     else
       if(v=='V')
    na=na+5;
       else
    if(v=='X')
      if(v[i+1]=='L')
        {na=na+40;i++;}
      else
        if(v[i+1]=='C')
         { na=na+90;i++;}
        else
          na=na+10;
    else
      if(v=='L')
        na=na+50;
      else
        if(v=='C')
          na=na+100;

   printf("\nEn arabigo es %d",na);

   getch();
}

gracias y bueno proponiendo otro ejercicio(mm generacion de digitos) seria:
generar los N numeros perfectos:

salu2

Littlehorse

micky123, usa las etiquetas Geshi para poner código, así es mas legible.

Citargenerar los N numeros perfectos:


#include <stdio.h>
int isPnumber(int num);

int main()
{
    int num=0;
    int i=0;
   
    printf("Ingrese numero:  ");
    scanf("%d", &num);

for(i=1;i<=num;i++)
  if(isPnumber(i))
      printf("%d es perfecto\n",i);

getchar();
getchar();
}

int isPnumber(int num)
{
    int sum = 0 ;
    int i=0;

    for( i = 1; i<num; i++ )
        if( num%i==0)
            sum+=i;
    if( sum == num )
        return 1;
    else
        return 0;
}


CitarIngrese numero:  10000
6 es perfecto
28 es perfecto
496 es perfecto
8128 es perfecto


Nuevo ejercicio:

Leer tres variables enteras A1, M1, D1, que representan una fecha, y otras tres A2, M2 y D2, que representan otra fecha. Luego informar la cantidad de días entre las dos fechas (respetando la cantidad de días que tiene cada mes y teniendo en cuenta los años bisiestos).
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

micky123

ok Littlehorse gracias por la sugerencia, es que como soy nuevo en el foro me voy acostumbrando :P...
salu2... resolviendo ejercicio.

Probando geshi

micky123

hola Litllehorse... bueno me costo mucho resolver este ejercicio je je... fue uno de mis ejercicios mas complejos, pero bueno al fin logre realizarlo... ahí va:


#include <stdio.h>
#include <conio.h>

void main()
{ int d1,m1,a1,d2,m2,a2,d,db,ca;
  int mes[12],i;
  mes[1]=31;  mes[7]=31;
  mes[2]=28;  mes[8]=31;
  mes[3]=31;  mes[9]=30;
  mes[4]=30;  mes[10]=31;
  mes[5]=31;  mes[11]=30;
  mes[6]=30;  mes[12]=31;

  printf("Ingrese dia inicial d1= ");
  scanf("%d",&d1);
  printf("Ingrese mes inicial m1= ");
  scanf("%d",&m1);
  printf("Ingrese año inicial a1= ");
  scanf("%d",&a1);

  printf("Ingrese dia final d2= ");
  scanf("%d",&d2);
  printf("Ingrese mes final m2= ");
  scanf("%d",&m2);
  printf("Ingrese año final a2= ");
  scanf("%d",&a2);
  d=0;db=0;
  ca=a2-a1-1;
  d=d+ca*365;

  for(i=m1;i<=12;i++)
    d=d+mes[i];

  if(m2>1)
    for(i=1;i<=m2-1;i++)
      d=d+mes[i];
  d=d-d1+d2;
  if(d1%100==0)
  {  if(a1%400==0)
      if(m1<=2)
db=1;  
  }
  else
  {
    if(a1%4==0)
      if(m1<=2)
db=1;
  }
  for(i=a1+1;i<=a2;i++)
  { if(i%100==0)
    { if(i%400==0)
        db++;
    }
    else
    { if(i%4==0)
db++;
    }

  }
  if(a2%100==0)
  { if(a2%400==0)
    { if(m2>2)
      { db++; }
      else
      { if(m2==2 && d2==29)
  db++;
      }
    }
  }
  else
  { if(a2%4==0)
    { if(m2>2)
      { db++;}
      else
      { if(m2==2 && d2==29)
          db++;
      }
    } 
  }
  d=d+db;
  printf("Los dias entre la fecha 1 y la fecha 2 son= %d",d);
  getch();
}


gracias por continuar con la linea y gracias por hacerme romper la cabeza :xD je je
lo necesitaba...
salu2

micky123

Bueno me toca proponer otro ejercicio:

Encontrar numeros de 3 digitos, cuya suma del cubo de los digitos sea el numero
de 3 digitos, mostrar los digitos:
    ejemplo: 153= 13+53+33

espero haber sido claro :).

Extra  :)
Sin la intencion de molestar no c si pudieras resolver un ejercicio que hasta el dia de hoy no puedo resolverlo :-( :huh: :-(
si me das opcion a planteartelo lo coloco...

salu2

Littlehorse

Ya me estaba olvidando de este post  :P

Encontrar numeros de 3 digitos, cuya suma del cubo de los digitos sea el numero

#include <math.h>
#include <stdio.h>

int IsNumber(int num);
int main()
{
int num;
int i;

printf("Ingrese numero (100-999): ");
scanf("%d",&num);
printf("----\n");
for(i=100;i<=num;i++)
if(IsNumber(i)==i)
    printf("%d\n",i);
getchar();
getchar();
}   

int IsNumber( int numero)
{
int i;
int nums[3];
double sum=0;

for (i=2;i>=0;i--)
{
nums[i]=numero/pow(10,i);
nums[i]%=10;       
}     
for(i=0;i<3;i++)
   sum+=pow(nums[i],3);

return sum;
}



CitarIngrese numero (100-999): 999
----
153
370
371
407

Nuevo ejercicio:

Desarrollar una función que permita insertar en una secuencia de dígitos los caracteres guión
cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito.
Si la cantidad de dígitos no fuera múltiplo de 8 se deberá adicionar ceros por la izquierda.
Ejemplo:
472348237388539055823012 queda como 4723-4823 7388-5390 5582-3012.

CitarSin la intencion de molestar no c si pudieras resolver un ejercicio que hasta el dia de hoy no puedo resolverlo :-( :huh: :-(
si me das opcion a planteartelo lo coloco...

Dale ponelo asi lo vemos, pero primero haz el ejercicio que te pase  :).

Un saludo!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

micky123

Hola de nuevo y gracias por continuar...
mi respuesta a:

Desarrollar una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no fuera múltiplo de 8 se deberá adicionar ceros por la izquierda.
Ejemplo:
472348237388539055823012 queda como 4723-4823 7388-5390 5582-3012.



#include <stdio.h>
#include <conio.h>
#include <string.h>


void main(void)
{
   char v[35];
   int i, dim,f;
   clrscr();
   printf("Ingrese Numero ");
   fflush(stdin);
   fgets(v,35,stdin);
   dim=strlen(v);
   v[dim+1]=v[dim];
   for(f=dim;f>=1;f--)
   {
     v[f]=v[f-1];
   }
   for(i=1;i<=dim;i++)
   {  if(i%5==0)
      {
v[dim+1]=v[dim];
  for(f=dim;f>=i;f--)
  {
    v[f]=v[f-1];
  }
if(i%2==0)
{
  v[i]=' ';
}
else
{
  v[i]='-';
}
      }

   }
   dim=strlen(v);
   for(i=1;i<=dim;i++)
     printf("%c",v[i]);
   getch();
}


Bueno algo raro que pasa es que introduzco tus datos y me devuelve:
4723-4823 7388-5390 5582-3@

Porfa pido identificar mi error... gracias de antemano.



micky123

El ejercicio q nunca pude resolver es:

Dado un numero x (puede ser de cualquier cantidad de digitos) hallar todas las posibles combinaciones entre sus digitos:
ejemplo1:
x=1234
la salida seria:
1234
1243
1342
2341
2421
.....
123
132
213
231
321
312
....
12
21
31
13
23
32 todas las posibles permutaciones; podria ser x=124  ó x=64875

espero haberme dejado entender...
gracias de antemano
salu2

ghastlyX

Si te he entendido, es un simple backtracking muy sencillo de hacer.
Código (cpp) [Seleccionar]
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

void rec(int p, string& s, string r) {
    if (p == s.size()) {
        do {
            cout << r << endl;
        } while (next_permutation(r.begin(), r.end()));
        return;
    }
    rec(p + 1, s, r);
    r.push_back(s[p]);
    rec(p + 1, s, r);
}

int main() {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    rec(0, s, "");
}


Un saludo de ghastlyX ;)