Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - GilbertoBrewer

#1
Ah, ok, ok. Sí, yo también uso Code::Blocks, lo voy a revisar.
Y bueno, creo que eso es todo. Muchas gracias.
Por cierto, no sé cómo cerrar el tema.
#2
Sólo una cosa más: ¿a qué te refieres con "usar el debug"? Realmente no estoy familiarizado con el término.
#3
No sé de dónde seas; acá en México (o por lo menos en mi ciudad y áreas circunvecinas) al símbolo "#" le decimos "gato" porque en el juego de gato se usa un símbolo similar (el juego llamado Tik-tak-toe en inglés).

Lo del punto 2 sí sabía que no era necesario, pero es una de las tantas cosas que le estuve agregando al código tratando de evitar que me arrojara los errores que me estaba haciendo el programa.

Sobre el punto 3 y 4, voy a analizarlos bien, pero creo que ya sé a qué te refieres. Lo voy a revisar, y en cualquier caso, gracias por las recomendaciones.

Saludos.
#4
Muchas gracias, tremolero.

Ya corregí lo de la declaración de variables y ya funcionó. Por alguna razón estaba convencido de que, al declarar la variable, el primer número representaba el tamaño de cada cadena y el segundo número la cantidad de cadenas. Gracias por hacerme ver ese error.

Respecto al sistema de ordenarlos, ya vi cuál era el problema. Voy a tratar de solucionar eso para cuando se intenta ordenar dos veces seguidas.

Igualmente, gracias por el consejo de las variables a y b. Si tienes algún otro consejo con respecto al código, estoy abierto a escucharlas.

Por cierto, cuando escribas algún código (o parte de uno) en un mensaje, selecciona el botón de código (el que tiene un "gato", #), para que no ocurra lo que pasó con tu mensaje (al poner "i" entre corchetes se puso en itálica el resto del mensaje, y al poner "b" entre corchetes se puso en negrita el resto del mensaje). Lo mismo me pasó en mi pregunta anterior.

Saludos.
#5
Buenas noches.

En mi clase de programación estructurada me encargaron que hiciera un programa que me generara 10 nombres con apellidos y, una vez generada la lista con los 10 nombres y apellidos al azar, se organicen alfabéticamente.

El problema es que por alguna razón que desconozco completamente, no me muestra las cadenas como debería al intentar ordenarlas. Cuando me las genera al azar me las muestra correctamente, pero al seleccionar la opción de que me ordene la misma lista alfabéticamente me escribe cadenas muy largas repitiendo los nombres o me deja algunas vacías. Ya llevo varios días tratando de ver dónde podría estar mal, pero no logro dar con lo que debo cambiar.

El programa lo hice así:
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

main ()
{
   char nombre[15][10]={"Pedro","Paco","Perla","Paola","Jorge","Jesus","Maria","Jose","Elisa","Angel"};
   char apellido[15][10]={"Perez","Lopez","Barba","Cruz","Robles","Gomez","Gaytan","Duval","Derbez","Padilla"};
   char nom[30][10];
   char nomord[30][10];
   char opcion;
   int a,b,i,j,lugar,comparar,largo[10];
   srand (time (NULL));

   printf ("Escoge una opcion:\n");
       printf ("a-Generar 10 nombres\n");
       printf ("b-Ordenarlos alfabeticamente\n");
       printf ("s-Salir\n");
       scanf("%s",&opcion);

   while (opcion!='s')
   {
       switch (opcion)
       {
       case 'a':
           printf ("\nNombres:\n");
           for (i=0; i<10; i++)
           {
               a=rand()%10;
               b=rand()%10;
               sprintf (nom[i],"%s %s%s",nombre[a],apellido[b],"\0");
               largo[i]=strlen(nom[i]);
               printf ("%d- %s - %d\n",i+1,nom[i],largo[i]);
           }
           printf ("\n");

           break;

       case 'b':
           for (i=0; i<10; i++)
           {
               lugar=0;
               for (j=0; j<10; j++)
               {
                   comparar=strcmp(nom[i],nom[j]);
                   if (comparar>0)
                   {
                       lugar++;
                   }
               }
               while (strcmp(nom[i],nomord[lugar])==0)
               {
                   lugar++;
               }
               sprintf (nomord[lugar],"%s%s",nom[i],"\0");
           }

           for (i=0; i<10; i++)
           {
               printf ("%d - %s\n",i+1,nomord[i]);
           }
           break;
       }

       printf ("Elige una opcion: ");
       scanf ("%s",&opcion); //Lee una opcion; si se elige la "s" se sale del programa
   }

   return 0;
}



Al compilarlo y ejecutarlo, en pantalla siempre me muestra bien los 10 nombres, pero al elegir después la opción de ordenarlos me empalma los nombres y me muestra cadenas de hasta más de 50 caracteres, con varios nombres pegados uno tras otro.
¿Alguna ayuda al respecto? ¿A qué podría deberse eso y cómo lo corrijo?
#6
Buenas noches y muchas gracias por sus aportaciones.

Continuando con el mismo programa, ahora tengo que hacer que, una vez generada la lista con los 10 nombres y apellidos al azar, se organicen alfabéticamente.

El problema es que por alguna razón que desconozco completamente, no me muestra las cadenas como debería al intentar ordenarlas. Ya llevo horas tratando de ver dónde podría estar mal, pero no logro dar con lo que debo cambiar.

El programa lo hice así:
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

main ()
{
    char nombre[15][10]={"Pedro","Paco","Perla","Paola","Jorge","Jesus","Maria","Jose","Elisa","Angel"};
    char apellido[15][10]={"Perez","Lopez","Barba","Cruz","Robles","Gomez","Gaytan","Duval","Derbez","Padilla"};
    char nom[30][10];
    char nomord[30][10];
    char opcion;
    int a,b,i,j,lugar,comparar,largo[10];
    srand (time (NULL));

    printf ("Escoge una opcion:\n");
        printf ("a-Generar 10 nombres\n");
        printf ("b-Ordenarlos alfabeticamente\n");
        printf ("s-Salir\n");
        scanf("%s",&opcion);

    while (opcion!='s')
    {
        switch (opcion)
        {
        case 'a':
            printf ("\nNombres:\n");
            for (i=0; i<10; i++)
            {
                a=rand()%10;
                b=rand()%10;
                sprintf (nom[i],"%s %s%s",nombre[a],apellido[b],"\0");
                largo[i]=strlen(nom[i]);
                printf ("%d- %s - %d\n",i+1,nom[i],largo[i]);
            }
            printf ("\n");

            break;

        case 'b':
            for (i=0; i<10; i++)
            {
                lugar=0;
                for (j=0; j<10; j++)
                {
                    comparar=strcmp(nom[i],nom[j]);
                    if (comparar>0)
                    {
                        lugar++;
                    }
                }
                while (strcmp(nom[i],nomord[lugar])==0)
                {
                    lugar++;
                }
                sprintf (nomord[lugar],"%s%s",nom[i],"\0");
            }

            for (i=0; i<10; i++)
            {
                printf ("%d - %s\n",i+1,nomord[i]);
            }
            break;
        }

        printf ("Elige una opcion: ");
        scanf ("%s",&opcion); //Lee una opcion; si se elige la "s" se sale del programa
    }

    return 0;
}



Al compilarlo y ejecutarlo, en pantalla siempre me muestra bien los 10 nombres, pero al elegir después la opción de ordenarlos me empalma los nombres y me muestra cadenas de hasta más de 50 caracteres, con varios nombres pegados uno tras otro.
¿Alguna ayuda al respecto? ¿A qué podría deberse eso y cómo lo corrijo?
#7
Sí había visto en ese tema que no es recomendable utilizar el fflush(stdin), pero no me quedó del todo claro el porqué.
#8
Ya corregí los errores y ya funcionó el programa.

Muchas gracias por las observaciones. :)
#9
Ah, ok. Sí, ya vi el problema con la cita.

El código es así:

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main ()
{
    int p,i,g;
    char nombre[10][10]={"Pedro","Hugo","Oliver","Luis","Jesus","Natalia","Monserrat","Vanessa","Antonio","Jorge"};
    char apellido[10][10]={"Lopez","Perez","Rojas","Garcia","Martinez","Montes","Fox","Valdez","Diaz","Hidalgo"};
    char tipo[25];
    srand(time(NULL));

    for (p=0; p<10; p++)
    {
        i=rand()%10;
        g=rand()%10;
        sprintf(tipo,"%s %s",nombre[i],apellido[g]);
        puts(tipo);
    }

    return 0;
}


También intenté escribiendo:

        strcpy(tipo,nombre)[i];
        strcat(tipo," ");
        strcat(tipo,apellido[g]);

en lugar de:

        sprintf(tipo,"%s %s",nombre[i],apellido[g]);


En ambos casos me muestra en la pantalla algo así:
Jorge FoxValdez
Pedro Valdez
Jorge
Luis PerezRojas
#10
Buenas noches o lo que sea cuando entren al tema.

Estoy llevando un curso de programación estructurada y hemos estado trabajando en lenguaje C utilizando Code::Blocks.

Me encargaron un programa en el cual debería guardar 10 cadenas de caracteres en una variable "nombre" y otras 10 en una variable "apellido", para después generar diez combinaciones aleatorias de nombre y apellido, y me mostrara la lista en pantalla.

Yo lo hice así:
Citar
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main ()
{
    int p,i,g;
    char nombre[10][10]={"Pedro","Hugo","Oliver","Luis","Jesus","Natalia","Monserrat","Vanessa","Antonio","Jorge"};
    char apellido[10][10]={"Lopez","Perez","Rojas","Garcia","Martinez","Montes","Fox","Valdez","Diaz","Hidalgo"};
    char tipo[25];
    srand(time(NULL));

    for (p=0; p<10; p++)
    {
        i=rand()%10;
        g=rand()%10;
        sprintf(tipo,"%s %s",nombre,apellido[g]);
        puts(tipo);
    }

    return 0;
}

El problema está en que en algunos casos me imprime dos apellidos juntos o no me muestra el apellido, algo así:

Citar
Jorge FoxValdez
Pedro Valdez
Jorge
Luis PerezRojas

y no tengo idea de por qué pueda ser.

También intenté escribiendo:
Citarstrcpy(tipo,nombre);
        strcat(tipo," ");
        strcat(tipo,apellido[g]);
en lugar de:
Citarsprintf(tipo,"%s %s",nombre,apellido[g]);
pero el resultado es algo similar.

¿Podrían ayudarme a encontrar el error de mi programa y/o recomendarme alguna forma de corregirlo o alguna manera alternativa de hacerlo?

De antemano, gracias.