Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#1251
Programación C/C++ / Re: RETOS C++
3 Octubre 2012, 22:31 PM
Cita de: Stakewinner00 en  3 Octubre 2012, 21:22 PMA parte de eso funciono asi k te sumo los puntos
EHHHHHH, que yo había puesto en un post anterior la solución a la pirámide y al del cumpleaños...¡¡¡¡¡ no hay puntos para mí  GRRMMMMM!!!!!!!!!!
#1252
Citar¿es así su funcionamiento? sino es así ¿cual es su funcionamiento?
Creo que no es así, si ejecutas el programa verás que total sigue valiendo 8. Otra cosa es que hagas:
#include <iostream>
using namespace std;

int main ()
{
    double promedio;
    int total=8;
    int contadorCalif=3;
    promedio = static_cast <int> (total) / contadorCalif;
    cout << promedio << endl;
}

Veras que promedio vale 2, en lugar de 2.66667.
#1253
CitarTe dejo como ejemplo la sucesión de fibonacci, que empieza con 1 y 1 y cada número es la suma de los dos anteriores:
1,1,2,3,5,8,13,21,34,55,.....:

#include <stdio.h>

long int fibonacci(long int  k);
int main(void)
{
   int i;
   for ( i=0; ;i++ )
   {
       if (fibonacci(i)>10000)  /*<==cuando supere este valor se para*/
               break;
       printf ("%ld    ",fibonacci(i));
   }
       printf ("%ld",fibonacci(i));
   return 0;
}

long int fibonacci(long int  k)
{
   if (k < 2)
       return 1;
   else
       return fibonacci(k - 1) + fibonacci(k - 2);
}
/*
         Por ejemplo, si llamo a  fibonacci(6) esto es lo que sucede:
                           6    <==llamada a fibonacci(6),este llama fibonacci(5)+fibonacci(4)
                                                   llamada a fibonacci(5),este llama fibonacci(4)+fibonacci(3)
                5 ...................... 4 <==
                                                   Y llamada a fibonacci(4),este llama fibonacci(3)+fibonacci(2)
                                                       y así sucesivamente.....fíjate que
           4.......3              3.........2      en cada llamada se resta uno hasta
                                                           que es uno.
       3.......2 2.....1       2.......1        1

   2.......1   1 1     1       1       1           1
   1   +   1 + 1+1  +  1 +     1  +    1    +      1 =8 =fibonacci(6)

Como dice tu libro "la primera llamada que se hizo,en este caso fibonacci(6), es la ultima en ejecutarse"*/


Otro ejemplo más simple que calcula el factorial:
#include <stdio.h>
long fact(int n)
{
    if (n==1)
        return 1;
    return n * fact (n-1);
}
main() {
int num;
printf("Introduzca un número entero: ");
scanf("%d", &num);
printf("Su factorial es: %ld\n", fact(num));
}
/*por ejemplo: num=6 ==>fact (6))

return:6*fact (5)
    return:6*5*fact (4)
         return:6*5*4*fact (3)
                return:6*5*4*3*fact (2)
                    return:6*5*4*3*2*fact (1)
                        return:6*5*4*3*2*1

PD:tú código no funciona.
Saludos!.
#1254
Programación C/C++ / Re: RETOS C++
3 Octubre 2012, 20:21 PM
[quote ]
11- Un programa que al introducirle tu data de nacimiento te diga los días, meses y semanas que faltan para tu próximo cumpleaños  [/quote]
Bueno, creo que ha salido:
/*Programa que al introducirle tu data de nacimiento
te diga los días, meses y semanas
que faltan para tu próximo cumpleaños*/

#include <iostream>
using namespace std;

int main()
{
    int i,dias=0,mes_cumple,mes,dia,dia_cumple,dias_mes [12]={31,29,31,30,31,30,31,31,30,31,30,31};

    cout << "DIA CUMPLE=   ";cin >>dia_cumple;
    cout << "MES CUMPLE=   ";cin >>mes_cumple;
    cout << "DIA ACTUAL=   ";cin >>dia;
    cout << "MES ACTUAL=   ";cin >>mes;
    if (mes_cumple>mes )
        {
            for (i=mes;i<mes_cumple-1;i++)
                dias+=dias_mes [i];
            dias+=dias_mes [mes-1]-dia+dia_cumple;
            cout << "dias = "<<dias;

            cout << "   meses = "<<mes_cumple-mes-1;
        }
     else if ((mes_cumple<mes) || (mes_cumple==mes && dia_cumple<dia))
        {
            for (i=mes;i<12;i++)
                dias+=dias_mes [i];
            for (i=0;i<mes_cumple-1;i++)
                dias+=dias_mes [i];
            dias+=dias_mes [mes-1]-dia+dia_cumple-1;
            cout << "dias = "<<dias-1;
            if (mes_cumple==mes && dia_cumple<dia)
                cout << "   meses = 11";
            else
                cout << "   meses = "<<12-mes+mes_cumple-1;
        }
    else if (mes_cumple==mes && dia_cumple>dia)
        cout << "dias = "<<dia_cumple-dia<< "   meses =0";
    cout << "   semanas =  "<<dias/7;
    return 0;
}

Saludos!.
#1255
Cita de: Xafi en  3 Octubre 2012, 13:01 PM
Código (cpp) [Seleccionar]
#define f(x) cout << x;
CitarExacto. Y lo que te comenté, cuando el compilador va a a ejecutar el código, previamente hace una sustitución de todos los define por sus valores correspondientes. Es decir,antes de ejecutar el código,  donde tengas puesto f() él pondrá  cout << x.
En el enlace http://es.wikipedia.org/wiki/C%C3%B3digo_objeto creo que correspondería a Traducción
#1256
Cita de: Caster en  3 Octubre 2012, 07:05 AM
lo de los punteros y esas cosas vienen explicadas mas adelante, asi que las vere cuando toque
Aunque te toque más adelante procura guardar los ejemplos que te postee, son clarificadores e incluyen aritmética de punteros. Por cierto, ¿Qué libro estas siguiendo para el estudio del C?.
Gracias y un saludo.
#1257
Según tengo entendido, al compilar el programa, se sustituye en el código los define por sus expresiones correspondientes. La ventaja que le veo es a la hora de modificar un código, que con algunas variables o expresiones sólo hay que cambiarlas una vez en el define , sin tener que recorrer el código en busca de ellas para cambiarlas en cada sitio
P;D Con esa foto podrías llamarteWalter White en lugar de Xafi
..... es una broma ehhhhhh.
Saludos!, y perdon por el post anterior, le dí a una tecla y se publico antes de escribir. ;-) ;-) ;-) ;-) ;-) ;-)
#1258
Cita de: Caster en  1 Octubre 2012, 20:40 PM
Los punteros los tratan mas adelante en el libro que estoy leyendo, asi que voy a dejarlos para cuando toque, he compilado el codigo que has dejado
Sólo necesitas saber ahora que puedes pasar a una función un parámetro o variable  por valor -que es lo que has visto hasta ahora- y por referencia -que hace uso de punteros y es lo que te queda por ver-. La diferencia fundamental es que en el paso por valor, en la función donde está declarada la variable, su valor no cambia aún después de "pasar" por la función, mientras que en el paso por referencia sí puede cambiar el valor de la variable.
Te dejo el código funcionando para los dos métodos:
#include <stdio.h>

void modificar(int a)
{
a *= 3;
printf("\n\na = %d (desde la funcion, modificando el valor)", a);
return ;
}
void modificar1(int *a)
{
*a *= 3;
printf("\n\na = %d (desde la funcion, modificando el valor)", *a);
return ;
}
int main()
{

int *a = 2;
   printf("\n\nPaso por valor\n");
printf("\na = %d (desde main, antes de llamar a la funcion)", a);
modificar(a);
printf("\n\na = %d (desde main, despues de llamar a la funcion por valor)", a);
printf("\n\nPaso por referencia con puntero\n");
printf("\na = %d (desde main, antes de llamar a la funcion)", a);
modificar1(&a);
printf("\n\na = %d (desde main, despues de llamar a la funcion por referencia)", a);

printf("\n\na = %d (desde main, OTRA VEZ antes de llamar a la funcion)", a);
modificar1(&a);
printf("\n\na = %d (desde main, despues de llamar a la funcionpor referencia )", a);
getchar();
       return 0;
}

Por si te animas a empezar  a leer sobre punteros, aquí va un ejemplo:

#include <stdio.h>
int main() {
   int i=0,*puntero,*pmat;
   int valor = 52;
   int mat [10];
   mat[0]=10, mat[1]=30,mat[2]=50,mat[3]=60;
   puntero = &valor;
   printf("puntero apunta a %p\n", puntero);
   printf("la direccion de memoria de &valor es %p\n", &valor);
   printf("el valor de 'valor' es %d\n", valor);
   printf("el valor de aquello a lo que apunta *puntero es %d\n", *puntero);
   *puntero += 25;
   printf("el valor de aquello a lo que apunta *puntero += 25 es %d\n\n\n", *puntero);

   pmat=&mat[0] ;//<=== pmat "apunta=da" a la direccion de mat[0]
   printf("pmat apunta a la direccion %p\n\n", pmat);
   printf("el valor de aquello a lo que apunta *pmat=mat[0] es %d\n\n", *pmat);//10

   i=*++pmat;//<=== pmat "apunta" a la direccion de mat[1]
   printf("el valor de aquello a lo que apunta *++pmat=mat[1] es %d\n\n", i);//30

   i=*pmat+1;
   printf("el valor de aquello a lo que apunta *pmat+1=30+1 es %d\n\n", i);//31

   i=*(pmat+1);//<=== pmat "apunta" a la direccion de mat[2]
   printf("el valor de aquello a lo que apunta *(pmat+1)=mat[2] es %d\n\n", i);//50

   i=*++pmat;//<=== pmat "apunta" a la direccion de mat[2];
   printf("el valor de aquello a lo que apunta *++pmat=mat[2] es %d\n\n", i);//50

   i=*++pmat;//<=== pmat "apunta" a la direccion de mat[3]
   printf("el valor de aquello a lo que apunta *++pmat=mat[3] es %d\n\n", i);//60

   i=*pmat+5;//<=== pmat "apunta" a la direccion de mat[3]+5
   printf("el valor de aquello a lo que apunta *pmat+5=mat[3]+5 es %d\n\n", i);//65

   return 0;
}

Saludos!
#1259
Programación C/C++ / Re: RETOS C++
2 Octubre 2012, 18:33 PM
12- Un programa que haga diversos rombos de 2 * n -1 lineas como en el siguiente ejemplo  

Entrada: 4
SAlida:  
   *
 ***
*****
*******
*****
 ***
  *

25 puntos
#include <iostream>
using namespace std;
int main()
{
int n,fila,col;
cout << "tamanyo de la piramide: "<<endl;
cin >> n;
   for(fila=1;fila<=n;fila++)
   {
       for(col=1;col<=n-fila;col++)
           cout<<" ";
       for(col=1;col<=2*fila-1;col++)
           cout<<"*";
   cout<<endl;
           }
/* Escritura de la parte inferior */
   for(fila=n-1;fila>=1;fila--)
   {
       for(col=1;col<=n-fila;col++)
           cout<<" ";
       for(col=1;col<=2*fila-1;col++)
           cout<<"*";
   cout<<endl;
   }
}


__

EI: juntando mensajes.

1-Un programa que cuente los caracteres que tiene un texto previamente introducido por el usuario (parece más fácil de lo que es)

ejemplo de entrada: "ho la" ejemplo salida:el texto tiene 5 caracteres

1 punto
Incluyendo espacios en blanco:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdio.h>
using namespace std;
main()
{
    int i;
    char cadena [200];
    gets (cadena);
    for (i=0;cadena [i]!='\0';i++) ;
    cout << "El texto tiene " << i << " caracteres." << endl;
    return 0;
}
#1260
Cita de: Ivs_mx en  2 Octubre 2012, 03:49 AM
Hola a todos, alguien podría disipar mi duda a que se debe que me marque el error en esta parte por favor?, se los agradezco mucho y tengan buen día.
Lo estuve mirando y me pareció mejor así:
#include <stdio.h>

int main()
{
   int num_mes=0,anyo;
   char mes [12][10]={"ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO","JULIO","AGOSTO","SEPTIEMBRE","OCTUBRE","NOVIEMBRE","DICIEMBRE"};
   printf("MES =   ");scanf ("%d",&num_mes);
   printf("ANYO =   ");scanf ("%d",&anyo);
   switch (num_mes)
   {
       case 1: case 3: case 5: case 7: case 8: case 10: case 12:
       printf("31 / %s / %d\n" ,mes [num_mes-1],anyo);
       break;
       case 4: case 6: case 9: case 11:
       printf("30 / %s / %d\n" ,mes [num_mes-1],anyo);
       break;
       case 2:
       if (( anyo % 4==0) && (anyo % 100 != 0) || (anyo % 400==0)  )
           printf("29 / %s / %d\n" ,mes [1],anyo);
       else
           printf("28 / %s / %d\n",mes [1],anyo);
       break;
       default:
       printf ("\nEl mes no es valido");
       break;
   }
   return 0;
}

O como tú lo tenías, corregido más o menos:
#include <stdio.h>

int main()
{
    int num_mes=0,anyo;
    printf("MES =   ");scanf ("%d",&num_mes);
    printf("ANYO =   ");scanf ("%d",&anyo);
    switch (num_mes)
    {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
        printf("31 / %d / %d\n" ,num_mes,anyo);
        break;
        case 4: case 6: case 9: case 11:
        printf("30 / %d / %d\n" ,num_mes,anyo);
        break;
        case 2:
        if (( anyo % 4==0) && (anyo % 100 != 0) || (anyo % 400==0)  )
            printf("29 / 2 / %d\n" ,anyo);
        else
            printf("28 / 2 / %d\n",anyo);
        break;
        default:
        printf ("\nEl mes no es valido");
        break;
    }
    return 0;
}

Saludos!