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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12
41  Programación / Programación C/C++ / [Solucionado] ¿Cambia el valor de una variable dentro una funcion? en: 1 Octubre 2012, 19:31 pm
No se si se entiende la pregunta, a ver que lo explico, por ejemplo, yo tengo una variable entera int a = 2; y una funcion cualquiera que modifica su valor, entonces antes de llamar a la funcion su valor inicial es 2, al llamar la funcion este valor cambia, la pregunta es, ¿despues de que se ejecute la funcion y se vuelva a main(), el valor de a seguira siendo 2 o habra adoptado el valor que se le da en la funcion?

No se si me he explicado correctamente.

Saludos.
42  Programación / Programación C/C++ / Duda con juego que genera numeros aleatorios en: 30 Septiembre 2012, 11:36 am
En el libro que estoy leyendo sobre C, venia un ejemplo de un programa de como utilizar funciones, aqui el programa:

la funcion main:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. #define SEMILLA 12345
  6.  
  7. void juego(void);
  8. int tirada(void);
  9.  
  10. int main() {
  11.  
  12. char respuesta = 'S';
  13.  
  14. printf("Bienvenido al juego CRAPS\n\n");
  15. printf("Para lanzar los dados, pulsa Intro\n\n");
  16.  
  17. srand(SEMILLA);
  18.  
  19. while (toupper(respuesta) != 'N') {
  20. juego();
  21. printf("\nDeseas jugar de nuevo? (S/N) ");
  22. scanf(" %c", &respuesta);
  23. printf("\n");
  24.  
  25. }
  26. printf("Adios, que lo pases bien");
  27. }

la funcion juego:

Código
  1. void juego(void) {
  2.  
  3. int puntos1;
  4. int puntos2;
  5. char nada;
  6.  
  7. printf("\nPor favor lanza los dados...");
  8. scanf("%c", &nada);
  9. printf("\n");
  10. puntos1 = tirada();
  11. printf("\n%2d", puntos1);
  12.  
  13. switch(puntos1) {
  14.  
  15. case 7:
  16. case 11:
  17.  
  18. printf(" - Felicidades! Ganaste a la primera tirada\n");
  19. break;
  20.  
  21. case 2:
  22. case 3:
  23. case 12:
  24.  
  25. printf(" - Lo siento! Perdiste en la primera tirada\n");
  26. break;
  27.  
  28. case 4:
  29. case 5:
  30. case 6:
  31. case 8:
  32. case 9:
  33. case 10:
  34.  
  35. do {
  36.  
  37. printf(" - Lanza los dados de nuevo...");
  38. scanf("%c", &nada);
  39. puntos2 = tirada();
  40. printf("\n%2d", puntos2);
  41. } while (puntos2 != puntos1 && puntos2 != 7);
  42.  
  43. if (puntos2 == puntos1)
  44. printf(" - Ganas por igualar tu primera tirada\n");
  45. else
  46. printf(" - Pierdes por no igualar tu primera tirada");
  47. break;
  48. }
  49. return;
  50. }

la funcion tirada:

Código
  1. int tirada(void)  {
  2.  
  3. float x1;
  4. float x2;
  5. int n1;
  6. int n2;
  7.  
  8. x1 = rand() / 32768.0;
  9. x2 = rand() / 32768.0;
  10.  
  11. n1 = 1 + (int) (6 * x1);
  12. n2 = 1 + (int) (6 * x2);
  13.  
  14. return(n1 + n2);
  15. }

Entiendo todo perfectamente, pero donde me pierdo es en las funciones rand() y srand(), en la funcion tirada entiendo todas las operaciones que se hacen en ella para obtener los numeros, lo que no entiendo es para que se utiliza la funcion srand() y la constante SEMILLA, en el libro viene explicado pero no logro entenderlo, si alguien me lo puede explicar de alguna forma mas facil, gracias,


Saludos
43  Programación / Programación C/C++ / Problema con funcion en: 30 Septiembre 2012, 00:02 am
Pues en el libro que estoy leyendo he empezado con las funciones y para ir probando intente cambiar un codigo que tenia yo, usando una funcion, aqui el codigo original:

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.    scanf("%s%c", cadena);
  8.    for (i=0;cadena [i]!='\0';i++);
  9.    printf ("\nEl texto tiene %d caracteres.\n",i);
  10.    printf ("\nPresione ENTER para salir:");
  11.    while (getchar()!='\n')
  12.        ;
  13.    return 0;
  14. }

Y aqui el codigo usando una funcion:

Código
  1. #include <stdio.h>
  2.  
  3. int contador(int i, char letras){
  4. i = 0;
  5. for (i=0;letras [i]!='\0';++i);
  6. return i;
  7.  
  8. }
  9.  
  10. int main() {
  11.  
  12.    int x;
  13.    char cadena [80];
  14.    scanf("%s%c", cadena);
  15.    x = int contador(int i, char cadena);
  16.    printf ("\nEl texto tiene %d caracteres.\n", x);
  17.    printf ("\nPresione ENTER para salir:");
  18.    while (getchar()!='\n')
  19.        ;
  20.    return 0;
  21. }

Al compilarlo el segundo, me da los sigueintes errores:

En la funcion 'contador': 12:19: el valor del subindice no es ni matriz ni puntero ni vector

22:9 error: expected expression before 'int'

El primer fallo creo lo entiendo, se refiere al subindice de letras, letras, pero no entiendo el fallo, el segundo ya ni idea.

Saludos
44  Sistemas Operativos / GNU/Linux / Editor de codigo en: 29 Septiembre 2012, 16:41 pm
Pues en breves ya voy a instalar Ubuntu en mi pc, junto con Windows, y queria saber que editor de codigo me recomendais para C, se que para compilar se puede hacer por consola asi que solo quiero un buen editor de texto. Yo en Windows utilizo el Sublime Text 2, estoy muy contento con el, y tambien lo hay para Linux, pero queria contar con vuestra opinion, sino instalare tambien el Sublime Text 2.

Saludos
45  Programación / Programación C/C++ / Duda con scanf en: 29 Septiembre 2012, 11:23 am
En un ejemplo de un codigo en un libro que estoy leyendo, me he encontrado con esta linea:

Código
  1. scanf("%[^\n]", linea);

La parte que no entiendo es la de "%[\n]", creo que sirve para guardar la linea de texto introducida en el array linea, pero sin incluir el salto de linea, aunque no estoy del todo seguro, queria saber exactamente para que sirve eso exactamente.

Saludos
46  Programación / Programación C/C++ / [Solucionado] Forma para pausar un programa en: 27 Septiembre 2012, 17:45 pm
Pues haciendo algunos programas tontos para coger practica me ha surgido una duda, mil veces en el foro han dicho que llamar al sistema para realizar una pausa es una mala practica:

Código
  1. system("PAUSE");

Y yo como bueno aprendiz que soy  :xD hago caso, intento evitarla.

acabo de hacer este programa desde cero yo solo, solo por aburrimiento:

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.  
  8.    scanf("%s", cadena);
  9.  
  10.    for (i=0;cadena [i]!='\0';i++);
  11.  
  12.    printf ("\nEl texto tiene %d caracteres.\n",i);
  13.  
  14.  
  15.    getchar();
  16.  
  17.    return 0;
  18. }

El programa funciona pefectamente, el problema es que al final no se para, y la unica forma que se me ocurre es poniendo dos veces la linea:

Código

O limpiando el bufer de entrada asi:

Código
  1. fflush(stdin);

Pero es que tambien he leido muchas veces que limpiar el bufer de esa manera tambien es una mala practica porque puede comportarse de forma erronea. Entonces queria saber la forma correcta y limpia para parar el programa, no solo ese, sino tambien otro cualquiera.

Saludos
47  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Sistema de vibración de un movil en: 23 Septiembre 2012, 09:35 am
Pues solo por curiosidad queria saber como funciona la vibración de un movil, porque me parecia algo simple pero nunca me habia parado a pensar en ello y ahora que lo pienso detenidamente no se me ocurre como puede hacer un movil para vibrar.

Muchas gracias de antemano

Saludos, Caster.
48  Sistemas Operativos / GNU/Linux / Archivo en el núcleo de Linux en: 22 Septiembre 2012, 22:49 pm
Antes de todo, no tengo ni **** idea de programación. Estos dias voy a instalarme Ubuntu en mi PC y navegando por internert se me dio por buscar el nucleo de Linux 0.01, los descargue y lo estuve viendo, y encontré unos archivos llamados 'boot.s' y 'head.s' a parte de los archivos '.c' los heads y algunos mas, lo '.c' y los heads se que tipo de archivos son, abri los archivos 'boot.s' y 'head.s' para ver que tenian, pero no me entero de nada, supongo que seran los archivos que cargan el kernel o algo de eso, y viendo el codigo aun me entero menos porque no se que lenguaje es, supongo que será ensamblador, aqui os dejo el codigo de uno de los archivos:

Código
  1. /*
  2. *  head.s contains the 32-bit startup code.
  3. *
  4. * NOTE!!! Startup happens at absolute address 0x00000000, which is also where
  5. * the page directory will exist. The startup code will be overwritten by
  6. * the page directory.
  7. */
  8. .text
  9. .globl _idt,_gdt,_pg_dir
  10. _pg_dir:
  11. startup_32:
  12. movl $0x10,%eax
  13. mov %ax,%ds
  14. mov %ax,%es
  15. mov %ax,%fs
  16. mov %ax,%gs
  17. lss _stack_start,%esp
  18. call setup_idt
  19. call setup_gdt
  20. movl $0x10,%eax # reload all the segment registers
  21. mov %ax,%ds # after changing gdt. CS was already
  22. mov %ax,%es # reloaded in 'setup_gdt'
  23. mov %ax,%fs
  24. mov %ax,%gs
  25. lss _stack_start,%esp
  26. xorl %eax,%eax
  27. 1: incl %eax # check that A20 really IS enabled
  28. movl %eax,0x000000
  29. cmpl %eax,0x100000
  30. je 1b
  31. movl %cr0,%eax # check math chip
  32. andl $0x80000011,%eax # Save PG,ET,PE
  33. testl $0x10,%eax
  34. jne 1f # ET is set - 387 is present
  35. orl $4,%eax # else set emulate bit
  36. 1: movl %eax,%cr0
  37. jmp after_page_tables
  38.  
  39. /*
  40. *  setup_idt
  41. *
  42. *  sets up a idt with 256 entries pointing to
  43. *  ignore_int, interrupt gates. It then loads
  44. *  idt. Everything that wants to install itself
  45. *  in the idt-table may do so themselves. Interrupts
  46. *  are enabled elsewhere, when we can be relatively
  47. *  sure everything is ok. This routine will be over-
  48. *  written by the page tables.
  49. */
  50. setup_idt:
  51. lea ignore_int,%edx
  52. movl $0x00080000,%eax
  53. movw %dx,%ax /* selector = 0x0008 = cs */
  54. movw $0x8E00,%dx /* interrupt gate - dpl=0, present */
  55.  
  56. lea _idt,%edi
  57. mov $256,%ecx
  58. rp_sidt:
  59. movl %eax,(%edi)
  60. movl %edx,4(%edi)
  61. addl $8,%edi
  62. dec %ecx
  63. jne rp_sidt
  64. lidt idt_descr
  65. ret
  66.  
  67. /*
  68. *  setup_gdt
  69. *
  70. *  This routines sets up a new gdt and loads it.
  71. *  Only two entries are currently built, the same
  72. *  ones that were built in init.s. The routine
  73. *  is VERY complicated at two whole lines, so this
  74. *  rather long comment is certainly needed :-).
  75. *  This routine will beoverwritten by the page tables.
  76. */
  77. setup_gdt:
  78. lgdt gdt_descr
  79. ret
  80.  
  81. .org 0x1000
  82. pg0:
  83.  
  84. .org 0x2000
  85. pg1:
  86.  
  87. .org 0x3000
  88. pg2: # This is not used yet, but if you
  89. # want to expand past 8 Mb, you'll have
  90. # to use it.
  91.  
  92. .org 0x4000
  93. after_page_tables:
  94. pushl $0 # These are the parameters to main :-)
  95. pushl $0
  96. pushl $0
  97. pushl $L6 # return address for main, if it decides to.
  98. pushl $_main
  99. jmp setup_paging
  100. L6:
  101. jmp L6 # main should never return here, but
  102. # just in case, we know what happens.
  103.  
  104. /* This is the default interrupt "handler" :-) */
  105. .align 2
  106. ignore_int:
  107. incb 0xb8000+160 # put something on the screen
  108. movb $2,0xb8000+161 # so that we know something
  109. iret # happened
  110.  
  111.  
  112. /*
  113. * Setup_paging
  114. *
  115. * This routine sets up paging by setting the page bit
  116. * in cr0. The page tables are set up, identity-mapping
  117. * the first 8MB. The pager assumes that no illegal
  118. * addresses are produced (ie >4Mb on a 4Mb machine).
  119. *
  120. * NOTE! Although all physical memory should be identity
  121. * mapped by this routine, only the kernel page functions
  122. * use the >1Mb addresses directly. All "normal" functions
  123. * use just the lower 1Mb, or the local data space, which
  124. * will be mapped to some other place - mm keeps track of
  125. * that.
  126. *
  127. * For those with more memory than 8 Mb - tough luck. I've
  128. * not got it, why should you :-) The source is here. Change
  129. * it. (Seriously - it shouldn't be too difficult. Mostly
  130. * change some constants etc. I left it at 8Mb, as my machine
  131. * even cannot be extended past that (ok, but it was cheap :-)
  132. * I've tried to show which constants to change by having
  133. * some kind of marker at them (search for "8Mb"), but I
  134. * won't guarantee that's all :-( )
  135. */
  136. .align 2
  137. setup_paging:
  138. movl $1024*3,%ecx
  139. xorl %eax,%eax
  140. xorl %edi,%edi /* pg_dir is at 0x000 */
  141. cld;rep;stosl
  142. movl $pg0+7,_pg_dir /* set present bit/user r/w */
  143. movl $pg1+7,_pg_dir+4 /*  --------- " " --------- */
  144. movl $pg1+4092,%edi
  145. movl $0x7ff007,%eax /*  8Mb - 4096 + 7 (r/w user,p) */
  146. std
  147. 1: stosl /* fill pages backwards - more efficient :-) */
  148. subl $0x1000,%eax
  149. jge 1b
  150. xorl %eax,%eax /* pg_dir is at 0x0000 */
  151. movl %eax,%cr3 /* cr3 - page directory start */
  152. movl %cr0,%eax
  153. orl $0x80000000,%eax
  154. movl %eax,%cr0 /* set paging (PG) bit */
  155. ret /* this also flushes prefetch-queue */
  156.  
  157. .align 2
  158. .word 0
  159. idt_descr:
  160. .word 256*8-1 # idt contains 256 entries
  161. .long _idt
  162. .align 2
  163. .word 0
  164. gdt_descr:
  165. .word 256*8-1 # so does gdt (not that that's any
  166. .long _gdt # magic number, but it works for me :^)
  167.  
  168. .align 3
  169. _idt: .fill 256,8,0 # idt is uninitialized
  170.  
  171. _gdt: .quad 0x0000000000000000 /* NULL descriptor */
  172. .quad 0x00c09a00000007ff /* 8Mb */
  173. .quad 0x00c09200000007ff /* 8Mb */
  174. .quad 0x0000000000000000 /* TEMPORARY - don't use */
  175. .fill 252,8,0 /* space for LDT's and TSS's etc */

Alguien me podia aclarar que tipo de archivos son estos, cual es su funcion y que lenguaje es el que estan escritos, es solo curiosidad.

Muchas gracias
49  Programación / Programación C/C++ / Diferencia entre array, matriz, y vector en: 21 Mayo 2012, 19:45 pm
Hola a todos, pues eso, queria saber la diferencia entre una matriz un vector y un array.

Saludos
50  Programación / Programación C/C++ / [SOLUCIONADO] Ayuda a configurar eclipse en: 18 Mayo 2012, 16:32 pm
Hola a todos, hace un tiempo que estoy en la programacion de C, yo utilizaba DevC++ pero un usuario de este foro recomendo dejar de utilizarlo, y siguiendo sus recomendaciones me cambie a programar con Notepad y compilar en consola con MinGW, viendo que este lenguaje me gusta y me veo en el futuro aprendiendo a programar con liberias graficas,etc. Para compilar con distintas librerias se necesitan cambiar los parametros en la consola, entonces viendo que van a ser muchos los parametros segun las librerias utilizadas se va a hacer muy costosa la programacion, y me decidi por instalar eclipse, cuando lo instale hice mi primer codigo y al compilar y despues ejecutar me daba error, busque por google y vi que habia que hacer unas cuantas cosas con MinGW, configurar una variable de entorno o algo parecido, y los unicos tutos que encontre estaban mal explicados o yo no entendia nada, entonces queria pedir que me ayudaseis a configurar eclipse para poder programar en C/C++.

Gracias
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines