• Miércoles 6 de Noviembre de 2024, 02:46

Mostrar Mensajes

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


Mensajes - Juan Manuel

Páginas: [1]
1
C/C++ / Arboles, Help!
« en: Domingo 15 de Febrero de 2004, 00:31 »
Necesito ayuda, tenemos un problema para llenar un arbol binario, con palabras leidas desde un texto. Comparando con la raiz(AAA) y ubicando, segun se valla armando el arbol, a la izquierda las palabras menores(alfabeticamente) y la derecha las mayores, agregadno un 0  o un 1, segun recorra el arbol (izquierda o derecha!!!).

Basicamente, debemos comprobar que las funciones que utilizamos estan funcionando correctamente. :comp:
sospechamos que la funcion  que no funciona es insertar.
esperamos la respuesta, desde ya muchas gracias!!!

2
C/C++ / Ayuda Sobre árboles
« en: Domingo 8 de Febrero de 2004, 20:47 »
No se como ponerle a la raiz del arbol 'AAA', de este programa que etoy haciendo.
Acá está lo que hice hasta ahora:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define RAIZ AAA
#define MAX 100
/**************ESTRUCTURA DEL ARBOL ***************************************/
typedef struct _nodo
{
char palabra[20];
int repetidas;
int cod[MAX];
struct _nodo *dcho;
struct _nodo *izdo;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Arbol;
/**************************FUNCIONES******************************************/
/*un arbol esta vacio si su raiz es null*/
int Vacio(Arbol r) {
return r== NULL;
}


/********* funcion LLENADO del arbol*******************************/
void insertar (Arbol *a, char *parr)
{ /*padre null, nodo raiz*/
int cod[MAX];
int i= 0, f;
pNodo padre = NULL;
pNodo actual = *a;
while (!Vacio(actual) && parr != actual->palabra) /*Ejecuta hasta ubicar la palabra en el arbol */
{
padre = actual;
if (strcmp(actual->palabra, parr) > 0)
{
actual = actual->dcho;
cod = 1;
i++;
}
else
{
if (strcmp(actual->palabra, parr) < 0)
{
actual = actual->izdo;
cod = 0;
i++;
}
}
}
if(!Vacio(actual)) /*aca salio porque el nodo no esa vacio osea, la palabra es igual****/
{
(padre)->repetidas++;
}
if(Vacio(padre)) /*aca salio porque el nodo esta vacio,osea, metemos ahi la palabra*/
{
padre=(Arbol)malloc(sizeof(tipoNodo));

strcpy((padre)->palabra,parr);/*confirmar que funciona */
(padre)->izdo = (padre)->dcho = NULL;
while (cod[f++] != NULL)
{
padre->cod[f] = cod[f];
}
/*escribir la grabada de la palabra en el nodo que quedo**/
}
}



void llenar(Arbol1)
{
/*Abre el archivo de texto*/
FILE *pf = NULL;
char arr[16];
char *parr;

parr = arr;
pf = fopen("c:\\texto.txt", "r");
if (pf == NULL)
{
perror("No se encuentra el archivo\n");
exit(0);
}
while (pf != NULL) /*Ejecuta hasta llegar al final del archivo*/
{
fgets (arr,30, pf);
insertar (&Arbol1 , &parr);
}
}


void main()
{
Arbol Arbol1=NULL;
int i= 0;
Arbol1=(Arbol)malloc(sizeof(tipoNodo));
for (i=0; i < 3; i++)
{
(Arbol1)->palabra = 'A';
}
(Arbol1)->izdo = (Arbol1)->dcho = NULL;
llenar(&Arbol1);
printf("no funciona");
}

La consigna del programa es la siguiente:
Problema:
Se recibe un texto en el archivo Texto.txt, el cual se debe procesar para poder responder a las preguntas enunciadas más abajo, y además se debe encriptar mediante cadenas formadas por 0’s y 1’s., haciendo uso para ello de un árbol binario de búsqueda. El texto encriptado debe ser almacenado en el archivo Encriptado.txt, y las claves de codificación en el archivo Codificación.txt.

El texto a encriptar se debe leer desde el archivo, y cada palabra en el mismo debe buscarse (y en caso de no encontrarse ser agregada) en un árbol binario de búsqueda. (cada nodo del árbol puede contener, además de la palabra, otra información que sea de utilidad para resolver el problema).

La cadena de 0’s y 1’s que corresponderá a cada palabra en el archivo encriptado, viene determinada por el camino que se debe recorrer desde la raíz hasta el nodo que contiene dicha palabra: cada vez que bajamos a un hijo izquierdo ponemos un 0 en la cadena y cada vez que bajamos a un hijo derecho ponemos un 1. El nodo raíz contiene un valor especial “AAA”.

En el archivo Encriptado.txt, se almacenan las cadenas de ceros y unos, separadas por un espacio en blanco.

En el archivo Codificación.txt, se debe almacenar una línea para cada palabra codificada con el siguiente formato (las palabras repetidas deben guardarse en este archivo una única vez):
palabra palabra-encriptada

Estos dos archivos de salida, permitirían eventualmente reconstruir el texto original.


Ejemplo: mientras se procesa el texto en el archivo Texto.txt, al momento de tener leídas las primeras 5 palabras (esta lectura luego continúa hasta terminar el archivo), el árbol generado es el siguiente:

Tiempo: 1
de: 10
vida: 11
datos: 100
los: 101












El programa debe procesar el archivo Texto.txt, generar el árbol binario de búsqueda, generar el archivo Encriptado.txt y Codificacion.txt, y permitir dar respuestas a las opciones del siguiente menú:
1. Cuál es la palabra más repetida en el archivo de entrada.
2. Cuál es la palabra de mayor longitud en el archivo de entrada.
3. Cuál es la profundidad del árbol generado.
4. Cuál es longitud promedio de las cadenas generadas para codificar cada palabra.
5. Dada una letra (la cual debe ser ingresada luego de seleccionar esta opción), determinar cuantas palabras hay en el archivo de entrada que comiencen con dicha letra.
6. Dada una letra (la cual debe ser ingresada luego de seleccionar esta opción), determinar cuantas palabras hay en el archivo de entrada que terminen con dicha letra.
7. Liberar toda la memoria dinámica solicitada y salir del programa.

 Permitir que el usuario seleccione opciones, tantas veces como considere necesario. Para cada selección dar la respuesta y volver a mostrar el menú.
 Las opciones del menú, la selección de opciones, el ingreso de datos adicionales y las respuestas deben estar presentadas adecuadamente, teniendo en cuenta aspectos de interface con el usuario.

Observaciones:
- se debe decidir que información almacenar en cada nodo del árbol, para que las operaciones a realizar por el programa sean lo más eficientes posibles.

Decearía mucho que me puedan ayudar con este problema.

Saludos

Páginas: [1]