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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 ... 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 [128] 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 ... 161
1271  Programación / Programación C/C++ / Re: Print pictureBox en: 29 Abril 2016, 17:02 pm
Por la forma en como se accede a la jerarquía de clases: usando un punto entre elementos en vez de los dos puntos.
1272  Programación / Programación C/C++ / Re: Print pictureBox en: 29 Abril 2016, 16:45 pm
Esa respuesta es para C# en .NET
1273  Programación / Programación C/C++ / Re: AYUDA!! Práctica universidad c++ en: 29 Abril 2016, 16:42 pm
Si es muy larga usa la página pastebin.com y cuelgas la dirección aquí.
1274  Programación / Programación C/C++ / Re: TIP: para limpiar el buffer de entrada en: 29 Abril 2016, 16:39 pm
Fragmento de código que hice como respuesta a un juego de mastermind para responder en otro post. Ofrece la funcionalidad de que mira que la entrada de teclado sea efectivamente un número del mismo número de dígitos que la incógnita a buscar, en este programa es un número de 4 dígitos.
Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. #define clrfstr(X) { \
  6.     if(!strchr((X), '\n')) \
  7.         while(getchar() != '\n'); \
  8. }
  9.  
  10. int validar(char cadena[], size_t sizestr, size_t nelements) {
  11.    int i;
  12.    int ok = 1;
  13.  
  14.    for(i = 0; i<4 && ok; i++)
  15.        ok = isdigit(cadena[i]);
  16.    if(cadena[nelements] != '\n')
  17.        ok = 0;
  18.  
  19.    return ok;
  20. }
  21.  
  22. int main() {
  23.    const char incognita[] = "1234";
  24.    const int intentos = 10;
  25.    char entrada[sizeof incognita + 1];
  26.    int i;
  27.    int ganador = 0;
  28.  
  29.    for(i = 0; i < intentos && !ganador; ++i) {
  30.        printf("%03i > ", i+1);
  31.        fgets(entrada, sizeof entrada, stdin);
  32.        clrfstr(entrada);
  33.        if(!validar(entrada, sizeof entrada, strlen(incognita)))
  34.            printf("<<< ERROR >>>\n\n");
  35.        else
  36.            ganador = 1;
  37.    }
  38.  
  39.    return 0;
  40. }
  41.  

Prueba a introducir valores de diferentes cantidades de dígitos, p.ej: 1234, 12, 123456...
ahora borra, o comenta, la línea 6
Código:
if(!strchr((X), '\n')) \
y vuelve a probar otra vez. Se ve claramente la diferencia del comportamiento del programa.
1275  Programación / Programación C/C++ / TIP: para limpiar el buffer de entrada en: 29 Abril 2016, 13:19 pm
Intentando responder a un post y, como siempre pruebo el código de mi respuesta antes, necesitaba de una forma genérica una instrucción para limpiar el buffer de entrada stdin después de adquirir una cadena de entrada mediante fgets.

fgets, según el largo de la cadena introduce saca de stdin el carácter '\n' o no y si se usa while (getchar() != '\n'); sin que haya un carácter de nueva línea en el buffer el programa se detiene y espera a que el usuario introduzca algo. Y eso no queda bien.. Por otra parte controlar a mano si hay o no un carácter de nueva línea es engorroso y ensucia el código.

Llegué a la siguiente solución. Necesita de la librería string.h.

Código
  1. #include <string.h>
  2.  
  3. #define clrfstr(X) { \
  4.     if(!strchr((X), '\n')) \
  5.         while(getchar() != '\n'); \
  6. }

Esto vacía, o no, stdin dependiendo de si ha la cadena ingresada contiene, o no, el carácter de nueva línea.

El código se debe incluir justo después de fgets o de la función que se haya usado para adquirir la cadena. X es el argumento que representa a la variable cadena adquirida.
1276  Programación / Programación C/C++ / Re: [Ayuda] Hallar la suma de los dígitos de el factorial de 100 en: 29 Abril 2016, 06:56 am
Ahora no tengo tiempo de probar nada.

Para conseguir el módulo de doubles usa fmod.



Lo he probado y deberás buscar otra solución para conseguir el factorial de 100.
tu programa dice
100! = 93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248

python3 dice
100! = 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
1277  Programación / Programación C/C++ / Re: {AYUDA}PROGRAMA EN C++ en: 29 Abril 2016, 00:54 am
Replanteé la fórmula en base a la física básica de instituto. Hace tanto que no toco todo esto que no puedo asegurar que esté bien, por eso te pedía los resultados, si los tenías.

Partiendo de la formula de la aceleración: a = (vf - vo) / (tf - to)
y de la fórmula del espacio recorrido por una velocidad constante: e = v * t

donde
a : aceleración en m/s^2
v : velocidad en m/s
t : tiempo en s

Siendo:
vx : velocidad horizontal
vy : velocidad vertical
vo : velocidad inical
A : ángulo de disparo
ym : altura del cañón respeto al suelo
g : aceleración de la gravedad = 9.8m/s^2

vx = vo * cos(A)
vy = vo * sin(A)

1. ALTURA MÁXIMA
g = (vf - vo) / (tf - to) = -vo / tf

La aceleración es negativa puesto que va frenando. Consideramos pues -g
-g = -vo / tf
tf = -vo / -g = vo / g   =>   t1 = vy / g

e = v * t    =>    h = vy * t1      ( h es la altura máxima que adquiere el proyectil respecto al cañón )
h = vy * (vy / g) = vy^2 / g

ht = ym + h    (ht es la altura máxima con respecto al suelo)

2. TIEMPO DE CAÍDA
g = (vf - vo) / (tf - to)
v = e / t

g = (ht / tp) - 0 / 1 - 0 = ht / tp    ( tp es el tiempo desde la máxima altura hasta que toca suelo )
tp = ht / g

3. ESPACIO HORIZONTAL RECORRIDO
t = t1 + tp    ( t es el tiempo de vuelo del proyectil: el tiempo de subida más el tiempo de bajada )
e = vx * t

4. SUSTITUYENDO
e = vx * t
e = vx * (t1 + tp)
e = vx * (vy/g + ht/g) = vx * [(vy + ht) / g] = vx * (vy + ht) / g
e = vx * (vy + ym + h) / g
e = vx * (vy + ym + vy^2 / g) / g

De esta forma el programa resulta en lo siguiente:
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define M_PI 3.14159265359
  5. #define DEG2RAD(X) (X)*M_PI/180
  6.  
  7. int main() {
  8.    const double g = 9.8;
  9.    const double Vo = 105;
  10.    const double Ym = 15;
  11.    double Vx;
  12.    double Vy;
  13.    double angulo;
  14.    double angulof;
  15.    double d;
  16.  
  17.    for(angulo = 20; angulo <= 80; angulo += 20) {
  18.        angulof = DEG2RAD(angulo);
  19.        Vx = Vo * cos(angulof);
  20.        Vy = Vo * sin(angulof);
  21.        d = Vx * (Vy + Ym + Vy*Vy/g) / g;
  22.        printf("d(%02.0fº) = %f\n", angulo, d);
  23.    }
  24.    return 0;
  25. }
1278  Programación / Programación C/C++ / Re: Ayuda: programa en lenguaje C en: 28 Abril 2016, 23:55 pm
Mira si el número de asteriscos en 4. Si es así para el bucle. Puedes ponerlo en la condición del while: intentos<100 && asteriscos!=4
1279  Programación / Programación C/C++ / Re: {AYUDA}PROGRAMA EN C++ en: 28 Abril 2016, 23:43 pm
Estoy oxidado en matemáticas.

Tengo los siguientes resultados:
d(20º) = 1837.556662
d(40º) = 4492.157928
d(60º) = 5087.585718
d(80º) = 2250.260680

¿Tienes los resultados de la ecuación para compararlos?
1280  Programación / Programación C/C++ / Re: Ayuda: programa en lenguaje C en: 28 Abril 2016, 21:36 pm
Bueno, vamos con unos pocos fallos, los más fáciles:

Controla las asignaciones porqué lo que haces es mirar igualdad:
donde escribes j==4 e intentos==100
debe haber j=4 e intentos=100

Tienes un fallo en scanf: el nombre de un array ya es un puntero.
donde escribes scanf("%s", &resp)
debes haber scanf("%s", resp)

Para contar el número de asteriscos, barras verticales y barras bajas en cada iteración estos deben empezar a contar a partir de 0. Así después de do{ debe haber
asteriscos=0, barras=0, bajas=0;

Para el problema de lógica: sea cual sea lo que ha ocurrido acabas haciendo que j=4 y por tanto se detiene ese bucle y por tanto siempre comparas cad==resp[0]. Hay que reescribir eso totalmente.
Páginas: 1 ... 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 [128] 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines