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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [33] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 ... 102
321  Programación / Programación C/C++ / Re: Arreglos de cadenas en C en: 3 Junio 2020, 19:51 pm
Te lo agradezco mucho, mas o menos esta es la funcion que quería hacer pero no logro que conforme me vaya digitando el numero del nombre que desea meter al arreglo, este se vaya llenando.

Código
  1. void mostrarNombres(Persona *personas, int numeroPersonas){
  2.    int opcion,opc;
  3.    char arregloPersonas[50][LIMITE]; // limite = 100
  4.    do{
  5.        for(int i = 0; i < numeroPersonas; i++){
  6.    printf("%d Nombre: %s\n", i+1,personas[i].nombre);
  7.    printf("\n\n");
  8.   }
  9.  
  10.   printf(" Ingrese el numero correspondiente al nombre que desea: ");
  11.       scanf("%d",&opcion);
  12.  
  13.       for(int j=0; j<numeroLibros; j++){
  14.           if(opcion == j+1){
  15.               //En este caso la persona con el numero que ingrese deberia guardarse en el arreglo, y es lo que no funciona
  16.               //personas[j].nombre
  17.  
  18.           }
  19.       }
  20.  
  21.       printf(" Desea agregar otro nombre?, 1 = SI , 2 = NO: ");
  22.       scanf("%d",&opc);
  23.       system("cls");
  24.    }while(opc == 1);
  25.    if(opc == 2){
  26.        printf("\nNOMBRES AGREGADOS:\n");
  27.        for(int i=0; i<numeroPersonas;i++){
  28.             printf("%s\n",arregloPersonas[i]);
  29.        }
  30.  
  31.    }
  32.    else{
  33.        printf("ERROR, OPCION NO VALIDA");
  34.    }
  35. }

Como te ha dicho @ErahUnderground, la variable numeroLibros que utilizas no aparece definida en ningún sitio.
Me da la sensación de que querías usar numeroPersonas ya que tiene más sentido así que mi respuesta irá por esa línea.

Daré por hecho que numeroPersonas contiene la cantidad de personas almacenadas en el array personas. Entonces te falta otro índice para ir guardando en arregloPersonas ya que si no usas otro índice guardarás a la persona 40 en la fila 40 y habrás desperdiciado las anteriores filas de arregloPersonas.
El resultado sería:
Código
  1. void mostrarNombres(Persona *personas, int numeroPersonas){
  2.    int opcion;
  3.    int indicePersona; // indice de la persona a guardar
  4.    char arregloPersonas[50][LIMITE]; // limite = 100
  5.    int personasGuardadas = 0; // personas guardadas en arregloPersonas
  6.  
  7.    do {
  8.        // Otro bucle para evitar que se introduzca un indice fuera de los limites permitidos
  9.        do {
  10.            printf("Numero de la persona a almacenar [%d - %d]: ", 1, numeroPersonas);
  11.            scanf("%d", &indicePersona);
  12.        } while(indicePersona < 1 || indicePersona > numeroPersonas);
  13.  
  14.        // Ahora no tenemos que recorrer el bucle, accedemos directamente al indice:
  15.        // Para copiar cadenas, usa strncpy:
  16.        strncpy(arregloPersonas[personasGuardadas], personas[indicePersona-1], LIMITE); // Al segundo le restamos 1 porque pedimos un indice empezado en 1 pero los arrays en C empiezan en 0.
  17.        arregloPersonas[personasGuardadas][LIMITE-1] = '\0'; // Para curarme en salud y asegurarme que la cadena tiene un caracter de fin de cadena
  18.        ++personasGuardadas;
  19.  
  20.        // Si no hemos llegado al limite, le dejamos al usuario elegir:
  21.        if(personasGuardadas < 50){
  22.            // Otro bucle para que la opcion sea 1 o 2:
  23.            do {
  24.                printf("Guardar otro nombre (1 = Si / 2 = No): ");
  25.                scanf("%d", &opcion);
  26.            } while(opcion != 1 && opcion != 2);
  27.        }
  28.    } while(personasGuardadas < 50 && opcion == 1);
  29.  
  30.    // Aqui ya puedes mostrar los nombres guardados usando como limite <personasGuardadas>:
  31.    printf("Los nombres guardados son:\n");
  32.    for(int i = 0; i < personasGuardadas; ++i){
  33.        printf("%s\n", arregloPersonas[i]);
  34.    }
  35. }
322  Programación / Programación General / Re: Aplicaciones para diagramas en: 3 Junio 2020, 10:39 am
PÁGINAS WEB

Una muy buena alternativa si los diagramas no son muy grandes es Lucidchart. Es una página web que permite hacer infinidad de diagramas y a mí parecer con una interfaz bastante simple y amigable. Si te ves en la necesidad de hacer diagramas muy grandes puedes valorar el premium.

Otra web que te puede servir como alternativa es Vertabelo. Esta en cambio la versión gratuita solo te permite usarla un tiempo limitado con el correo registrado (siempre tienes la opción de usar otros correos... :silbar: :silbar:)

PROGRAMAS

Si utilizas algún IDE puedes buscar plugins para la creación de diagramas. En Eclipse por ejemplo sé que está Papyrus.

Otro programa pueda ser VisualParadigm pero este es de pago y la versión de prueba es de tiempo limitado.

Y si te gusta hacer las cosas muy retro pues tienes ArgoUML. Es totalmente gratuito pero tiene algunas pegas como que el proyecto está abandonado desde hace años y algunas funciones básicas como Ctrl+Z y otras no están disponibles. Pero como última opción te puede servir... :silbar:

Suerte. :-X
323  Programación / Programación C/C++ / Re: Arreglos de cadenas en C en: 2 Junio 2020, 03:35 am
Ah vale, creo que te había entendido mal.

Si lo que quieres es un arreglo de cadenas y una cadena es un arreglo, lo que tienes al final es un arreglo de arreglos, es decir, un arreglo bidimensional o matriz.
Si lo que intentas es meter diferentes nombres en la misma cadena y separarlos solo por un espacio, si los nombres son independientes, creo que sería mejor opción una matriz en la que cada fila es un nombre.

Si por lo que sea quieres juntar todos los nombres en la misma cadena tendrías que copiar un nombre en la cadena final, insertar un espacio, copiar otro nombre,...

No sé si es eso a lo que te refieres ni dónde tienes exactamente el problema. Si para crear la cadena, para introducir las otras cadenas, para introducir los espacios... :huh: :huh:
Si no es eso, seguramente sea más sencillo si pones un ejemplo concreto de código.
324  Programación / Programación C/C++ / Re: Arreglos de cadenas en C en: 2 Junio 2020, 01:53 am
Una cadena con espacios tiene la misma representación que una sin espacios ya que un espacio también es un char.
La cadena la puedes reservar de forma estática:
Código
  1. #define SIZE 50
  2. char cadena[50];
O de forma dinámica:
Código
  1. #define SIZE 50
  2. char *cadena = (char*)malloc(SIZE * sizeof(char));
Recuerda que si lo haces de forma dinámica, luego tienes que liberar la memoria reservada:
Código
  1. free(cadena);

Para poder guardar espacios lo importante es usar la función fgets() en vez de scanf().
Código
  1. fgets(cadena, SIZE, stdin);
Esto guardará el ENTER que pulses al final como parte de la cadena (siempre que no hayas llegado a los SIZE-1 caracteres, ya que el último se reserva para el carácter de fin de cadena '\0'). Para eliminar el salto de línea producido por el ENTER:
Código
  1. if(cadena[strlen(cadena)-1] == '\n')
  2.  cadena[strlen(cadena)-1] = '\0';
325  Programación / Bases de Datos / Re: Pasar modelo entidad relacion a MySQL en: 1 Junio 2020, 20:25 pm
Claro, no me había dado cuenta.
Si al crear una tabla (Pedido), intentas hacer referencia a otras tablas (Vendedor y Cliente), estas tienen que existir ya.
Por eso si creas FKs tienes que asegurarte que primero creas las tablas a las que vas a hacer referencia.
326  Programación / Bases de Datos / Re: Pasar modelo entidad relacion a MySQL en: 1 Junio 2020, 20:03 pm
Diría que el problema que tienes se debe a que tienes que especificar el tamaño máximo de cada varchar.
Es decir varchar(n) donde n es un número. Si no quieres especificar un tamaño puedes usar MAX pero no es muy recomendable generalmente.

Si tienes algún problema más, incluye también el mensaje de error que te salga.
327  Programación / Bases de Datos / Re: Pasar modelo entidad relacion a MySQL en: 1 Junio 2020, 12:03 pm
Hola de nuevo releyendo me he encontrado con esto: El campo BANCO es un string que representa el nombre del BANCO. (los datos concretos de pago como numero de cuenta se encuentran alojados en otra tabla a la cual se accede a través del número de control)
Lo que me raya la cabeza es el contenido del paréntesis, que significa, por más que intento comprender no entiendo lo que se pide.
Lo que te está pidiendo de forma indirecta es que tengas otra tabla con los datos concretos del pago, llamémosla InfoPago. Esta tabla tendrá como te dicen pues el número de cuenta y podría tener otras cosas como el titular o lo que consideres/te indiquen.
Y que la relación entre InfoPago - Pago será 1:N. Cada pago apunta a un único registro de InfoPago mientras que cada registro de InfoPago puede ser referido desde diferentes pagos.

El uso de esto es para no copiar todos los datos en cada pago. Guardas en una tabla el número de cuenta, titular,... y le das un número de control. Así cuando quieras decir que un pago fue realizado por un número de cuenta, en vez de copiar todo (número de cuenta, titular,...) solo tendrás que copiar el número de control y eso te permitirá saber siempre qué número de cuenta, titular,... hizo ese pago.

Por si acaso diré que numeroControl tiene toda la pinta de ser la PK de InfoPago y una FK de Pago hacia InfoPago.
328  Programación / Programación C/C++ / Re: Agenda telefonica en: 1 Junio 2020, 11:47 am
Visto que todas mis recomendaciones anteriores fueron ignoradas, me limitaré a decirte el procedimiento que tienes que seguir:
Código:
PEDIR telefono
indice := 0
MIENTRAS indice < contactosTotales && telefono != contactos[indice].telefono HACER
  indice := indice + 1
FIN MIENTRAS
// Si indice = contactosTotales, el numero buscado no existe
SI telefono = contactos[indice].telefono ENTONCES
  PEDIR nuevoTelefono
  contactos[indice].telefono = nuevoTelefono
FIN SI
Ahora tienes que adaptar este psedocódigo a tu problema mirando a ver cómo puedes representar las variables que aparecen.
Suerte. :-X
329  Programación / Bases de Datos / Re: Pasar modelo entidad relacion a MySQL en: 1 Junio 2020, 00:34 am
No sería necesario guardarlo al revés creo yo, solo necesito lo que puse en la primera entrada(no estoy seguro xdd)
Pues entonces con tener la relación hecha en el otro sentido ya vale. Además la importante es la que te permite borrar el pago automáticamente cuando borras el pedido relacionado. Así que ya sabes: esa no hace falta y la otra la estabas poniendo al revés. Ahora te toca hacerlo en MySQL.
330  Programación / Bases de Datos / Re: Pasar modelo entidad relacion a MySQL en: 31 Mayo 2020, 20:58 pm
Las claves foráneas quedarían así Id_vendedor en pedido, id_pedido en cliente, id_pago en pedido?
No tengo muy claro como crear la estructura con estas claves
Mira a ver si tal y como tú dices se cumplen las normas que te puse antes sobre cómo establecer las relaciones.
Ya te adelanto que la segunda no lo cumple.
Y la tercera ya te lo puse yo con la clave de id_pedido en Pago, no sé si de verdad necesitas guardarlo al revés también.
Páginas: 1 ... 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [33] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines