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


 


Tema destacado:


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / ordenamieno burbuja en: 12 Diciembre 2018, 23:12
Necesito que mi programa ingrese unos datos a una base y las ordene mediante ordenamiento burbuja, el problema es que no me ordena los libros ingresados, si alguien me pudiese señalar donde tenga el error el prgrama porfavor.

Adjunto mi codigo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <conio.h>
  4.  
  5. #define MAXLIN 80
  6. #define MAXTIT 40
  7. #define MAXAUT 40
  8. #define MAXEDIT 40
  9. #define MAXREV 40
  10.  
  11. #define MAXTXT 100
  12.  
  13. enum {anadir=1, listartodo, listarano, salir};
  14.  
  15.  
  16.  
  17. struct texto {
  18. char titulo[MAXTIT];
  19. char autor[MAXAUT];
  20. char editorial[MAXEDIT];
  21. char revista[MAXREV];
  22. int numref;
  23. int numed;
  24. int auxref;
  25. int anyo;
  26. int clase;
  27. };
  28.  
  29. struct biblioteca {
  30. struct texto txt[MAXTXT];
  31. int cantidad;
  32. };
  33.  
  34. int main (void) {
  35.  
  36. struct biblioteca mistxt;
  37. int opcion, opc, i, j, ano, aux;
  38. char titulo[MAXTIT];
  39. char autor[MAXAUT];
  40. char linea[MAXLIN];
  41.  
  42.     mistxt.cantidad = 0;
  43.  
  44. do{
  45. do{
  46. printf("-------------------------------------\n");
  47. printf("Biblioteca Universidad de Valparaisio\n");
  48. printf("-------------------------------------\n");
  49. printf("1) Anadir Libro/Revista.\n");
  50. printf("2) Listar todos los textos.\n");
  51. printf("3) Listar por ano.\n");
  52. printf("4) Salir.\n");
  53. printf("\n");
  54. printf("Elija una opcion: \n");
  55. gets(linea); sscanf (linea, "%d", &opcion);
  56. if (opcion<1 || opcion>5){
  57. printf("La opcion ingresada es incorrecta, intente otra vez.\n");
  58. }
  59. }   while (opcion <1 || opcion >5);
  60.     printf("\n");
  61. switch (opcion) {
  62. case anadir:
  63. if (mistxt.cantidad == MAXTXT) {
  64. printf("La base de datos esta llena. Lo sentimos.\n");
  65. } else {
  66.  
  67. printf("Ingrese el numero de referencia: \n");
  68. gets(linea); sscanf(linea, "%d", &mistxt.txt[mistxt.cantidad].numref);
  69. mistxt.txt[mistxt.cantidad].auxref = mistxt.txt[mistxt.cantidad].numref;
  70. printf("Ingrese el titulo: \n");
  71. gets(mistxt.txt[mistxt.cantidad].titulo);
  72. printf("Ingrese el autor: \n");
  73. gets(mistxt.txt[mistxt.cantidad].autor);
  74. printf("Ingrese la editorial: \n");
  75. gets(mistxt.txt[mistxt.cantidad].editorial);
  76. printf("Ingrese ano de publicacion: \n");
  77. gets(linea); sscanf(linea, "%d", &mistxt.txt[mistxt.cantidad].anyo);
  78. do{
  79. printf("Ingrese la clase de texto que es: \n1) Libro \n2) Revista\n");
  80. printf("Elija la opcion: 1 o 2\n");
  81. gets(linea); sscanf (linea, "%d", &opc);
  82. if (opc<1 || opc>2){
  83. printf("La opcion ingresada es incorrecta, intente otra vez.\n");
  84. }
  85. } while (opcion <1 || opcion >2);
  86. switch (opc) {
  87.  
  88. case 1:
  89. mistxt.txt[mistxt.cantidad].clase= 1;
  90. printf("Ingrese el numero de edicion: \n");
  91. gets(linea); sscanf(linea, "%d", &mistxt.txt[mistxt.cantidad].numed);
  92. break;
  93.  
  94. case 2:
  95. mistxt.txt[mistxt.cantidad].clase= 2;
  96. printf("Ingrese el nombre de la revista: \n");
  97. gets(mistxt.txt[mistxt.cantidad].revista);
  98. break;
  99. }
  100.  
  101. for(i=0;i<mistxt.cantidad;i++){
  102. for(j=0;j<mistxt.cantidad;j++){
  103. if(mistxt.txt[j].auxref>mistxt.txt[j+1].auxref){
  104. aux = mistxt.txt[j].auxref;
  105. mistxt.txt[j].auxref = mistxt.txt[j+1].auxref;
  106. mistxt.txt[j+1].auxref=aux;
  107. }
  108. }
  109. }
  110. printf("\n\n");
  111. mistxt.cantidad++;
  112. }
  113. break;
  114.  
  115. case listartodo:
  116.  
  117. for (i=0; i<mistxt.cantidad; i++){
  118. printf("---------------------------\n");
  119. printf("%d", i);
  120. printf("Numero de referencia: %d\n", mistxt.txt[i].numref);
  121. printf("Titlulo: %s\n", mistxt.txt[i].titulo);
  122. printf("Autor: %s\n", mistxt.txt[i].autor);
  123. printf("Editorial: %s\n", mistxt.txt[i].editorial);
  124. printf("Año de publicacion; %d\n", mistxt.txt[i].anyo);
  125. if(mistxt.txt[i].clase == 1){
  126. printf("Tipo de texto: Libro\n");
  127. printf("N° de edicion: %d\n", mistxt.txt[i].numed);
  128. }
  129. if(mistxt.txt[i].clase == 2){
  130. printf("Tipo de texto: Revista\n");
  131. printf("Nombre de la revista: %s\n", mistxt.txt[i].revista);
  132. }
  133. printf("---------------------------\n");
  134. }
  135. break;
  136.  
  137. case listarano:
  138. printf("Ingrese el ano a buscar: \n");
  139. scanf("%d", ano);
  140. for (i=0; i<mistxt.cantidad; i++){
  141. if (mistxt.txt[i].anyo==ano){
  142. printf("---------------------------\n");
  143. printf("%d", i);
  144. printf("Numero de referencia: %d\n", mistxt.txt[i].numref);
  145. printf("Titlulo: %s\n", mistxt.txt[i].titulo);
  146. printf("Autor: %s\n", mistxt.txt[i].autor);
  147. printf("Editorial: %s\n", mistxt.txt[i].editorial);
  148. printf("Año de publicacion; %d\n", mistxt.txt[i].anyo);
  149. if(mistxt.txt[i].clase == 1){
  150. printf("Tipo de texto: Libro\n");
  151. printf("N° de edicion: %d\n", mistxt.txt[i].numed);
  152. }
  153. if(mistxt.txt[i].clase == 2){
  154. printf("Tipo de texto: Revista\n");
  155. printf("Nombre de la revista: %s\n", mistxt.txt[i].revista);
  156. }
  157. printf("---------------------------\n");
  158. }
  159. }
  160. break;
  161. }
  162. } while (opcion != salir);
  163. return 0;
  164. }
  165.  
2  Programación / Programación C/C++ / Necesito saber por que no me funciona. en: 21 Noviembre 2018, 18:27
Tengo un hacer un programa que cumpla con lo siguiente:

1. Generar la Tarjeta de Coordenadas en forma aleatoria. Para ello, debe generar el número que formará
parte de la tarjeta. Ese número Sólo formará parte de ella si es un número primo.
2. Generar aleatoriamente la posición donde guardar ese número primo. Por ejemplo, si el número generado es
el 02, se debe validar que es primo y luego asignarle una posición en la tarjeta (Matriz). Debe obtener dicha
posición en forma aleatoria.
3. Una vez generada la tarjeta en forma íntegra, se debe mostrar por pantalla el contenido de la tarjeta, es decir,
mostrar en pantalla la tarjeta resultante.
4. Realizar tres transacciones bancarias en las cuales le solicite autorizar dicha transacción pidiendo y validando
3 coordenadas aleatorias de la Tarjeta.

 Para la Solución de esta problemática NO DEBE UTILIZAR:
o SENTENCIA FOR
o SENTENCIA CASE (SWITCH)
o PROCEDIMIENTOS O FUNCIONES.


La verdad es que llevo muchas horas intentando corregir errores, si alguien encuentra algo en lo que me pueda ayudar lo agradecería bastante.


#include<stdio.h>
#include<time.h>
int main () {
   int cont, primo, n, numero, x, y, c, j, cd, ok, trans, fil, col,aux;
   int matriz [4][6];
   c,j,cont,cd=0;
   while (c<=3){
      while (j<=5){
         matriz[c][j]=0; //aqui se asigna 0 a todas las posiciones de la matriz para inicializarla.
         j++;
      }
      c++;
      j=0;
   }
   primo=2;
   while (primo<100 && cont<=24){ // limite de primos menores a 100 y hasta el primo numero 24.
      n=1;
      cd=0;
      while (n<=primo){ // ciclo de comprobacion de numero primo.
         if (primo%n==0){
            cd++; //incrementados de contador de divisores
         }
         n++;
      }
      if (cd==2){
         cont++;
         ok=0;
         while (ok==0){ // controlador
            x= 0 + rand() % ((5+1)-0); // generacion aleatoria de la posicion x.
            y= 0 + rand() % ((3+1)-0); // generacion aleatoria de la posicion y.
            if(matriz[y]
  • ==0){ // comprobacion de que la ubicacion encontrada no se encuentre asignada.
               matriz[y]
  • =primo;
               ok++; // incremento del controlador para salir del bucle
            }
         }
      }
   primo++; //incrementador del numero a comprobar
   } //omitir de aqui en adelante ya que no esta terminado.
   
   printf("Bienvenido al banco, a continuacion se le otorgara una tarjeta de transferencias ICICARD.");
   printf("\n");
   x,y=0;
   while (y<=3){
      while (x<=5){
         printf("%d",matriz[y]
  • );
         j++;
      }
      c++;
      j=0;
   }
   printf("ABCDEF\n");
   printf("%d\n", matriz[y]
  • );
   printf("Desea realizar una transaccion?\n1-si\n0-no");
   scanf("%d", trans);
   if (trans==1){
      printf("Ingrese las coordenadas que aparecen a continuacion\n");
      col= 0 + rand() % ((5+1)-0);
   }
}
3  Programación / .NET (C#, VB.NET, ASP) / Re: Matriz aleatoria en: 21 Noviembre 2018, 02:02
Los 24 primeros números primos son estos: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89. Es decir, que no entiendo lo de "que estos sean aleatorios". Te refieres a tener esos 24 números y meterlos en la matriz desordenados?   

Este es el enunciado del ejercicio:

 El Banco requiere que los
alumnos de Ingeniería Civil realicen la implementación de la ICCard en una matriz de 6x4, que contenga los 24
primeros números primos menores que 100 y que están dispuestos en orden aleatorio.

Es mejor ingresar los numeros y meterlos en forma aleatoria en vez de generarlos aleatoriamente y comprobarlos para luego ingresarlos?
 
4  Programación / .NET (C#, VB.NET, ASP) / Re: Matriz aleatoria en: 21 Noviembre 2018, 01:54
No sé que sentido tiene no poder usar un bucle for si puedes usar un bucle while... quiero decir que un bucle es un bucle, entonce que más da, toda vez que un bucle de un tipo es fácilmente convertible en otro...
Otra cosa es que no se te permita usar bucles (ni for, ni while), en cuyo caso la opción es hacerlo de modo recursivo, en vez de iterativo.

En tu código veo 3 bucles... (solo considero los bucles de control). Uno que pretende contar hasta 24... pero si luego tienes uno que cuenta hasta 6 y otro que cuenta hasta 4, esos equivalen al otro (6*4=24), luego o el externo es inecesario, o los dos internos sobran.

Otra parte 'rara', es que dices que "...Los números que vayan generándose contiguamente se asignen en la siguiente casilla y así sucesivamente hasta completar la matriz de 6x4...", no sé bien como interpretarlo.
Si es de modo estricto, entiendo que en el ciclo 1 obtienes un valor que se pone en la segunda casilla del array?. Si es así, tienes el problema que cuando llegues al ciclo 24, no podrás ponerlo en la casilla 25 (pués no existe) y  a su vez, la casilla 0 queda desierta... (pués su rellenado exigiría un 'ciclo -1', o bien calcularlo previo a entrar a los bucles)...

Pese a las lagunas... el cascarón de tu problema podría ser algo así (si no he fallado en exceso al intentar entenderte):

Código:
Hacer mientras filas < 6
    Hacer mientras columnas < 4
        x= generarNumero  // generar número podría ser una función que realice cálculos, o lo que sea y que devuelve un número.
                                    // Si es algo sencillo, es preferible resolverlo in situ.
        matriz(filas,  columnas) = x  // Asignar el valor al array, pero en la casilla actual
        
        columnas + =1
    Fin mientras

    filas +=1
fin mientras

Disculpa la mala explicación del problema, la verdad es que es muy poco lo que me explicaron en clases de como realizar matrices y de programación en general, todo lo que e aprendido a sido en base a libros en su mayoría por lo que me cuesta bastante este tema, tu respuesta me sirvió bastante y te lo agradezco mucho. La idea de este programa es generar una matriz de 6x4 de forma aleatoria con los primeros 24 números primos, lo que quería era que me aclararan un poco la estructura para poder rellenar la matriz,  la idea del primer bucle es para que contar la cantidad de primos el cual quiero que se incremente cada vez que se ingrese un numero primo sin que se repita en la matriz, pero eso todavía no lo hago ya que estaba atascado con ese tema. Seguiré avanzando en el programa.

Muchas gracias saludos.
5  Programación / .NET (C#, VB.NET, ASP) / Re: Matriz aleatoria en: 21 Noviembre 2018, 01:38
No entiendo muy bien tu pregunta, si pudieras ser más claro con el objetivo del programa (con un ejemplo).
De todos modos si no puedes usar un <for> pero sí puedes usar un <while>... Aquí tienes como se transforma un <for> en un <while>:silbar::
Código
  1. // BUCLE FOR
  2. for(int i = 0; i < n; i++){
  3. // cuerpo del for
  4. }
  5.  
  6. // BUCLE WHILE
  7. int i = 0;
  8. while (i < n){
  9. // cuerpo del while
  10. i++;
  11. }





El objetivo del programa es generar una matriz de 6x4 con los primeros 24 numeros primos y que estos sean aleatorios.
6  Programación / .NET (C#, VB.NET, ASP) / Matriz aleatoria en: 20 Noviembre 2018, 21:50
Estimados tengo una duda de como poder hacer para asignar una valor obtenido a una matriz y que los números que vayan generándose contiguamente se asignen en la siguiente casilla y así sucesivamente hasta completar la matriz de 6x4, debo recalcar que no puedo usar la sentencia for.
Esto es lo que llevo hasta el momento pero estoy complicado con ese tema.

Código
  1. #include<stdio.h>
  2. #include<time.h>
  3. int main () {
  4. int cont, primo, n, numero, x, y, c;
  5. int matriz [6][4];
  6. cont=0;
  7. while (cont<=24) {
  8. n=1;
  9. x,y,c=0;
  10. srand (time(NULL));
  11. while (x<6) {
  12. while (y<4) {
  13. numero = 1 + rand () % ((81+1)-2);
  14. while (n<=numero) {
  15. if (numero%n==0) {
  16. n++;
  17. c++;
  18. }
  19. }
  20. if (c==2) {
  21. cont++;
  22. }
  23. }
  24. }
  25. }
  26. }

Espero atentamente su respuesta.

Es en #c

MOD: Etiquetas GeSHi. No hacer doble post. Usa el botón modificar.
Páginas: [1]
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines