Por que no me funciona esta codigo ???
Publicado por aproblemada (1 intervención) el 30/10/2005 23:18:18
Amigos debo desarrollar una tarea con arboles y para ello he debido agregar a una
estructura un campo que guarde una cadena de caracteres, pero no lo he podido
solucionar que puede estar pasando ??
Especificamente el problema es con el campo diag que esta denido como un
arreglo de 4,pero a diferencia del campo Dato este me da problema a la hora
de insertar un nuevo nodo
Aqui va el codigo que estoy corriendo en el compliador dev-c++4.9.9.2
Muchisimas gracias por cualquier ayuda
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <stdio.h>
#include <alloc.h>
#include <process.h>
struct Arbol{
char Dato;
char diag[4];
struct Arbol *Izq;
struct Arbol *Der;
};
void Menu(void);
void error(void);
void InsertarNodo (struct Arbol **,char,char);
void PreOrden (struct Arbol *Raiz);
enum{insertar=1,buscar,imprime,inorden,postorden,preorden,salir};
int main(void)
{
char vdiag[4];
char dato;
int opcion;
struct Arbol *Raiz=NULL;
Menu();
scanf("%d",&opcion);
while(opcion!=salir){
switch(opcion){
case insertar: printf("Introduce un caracter: ");
scanf("\n%c",&dato);
printf("Introduce cuatro caracteres : ");
scanf("\n%s",&vdiag);
InsertarNodo(&Raiz,dato,vdiag);
break;
case preorden: printf("En preorden es:\n");
PreOrden(Raiz);
getch();
break;
printf("Opcion Incorrecta.");
getch();
Menu();
break;
}
Menu();
scanf("%d",&opcion);
}
printf("Fin de %s",__FILE__);
system("cls");
return 0;
}
void error(void)
{
perror("error: no hay memoria suficiente.");
getch();
abort();
}
void PreOrden(struct Arbol *Raiz)
{
if(!Raiz) return;
if(Raiz->Dato)
printf("%c-> ",Raiz->Dato);
printf("%s-> ",Raiz->diag);
PreOrden(Raiz->Izq);
PreOrden(Raiz->Der);
}
void InsertarNodo(struct Arbol **Raiz,char valor, char rdiag)
{
if(*Raiz==NULL){
*Raiz=(struct Arbol *)malloc(sizeof(struct Arbol));
if(*Raiz!=NULL){
(*Raiz)->Dato=valor;
(*Raiz)->diag=rdiag;
(*Raiz)->Izq=NULL;
(*Raiz)->Der=NULL;
}
else{
printf("%c no insertado.\n",valor);
error();
}
}
else if(valor<(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Izq),valor,rdiag);
else if(valor>(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Der),valor,rdiag);
else printf("Dato duplicado.\n");
}
void Menu(void)
{
system("cls");
printf("Escoja su opcion:");
printf("1. Insertar.");
printf("6. Preorden.");
printf("7. Salir.");
printf("-> ");
}
estructura un campo que guarde una cadena de caracteres, pero no lo he podido
solucionar que puede estar pasando ??
Especificamente el problema es con el campo diag que esta denido como un
arreglo de 4,pero a diferencia del campo Dato este me da problema a la hora
de insertar un nuevo nodo
Aqui va el codigo que estoy corriendo en el compliador dev-c++4.9.9.2
Muchisimas gracias por cualquier ayuda
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <stdio.h>
#include <alloc.h>
#include <process.h>
struct Arbol{
char Dato;
char diag[4];
struct Arbol *Izq;
struct Arbol *Der;
};
void Menu(void);
void error(void);
void InsertarNodo (struct Arbol **,char,char);
void PreOrden (struct Arbol *Raiz);
enum{insertar=1,buscar,imprime,inorden,postorden,preorden,salir};
int main(void)
{
char vdiag[4];
char dato;
int opcion;
struct Arbol *Raiz=NULL;
Menu();
scanf("%d",&opcion);
while(opcion!=salir){
switch(opcion){
case insertar: printf("Introduce un caracter: ");
scanf("\n%c",&dato);
printf("Introduce cuatro caracteres : ");
scanf("\n%s",&vdiag);
InsertarNodo(&Raiz,dato,vdiag);
break;
case preorden: printf("En preorden es:\n");
PreOrden(Raiz);
getch();
break;
printf("Opcion Incorrecta.");
getch();
Menu();
break;
}
Menu();
scanf("%d",&opcion);
}
printf("Fin de %s",__FILE__);
system("cls");
return 0;
}
void error(void)
{
perror("error: no hay memoria suficiente.");
getch();
abort();
}
void PreOrden(struct Arbol *Raiz)
{
if(!Raiz) return;
if(Raiz->Dato)
printf("%c-> ",Raiz->Dato);
printf("%s-> ",Raiz->diag);
PreOrden(Raiz->Izq);
PreOrden(Raiz->Der);
}
void InsertarNodo(struct Arbol **Raiz,char valor, char rdiag)
{
if(*Raiz==NULL){
*Raiz=(struct Arbol *)malloc(sizeof(struct Arbol));
if(*Raiz!=NULL){
(*Raiz)->Dato=valor;
(*Raiz)->diag=rdiag;
(*Raiz)->Izq=NULL;
(*Raiz)->Der=NULL;
}
else{
printf("%c no insertado.\n",valor);
error();
}
}
else if(valor<(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Izq),valor,rdiag);
else if(valor>(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Der),valor,rdiag);
else printf("Dato duplicado.\n");
}
void Menu(void)
{
system("cls");
printf("Escoja su opcion:");
printf("1. Insertar.");
printf("6. Preorden.");
printf("7. Salir.");
printf("-> ");
}
Valora esta pregunta


0