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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45
421  Programación / Programación C/C++ / Re: [C] ¿Qué hace este while de una sola linea? en: 25 Noviembre 2015, 05:51 am
No entiendo cuál era el objetivo final de este código. Con esa información, podríamos ayudarte mejor y con respuestas más claras.

Tienes que saber que esas operaciones  son binarias, es decir, se involucran dos "cosas". Por ejemplo, el operador = es binario puesto que necesita dos cosas: una variable a la que asignar un valor, y el dicho valor (a = b, se necesita tanto "a" como "b"). Pero te preguntarás: ¿qué pasa con la sentencia a = 5 + 1 + 3 * 5 - 7? Pues bien, esa operación, a la hora de compilar, se divide en operaciones de dos en dos. Normalmente, el orden de preferencia va de izquierda a derecha, pero con el operador = va de derecha a izquierda. Vamos a expresar la sentencia que he puesto de ejemplo en operaciones binarias:

1º Está el operador =, por lo que es de derecha a izquierda. Primero tenemos que procesar 5 + 1 + 3 * 5 - 7.
2º El operador * tiene preferencia sobre los operadores + y -, por lo que en primer lugar se procesa 3 * 5. Una vez procesado, quedaría así:
5 + 1 + 15 - 7
3º Como entre los operadores + y - no hay preferencia, la expresión se evalua de izquierda a derecha:
>> 6 + 15 - 7
>> 21 - 7
>> 14
4º La expresión final quedaría así:
a = 14
Por tanto, a la variable a se le asigna el valor 14.

Para saber más sobre la preferencia entre operadores, consulta : esta página

Una vez sabido esto, puedes analizar la expresión que tienes en tu while
422  Programación / Programación C/C++ / Re: [C] ¿Qué hace este while de una sola linea? en: 25 Noviembre 2015, 05:13 am
Antes de nada, quiero dejar una nota aclaratoria. El sistema operativo tiene un buffer (espacio de memoria) para los valores de entrada de una consola. En C y C++, podemos acceder indirectamente a este buffer como si de un archivo se tratara.

Definición de stdin según cplusplus:
Código
  1. FILE * stdin;
(Puede diferir entre compiladores)

Para más información, consulta: esta página
__________________________________________

Aunque la sentencia "a=c=getchar()" esté dentro de la condición del while, la igualación se hace igual. Es como si hicieras:
Código
  1. a = c= getchar();
  2. while(a == '1') { // a y c tienen el mismo valor, puedes poner la que quieras
  3.    a = c = getchar();
  4. }
Que a su vez, equivale a
Código
  1. a = getchar();
  2. c = a;
  3. while(a == '1') { // a y c tienen el mismo valor, puedes poner la que quieras
  4.    a = getchar();
  5.    c = a;
  6. }

Vamos a analizar este segundo código:

-Primero, tienes que saber que en las operaciones de igualdad se ejecutan de derecha a izquierda, por lo que primero se ejecuta la función getchar() y posteriormente el valor de retorno se le asigna a la variable 'a'.
Cuando ejecutas esta función, si el buffer que maneja stdin no tiene datos (ese buffer lo guarda el sistema operativo, no tenemos acceso a el directamente) entonces el programa se pausa y espera a que el usuario introduzca datos. Cuando introducimos datos, al final tenemos que pulsar enter, y ese enter se guarda (es decir, se guarda el salto de línea). Por ejemplo, si introducimos un '1' y le damos a enter, se va a guardar la siguiente secuencia de bytes: 0x31 (equivale a '1') y 0x0A (equivale a 'salto de línea' o '\n'). Entonces, la función getchar va a tomar el primer byte que se encuentra. En este caso, va a ser el 0x31. Los datos obtenidos se borran del buffer de stdin, por lo que ahora este buffer tiene solamente el salto de línea (0x0A)

-Segundo, igualamos a la variable c el valor de a, es decir, a partir de esa sentencia, a y c tienen exactamente el mismo valor (si seguimos el ejemplo anterior, a y c valen '1').

-Tercero, en el while, comprobamos si el usuario ha introducido un '1'. De ser así, el while ejecutaría el bloque de sentencias del while. Como en este ejemplo sí que hemos introducido un '1', entonces el while se ejecutará. Al ejecutarse el while, llamamos a la función getchar() de nuevo. Como ya he dicho, getchar toma datos del buffer de stdin. En este caso, este buffer SI tiene datos, por lo que el programa NO se va a pausar de nuevo. Entonces, los datos que hay son un salto de línea (como vimos en el paso 1), por lo que getchar toma ese salto de línea, borra ese dato del buffer de stdin y se lo asigna a la variable 'a'. Entonces, ahora la variable 'a' tiene el valor de un salto de línea.

-Cuarto, le asignamos el valor de 'a' a la variable 'c'.

Por todo esto, las variables 'a' y 'c' equivalen a un salto de línea cuando introduces un '1'.
423  Programación / Programación C/C++ / Re: [C] ¿Qué hace este while de una sola linea? en: 25 Noviembre 2015, 02:53 am
Lo que hace getchar, como dice su nombre, es tomar un byte del buffer stdin. Cuando tu introduces un carácter en la consola, se guarda ese carácter Y un salto de línea. Entonces, getchar toma ese carácter introducido y deja el salto de línea sin eliminar. Entonces, esta es la secuencia:

1º Introducimos un 1 por consola y le damos a enter para seguir. En el buffer de stdin se guarda la siguiente secuencia: 0x310A (31 es '1' en hexadecimal y 0A es un salto de línea).
2º Getchar toma el primer byte de esa secuencia (31).
3º Como La condición 31 == '1' se cumple, entonces el la sentencia while se ejecuta (en este caso, la sentencia es nula)
4º Comparamos de nuevo. Como en el buffer de stdin aún hay datos, entonces el programa no se pausa, sino que toma datos de esa secuencia. En este caso, getchar retorna 0x0A, lo que es un salto de línea. Como 0x0A es distinto de '1', entonces el while ya no se ejecuta y las variables a y c se quedan con el valor de salto de línea (0x0A).

Conclusiones:
-Si introducimos un '1', entonces las variables a y c guardarán un salto de línea.
-Si ponemos cualquier otro carácter, las variables a y c guardarán ese carácter y el buffer de stdin se quedará con un elemento por leer.
424  Programación / Programación C/C++ / Re: Problema con funciones definidas por el programador en: 24 Noviembre 2015, 04:53 am
Lo que yo haría es esto:

Código
  1. int digitomagico(int numero) {
  2.    int suma = 10; // Para poder entrar en el bucle
  3.  
  4.    while(suma >= 10) {
  5.        suma = 0; // Tenemos que resetear la suma en cada iteracion
  6.  
  7.        while (numero != 0){ // Calculamos la suma de todas las cifras
  8.            suma += numero%10;
  9.            numero /= 10;
  10.        }
  11.  
  12.        numero = suma; // Igualamos el numero pues lo usaremos para comprobar en la siguiente iteracion
  13.    }
  14.  
  15.    return numero;
  16. }

Está comprobado con el ejemplo que pones :D
425  Programación / Programación C/C++ / Re: Error consola Code:Blocks en: 21 Noviembre 2015, 16:04 pm
En el log de code::blocks (pulsando F2), ¿que aparece?

¿Has probado usando este código?
Código
  1. #include <iostream>
  2.  
  3. int main() {
  4.    std::cout << "Hello World" << std::endl;
  5.  
  6.    return 0;
  7. }

Necesitamos más datos para poder ayudarte
426  Programación / Programación C/C++ / Re: (Consulta) Libro/tutoriales de C++11 en: 15 Noviembre 2015, 22:18 pm
Lástima que no haya prácticamente nada en español... Es cierto que podría leer la referencia (lo nuevo). Probablemente es lo que haga! Muchas gracias por sus respuestas
427  Programación / Programación C/C++ / Re: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación en: 13 Noviembre 2015, 22:22 pm
Primero, no deberías usar las versiones de OpenGL antiguas. Lo segundo: lo primero que se ha de hacer es trasladar y luego rotar. No sé muy bien como iba en las versiones anteriores a la 3, pero lo que tendrías que hacer es lo siguiente:

projectionMatrix*(rotationMatrix*(translateMatrix*GL_MODELVIEW_MATRIX))

Cuando traslades el objeto, ten en cuenta el ángulo

Código
  1. if(wKeyIsPressed) {
  2.    position.z += K * cos(fAngleY); // La K es una constante
  3.    position.x -= K * sin(fAngleY);
  4. }
Y así con todas las teclas

Corregidme si me equivoco, pues suelo tratar con temas de renderizado y todo eso, no estoy acostumbrado a trasladar, rotar, ni cámaras... (si, suena estúpido, pero es así :P)
428  Programación / Programación C/C++ / (Consulta) Libro/tutoriales de C++11 en: 13 Noviembre 2015, 19:02 pm
Hola. Estoy buscando un libro en español para aprender C++11. No sé si existe en español. En caso de que no haya, ¿cuál me recomiendan en inglés? Gracias de antemano.
429  Programación / Programación C/C++ / Re: hola en: 11 Noviembre 2015, 23:42 pm
¿ que opinas de la libreria freeglut'? ¿sabes donde puedo encontrar tutoriales ?
Aunque se lo hayas preguntado a avesudra, te doy mi opinión. Para usar OpenGL, te aconsejo que uses GLFW. En mi experiencia, he encontrado más tutoriales sobre GLFW que sobre FreeGLUT. Por ejemplo, mi tutorial favorito de entre todos los que he encontrado es: http://learnopengl.com/. La información está muy clara y trata tanto los temas más sencillos como los más complejos con total soltura y bien explicado. Otros tutoriales son:

Yo no he encontrado ningún tutorial sobre OpenGL 3.3 en adelante en español. NO APRENDAS VERSIONES INFERIORES A ESTA. OpenGL sufrió un gran cambio a partir de la versión 3, donde se fueron descatalogando la mayoría de las funcionalidades, por lo que todo lo que aprendieses de las versiones anteriores a la 3, no te serviría de nada al pegar el salto.
430  Programación / Programación C/C++ / Re: (Consulta) La función para pausar el thread principal en C++11 Standard no vale en: 11 Noviembre 2015, 16:25 pm
Yo he probado el código usando "std::this_thread::sleep_for(std::chrono::milliseconds(1));", y sucede algo curioso: algunas veces marca un milisegundo, pero otras veces marca entre esos 14 y 15 milisegundos... Es extraño
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines