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

#951
Cita de: amchacon en  9 Marzo 2013, 12:27 PM
Cambia de manual, cualquier manual que icentive el uso de conio y de void main denota la poca habilidad del autor.

El error que ocurre es algo frecuente en las entradas en C (menos mal que yo me pasé a C++). Lo normal es que los datos se lean enteros pero a veces se cuela basurilla... Prueba poner esto después del ultimo scanf:
..........................................
PD: Un consejo, yo no empezaría con C sino que me iría a C++... Hay muchas más funciones, herramientas y menos limitaciones... Además cuando ya lleves un buen nivel, podrás empezar con la programación orientada a objetos sin problemas.

Es como ser del Atlético de Madrid se es porque se es. Si es por eso y por la comodidad de tener más funciones "a mano" mejor te pasas a Pyttho, Ruby o el mismo basic. Sé que es más "duro" tener que implementar uno mismo ciertas funciones que da ya hechas el C++ pero eso "curte" como programador y como dije es como ser del Atleti.

Y en este caso la "basurilla" se elimina dejando simplemente un espacioen blanco en los scanf, tipo:


scanf(" %f",&si);

CitarPor cierto no acabo de entender esto, no hace nada?:

scanf("%[^\n]",nom);


Es un formato del scanf, cosas del bendito C, que permite entrar una cadena con espacios en blanco, aunque debería indicar con un número la cantidad de carateres a tomar. Haría la misma función de esa manera que fgets.



CitarPor otro lado:
gets(nom);

Mucho cuidado con gets, si insertas un texto mayor que la variable char (en este caso 30) podría dar lugar a errores extraños... De hecho no se recomienda usar esa función.

Es más aconsejable, como bien dice amchacon, el uso de fgets:

fgets(nom,31,stdin);

Saluditos!. ....

P.D: Además de conio te sobran las librerías math y windows.
#952
Cita de: ThronerAXE en  8 Marzo 2013, 03:49 AM
...............................................
lo que me estaba causando el problema era la libreria conio.h pero entonces si decidiera meter este codigo con Builder, podria usar conio.h y la funcion fflush(stdin) sin problemas?.

Cambiando la variable k por i, como te comentó rir, el programa runciona en principio O.K.

Lo que sucede es que en sentido estricto están de mas la librería conio y el uso de getch por no formar parte del estandar del C, así como el uso de la función fflush (stdin) por poder provocar resultados imprevistos. Más información en|Lo que no hay que hacer en C/C++. Nivel basico|

Saluditos!. ...
#953
Cita de: foreground en  7 Marzo 2013, 21:34 PM
Al final solo cambie los operadores como dijo naderST y el programa funciono perfectamente.

.........................


Creo que estas equivocado en cuanto a que ya funciona bien , fíjate en esta entrada:

Código (cpp) [Seleccionar]
Introduzca el dia, el mes y el anyo
6
6
2012
Presione una tecla para continuar . . .


Ni correcto ni incorrecto ni nada.

Uno de los problemas básicos está que en lugar de || ha de ir && tanto en años como en días. Por ejemplo 32 es mayor que 1 con lo que cumple la condición si está en un ||. Y 1800 cumple con la condición al ser menor que 2050.

Además te falta "encadenar" los condicionales.Se puede comprobar primero el año y si cumple se comprueba el día y mes, que a su vez se puede simplificar.

Y claro falta la opción de "fecha incorrecta" y para no cambiártelo mucho tipo rir, magistral como siempre, pero que a veces está a "demasiada altura", quedaría algo como esto:


Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
   int dia,mes,anyo;
   printf("Introduzca el dia, el mes y el anyo \n");
   scanf("%d%d%d", &dia,&mes,&anyo);
   if(anyo>=1900 && anyo<=2050){
       if((dia>=1 && dia<=31 ) &&  (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12))
           printf("Fecha correcta \n");
       else if((dia>=1 && dia<=30)  && mes!=2)
           printf("Fecha correcta \n");
       else if((dia>=1 && dia<=28)   && mes==2)
           printf("Fecha correcta \n");
       else
           printf("Fecha incorrecta \n");
   }
   else printf("Fecha incorrecta \n");
   system("PAUSE");
   return 0;
}


Saluditos!
. ....

P.D: Mírate lo que te comentaron del switch,
#954
Cita de: amchacon en  7 Marzo 2013, 20:00 PM
Mmm, de acuerdo tu ganas :)

Desde el punto de vista de la memoria, creo que es más fácil situar un elemento nuevo que situar un array. Por eso lo decía.

Ahora, queda muy bonito ^^


El problema es que con tu código no se pordría ordenar, igual que con mi primer código. Pero como dijiste lo de lo complicado que sería crear un array de manera dinámica y sin tener de antemano la dimensión es por lo que he puesto este segundo código. Vamos que me "picastes", :laugh:

Saluditos campeón"!.
...
#955
Cita de: amchacon en  6 Marzo 2013, 21:00 PM
......................................
Te aventuro a que intentes crear en C el siguiente programa:

- Dado una lista de numeros terminados con un cero, calcula el numero mayor.

No puedes determinar el tamaño del array hasta que hayas terminado de guardar todos los números. Con array estáticos no puedes y con array dinámicos da bastantes problemas.


Aunque para calcular el mayor no hace falta punteros o arrays, para que no se diga que con arrays dinámicos hay grandes problemas:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(void){
   int i=0,n=1;
   float *num,mayor=-FLT_MAX ;
   num = (float *) malloc (10*sizeof(float));
   while (1) {
       printf ("Introduzca el numero %d : ",i+1);
       scanf("%f",&num[i]);
       if (num[i]==0)
           break;
       if (i>= 9*n){
           num = (float *) realloc (num,sizeof(float)*(i+10));
           n++;
           if ( num == NULL )  {
                           printf("\nOut of memory!\n");
                           return -1;
           }
       }
       if (num [i]> mayor)
           mayor = num[i];
       i++;
   }
   printf ("\n\nEl mayor es: %g",mayor);
return EXIT_SUCCESS;
}



Saluditos!. ....

P.D: Pongo 10 para que se pueda "ver" que el realloc funciona.
#956
Cita de: OmarHack en  7 Marzo 2013, 01:00 AM
Voy a probar el code block entonces..............

http://www.codeblocks.org/downloads/binaries#windows

Bájate el más "pesado" que incluye el editor y el compilador propiamente dicho.

Saluditos!. ...
#957
Cita de: amchacon en  5 Marzo 2013, 20:59 PM
Otra forma de implementarlo sin vectores. Gracias a la magia de los punteros:

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

struct Eslabon
{
   int N;
   Eslabon* Anterior;
};
int main()
{
   Eslabon* Numero = (Eslabon*)malloc(sizeof(Eslabon));
   ...........................................................
[/quote]


amchacon ¿has usado algún modo especial al compilar. porque me saltan múltiples errores y en modo no pedantic?:

|8|error: expected specifier-qualifier-list before 'Eslabon'|
||In function 'main':|ntitled38.
|12|error: 'Eslabon' undeclared (first use in this function)|
12|error: (Each undeclared identifier is reported only once|
|12|error: for each function it appears in.)|
|12|error: 'Numero' undeclared (first use in this function)|
|12|error: expected expression before ')' token|
|13|error: 'Buffer' undeclared (first use in this function)|
|28|error: expected expression before ')' token|
||=== Build finished: 8 errors, 0 warnings (0 minutes, 0 seconds) ===|

Y rn PellesC:

Building 0.obj.
\0.c(8): error #2001: Syntax error: expected '}' but found 'Eslabon'.
\0.c(9): error #2156: Unrecognized declaration.
\0.c(12): error #2048: Undeclared identifier 'Eslabon'.
0.c(12): error #2048: Undeclared identifier 'Numero'.
\0.c(12): error #2039: Illegal expression.
\0.c(12): error #2001: Syntax error: expected ')' but found 'malloc'.
\0.c(12): error #2088: Lvalue required.
\0.c(12): error #2001: Syntax error: expected ';' but found 'malloc'.
\0.c(13): error #2048: Undeclared identifier 'Buffer'.
\0.c(18): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(18): error #2168: Operands of '=' have incompatible types 'int' and 'void *'.
0.c(23): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(25): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(28): error #2039: Illegal expression.
C\0.c(28): error #2001: Syntax error: expected ')' but found 'malloc'.
\0.c(28): error #2001: Syntax error: expected ';' but found 'malloc'.
\0.c(29): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(31): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(35): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(37): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(37): error #2168: Operands of '!=' have incompatible types 'int' and 'void *'.
0.c(39): error #2112: Left operand of '->' has incompatible type 'int'.
\0.c(40): error #2112: Left operand of '->' has incompatible type 'int'.
*** Error code: 1 ***
Done.

Saluditos".
#958
Cita de: amchacon en  6 Marzo 2013, 21:00 PM
......................................................................................
Te aventuro a que intentes crear en C el siguiente programa:

- Dado una lista de numeros terminados con un cero, calcula el numero mayor.


Pues así, por ejemplo:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(void){
    int i=0;
    float num,mayor=-FLT_MAX ;
    do {
        printf ("Introduzca el numero %d : ",i+1);
        scanf("%f",&num);
        while (getchar()!='\n');
        if (num > mayor)
            mayor = num;
        i++;
    }while (num!=0);
    printf ("\n\nEl mayor es: %g",mayor);
return EXIT_SUCCESS;
}



Saluditos!. ...
#959
||In function 'int main(int, char**)':|
C|14|error: 'uniform_real_distribution' was not declared in this scope|
|14|error: expected primary-expression before 'float'|
14|error: expected ';' before 'float'|
|17|error: 'dist' was not declared in this scope|
||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|
#960
Cita de: 0xDani en  6 Marzo 2013, 16:41 PM
Si estas en C++, en el estandar C++11 se ha incluido el modulo random, podrias usarlo como en este ejemplo:


Perdona 0xDani, ¿qué compilador usas? .Es que yo en el Code::Blocks he activado la opción de compatibilidad con C++11 y no me ejecuta el fichero. Gracias de antemano.

Saluditos!.