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 Mensajes
Páginas: 1 ... 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [54] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 ... 102
531  Programación / Programación C/C++ / Re: que esta mal ? en: 13 Septiembre 2019, 22:10 pm
No me he parado a comprobar qué son dos números amigos pero en el bucle de la B has mezclado la <i> y la <j>. Seguramente eso esté mal.
532  Programación / Programación C/C++ / Re: que editor recomiendan en: 13 Septiembre 2019, 08:46 am
Yo empecé usando IDEs (Dev C++ para ser exactos) ya que es lo que te suelen imponer cuando estás estudiando programación. Después aprendí a compilar desde la Terminal (de Linux) y a crear Makefiles por lo que dejé los IDEs a un lado y empecé a usar Gedit (es un editor de textos muy simple pero a la vez me parece una opción aceptable para proyectos no muy MUY grandes).
Hace poco probé SublimeText y Atom que son editores algo más completos y más orientados a la programación y definitivamente me quedo con Atom. Tiene muchas extensiones disponibles para poder añadir/quitar las funcionalidades que uno quiera (como la vista general característica de SublimeText) y también tiene autocompletado por si es algo que te interesa.
Sin embargo por tu comentario parece que lo que buscas es un IDE por lo que te recomiendo CodeBlocks como ya te han mencionado. Es un IDE muy completo.
PD: Algún día probaré Notepad++ por curiosidad :rolleyes: :-X
533  Programación / Programación C/C++ / Re: [C++] Ayuda para ejercicio de un calendario usando arrays. en: 12 Septiembre 2019, 15:35 pm
Hola, buenas a todos, tengo una pequeña duda sobre el siguiente ejercicio, les dejo el enunciado en negrita.

Defina el tipo Matriz como un array de 6x7 números enteros, y diseñe un subprograma para crear un calendario de un mes genérico en una matriz que se devolverá como parámetro de salida.
El subprograma se denominará calendario.  El primer parámetro (m), de salida, es de tipo Matriz.  El segundo parámetro (ndias), de entrada, es de tipo int y representa el número total de días del mes del calendario (28, 29, 30 o 31). El tercer parámetro (pds), de entrada, es de tipo int y representa el índice del día de la semana donde comienza el primer día del mes (donde 0 corresponde a Lunes, 1 a Martes, y así sucesivamente hasta 6 que representa al Domingo).


El código que he implementado es el siguiente:
Código
  1. void calendario(Tipo_Matriz &m, const int ndias,const int pds){
  2. //Iniciar calendario me pone todos los valores de la matriz a 0
  3.    iniciar_calendario(m);
  4.  
  5.    int dia = 1;
  6.    int j;
  7.    for(int i = 0; i < 6; i++){
  8.        if(i == 0){
  9.            j = pds;
  10.        }else{
  11.            j = 0;
  12.        }
  13.        while(dia <= ndias && (j >= 0 && j < 7)){
  14.            m[i][j] = dia;
  15.            dia++;
  16.            j++;
  17.        }
  18.    }
  19.    //mostrar calendario
  20.    cout << endl;
  21.    for(int i = 0; i < 6; i++){
  22.        for(int j = 0; j < 7; j++){
  23.            cout << m[i][j] << " ";
  24.        }
  25.        cout << endl;
  26.    }
  27. }
  28.  

Cuando introduzco dias = 30 y pds = 2 (por ejemplo), el resultado que obtengo es:
0 0 1 2 3 4 6
6 7 8 9 10 11 13
13 14 15 16 17 18 20
20 21 22 23 24 25 27
27 28 29 30 0 0 0
0 0 0 0 0 0 0
me como una serie de números y no sé exactamente donde está el error, por lo que si pudiesen ayudarme, me sería de gran ayuda.
Muchas gracias!


 

Mod: No escribir titulos en mayusculas.

Después de estar un buen rato buscando dónde podía estar el fallo, he terminado por probar el código personalmente y... Esta es la salida que he obtenido:
Código:
0	0	1	2	3	4	5	
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 0 0 0
0 0 0 0 0 0 0
Por lo que no hay ningún error. No sé si es que lo has escrito manualmente y entonces has "corregido" el error sin darte cuenta o es que has modificado algo y lo estás ejecutando sin volver a compilarlo pero ya ves que funciona. Obviamente se puede mejorar como ya te han demostrado pero correcto es. Por ejemplo esta parte:
Código
  1. if(i == 0)
  2.    j = pds;
  3. else
  4.    j = 0;
La condición del <if> va a ser cierta una vez (en la primera iteración). Por lo que se puede poner directamente el valor de <pds> a la <j> antes del bucle.
Código
  1. int dia = 1;
  2. int j = pds;
  3. for(...){
  4.    while(...){
  5.        // el cuerpo del while
  6.    }
  7.    j = 0; // actualizamos siempre a 0 despues de la primera iteracion
  8. }

Y respecto a la solución que te ha dado @engel lex, también es correcta. El resultado es el mismo que he mostrado antes. Comprueba que estés guardando y recompilando el código con cada modificación o si estás usando un IDE prueba a cerrarlo y volver a abrirlo.

Ya nos contarás si consigues solucionarlo y cuál era el problema al final. Suerte :-X
534  Programación / Programación C/C++ / Re: Ayuda funcion eliminar en: 10 Septiembre 2019, 01:19 am
Con el código bien tabulado sería más fácil de ver pero yo no sé cuál es la función del paréntesis de cierre de la línea 12... :silbar:
535  Programación / Programación C/C++ / Re: arreglos unidimensionales en: 5 Septiembre 2019, 23:21 pm
No se hacen tareas.
Coloca tus avances y comenta dónde tienes algún problema de manera más específica.
536  Programación / Programación C/C++ / Re: Codigo Grafos C++ en: 5 Septiembre 2019, 23:18 pm
No se hacen tareas.
Inténtalo tú y cuando tengas un problema específico, muestra tus avances para poder ayudarte.
537  Programación / Programación C/C++ / Re: Problema mazo de cartas en: 5 Septiembre 2019, 21:15 pm
Libros no sé ya que yo apenas he leído uno. Es posible que @string Manolo te recomiende alguno ya que he visto otros temas en los que ha recomendado algunos libros. También puedes ver cursos online (posiblemente gratuitos) y sobre todo practicar mucho.
Te dejo un enlace AQUÍ a la página de <cplusplus.com>. Está en inglés pero es un inglés muy fácil de entender. Ahí puedes ver un montón de librerías con sus respectivas funciones y ejemplos de uso. Puede que te sirva.

Personalmente lo que haría sería "quitar los palos". Para este juego lo importante es el valor de la carta, el palo importa más bien poco y al quitar los palos podemos guardar todos los números en un solo array y aplicar el código que te puse para sacar una carta y hacer que no salga más veces.

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. const int NUM_CARTAS = 40;
  6.  
  7. int main(){
  8.    int cartasDisponibles = NUM_CARTAS;
  9.    int cartas[NUM_CARTAS] = {1,2,3,4,5,6,7,10,11,12,1,2,3,4,5,6,7,10,11,12,1,2,3,4,5,6,7,10,11,12,1,2,3,4,5,6,7,10,11,12};
  10.  
  11.    srand(time(NULL));
  12.  
  13.    while(cartasDisponibles > 0){
  14.        int indiceAleatorio = rand() % cartasDisponibles;
  15.        int cartaActual = cartas[indiceAleatorio];
  16.        cout << "La carta sacada es: " << cartaActual << endl;
  17.  
  18.        // Guardamos la carta que hemos sacado al final del array para que no salga mas veces
  19.        int auxiliar = cartas[indiceAleatorio];
  20.        cartas[indiceAleatorio] = cartas[cartasDisponibles-1];
  21.        cartas[cartasDisponibles-1] = auxiliar;
  22.        --cartasDisponibles;
  23.  
  24.        // Si quieres ver las cartas que ya han salido
  25.        cout << "Cartas que ya han salido: ";
  26.        for(size_t i = cartasDisponibles; i < NUM_CARTAS; ++i)
  27.            cout << cartas[i] << "  ";
  28.    }
  29. }
Puedes probar este código para que veas como saca todas las cartas y muestra las que ya han salido. Luego es cosa tuya ver qué cosas puedes aprovechar y cuáles no para tu programa.
En caso de hacerlo con una matriz y con los palos como lo tienes implementado, se complica un poco más el código. Tendrías que llevar 4 contadores: <orosDisponibles>, <copasDisponibles>, <espadasDisponibles> y <bastosDisponibles> y en vez de guardar las cartas que ya han salido al final del array, tendrías que guardarlos al final de la fila correspondiente a ese palo.

También tienes opciones un poco más "profesionales" pero que supongo que no habrás visto todavía como usar un <struct> o <class> llamado <Carta> que tenga <numero> y <palo> y hacer uso de contenedores de la STL como el <multiset>.
538  Programación / Programación C/C++ / Re: Problema mazo de cartas en: 5 Septiembre 2019, 01:10 am
Está claro que hay errores. Yo te he mostrado una forma de hacer el ejercicio y he usado nombres de variables para que entiendas el funcionamiento, pero tú no puedes meter mi código en el tuyo y esperar que funcione cuando no has declarado esas variables.
Además:
  • Declaras dos veces <cartaAleatoria> (línea 14 y 27)
  • Creas la variable <indiceAleatorio> (línea 26) pero luego no lo usas en la siguiente instrucción (línea 27)
  • Estás asignando decimales a variables de tipo <int> (líneas 55 y 73)

PD: Cuida las tabulaciones... No me extraña que si llevas dos meses con este código te duela la cabeza porque ya me duele a mí y lo he visto dos veces. :xD
PD 2: Te recomendaría usar funciones para hacer el programa más limpio y más fácil de revisar tanto para ti como para nosotros. :-X
539  Programación / Programación C/C++ / Re: Problema mazo de cartas en: 4 Septiembre 2019, 20:09 pm
No, es mucho más fácil. Generas un número aleatorio entre 0 y numCartasDisponibles-1 y listo:
Código
  1. // Obtener una carta aleatoria
  2. int indiceAleatorio = rand() % numCartasDisponibles;
  3. int cartaAleatoria = cartas[indiceAleatorio];
  4.  
  5. // Eliminamos esa carta de las disponibles
  6. cartas[indiceAleatorio] = cartas[numCartasDisponibles-1];
  7. --numCartasDisponibles;
  8.  
  9. // Tambien puedes hacer
  10. cartas[indiceAleatorio] = cartas[numCartasDisponibles-1];
  11. cartas[numCartasDisponibles-1] = cartaAleatoria;
  12. --numCartasDisponibles;
Si eliminas la carta de la primera forma estás perdiendo el valor de esa carta en el array mientras que si lo haces de la segunda forma tendrás de <0> a <cartasDisponibles-1> las cartas que aún no han salido y de <cartasDisponibles> a <numCartas> las cartas que ya han salido.
Yo te recomendaría la segunda forma porque es una sola línea de código más y te permite ver en cualquier momento todas las cartas que ya han salido y así puedes llevar un mayor control.
540  Programación / Programación C/C++ / Re: Ayuda en: 4 Septiembre 2019, 20:00 pm
Código
  1. #include <iostream>
  2.  
  3. int main(){
  4. float x = 12.9, aux;
  5. int y = x;
  6.  
  7. aux = x - y; //aux = 12.9 - 12 = 0.9
  8.  
  9. if (aux >= 0.5){
  10. ++y; // Es igual a y += 1 que es igual a y = y + 1
  11. }
  12.  
  13. std::cout << y;
  14.  
  15.  
  16. std::cin.get();
  17. return 0;
  18. }
Si usas
Código
  1. using namespace std;

quita los [std::] y ya estaría
Esto redondea a la unidad y lo que están solicitando es un redondeo a la centena... :silbar:
La solución que sí funciona es la que ha dado @engel lex.
Páginas: 1 ... 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [54] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines