elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ... 83
371  Programación / Programación C/C++ / Re: Ayuda! Soy nuevo en programacion "C" Necesicito que me ayuden con FUNCIONES en: 27 Enero 2013, 17:29 pm
A parte de lo dicho por amchacon  te lo he puesto en funciones, pero trabaja un poco más porque es que el código es sucio.Y no te digo nada de la portabilidad...Además te faltaba un ampersand al introducir la opción en ese scanf. En fín:
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #include<conio.h>//Esto sería bueno quitarlo pero bueno
  5. //PROTOTIPOS DE FUNCIONES
  6. int multiplo ( int x, int y);
  7. void aleatorio();
  8. void cubo();
  9. void esMultiplo();
  10. void pares();
  11. void salir();
  12.  
  13. int main()
  14. {
  15.    int opc;
  16.    do
  17.    {
  18.        printf(" \n Menu  ");
  19.        printf(" \n 1...Generar y mostrar  5 números aleatorios del 1 al 10  ");
  20.        printf(" \n 2...Cubo de un número entero  ");
  21.        printf(" \n 3...Determinar si un numero es múltiplo de otro  ");
  22.        printf(" \n 4...Mostrar los números pares entre 1 y 40  ");
  23.        printf(" \n 5...Salir  ");
  24.        printf(" \n ESCOJA UNA OPCION  ");
  25.        scanf("%d",&opc);
  26.        switch (opc)
  27.        {
  28.        case 1:
  29.            aleatorio();
  30.            break;
  31.        case 2:
  32.            cubo();
  33.            break;
  34.        case 3:
  35.            esMultiplo();
  36.            break;
  37.        case 4:
  38.            pares();
  39.            break;
  40.        case 5:
  41.  
  42.            break;
  43.        default:
  44.            printf("Opcion invalida");
  45.        }
  46.        if(opc!=5)
  47.        {
  48.            printf("Presione una tecla para volver al menu principal . . . ");
  49.            getch();
  50.            system("cls");
  51.        }
  52.    }
  53.    while(opc!=5);
  54.    puts("Salir");
  55.    printf("Fin del programa");
  56.    getch();
  57.    return 0;
  58. }
  59. //DEFINICIÓN DE FUNCIONES
  60. int multiplo(int x,int y)
  61. {
  62.    return x%y;
  63. }
  64. void aleatorio()
  65. {
  66.    puts("Generar y mostrar  5 números aleatorios del 1 al 10");
  67.    srand(time(0));
  68.    int i;
  69.    for(i=0; i!=5; ++i)
  70.    {
  71.        printf("Numero aleatorio %d es : %d\n",i+1, rand()%10 );
  72.    }
  73. }
  74. void cubo()
  75. {
  76.    int numero=0;
  77.    int resultado=0;
  78.    puts("Cubo de un número entero");
  79.    printf(" \n Ingrese un numero");
  80.    scanf("%d",&numero);
  81.    resultado = numero*numero*numero;
  82.    printf("El cuadrado del numero es %d", resultado);
  83. }
  84. void esMultiplo()
  85. {
  86.    int n1,n2,resultado;
  87.    puts("Determinar si un numero es múltiplo de otro");
  88.    printf(" \n Ingrese un numero");
  89.    scanf("%d",&n1);
  90.    printf(" \n Ingrese otro numero");
  91.    scanf("%d",&n2);
  92.    resultado=multiplo(n1,n2);
  93.    if (n1%n2==0)
  94.    {
  95.        printf(" \n Los numeros son multiplos entre si");
  96.    }
  97.    else
  98.    {
  99.        printf(" \n Los numeros no son multiplos entre si");
  100.    }
  101. }
  102. void pares()
  103. {
  104.    int _cont;
  105.    puts("Mostrar los números pares entre 1  y 40");
  106.    while(_cont<=40)
  107.    {
  108.        if(_cont%2==0)
  109.        {
  110.            printf("%d, ",_cont);
  111.        }
  112.        _cont++;
  113.    }
  114. }
372  Programación / Programación C/C++ / Re: [src]problema con fflush() en: 27 Enero 2013, 16:25 pm
y cual es la forma de hacerlo bien??? lo que indicaste vos??? puede ser, pero solo es una forma, es por eso que se indico varias alternativas... No veo el inconveniente de limpiar el bufer(de echo me gusta mas el bucle que usar fgets+sscanf)


Saludos
No claro que no hay inconveniente Durasno, pero es que ¿para qué andar limpiando el buffer si puedes introducir datos sin tener que limpiarlo? A mí también me gusta más el bucle, es más cómodo que hacer fgets + sscanf pero si con fgets + sscanf evito tener que limpiarlo pues prefiero utilizarlo.Además echale un ojo a esto:

http://crasseux.com/books/ctutorial/ y al apartado de http://crasseux.com/books/ctutorial/String-output-and-input.html#String%20output%20and%20input y en concreto esto:

http://crasseux.com/books/ctutorial/Deprecated-formatted-string-input-functions.html#Deprecated%20formatted%20string%20input%20functions

Además acabo de leer que fgets tendría que sustituirlo por getline así que algo que aprendo :)
¡Un saludo!
373  Programación / Programación C/C++ / Re: Problema con las excepciones en: 27 Enero 2013, 13:15 pm
Olvidalo , no se porque pasa :/ . Por codeblocks no creo que sea.
Código:
Aviso que no entiendo muy bien el uso de las sentencias try , catch y throw, pero digamos que throw tiene que lanzar algo ¿no? cuando en throw haces:
throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);
Pero esa función(constructor) solo le da valores a una estructura ya creada pero tú llamas al constructor sin estructura o eso parece no se.Fíjate aquí:
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr153.htm
Me parece a mi que eso habría que ponerlo así:
if (!Lectura.is_open())
    {
        Excepcion excepcion;
        excepcion.Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);
        throw excepcion;
    }
Igual la estoy liando no sé.
¡Un saludo!
374  Programación / Programación C/C++ / Re: [src]problema con fflush() en: 27 Enero 2013, 12:26 pm
Pero ¿para que limpiar el buffer? Es que es innecesario, son ganas de ponerse a limpiar el buffer. Usad las funciones correctas y punto. Ya lo zanjó hace tiempo Eternal Idol:
Citar
« Respuesta #3 en: 24 Agosto 2009, 20:13 »
Zanjado: NO USAR JAMAS.

fgets
+
sscanf


Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5.    int opcion;
  6.  
  7.    do{
  8.        printf("Opcion: ");
  9. char linea[80];
  10. fgets(linea, sizeof(linea), stdin);
  11.        sscanf(linea, "%d",&opcion);
  12.    }while(opcion!=0);
  13.  
  14.    return 0;
  15. }
Las demás formas de hacerlo son parches para corregir.
Hola! como ya te dijeron esa "mala lectura" se debe al ENTER(que tambien es un caracter) que queda almacenado en el bufer del teclado, por eso con el segundo getchar no podes ingresar... Otra alternativa para limpiar el bufer seria algo como:
Código
  1. while(getchar()!='\n');/* este bucle debe ir despues de cada getchar*/


Saludos

PD: fpurge no es estandar por eso no te funciona
Durasno en ese caso deberías comprobar también si es EOF así que quedaría así:
Código
  1. char c;
  2. while(c=getchar() != '\n' && c != EOF){}
Pero como ya digo son parches. Hacerlo bien no mata a nadie:
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    char a,b;
  6.    char buffer[80];
  7.  
  8.    printf("Which character is bigger?\n");
  9.  
  10.    printf("Type a single character:");
  11.    fgets(buffer,sizeof(buffer),stdin);
  12.    sscanf(buffer,"%c",&a);
  13.  
  14.    printf("Type another character:");
  15.    fgets(buffer,sizeof(buffer),stdin);
  16.    sscanf(buffer,"%c",&b);
  17.  
  18.    if(a > b)
  19.    {
  20.        printf("'%c' is greater than '%c'!\n",a,b);
  21.    }
  22.    else if(b > a)
  23.    {
  24.        printf("'%c' is greater than '%c'!\n",b,a);
  25.    }
  26.    else
  27.    {
  28.        printf("Next time don't press the same character");
  29.    }
  30.    return(0);
  31. }
¡Un saludo!
375  Programación / Programación C/C++ / Re: [src]problema con fflush() en: 27 Enero 2013, 00:21 am
Esto ocurre porque un salto de línea queda cojo en el buffer de entrada, depurando tu programa se ve esto en el buffer stdin(que en ese momento termina apuntando al primer 0A):
Código
  1. 77A07EB1  00 00 00 00 00 00 00 00  ........
  2. 77A07EB9  00 00 00 00 00 00 00 61  .......a
  3. 77A07EC1  0A 0A 00 00 00 00 00 00  ........
  4. 77A07EC9  00 00 00 00 00 00 00 00  ........
  5. 77A07ED1  00 00 00 00 00 00 00 00  ........
  6. 77A07ED9  00 00 00 00 00 00 00 00  ........
  7.  
Si te das cuenta los 0A son saltos de línea y al hacer input con scanf se escriben dos por alguna razón que desconozco , entonces al llamar otra vez a getchar y intentar escribir en la siguiente posición del buffer al haber un fin de línea pues es como si ya hubiese escaneado todo el buffer y pasa de largo. El buffer se vería así:
Código
  1. 77A07EC2  0A 00 00 00 00 00 00 00  ........
  2. 77A07ECA  00 00 00 00 00 00 00 00  ........
  3. 77A07ED2  00 00 00 00 00 00 00 00  ........
  4. 77A07EDA  00 00 00 00 00 00 00 00  ........
  5. 77A07EE2  00 00 00 00 00 00 00 00  ........
  6. 77A07EEA  00 00 00 00 00 00 00 00  ........
  7. 77A07EF2  00 00 00 00 00 00 00 00  ........
  8. 77A07EFA  00 00 00 00 00 00 00 00  ........
  9. 77A07F02  00 00 00 00 00 00 00 00  ........
Y al hacer el siguiente getchar pues ya no habría problema porque apuntaría para escribir a la siguiente posición que es una zona vacía.
Para evitar todo esto como ya dijo el moderador Eternal Idol hace mucho tiempo se usa fgets + sscanf. Ya que fgets lee desde un stream , n carácteres ( que le pasas como argumento) menos uno , entonces no lee el fin de línea. Un ejemplo de uso:
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    char cadena[100];
  6.    char buffer[100];
  7.    fgets(buffer,100,stdin);
  8.    sscanf(buffer,"%s",cadena);
  9.    printf("Cadena: %s",cadena);
  10.    return 0;
  11. }
376  Programación / Programación C/C++ / Re: [src]problema con fflush() en: 26 Enero 2013, 23:04 pm
Intenta poniendo esto en lugar de fpurge:
Código
  1. __fpurge()
Otra cosa, fflush no está definido para el estandar de entrada sólo para el de salida.

¡Un saludo!
377  Foros Generales / Noticias / Re: Los programadores y sus genes de murciélago en: 26 Enero 2013, 19:13 pm
Tenes un bug en un programa que estas programando y no sabes porque se genera, algo esta mal y seguramente es algo estupido pero no te das cuenta que es porque estas cansado o simplemente no estas tan concentrado. Te vas a dormir, estas pensando en cualquier cosa, luego te pones a pensar en eso y por arte de magia Bingo! te sabes como resolverlo!. Te levantas y vas a resolver el bug o te anotas en el celular lo que tenes que hacer por la mañana.

A mas de uno estoy seguro que le ha pasado. Desde esas experiencias, me di cuenta que lo mejor que uno puede hacer cuando no puede resolver algo es despejarse un tiempo, salir a caminar, descansar y cuando vuelves a enfocarte en el problema ya lo ves desde otra perspectiva y logras resolverlo.

Es mas, no es ningun metodo nuevo, todos los genios de la historia de la humanidad, no por coincidencia les gustaba salir a caminar o a andar en bicicleta cuando estaban en medio de algo a resolver.
Cuantas veces me habrá pasado... pf jajaja
378  Programación / Programación C/C++ / Re: No mostrar decimales en Visual C en: 26 Enero 2013, 18:20 pm
Hola josejs, puedes usar un cast a int para truncar esos decimales de la siguiente forma:
Código
  1. metros=(int)(altura/100);
Una vez hecho ese cast supongamos que tuviesemos los siguientes datos:
Código:
Altura: 385 cms
Tendríamos con lo dicho anteriormente esta operación:
Código:
metros = (truncar)(385/100) todo esto es igual a 3
Bien eso lo tenemos. Ahora para sacar los centímetros que quedan, en C++ y en C con los tipos siguientes:
  • float
  • double
No se puede hacer la operación módulo directamente con el operador '%'(ya que no dá el resultado correcto como puedes comprobar), hay que hacerlo con la siguiente función:
Código
  1. double fmod ( double numerator,double denominator );
  2. float fmod (float numerator,float denominator );
  3. long double fmod (long double numerator, long double denominator );
Referencia ~~> http://www.cplusplus.com/reference/cmath/fmod/
Por lo tanto el código quedaría así:
Código
  1. metros = (int)(altura/100);
  2. centimetros = fmod(altura,100);
Además tienes que añadir este archivo de cabecera para la función 'fmod':
Código
  1. #include <cmath>
Lo que me parece bastante extraño es que el compilador no te haya dicho nada.

¡Un saludo!
379  Informática / Software / Re: Descargar PDF Mozilla Firefox? en: 26 Enero 2013, 18:06 pm
La nueva beta de Firefox tiene un visor de PDF desarrollado por ellos mismos, con ese, si pasas el ratón por la esquina inferior derecha del navegador cuando esté abierto el PDF, aparece una barra en la cual uno de los iconos es un disquet de los antiguos de 1.33 MB , clicas ahí y guardas el PDF. Antes de todo eso tienes que bajar e instalar la beta de Firefox desde aquí:

http://www.mozilla.org/es-ES/firefox/beta/?WT.mc_id=bbetahomepage

¡Un saludo!
380  Foros Generales / Foro Libre / Re: Faltan 3 Dias. en: 25 Enero 2013, 21:59 pm
Nada era para que vieran que no está caído para todo el mundo, ahí pone la última modificación.
Páginas: 1 ... 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ... 83
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines