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


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 112
71  Programación / Programación C/C++ / Re: introducir n numeros reales en c en: 12 Marzo 2018, 23:03
Tres pistas:
1. En C una sentencia es falsa si se evalúa a 0 y es verdadera si se evalúa diferente a 0.
2. while ejecuta su código asociado si la condición es cierta y repite.
3. scanf devuelve el número de conversiones realizadas con éxito, es decir, en caso de no poder hacer ninguna devuelve 0.
72  Programación / Programación C/C++ / Re: Problema de las 8 reinas en: 12 Marzo 2018, 17:22
Sigo creyendo que es un problema de mala interpretación. Viendo algunas soluciones al tablero de las 8 reinas siempre hay algunas de ellas alineadas, aunque sea a dos saltos de caballo.



Se me ha ocurrido. A ver si en línea recta no quiere decir que el intervalo de de tres reinas significa la misma función de recta entre las tres:
Por ejemplo un salto de caballo [+2, -1], o un salto un poco más largo [+3, +2]. Entonces sí se podría decir que están alineadas por una recta, pero tal y como muestras en el ejemplo de tu ejercicio pues no es una recta; es una línea pero no es recta.
73  Programación / Programación C/C++ / Re: Problema de las 8 reinas en: 12 Marzo 2018, 14:54
La alineación se refiere, cómo has dicho, en la misma diagonal, columna o fila. Para lo demás está bien. Si ya lo tienes resuelto así ya has terminado.
74  Programación / Programación C/C++ / Re: Ayuda en Sacar la nota mayor y menor en: 10 Marzo 2018, 23:11
No.
Supongamos que mayor vale 100.
Consigues la nota de un alumno, supongamos 50.

Si comparas si nota > mayor (50 > 100) siempre saldrá como más grande mayor.

En cambio si haces, en un principio, que mayor vale 0, en la primera comparación harás nota > mayor (50 > 0), cosa que será verdadera y podrás hacer mayor = nota.
75  Programación / Programación C/C++ / Re: Ayuda en Sacar la nota mayor y menor en: 10 Marzo 2018, 22:22
Empieza definiendo notamenor=100 y notamayor=0. En el for, por cada nota válida, si la nota > notamayor, actualizas notamayor = nota; y si la nota < notamenor, actualizas notamenor = nota.
76  Programación / Programación C/C++ / Re: duda en: 9 Marzo 2018, 13:47
Es al revés p1.wheight. Primero va la variable de tipo estructura (que es quien engloba) y después su variable interna.
77  Programación / Programación C/C++ / Re: Problema con funciones en C en: 9 Marzo 2018, 07:18
C no retorna múltiples valores, solo uno.
Deberás pasar datos por referencia o hacer las variables n1, n2 y n3 globales.
78  Programación / Programación C/C++ / Re: duda en: 9 Marzo 2018, 01:12
Como te decía, la estructura no debe guardar el IMC, lo debes sacar de forma que no se pueda modificar, y eso es con una función.

Algo así:
Código:
float get_IMC(tPatient p) {
    return weight/(height*height);
}

Cada vez que en el código debas obtener el IMC de alguien usas la función.

¿Por qué? Imagínate que IMC se guarda en la estructura y la calculas:
Código:
p.IMC = p.wheight/(height*height);

Ahora tienes en p.IMC el índice de masa corporal, pero eso no evita que en cualquier otro punto del programa se haga
Código:
p.IMC = 25;

A partir de este momento el IMC será 25 porqué sí y no el resultado del cálculo.
79  Programación / Programación C/C++ / Re: duda en: 8 Marzo 2018, 20:40
A ver:
Dentro de una estructura no se puede poner código. Ahí intentas que IMC sea calculado por una operación matemática pero eso debes hacerlo en otro sitio.
Y aunque fuera C++, que sí permite código éste debe encapsulado en un método, no se puede escribir directamente.
Siendo coherentes con el código deberías eliminar todo lo referente al IMC de la estructura ya que si dejas allí la variable en cualquier momento se podría cambiar falseando el dato.

Haz una función que reciba la estructura, calcule la IMC a partir de sus datos y lo devuelva.

De todas formas veo algo raro con las funciones PrintPatient#(tPatient p#);
¿Las funciones hacen cosas diferentes? ya que tPatient, tPatient2 y tPatient3 son el mismo tipo de dato ¿porqué hay 3? Una cosa es el tipo de dato y la otra las variables.
Si las funciones PrintPatient# son todas iguales te basta que exista solo una y le vayas pasando las diferentes variables de los pacientes. Algo así:

Código:
tPatient p1, p2, p3;

// Cargas los datos de p1, p2 y p3

PrintPatient(p1);
PrintPatient(p2);
PrintPatient(p3);
80  Programación / Programación C/C++ / Re: Creacion de matriz en: 8 Marzo 2018, 20:39
Bueno, creo que te has complicado un poco.
Empieza instalando un valor que indique que la casilla está vacía, yo he usado el 0 (aprovechando que 0 significa también false y cualquier otro número true).

El primer paso de meter el 5 y el 6 en la primera y última fila es muy sencillo ya que la matriz está vacía. Caigan donde caigan están bien.

Para incluir el 2 y el 3 tampoco tiene mucha complicación. Se corre la matriz por filas desde el inicio hasta penúltima fila. Por fila:
· Buscar una misma columna vacía para y e y+1
· En y incluir el 2.
· En y+1 incluir el 3.

Para incluir los entre números aprovecha las marcas de casilla vacía. Prepara una bandera para indicar si debes escribir los unos o no.

Por cada fila:
· desactiva la badnera
· Por cada columna:
   · Si la bandera está desactivada y la casilla no está vacía:
      · activa la bandera (Después de activar esa bandera no debes hacer nada y esperar a la siguiente iteración)
   · Y si no:
      · Si la casilla está vacía:
         · escribe un 1 en ella
      · Y si no:
         · termina el bucle columna

Para terminar de rellenar la matriz recórrela casilla por casilla. Si la casilla está vacía introduce 1 o 4 aleatoriamente.

Esto en C11 quedaría así:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <stdbool.h>
  5.  
  6. /* Matriz global por lo que
  7.  * al crearla se llena de ceros ( 0 )
  8.  * así que aprovecharé eso para
  9.  * marcar la posición vacía
  10.  */
  11. #define FILAS 4u
  12. #define COLUMNAS 6u
  13.  
  14. int matriz[FILAS][COLUMNAS];
  15.  
  16. // devuelve una casilla vacia aleatoria
  17. // en la fila y del array
  18. unsigned columna_vacia_en_fila(unsigned fila) {
  19.    unsigned x;
  20.  
  21.    do {
  22.        x = rand()%COLUMNAS;
  23.    } while(matriz[fila][x] && matriz[fila+1][x]);
  24.  
  25.    return x;
  26. }
  27.  
  28. // incluir el 5 en la primera fila
  29. // y el 6 en la última fila
  30. void incluir_5_6() {
  31.    unsigned x;
  32.  
  33.    x = rand()%COLUMNAS;
  34.    matriz[0][x] = 5;
  35.  
  36.    x = rand()%COLUMNAS;
  37.    matriz[FILAS-1][x] = 6;
  38. }
  39.  
  40. // incluir el 2 en fila y+1
  41. // y el 3 en la fila y+1
  42. void incluir_2_3() {
  43.    unsigned x, y;
  44.  
  45.    for(y=0; y<FILAS-1; ++y) {
  46.        x = columna_vacia_en_fila(y);
  47.        matriz[y][x] = 2;
  48.        matriz[y+1][x] = 3;
  49.    }
  50. }
  51.  
  52. // incluir el 1 entre dos números en una fila
  53. // por cada fila
  54. void incluir_1_entre() {
  55.    unsigned x, y;
  56.    bool escribir;
  57.  
  58.    for(y=0; y<FILAS; ++y) {
  59.        escribir = false;
  60.        for(x=0; x<COLUMNAS; ++x) {
  61.            if(!escribir && matriz[y][x]) {
  62.                escribir = true;
  63.            }
  64.            else {
  65.                if(matriz[y][x]) break;
  66.                else matriz[y][x] = 1;
  67.            }
  68.        }
  69.    }
  70. }
  71.  
  72. // rellenar indistintamente con 1
  73. // y 4 las casillas que faltan
  74. void incluir_1_4() {
  75.    unsigned x, y;
  76.  
  77.    for(y=0; y<FILAS; ++y) {
  78.        for(x=0; x<COLUMNAS; ++x) {
  79.            if(matriz[y][x] == 0) {
  80.                matriz[y][x] = rand()%2? 4 : 1;
  81.            }
  82.        }
  83.    }
  84. }
  85.  
  86. // imprimir la matriz
  87. void imprimir() {
  88.    unsigned x, y;
  89.  
  90.    for(y=0; y<FILAS; ++y) {
  91.        for(x=0; x<COLUMNAS; ++x) {
  92.            printf("%d ", matriz[y][x]);
  93.        }
  94.        puts("\n");
  95.    }
  96. }
  97.  
  98. int main() {
  99.    srand(time(NULL));
  100.  
  101.    incluir_5_6();
  102.    incluir_2_3();
  103.    incluir_1_entre();
  104.    incluir_1_4();
  105.  
  106.    imprimir();
  107. }



Gracias a un dato apuntado por NEBIRE en la siguiente respuesta me he dado cuenta de algo que se me había pasado por alto: el 2 y el 3 deben estar en la misma columna.
Solucionado en la reedición.
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 112
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines