Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose

Estas en el tema de Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose en el foro de C/C++ en Foros del Web. Hola, estoy haciendo un ejercicio de la universidad (explicado en los comentarios del programa) y me gustaría que el programa se repita. Por ejemplo, Presione ...
  #1 (permalink)  
Antiguo 06/04/2015, 10:04
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Pregunta Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose

Hola,
estoy haciendo un ejercicio de la universidad (explicado en los comentarios del programa) y me gustaría que el programa se repita. Por ejemplo, Presione 1 para volver al menú anterior y 0 para salir. Al volver al menú anterior, poder elegir otra opción y asi sucesivamente, manteniendo los valores de las variables ya que el punto del programa es ver los valores e ir jugando con ellas añadiendo y eliminando valores.

Aquí mi programa:

Código:
#include <stdio.h>
#include <stdlib.h>

/*
Tema V. Funciones

22. Escriba un programa en el cual haciendo uso de arreglos se puedan manipular conjuntos de números enteros donde se ofrezcan los siguientes servicios:

a)Insertar un elemento en el conjunto.
b)Eliminar un elemento  del conjunto.
c)Determinar si un elemento es miembro o no en el conjunto.
d)Unión de conjuntos.
e)Intersección de conjuntos.
*/

//Declaración de prototipos
void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo);
void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo);

int main()
{
    //Declaración de variables
    int liOpcionMenu, laiArreglo[] = {5,8,2,3,1,4,6,9,7,10}, liElemento;

    //Entrada de datos
    printf("NOTA: Tama%co m%cximo del conjunto: %d\n", 164, 160, sizeof (laiArreglo) / sizeof (int));
    printf("\n----------MENU-----------------------------------------------------------------");
    printf("\n1. Insertar un elemento en el conjunto");
    printf("\n2. Eliminar un elemento del conjunto");
    printf("\n3. Determinar si un elemento es miembro o no en el conjunto");
    printf("\n4. Uni%cn de conjuntos", 162);
    printf("\n5. Intersecci%cn de conjuntos", 162);
    printf("\n-------------------------------------------------------------------------------");
    do
    {
        printf("\n=> ");
        scanf("%d", &liOpcionMenu);

        if (liOpcionMenu <= 0 || liOpcionMenu > 5)
            printf("\n\tError!, debe ingresar un valor de 1 a 5.\n");
    } while (liOpcionMenu <= 0 || liOpcionMenu > 5);

    //Procesamiento
    switch (liOpcionMenu)
    {
        case 1:
            system("cls");
            printf("1. Insertar un elemento en el conjunto");
            printf("\n--------------------------------------");
            printf("\nIngrese el elemento: ");
            scanf("%d", &liElemento);
            InsertarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
            MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
            break;
        case 2:
            system("cls");
            printf("2. Eliminar un elemento del conjunto");
            printf("\n------------------------------------");
            printf("\nIngrese el elemento: ");
            scanf("%d", &liElemento);
            EliminarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
            MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
            break;
        case 3:
            system("cls");
            printf("3. Determinar si un elemento es miembro o no en el conjunto");
            printf("\n-----------------------------------------------------------");
            printf("\nIngrese el elemento: ");
            scanf("%d", &liElemento);
            DeterminarExistencia(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
            MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
            break;
        case 4:
            break;
        case 5:
            break;
    }

    //Salida de datos

    return 0;
}

void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo)
{
    int liContador;

    printf("\nCONJUNTO: ");

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        printf("%d", laiArreglo[liContador]);

        if (liContador < TamanoArreglo - 1)
            printf(", ");
    }

    printf("\n");
}

void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == 0)
        {
            laiArreglo[liContador] = liElemento;
            printf("\n---------------------------------------------\n| Insertado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, todas las posiciones estan ocupadas.\n");
}

void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            laiArreglo[liContador] = 0;
            printf("\n---------------------------------------------\n| Eliminado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}

void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            printf("\n------------------------------------------\n| Elemento encontrado en la posici%cn %d. |\n------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}
Pensé en un DO WHILE ó WHILE pero como el programa es tan largo, no sé si sería lo correcto, también pensé en poner el menú en una función y llamarlo en cada opción del menú, no tengo ni idea de qué sería lo mejor, nunca he hecho esto.

Espero que me ayuden, saludos a todos y gracias!.
  #2 (permalink)  
Antiguo 06/04/2015, 10:22
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose

un do while que contenga todo lo que tienes en el main. Luego da un poco igual que esté dividido en funciones su contenido, eso ya es cosa de que esté mas estructurado pero el do while tiene que ir ahi.
  #3 (permalink)  
Antiguo 06/04/2015, 10:26
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Pregunta Respuesta: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose

Cita:
Iniciado por aguml Ver Mensaje
un do while que contenga todo lo que tienes en el main. Luego da un poco igual que esté dividido en funciones su contenido, eso ya es cosa de que esté mas estructurado pero el do while tiene que ir ahi.
Y para que regrese al menú anterior, cómo le hago?.
  #4 (permalink)  
Antiguo 06/04/2015, 10:50
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose

Hize unos cambios, creo que lo logré, me gustaría que lo probaran y me digan sus opiniones y qué cosas puedo mejorar.

Código:
#include <stdio.h>
#include <stdlib.h>

/*
Tema V. Funciones

22. Escriba un programa en el cual haciendo uso de arreglos se puedan manipular conjuntos de números enteros donde se ofrezcan los siguientes servicios:

a)Insertar un elemento en el conjunto.
b)Eliminar un elemento  del conjunto.
c)Determinar si un elemento es miembro o no en el conjunto.
d)Unión de conjuntos.
e)Intersección de conjuntos.
*/

//Declaración de prototipos
int RepetirPrograma(void);
int MenuPrincipal(size_t TamanoArreglo);
void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo);
void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo);

int main()
{
    //Declaración de variables
    int liRepetirPrograma,
        laiArreglo[] = {5,8,2,3,1,4,6,9,7,10}, liElemento;

    do
    {
        //Procesamiento
        switch (MenuPrincipal(sizeof (laiArreglo) / sizeof (int)))
        {
            case 1:
                system("cls");
                printf("1. Insertar un elemento en el conjunto");
                printf("\n--------------------------------------");
                printf("\nIngrese el elemento: ");
                scanf("%d", &liElemento);
                InsertarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
                MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
                liRepetirPrograma = RepetirPrograma();
                break;
            case 2:
                system("cls");
                printf("2. Eliminar un elemento del conjunto");
                printf("\n------------------------------------");
                printf("\nIngrese el elemento: ");
                scanf("%d", &liElemento);
                EliminarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
                MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
                liRepetirPrograma = RepetirPrograma();
                break;
            case 3:
                system("cls");
                printf("3. Determinar si un elemento es miembro o no en el conjunto");
                printf("\n-----------------------------------------------------------");
                printf("\nIngrese el elemento: ");
                scanf("%d", &liElemento);
                DeterminarExistencia(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
                MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
                liRepetirPrograma = RepetirPrograma();
                break;
            case 4:
                break;
            case 5:
                break;
        }
    } while (liRepetirPrograma == 1);

    return 0;
}

int RepetirPrograma(void)
{
    int liRepetirPrograma;

    printf("-------------------------------------------------------------------------------\nPresione 1 para volver al men%c anterior...\n=> ", 163);
    scanf("%d", &liRepetirPrograma);

    return liRepetirPrograma;
}

int MenuPrincipal(size_t TamanoArreglo)
{
    system("cls");

    int liOpcionMenu;

    printf("NOTA: Tama%co m%cximo del conjunto: %d\n", 164, 160, TamanoArreglo);
    printf("\n----------MENU-----------------------------------------------------------------");
    printf("\n1. Insertar un elemento en el conjunto");
    printf("\n2. Eliminar un elemento del conjunto");
    printf("\n3. Determinar si un elemento es miembro o no en el conjunto");
    printf("\n4. Uni%cn de conjuntos", 162);
    printf("\n5. Intersecci%cn de conjuntos", 162);
    printf("\n-------------------------------------------------------------------------------");
    do
    {
        printf("\n=> ");
        scanf("%d", &liOpcionMenu);

        if (liOpcionMenu <= 0 || liOpcionMenu > 5)
            printf("\n\tError!, debe ingresar un valor de 1 a 5.\n");
    } while (liOpcionMenu <= 0 || liOpcionMenu > 5);

    return liOpcionMenu;
}

void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo)
{
    int liContador;

    printf("\nCONJUNTO: ");

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        printf("%d", laiArreglo[liContador]);

        if (liContador < TamanoArreglo - 1)
            printf(", ");
    }

    printf("\n");
}

void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == 0)
        {
            laiArreglo[liContador] = liElemento;
            printf("\n---------------------------------------------\n| Insertado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, todas las posiciones estan ocupadas.\n");
}

void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            laiArreglo[liContador] = 0;
            printf("\n---------------------------------------------\n| Eliminado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}

void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            printf("\n------------------------------------------\n| Elemento encontrado en la posici%cn %d. |\n------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}

Etiquetas: arreglo, funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:15.