C/Visual C - Arboles C

 
Vista:
sin imagen de perfil

Arboles C

Publicado por Sebastian (4 intervenciones) el 26/11/2022 00:07:28
Buenas tardes, estoy realizando un programa que traduzca clave morse a español y español a clave morse, este es mi programa.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

struct nodo{
char letra;
struct nodo *izq;
struct nodo *der;
};
typedef struct nodo tNodo;
typedef tNodo *AB;

AB creaNodo(char letra){
AB aux = malloc(sizeof(tNodo));
if(aux != NULL)
{
aux->letra = letra;
aux->izq = NULL;
aux->der = NULL;
}
else
{
system("cls");
printf("\n\tNo hay memoria suficiente para generar un nuevo Nodo.");
printf("\n\tEste programa se cerrara%c.", 160);
exit(1);
}
return aux;
}
AB creaAB()
{
AB T;
T = creaNodo('#');
T->izq = creaNodo('E');
T->der = creaNodo('T');
T->izq->izq = creaNodo('I');
T->izq->der = creaNodo('A');
T->der->izq = creaNodo('N');
T->der->der = creaNodo('M');
T->izq->izq->izq = creaNodo('S');
T->izq->izq->der = creaNodo('U');
T->izq->der->izq = creaNodo('R');
T->izq->der->der = creaNodo('W');
T->der->izq->izq = creaNodo('D');
T->der->izq->der = creaNodo('K');
T->der->der->izq = creaNodo('G');
T->der->der->der = creaNodo('O');
T->izq->izq->izq->izq = creaNodo('H');
T->izq->izq->izq->der = creaNodo('V');
T->izq->izq->der->izq = creaNodo('F');
T->izq->izq->der->der = creaNodo('#');
T->izq->der->izq->izq = creaNodo('L');
T->izq->der->izq->der = creaNodo('#');
T->izq->der->der->izq = creaNodo('P');
T->izq->der->der->der = creaNodo('J');
T->der->izq->izq->izq = creaNodo('B');
T->der->izq->izq->der = creaNodo('X');
T->der->izq->der->izq = creaNodo('C');
T->der->izq->der->der = creaNodo('Y');
T->der->der->izq->izq = creaNodo('Z');
T->der->der->izq->der = creaNodo('Q');
T->der->der->der->izq = creaNodo('#');
T->der->der->der->der = creaNodo('#');
T->izq->izq->izq->izq->izq = creaNodo('5');
T->izq->izq->izq->izq->der = creaNodo('4');
T->izq->izq->izq->der->der = creaNodo('3');
T->izq->izq->der->der->izq = creaNodo('#');
T->izq->izq->der->der->der = creaNodo('2');
T->izq->der->izq->izq->izq = creaNodo('&');
T->izq->der->izq->izq->der = creaNodo('#');
T->izq->der->izq->der->izq = creaNodo('+');
T->izq->der->der->izq->der = creaNodo('#');
T->izq->der->der->der->der = creaNodo('1');
T->der->izq->izq->izq->izq = creaNodo('6');
T->der->izq->izq->izq->der = creaNodo('=');
T->der->izq->izq->der->izq = creaNodo('/');
T->der->izq->der->izq->der = creaNodo('#');
T->der->izq->der->der->izq = creaNodo('(');
T->der->der->izq->izq->izq = creaNodo('7');
T->der->der->izq->izq->der = creaNodo('#');
T->der->der->izq->der->der = creaNodo(165);//
T->der->der->der->izq->izq = creaNodo('8');
T->der->der->der->der->izq = creaNodo('9');
T->der->der->der->der->der = creaNodo('0');
T->izq->izq->der->der->izq->izq = creaNodo('?');
T->izq->izq->der->der->izq->der = creaNodo('_');
T->izq->der->izq->izq->der->izq = creaNodo('"');
T->izq->der->izq->der->izq->der = creaNodo('.');
T->izq->der->der->izq->der->izq = creaNodo('@');
T->izq->der->der->der->der->izq = creaNodo(39); // '
T->der->izq->izq->izq->izq->der = creaNodo('-');
T->der->izq->der->izq->der->izq = creaNodo(';');
T->der->izq->der->izq->der->der = creaNodo('!');
T->der->izq->der->der->izq->der = creaNodo(')');
T->der->der->izq->izq->der->der = creaNodo(',');
T->der->der->der->izq->izq->izq = creaNodo(':');

return T;
}
bool buscaElemento(AB T, char letra)
{
if (T == NULL)
{
return false;
}
if (T->letra == letra)
{
return true;
}
return buscaElemento(T->izq, letra) || buscaElemento(T->der, letra);
}

int imprimirLetra(AB T, char linea[100], int i, FILE *arch)
{
if (linea[i] == ' ' || i == strlen(linea))
{
fprintf(arch, "%c", T->letra);
return i+1;
}
if (linea[i] == '.')
return imprimirLetra(T->izq, linea, i+1, arch);

if (linea[i] == '-')
return imprimirLetra(T->der, linea, i+1, arch);
}

void imprimeClaveMorse(AB T, char letra, FILE *arch)
{
if (T->letra == letra)
{
fprintf(arch, " ");
return;
}
if (buscaElemento(T->izq, letra))
{
fprintf(arch, ".");
imprimeClaveMorse(T->izq, letra, arch);
}
if (buscaElemento(T->der, letra))
{
fprintf(arch, "-");
imprimeClaveMorse(T->der, letra, arch);
}

}
void morseAtexto(AB T)
{
int n, i;
char linea[400], archEntrada[30];
FILE *arch;

printf("Nombre del archivo de entrada: ");
fflush(stdin);
gets(archEntrada);
arch = fopen(archEntrada, "a+");
if (arch == NULL)
{
printf("Archivo de entrada no encontrado. ");
exit(1);
}
fgets(linea, 400, arch);
if (linea[strlen(linea)-1] == '\n')
linea[strlen(linea)-1] = '\0' ;
fprintf(arch, "\n");
n = strlen(linea);
for(i = 0; i < n; )
{
i = imprimirLetra(T, linea, i, arch);
if (linea[i] == ' ')
{
fprintf(arch, " ");
i++;
}
}
fclose(arch);
printf("Decodificacion realizada. ", 162);
}

void textoAmorse(AB T)
{
int n, i;
char linea[400], archEntrada[30];
FILE *arch;

printf("Nombre del archivo de entrada: ");
fflush(stdin);
gets(archEntrada);
arch = fopen(archEntrada, "a+");
if (arch == NULL)
{
printf("Archivo de entrada no encontrado. ");
exit(1);
}
fgets(linea, 400, arch);
if (linea[strlen(linea)-1] == '\n')
linea[strlen(linea)-1] = '\0' ;
fprintf(arch, "\n");
n = strlen(linea);
for(i = 0; i < n; i++ )
{
if (linea[i] == ' ')
fprintf(arch, " ");
else
{
imprimeClaveMorse(T, linea[i], arch);
}
}
fclose(arch);
printf("Decodificacion realizada. ", 162);
}

void menu()
{
AB T;
char archEntrada[30];
int n, op;
op = 0;
T = creaAB();

morseAtexto(T);

//while(op != 3)
//{
//system("cls");
//printf("\n\t\t 1. Lenguaje natural a codigo morse. ");
//printf("\n\t\t 2. Codigo morse a lenguaje natural. ");
//printf("\n\t\t 3. Salir. ");
//printf("\n\n\t\tIngrese una opci%cn: ", 162);
//scanf("%d", op);
//switch(op)
//{
//case 1:
// textoAmorse(T);
// break;
//case 2:
// morseAtexto(T);
//break;
//case 3:
// break;
//default:
// printf("Opci%cn incorrecta ", 162);

}
// printf("\n\n");
// system("pause");
// system("cls");
// }
//}
int main()
{
menu();

printf("\n\n");

return 0;
}

no se por que al correrlo me crea el archivo pero me lo crea vacio, quisiera que alguien me ayude si es que pueden para saber cual es el problema, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder