Diccionario en C: Programa de Traducción Español-Inglés con Estructuras y Menú

Informática y Telecomunicaciones4,17 KB

Programa Diccionario en C

A continuación se muestra el código fuente de un programa en lenguaje C que implementa un diccionario español-inglés mediante un menú interactivo. El programa permite añadir palabras, traducirlas y mostrar el contenido completo del diccionario.

Cabeceras y definiciones

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_PAL 100
#define MAX_CAD 20

typedef struct
{
    char ingles[MAX_CAD];
    char espanyol[MAX_CAD];
} tPalabra;

int menu();
void LeeCadena(char cadena[], int max);
int anyadir_palabra(tPalabra Dicc[], int num);
void traducir_palabra(tPalabra Dicc[], int num);
void mostrar_diccionario(tPalabra Dicc[], int num);

Función principal

int main()
{
    char identificador_de_la_cadena[MAX_CAD];
    tPalabra Diccionario[MAX_PAL];
    int num_pal = 0;
    int opcion;

    printf("PROGRAMA DICCIONARIO\n");
    printf("====================\n");

    while ((opcion = menu()) != 4)
    {
        switch (opcion) {
        case 1:
        {
            num_pal = anyadir_palabra(Diccionario, num_pal);
            printf("[%d] palabras existentes\n", num_pal);
            system("pause");
            break;
        }
        case 2:
        {
            traducir_palabra(Diccionario, num_pal);
            system("pause");
            break;
        }
        
case 3: { mostrar_diccionario(Diccionario, num_pal); system("pause"); break; } } } }

Menú de opciones

int menu()
{
    int op;
    do
    {
        system("cls");
        printf("\n"
               "\t1.- Añadir palabra\n"
               "\t2.- Traducir palabra\n"
               "\t3.- Mostrar diccionario\n"
               "\t4.- Salir\n"
               "\n"
               "Elija una opción: ");
        scanf("%d", &op);
        while (getchar() != '\n');
    } while ((op < 1) || (op > 4));
    return op;
}

Lectura segura de cadenas

void LeeCadena(char cadena[], int max)
{
    char *p;
    int n;
    p = fgets(cadena, max, stdin);
    if (p != NULL)
    {
        n = strlen(cadena);
        if (n > 0 && cadena[n - 1] == '\n')
            cadena[n - 1] = '\0';
    }
}

Añadir palabra al diccionario

int anyadir_palabra(tPalabra Dicc[], int num)
{
    if (num >= MAX_PAL)
    {
        printf("El diccionario está completo\n");
        return num;
    }
    printf("Por favor, introduzca una palabra nueva.\n");
    printf("En español: ");
    LeeCadena(Dicc[num].espanyol, MAX_CAD);
    printf("En inglés: ");
    LeeCadena(Dicc[num].ingles, MAX_CAD);
    num++;
    return num;
}

Traducir palabra

void traducir_palabra(tPalabra Dicc[], int num)
{
    char cadena[MAX_CAD];
    int i, encontrado = 0;

    printf("Introduce la palabra a buscar: ");
    LeeCadena(cadena, MAX_CAD);

    for (i = 0; i < num; i++)
    {
        if (!strcmp(cadena, Dicc[i].espanyol))
        {
            printf("%s.\n", Dicc[i].ingles);
            encontrado++;
        }
        else if (!strcmp(cadena, Dicc[i].ingles))
        {
            printf("%s.\n", Dicc[i].espanyol);
            encontrado++;
        }
    }
    if (encontrado == 0)
        printf("No se ha encontrado la palabra.\n");
}

Mostrar diccionario

void mostrar_diccionario(tPalabra Dicc[], int num)
{
    int i;
    printf("DICCIONARIO\n\n");
    printf(" ESPAÑOL\t\t INGLÉS\n");
    printf(" ***\t\t ***\n\n");
    for (i = 0; i < num; i++)
    {
        printf(" %s\t\t\t %s\n", Dicc[i].espanyol, Dicc[i].ingles);
    }
}

Notas sobre el código

  • La constante MAX_PAL limita el número máximo de palabras almacenadas.
  • La constante MAX_CAD define la longitud máxima de cada cadena.
  • La función LeeCadena elimina el salto de línea final que deja fgets.
  • La comparación con strcmp distingue entre mayúsculas y minúsculas.

Descargar

PDF Word HTML