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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49
441  Programación / Programación C/C++ / Re: Programa algoritmo multiplicación en: 26 Diciembre 2011, 19:37 pm
Lo que pasa es que son caracteres... no numeros... revisate la tabla ASCII, por ejemplo, cuando escribes 4 el indice de n4[0] no sera un valor 4 sera SU VALOR EN ASCII...

Me desvele haciendote estas funciones para extraer un digito X de un numero tipo signed/unsigned int.

Código
  1.  
  2. int extracNumFromUInt(unsigned int iVal, unsigned int index);
  3. int extracNumFromInt(int iVal, unsigned int index);
  4. int getLengthOfUInt(unsigned int iVal);
  5. int getLengthOfInt(int iVal);
  6.  
  7. /**
  8. Proposito:  Obtiene la longitud de un numero Decimal.
  9. Retorno:    Longitud de el numero
  10. NOTA:       TODO NUMERO decimal tiene una longitud minima de 1
  11. By BlackZeroX.
  12. **/
  13. int getLengthOfUInt(unsigned int iVal)
  14. {
  15.    int i = 1;
  16.    while (iVal /= 10)
  17.        i++;
  18.    if (iVal % 10)
  19.        i++;
  20.    return i;
  21. }
  22.  
  23. /**
  24. Proposito:  Obtiene la longitud de un numero Decimal.
  25. Retorno:    Longitud de el numero
  26. NOTA:       TODO NUMERO decimal tiene una longitud minima de 1
  27. By BlackZeroX.
  28. **/
  29. int getLengthOfInt(int iVal)
  30. {
  31.    return getLengthOfUInt((0x80000000 & iVal) ? (unsigned)(~(--iVal)):(unsigned)iVal);   //  Removemos el signo...
  32. }
  33.  
  34. /**
  35. Proposito:  Extre un numero DECIMAL de un numero de entero sin signo
  36. Retorno:    Si falla retorna ~0
  37.             Si es satisfactorio extrae el numero deseado.
  38. By BlackZeroX.
  39. **/
  40. int extracNumFromInt(int iVal,          //  Numero Deseado.
  41.                     unsigned int index //  El Indice es de Izquierda a Derecha...
  42.                    )
  43. {
  44.    return extracNumFromUInt((0x80000000 & iVal) ? (unsigned)(~(--iVal)):(unsigned)iVal,   //  Removemos el signo...
  45.                     index);
  46. }
  47.  
  48. /**
  49. Proposito:  Extre un numero DECIMAL de un numero de entero sin signo
  50. Retorno:    Si falla retorna ~0
  51.             Si es satisfactorio extrae el numero deseado.
  52. By BlackZeroX.
  53. **/
  54. int extracNumFromUInt(unsigned int iVal,    //  Numero Deseado.
  55.                     unsigned int index    //  El Indice es de Izquierda a Derecha...
  56.                    )
  57. {
  58.    int iSize = getLengthOfUInt(iVal);
  59.    int iRet = iVal,
  60.        i = 0;
  61.  
  62.    if (index > iSize)                  //  ¿Indice Erroneo?.
  63.        return ~0;
  64.    index = (iSize - index);            //  Corregimos el indice para que se trabaje como si fueran arrays...
  65.    if (index != iSize)                 //  ¿Debemos eliminar los digitos de la parte Izquierda?
  66.    {
  67.        for (i = 0; i < index; ++i)     //  Removemos
  68.            iRet /= 10;
  69.        for (i = 0; i < (index); ++i)   //  suplantamos por 0's
  70.            iRet *= 10;
  71.        iRet = (iVal - iRet);           //  Eliminamos los digitos de la izquierda...
  72.    }
  73.    iSize = getLengthOfUInt(iRet);
  74.    if (iSize > 1)                      //  ¿Debemos eliminar los digitos d ela Derecha?...
  75.        for (i = 1; i < index; ++i)
  76.            iRet /= 10;                 //  Eliminamos...
  77.    return iRet;                        //  Retornamos.
  78. }
  79.  
  80. /// EntryPoint
  81. int main(int argc, char *argv[])
  82. {
  83.    int i = 0;
  84.    int iVal = -4898456;
  85.  
  86.    printf("%d\n", iVal);
  87.  
  88.    for (i = 0; i < getLengthOfInt(iVal); ++i )
  89.        printf("%d\n", extracNumFromInt(iVal, i));
  90.  
  91.    getchar();
  92.  
  93.    return EXIT_SUCCESS;
  94. }
  95.  
  96.  

Temibles Lunas!¡.

Perdón, pero... Soy muy principiante en C... Y no entiendo eso que acabas de hacer... No sé qué son los códigos ASCII, a pesar de que he estado mirando en Internet las cadenas (y no venía nada de eso...)

Muchas gracias.

Saludos
442  Programación / Programación C/C++ / Re: Programa algoritmo multiplicación en: 26 Diciembre 2011, 17:24 pm
Lo que acabo de hacer es esto:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main (void){
  5.  
  6.    int n1,n2,n3,n5,n6,a,b,c;
  7.  
  8.    printf("PRIMER NUMERO ");
  9.    printf("introduce el primer numero");
  10.    scanf("%d", &n1);
  11.  
  12.  
  13. char n4[3];
  14.  
  15.     printf("SEGUNDO NUMERO ");
  16.  printf("introduce la primera cifra");
  17.  
  18.  scanf("%d", &n4);
  19.  
  20.  
  21.  
  22.  
  23. b=n4[0]*n1;
  24. a=n4[1]*n1;
  25. c=a*10+b;            
  26.  
  27. printf(" %d  \n", n1 );
  28. printf(" x %d%d \n", n4[0], n4[1] );
  29. printf("________ \n");
  30. printf(" %d   \n", a );
  31. printf("%d   \n", b);
  32. printf("________ \n");
  33. printf("%d", c);
  34.  
  35.  
  36. system("pause");
  37. return 0;
  38.  
  39.  
  40.  
  41. }
  42.  
  43.  
  44.  
  45.  

El resultados de las multiplicaciones da bien, pero no está bien hecho el algoritmo.

Cuando poner primer número 222 y segundo 22, debe hacer esto:

   222
   x22
   ___
   444
  444
  ____
  4884

Pero no; hace esto:

   222
  x  220
  _______
  0
  4884
  _______
  4884

No sabía usar las cadenas; ahora sé más o menos.
Tampoco sé porque lo que aprendo lo cojo de los apuntes de mi hermana(que, por cierto, está estudiando matemáticas, pero tiene informática obligatoriamente...).

Volviendo al tema... ¿Estoy usando bien las cadenas? ¿Me falta o me sobra algo?

Bueno, muchas gracias.

Saludos.

443  Programación / Programación C/C++ / Re: Programa algoritmo multiplicación en: 26 Diciembre 2011, 16:40 pm
Si puedes. Una manera es leer el número como si fuese un string, y luego manejar el string como un arreglo, separando las cifras (sabes que array[0] será la primer cifra, y array[1] será la segunda cifra). Te doy la idea, trata de implementarla!

Otra cosa, al final del main debes retornar un valor, como bien declaraste, la función main devuelve un int.

Código
  1. system("pause");
  2. return 0;

Muchas gracias. Intentaré hacerlo de esa forma.

Muchísimas gracias.

Saludos.
444  Programación / Programación C/C++ / Re: Programa algoritmo multiplicación en: 26 Diciembre 2011, 16:09 pm
Lo siento, había escrito un mensaje completo con mi código y mi problema, pero veo que no ha salido bien...

En seguida lo edito.

Lo siento.
445  Programación / Programación C/C++ / Programa algoritmo multiplicación en: 26 Diciembre 2011, 16:04 pm
He hecho un programa que resuelve la multiplicación tal y como lo haríamos sin calculadora, es decir, por ejemplo:

 222
 x22
 ___
 444
444
____
4884

Mi código es el siguiente:

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main (void){
  5.  
  6.    int n1,n2,n3,n4,n5,a,b,c;
  7.  
  8.    printf("PRIMER NUMERO ");
  9.    printf("introduce el primer numero");
  10.    scanf("%d", &n1);
  11.  
  12.  
  13.  
  14.     printf("SEGUNDO NUMERO ");
  15.  printf("introduce la primera cifra");
  16.  
  17.  scanf("%d", &n4);
  18.  
  19.      printf("introduce la segunda cifra");
  20.    scanf("%d", &n5);
  21.  
  22. a=n5*n1;
  23. b=n4*n1;
  24. c=a*10+b;            
  25.  
  26. printf(" %d  \n", n1 );
  27. printf(" x %d%d \n", n4, n5 );
  28. printf("________ \n");
  29. printf(" %d   \n", a );
  30. printf("%d   \n", b);
  31. printf("________ \n");
  32. printf("%d", c);
  33.  
  34.  
  35. system("pause");
  36.  
  37. }
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  

Si os fijáis, he hecho que el programa pregunte al principio el primer número, pero que, al preguntar el segundo, lo pregunte separado, es decir, primera cifra, y segunda (el segundo número debe ser solo de dos cifras).

Mi problema es que no sé si se podrá hacer que, al escribir, por ejemplo "23" sepa que la primera cifra es 2, y la segunda; 3. Así creo que quedaría más completo y correcto, pero no sé si se puede hacer...

Muchas gracias.

Saludos.
446  Programación / Programación C/C++ / Programa de apuestas de un dado en: 7 Diciembre 2011, 18:51 pm
¡Hola!

Mi programa es el siguiente: tienes 100 euros, y apuestas una cantidad (como mínimo, 10 euros). Después, el ordenador piensa un número del 1 al 6, si introduces el correcto, lo que has apostado se multiplica por 6 y lo sumas a lo que tenías.

Ayer me estaba saliendo bien, pero estuve haciendo algunos cambios, y ahora no me sale la primera parte.

Ahora introduzco un número mayor que 10 y menos de 100 euros al principio, y me da como válido algunos resultados, otros no.

El programa es:

Código
  1. //Juego de apuestas que no sé por qué no funciona bien
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<time.h>
  6.  
  7. int main (void){
  8.  
  9. int bolsa, apuesta, dado, apminima, opcion, n;
  10.  
  11.  srand(time(NULL));
  12.  
  13.  bolsa=100;
  14.  apminima=10;
  15.  
  16.  
  17.  printf("\a\nTienes %d euros. La apuesta minima son %d euros", bolsa,apminima);
  18.  printf ("\n\nEscriba su apuesta");
  19.  scanf("%d",&apuesta);
  20.  
  21.  do{
  22.  
  23.  do{
  24.  printf ("\nEscriba su apuesta");
  25.  scanf("%d",&apuesta);
  26.  }
  27.  while ((apminima>apuesta) || (apuesta>bolsa));
  28.  
  29.  bolsa=bolsa-apuesta;
  30.  
  31.  do{
  32.  printf("Escriba el numero por el que apuesta");
  33.  scanf("%d",&n);                  
  34.  }
  35.  while((n>6) || (n<1));
  36.  
  37.  dado=1+ rand()%6;
  38.  
  39.  if (dado==n) bolsa=bolsa+6*apuesta;
  40.  
  41.  printf("Apostaste por el numero %d y ha salido %d. Su bolsa tiene ahora %d euros", n,dado,bolsa);
  42.  
  43.  if(bolsa>=apminima){
  44.  
  45.  do{
  46.  printf("Escriba 1 si quiere seguir jugando o 0 si quiere abandonar la partida");
  47.  scanf("%d",&opcion);                
  48.  }
  49.  while ((opcion!=0)&&(opcion!=1));
  50.  
  51.  }
  52.  
  53. }
  54.  while((opcion==1)&&(bolsa>=apminima));
  55.  
  56.  printf("\nHasta la proxima");
  57.  printf("\n");
  58.  
  59.  
  60.   system("pause");
  61.  
  62.  
  63. }
  64.  

Muchas gracias.
447  Programación / Programación C/C++ / Re: Ayuda progrma numeros amigos en: 25 Noviembre 2011, 20:28 pm
Me parece que es porque "unsigned amigos" (y el resto), va dentro de int main().
448  Programación / Programación C/C++ / Re: ayuda Dev-c++ en: 14 Noviembre 2011, 18:50 pm
Ehmm... ¿No te lo toma en cuenta? Yo pongo 3 y 3, y me lo suma bien; me da 6...
449  Programación / Programación C/C++ / Re: ¿Es posible intercambiar dos valores sin usar variable auxiliar? en: 14 Noviembre 2011, 15:21 pm
Tal vez si o tal vez no (depende del tipo de valor y de los objetos en cuestión). Ese es el problema: ya que no hay una forma realmente genérica para realizar el intercambio (al menos no en C estándar) lo mejor es utilizar una variable temporal y dejarle el resto al compilador.

Te recomendaría que no hicieras eso: "tasajear" código para "ver que pasa" y en base al resultado sacar conclusiones. Ello porque si cometes un error en C eso resulta en "comportamiento no definido", en buen cristiano cualquier cosa puede pasar, por ejemplo:

A) El programa revienta
B) Se quema la PC
C) Te deja la novia/amiga con privilegios/etc.
D) Lo peor: todo funciona de maravilla.

Es usualmente el ultimo caso el que da problemas: le das el programa a tu profesor/tutor/etc. y resulta que el bendito programa no funciona en su PC.

Mejor consigue un buen libro y aprende en base a el (y foros como este).

Un saludo

Bueno, eso lo hice pensando, solo que no era correcto, y por eso daba error. En realidad no metí eso por probar.

Muchas gracias a todos por haber resuelto mi duda ^^
450  Programación / Programación C/C++ / Re: ¿Es posible intercambiar dos valores sin usar variable auxiliar? en: 13 Noviembre 2011, 21:10 pm
Con eso provocacias un OverFlow con valores grandes...

Código
  1.  
  2. inline void swap(void* pv1, void* pv2) {
  3.    *((int*)pv1) ^= *((int*)pv2);
  4.    *((int*)pv2) ^= *((int*)pv1);
  5.    *((int*)pv1) ^= *((int*)pv2);
  6. }
  7.  
  8.  

o

Código
  1.  
  2. #define swap(pv1,pv2) pv1 ^= pv2; pv2 ^= pv1; pv1 ^= pv2;
  3.  
  4.  

Dulces Lunas!¡.

Ya... Lo que pasa que el código del "xor" todavía no lo he dado (tengo 13 años y estoy estudiando con unos apuntes que hay en una web), así que por ahora no lo podré hacer así. Cuando llegue a esa parte, usaré el otro código.

Muchas gracias a todos.
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines