RETOS C++

Iniciado por Stakewinner00, 20 Septiembre 2012, 18:20 PM

0 Miembros y 1 Visitante están viendo este tema.

ankora45

#80
ya esta arreglado xD era un error en las operaciones siento que el codigo sea tan largo xD pero =mente vale jaja
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
   int mesn;
   int mes;
   int dian;
   int dia;
   cout<<"introduce el mes al que estamos "<<endl;
   cin>>mes;
   cout<<"introduce el dia en el que estamos"<<endl;
   cin>>dia;
   cout<<"introduce el mes en el que naciste "<<endl;
   cin>>mesn;
   cout<<"introduce el dia que nacistes "<<endl;
   cin>>dian;
   int mm = mesn-mes;
   int mmm = mes-mesn;
   int dd = 30*mm+dian-dia;
   int dd2 = 30*mm+dia-dian;
   int ddd = 30*mmm-dia-dian;
   int ddd2 = 30*mmm-dian-dia;
   if (mesn>mes)
   {
         if (dian>dia)
            {
               cout<<"te quedan "<<mesn-mes<<" meses o "<<dd<<" dias o "<<dd/7<<" semanas para tu cumple"<<endl;
            }
        else
            {
               cout<<"te quedan "<<mesn-mes<<" meses o "<<dd2<<" dias o "<<dd2/7<<" semanas para tu cumple"<<endl;
            }
   }
   else
   {
         if (dian>dia)
            {
               cout<<"te quedan "<<mes-mesn+12<<" meses o "<<ddd<<" dias o "<<ddd/7<<" semanas para tu cumple"<<endl;
            }
        else
            {
               cout<<"te quedan "<<mesn-mes+12<<" meses o "<<ddd2<<" dias o "<<ddd2/7<<" semanas para tu cumple"<<endl;
            }
   }
   return 0;
}


espero mis pp con ilu jaja
Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro

overxfl0w13

#81
RETO 10:


Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main(int argc,char* argv)
{
   string palabra,invertida="";
   cout << "Inserta la palabra a invertir" << endl;
   cin >> palabra;
   for(int x = palabra.length()-1;x>=0;x--)
   {
       invertida = invertida + palabra[x];
   }
   cout << invertida << endl;
   return 0;
}



RETO 1

Código (cpp) [Seleccionar]

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
   char palabra[100];
   cin.getline(palabra,100);
   cout << strlen(palabra) << endl;
   return 0;
}


RETO 2

Código (cpp) [Seleccionar]

#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char* argv)
{
   ifstream archivo("archivo.txt");
   string texto;
   while(!archivo.eof())
   {
       getline(archivo,texto);
       cout << texto << endl;
   }
   archivo.close();
   return 0;
}


RETO 3

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
int main(int argc, char* argv)
{
   int numeros[3];
   cout << "Inserta 4 numeros" << endl;
   cin >> numeros[0] >> numeros[1] >> numeros[2] >> numeros[3];
   if(numeros[0] > numeros[1] && numeros[0] > numeros[2] && numeros[0] > numeros[3])
   {
       cout << "El mayor es: " << numeros[0] << endl;
   }
   else
   {
       if(numeros[1] > numeros[0] && numeros[1] > numeros[2] && numeros[1] > numeros[3])
       {
           cout << "El mayor es: " << numeros[1] << endl;
       }
       else
       {
           if(numeros[2] > numeros[0] && numeros[2] > numeros[1] && numeros[2] > numeros[3])
           {
               cout << "El mayor es: " << numeros[2] << endl;
           }
           else
           {
               if(numeros[3] > numeros[0] && numeros[3] > numeros[2] && numeros[3] > numeros[1])
               {
                   cout << "El mayor es: " << numeros[3] << endl;
               }
           }
       }
   }
   return 0;
}


RETO 11

Código (cpp) [Seleccionar]

#include <iostream>
#include <time.h>
using namespace std;
int main(int argc,char* argv)
{
   int mesNacimiento,diaNacimiento;
   time_t fecha;
   struct tm *datos;
   time(&fecha);
   datos = localtime(&fecha);
   cout << "Inserta el mes y el dia de nacimiento separados por espacio" << endl;
   cin >> mesNacimiento >> diaNacimiento;
   if((mesNacimiento - (datos->tm_mon+1)) < 0)
   {
       cout << "Los meses que quedan para tu cumplea\xA4os son: " << (mesNacimiento - (datos->tm_mon+1)) + 12 << " los dias: " << ((mesNacimiento-(datos->tm_mon+1)) + 12) * 30 << " y las semanas: " << ((mesNacimiento-(datos->tm_mon+1)) + 12) * 4 << endl;
   }
   else
   {
       cout << "Los meses que quedan para tu cumplea\xA4os son: " << mesNacimiento - (datos->tm_mon+1) << " los dias: " << (mesNacimiento-(datos->tm_mon+1)) * 30 << " y las semanas: " << (mesNacimiento-(datos->tm_mon+1)) * 4 ;
   }

   return 0;
}
[/url]

do-while

#82
11. Lo he probado y me funciona. De todas formas no he probado todos los casos (es imposible, o me lo parece a mi). Si encontrais algun error en el codigo u os falla para alguna fecha avisad.

¡Saludos!

¡Ah! No he puesto muchos comentarios. Ahora repaso el codigo y añado los comentarios que crea que faltan para que el codigo sea claro o seguible.

¡Saludos!

Código (cpp) [Seleccionar]

#include <iostream>
#include <ctime>

#define bisiesto(X) (((!((X) % 4)) && ((X) % 100)) || ((!((X) % 100)) && (!((X) % 400))))

using namespace std;

class Fecha
{
    public:
        Fecha();
        Fecha(int dia, int mes, int año);
        Fecha(const Fecha &original);

        bool set(int dia, int mes, int año);
        bool setD(int dia);
        bool setM(int mes);
        bool setA(int año);

        int getD() const;
        int getM() const;
        int getA() const;

        //calcula la diferencia en dias entre la fehca mayo y la menor
        friend unsigned long dif(Fecha &f1, Fecha &f2);

        //compara fechas -1 si la primera es menor 0 si son iguales y 1 si la segunda es mayor
        friend int cmp(Fecha &f1, Fecha &f2);

    private:

        //calcula los dias hasta el año cero (si año < 0) o desde el año cero (si año >= 0)
        long int dias() const;

        int dia;
        int mes;
        int año;
};

Fecha::Fecha()
{
    //struct proporcionado por ctime para manejar fechas
    struct tm *fecha;

    //tipo de dato definido en ctime para manejar fechas
    time_t t;

    t = time(NULL);

    fecha = localtime(&t);

    dia = fecha->tm_mday;
    mes = fecha->tm_mon + 1; //0 <= tm_mon <= 11
    año = fecha->tm_year + 1900; //tm_year es medido desde 1900
}

Fecha::Fecha(int d, int m, int a)
{
    int dias[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    año = a;

    if(m < 1 || m > 12)
        m = 1;

    if(m == 2)
    {
        if(d > 29)
            d = 1;
        if(d == 29 && !bisiesto(año))
            d = 1;
    }
    else
        if(d > dias[m - 1])
            d = 1;

    mes = m;
    dia = d;
}

Fecha::Fecha(const Fecha &original)
{
    this->dia = original.dia;
    this->mes = original.mes;
    this->año = original.año;
}

bool Fecha::set(int d, int m, int a)
{
    //copia miembro a miembro (no hay problemas ya que no hay punteros)
    *this = Fecha(d,m,a);

    return true;
}

bool Fecha::setD(int d)
{
    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    if(d < 1)
        return false;

    if(mes == 2)
    {
        if(d > 29)
            return false;

        if(d == 29 && !bisiesto(año))
            return false;
    }
    else
        if(d > diasmes[mes - 1])
            return false;

    dia = d;

    return true;
}

bool Fecha::setM(int m)
{
    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    if(m < 1 || m > 12)
        return false;

    if(m == 2)
    {
        if(dia > 29)
            return false;

        if(dia == 29 && !bisiesto(año))
            return false;
    }
    else
        if(dia > diasmes[m - 1])
            return false;

    mes = m;

    return true;
}

bool Fecha::setA(int a)
{
    if(mes == 2 && dia == 29 && !bisiesto(a))
        return false;

    año = a;

    return true;
}

int Fecha::getD() const
{
    return dia;
}

int Fecha::getM() const
{
    return mes;
}

int Fecha::getA() const
{
    return año;
}

unsigned long dif(Fecha &f1, Fecha &f2)
{
    //si la primera fecha es menor devolvemos la diferencia evaluada en orden inverso
    if(cmp(f1,f2) < 0)
        return dif(f2,f1);

    return f1.dias() - f2.dias();
}

long int Fecha::dias() const
{
    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    unsigned long ndias = 0;

    //pasamos la fecha a dias desde el año cero o hasta el año cero:
    ndias = 365 * año;

    for(int i = 0 ; i < mes ; i++)
        ndias += diasmes[i];

    ndias += dia;

    //arreglamos los bisiestos:
    if(año < 0)
    {
        if(mes > 2 || (mes == 2 && dia == 29))
        {
            for(int i = año + 1 ; i < 0 ; i++)
                if(bisiesto(i))
                    ndias++;
        }
        else
        {
            for(int i = año ; i < 0 ; i++)
                if(bisiesto(i))
                    ndias++;
        }
    }
    else
    {
        if(mes > 2)
        {
            for(int i = año ; i >= 0 ; i--)
                if(bisiesto(i))
                    ndias++;
        }
        else
        {
            for(int i = año - 1 ; i >= 0 ; i--)
                if(bisiesto(i))
                    ndias++;
        }
    }

    return ndias;
}

int cmp(Fecha &f1,Fecha &f2)
{
    if(f1.año < f2.año)
        return -1;

    if(f1.año > f2.año)
        return 1;

    if(f1.mes < f2.mes)
        return -1;

    if(f1.mes > f2.mes)
        return 1;

    if(f1.dia < f2.dia)
        return -1;

    if(f1.dia > f2.dia)
        return 1;

    return 0;
}

void leer_datos_cumpleanios(Fecha &cumpleanios)
{
    int dia,mes,año;

    //ponemos el dia a uno para evitar errores estableciendo el mes
    cumpleanios.setD(1);

    cout << "Introducir a" << (char)164 << "o de nacimiento: ";
    cin >> año;

    //si el primer caracter no es numerico no se leeran datos y cin dara error
    while(cin.fail())
    {
        //reseteamos los flags de cin
        cin.clear();

        //y terminamos de leer los datos de la entrada
        while(cin.get() != '\n');

        cout << "Introducir a" << (char)164 << "o de nacimiento: ";
        cin >> año;
    }

    //terminamos de leer los datos de la entrada
    while(cin.get() != '\n');

    cumpleanios.setA(año);

    do{
        cout << "Introducir mes de nacimiento (1 - 12): ";
        cin >> mes;

        while(cin.fail())
        {
            cin.clear();

            while(cin.get() != '\n');

            cout << "Introducir mes de nacimiento (1 - 12): ";
            cin >> mes;
        }

        while(cin.get() != '\n');

    }while(!cumpleanios.setM(mes));

    do{
        cout << "Introducir dia de nacimiento: ";
        cin >> dia;

        while(cin.fail())
        {
            cin.clear();

            while(cin.get() != '\n');

            cout << "Introducir dia de nacimiento: ";
            cin >> dia;
        }

        while(cin.get() != '\n');

    }while(!cumpleanios.setD(dia));
}

//se trata de ajustar los datos de la fecha de nacimiento al siguiente cumpleaños
void ajustar_datos_cumpleanios(Fecha &cumpleanios)
{
    Fecha actual;

    //si el mes del cumpleaños es menor que el actual, hay que pasar al año siguiente
    if(cumpleanios.getM() < actual.getM())
    {
        if(cumpleanios.getM() == 2 && cumpleanios.getD() == 29 && !bisiesto(actual.getA() + 1))
        {
            cumpleanios.set(1,3,actual.getA() + 1);
        }
        else
        {
            cumpleanios.setA(actual.getA() + 1);
        }
    }
    if(cumpleanios.getM() == actual.getM())
    {
        //Si el mes del cumpleaños es el mismo que el actual y el dia es menor que el actual, hay que pasar al año siguiente
        if(cumpleanios.getD() < actual.getD()) //no hay problemas con bisiestos
            cumpleanios.setA(actual.getA() + 1);
        else //en otro caso aun no se ha superado la fecha de cumpleaños en el año actual
            cumpleanios.setA(actual.getA());

    }
    else//en otro caso aun no se ha superado la fecha de cumpleaños en el año actual
        cumpleanios.setA(actual.getA());

}

int main(int argc, char *argv[])
{
    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    Fecha actual,cumpleanios;
    unsigned long diferencia;

    leer_datos_cumpleanios(cumpleanios);
    ajustar_datos_cumpleanios(cumpleanios);

    diferencia = dif(actual,cumpleanios);

    cout << "Faltan " ;

    int contador = 0;

    //vamos contando los meses considerando que pasa un mes al pasar tantos dias como tenga el mes que consideramos
    //ej: de enero a febrero 1 mes es que pasen 31 dias, de febrero a marzo 28 ...
    for(int i = actual.getM() - 1 ; diferencia >= diasmes[i % 12] ; i++)
    {
        diferencia -= diasmes[i % 12];
        contador++;
    }

    cout << contador << " meses, " << (diferencia / 7) << " semanas y " << (diferencia % 7) \
    << " dias para tu cumplea" << (char)164 << "os." << endl;

    cout << endl;
    cout << "ACLARACION RECUENTO MESES:" << endl;
    cout << "De enero a febrero un mes son 31 dias" << endl;
    cout << "De febrero a marzo un mes son 28 dias" << endl;
    cout << "De marzo a abril un mes son 31 dias" << endl;
    cout << "De abril a mayo un mes son 30 dias" << endl;
    cout << "..." << endl;

    return 0;
}
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Stakewinner00

SI tienen más ideas de retos díganlo k ami ya se me acaban las ideas.

PD:YA actualize los puntos

overxfl0w13

#84
Ultimo reto

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("Entrada: ");
scanf("%d", &n);
if(n > 0)
{
   char *v = new char[2*n-1];
   for(int i=0; i<2*n-1; i++) v[i] = ' ';
   int i=n-1, j=n-1;
   while(i >= 0)
   {
       v[i--] = '*';
       v[j++] = '*';
       printf("%s\n", v);
   }
   while(i != j)
   {
       v[++i] = ' ';
       v[--j] = ' ';
       printf("%s\n", v);
   }
}
return 0;
}
}


25 puntitos más bonus ;)
[/url]

do-while

#85
12.
Código (cpp) [Seleccionar]

//linea de comandos nombreprograma numero
//salida: un rombo de 2 * n - 1 lineas

#include <cstdio>

using namespace std;

unsigned int absoluto(int x)
{
   return (x < 0 ? -x : x);
}

int main(int argc, char *argv[])
{
   int n;

   if(argc != 2)
   {
       printf("%s numero\n",argv[0]);
       return -1;
   }

   for(int i = 0 ; argv[1][i] ; i++)
       if(argv[1][i] < '0' || argv[1][i] > '9')
       {
           printf("%s numero\n",argv[0]);
           return -1;
       }

   sscanf(argv[1],"%d",&n);

   for(int i = 0 ; i < 2 * n - 1 ; i++)
   {
       printf("%*s",absoluto(n - (i + 1)) + 1, " ");

       for(int j = 0 ; j < 2 * (n - 1 - (absoluto(n - 1 - i))) + 1 ; j++)
           printf("*");

       printf("\n");
   }

   return 0;
}


PD: He corregido el de las fechas, que habia un gran error.

¡Saludos!

EI: juntando mensajes.

Cita de: Stakewinner00 en 21 Septiembre 2012, 16:55 PM
ami no me salta ningun error pero no me habre ningun archivo ya probe de crear un archivo con ese nombre y camiar el nombre pero no muestra el texto del documento

El problema dice leer el contenido de un archivo. No que haya que mostrarlo por pantalla.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

zonahurbana

Cita de: Puntoinfinito en 20 Septiembre 2012, 19:28 PMPongo el código de la 3 simplificado:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
int a = 0, b = 0, c = 0, d = 0, mayor = 0;
cout << "Ingresa los 4 numeros por espacio : ";
cin >> a >> b >> c >> d;
if ((a > b) && (a > c) && (a > d))
mayor = a;
if ((b > a) && (b > c) && (b > d))
mayor = d;
if ((c > b) && (c > a) && (c > d))
mayor = c;
if ((d > b) && (d > c) && (d > a))
mayor = d;
cout << "Numero mayor : " << mayor;
cin.sync();
cin.get();
return 0;
}


Mejoró más ehh xDD

Pienso que podría hacerse también de este modo:
#include <iostream>
#define N 4
using namespace std;
int main()
{
    int nros[N]; int mayor=NULL;
    cout<<"\t\tMayor de "<<N<<" números.\n"<<endl;
    for(int x=0;x<N;x++)
    {
        cout<<"Ingrese un valor para nros["<<x<<"]: ";
        cin>>nros[x]; if(nros[x]>mayor)mayor=nros[x];
    }cout<<"Mayor número encontrado: "<<mayor;
    cin.sync(); cin.get(); return 0;
}


Pero, ¿podrían explicarme cómo es que funcionan cin.sync(); cin.get();?
Antes usaba system("pause"); pero según leí en el foro, no es recomandable.
¿cin.sync limpia el buffer?
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

Stakewinner00

zonahurbana   

a.cpp:6: warning: converting NULL to non-pointer type

yo utilizaria la funcion max(); de la libreria algortihm que te estalvia algunos if.

overxfl0w13

#88
stake, espero los puntos nuevos :)
[/url]

dato000

Si que han hecho avances por aqui, literalmente, me muero de la envidia, me entere muy tarde.

Quiero participar!!! Que retos hacen falta???

voy a resolverlos todos!! pero viendo que ya ha hecho muchos, pues sera puro ensayo y error XDDDD.

Que más falta caballeros, hoy quiero programar.