UTNianos

Versión completa: Tu noticia NO importante del día
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
(03-11-2011 10:38)matyary escribió: [ -> ]Quedó una obra de arte! Pero no funciona del todo bien...

Spoiler: Mostrar
//Librerías.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Estructura.
struct nodo
{
char nombre[50];
int socio;
struct nodo *Siguiente;
struct nodo *Anterior;
struct nodo *Inicio;
struct nodo *Fin;
int tam;
};

//Prototipos de las funciones.
int insertar (struct nodo *Lista , char *n, int s);
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2);
int comparar(char *cad1,char *cad2);
void *copiar(struct nodo *Lista, char letra);
int menu (struct nodo *Lista);
void imprimir (struct nodo *Lista);

//---------------------------------------MAIN-------------------------------------------//
int main (void)
{
struct nodo *lista;
lista=malloc(sizeof(struct nodo));
char *nom;
nom=malloc(50);
int opcion=1;
int soc;
int aux;
char *str1, *str2;
char l;

str1=malloc(50);
str1=malloc(50);

//Incicialización de variables.
lista->Inicio=NULL;
lista->Fin=NULL;
lista->tam=0;

while (opcion!=4)
{
opcion=menu(lista);
switch (opcion)
{
case 4:
printf ("\nFin de la ejecución.\n");
exit(-1);
break;
case 0:
printf ("\nIngrese un nombre:");
scanf ("%s",nom);
printf ("\nIngrese nro. de socio:");
scanf ("%d",&soc);
insertar (lista,nom, soc);
imprimir(lista);
printf ("\n%d elementos.\n",lista->tam);
break;
case 1:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
intercambiar (lista,str1,str2);
imprimir (lista);
break;
case 2:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
aux = comparar (str1,str2);
if (aux==0)
printf ("\nCadenas iguales.\n");
if (aux==1)
printf ("\nPrimera cadena mayor.\n");
if (aux==-1)
printf ("\nSegunda cadena mayor.\n");
break;
case 3:
printf ("\nIngrese letra:");
scanf ("%c",&l);
getchar();
copiar (lista,l);
}
}

return 0;
}

//---------------------------------------MENU-------------------------------------------//
int menu (struct nodo *Lista)
{
int eleccion;

if (Lista->tam==0)
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
if (eleccion==1)
eleccion=4; //Para que coincida con el menú de abajo.
}
else
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Intercambiar nodos.\n2-Comparar nodos.\n3-Copiar nodos.\n4-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
}

return eleccion;
}

//---------------------------------INSERTAR NUEVO NODO----------------------------------//
int insertar (struct nodo *Lista , char *n, int s)
{
struct nodo *Nuevo, *Actual;
int insert;
int i=0;

if ( (Nuevo = malloc (sizeof (struct nodo) ) ) == NULL)
return -1;
//if ( (Nuevo->nombre = malloc (sizeof (char *) ) ) == NULL)
//return -1;

for( i=0; *(n+i)!='\0'; i++ )
{
Nuevo->nombre[i] = *(n+i);
}

Nuevo->nombre[i]='\0';
Nuevo->socio=s;

if (Lista->tam==0)
{
Nuevo->Anterior=Lista->Inicio;
Nuevo->Siguiente=Lista->Fin;
Lista->Inicio=Nuevo;
Lista->Fin=Nuevo;
Lista->tam++;
return 0;
}

else //Inserta después del último nodo ingresado.
{
Actual=Lista->Inicio;
while ( Actual->Siguiente != NULL && strcmp(n,Actual->nombre ) !=0 )
Actual=Actual->Siguiente;


Nuevo->Anterior=Actual;
if (Actual->Siguiente==NULL)
Lista->Fin=Nuevo;
else Actual->Siguiente->Anterior=Nuevo;
Actual->Siguiente=Nuevo;
Lista->tam++;
return 0;
}
}

//------------------------------------IMPRIMIR LISTA--------------------------------------//
void imprimir (struct nodo *Lista)
{
struct nodo *Inverso, *Actual;
int choice;

printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n1-Imprimir lista.\n2-Imprimir lista al revés.\n");
printf ("\nOpción:");
scanf ("%d",&choice);

Actual=Lista->Inicio;
printf ("\n----->");

if (choice==1)
{
while (Actual!=NULL)
{
Inverso=Actual;
printf ("Nombre:%s/Socio:%d----->",Actual->nombre,Actual->socio);
Actual=Actual->Siguiente;
}
}

Inverso=Inverso->Anterior; //Porque sino comienza de NULL.
if (choice==2)
{
while (Inverso!=NULL)
{
printf ("Nombre:%s/Socio:%d----->",Inverso->nombre,Inverso->socio);
Inverso=Inverso->Anterior;
}
}
}

//------------------------------------COMPARA NODOS-----------------------------------//
int comparar(char *cad1,char *cad2)
{
int i=0, j=0, aux=0;

for (i=0 ; *(cad1+i)!='\0' ; i++)
for (j=0 ; *(cad2+j)!='\0' ; j++)
{
if (*(cad1+i)==*(cad2+j))
aux=0;
if (*(cad1+i)<*(cad2+j))
aux=-1;
if (*(cad1+i)>*(cad2+j))
aux=1;
}

return aux;
}

//------------------------------------INTERCAMBIA NODOS-------------------------------//
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2)
{
char *auxn1=NULL, *auxn2=NULL;
int auxs1=0, auxs2=0;
struct nodo *Actual, *Aux1, *Aux2;
int i=0;

Aux1 = malloc (sizeof (struct nodo) );
Aux2 = malloc (sizeof (struct nodo) );

auxn1=malloc(50);
auxn2=malloc(50);

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena1)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn1=Actual->nombre;
auxs1=Actual->socio;
Aux1=Actual;
break;
}
Actual=Actual->Siguiente;
}

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena2)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn2=Actual->nombre;
auxs2=Actual->socio;
Aux2=Actual;
break;
}
Actual=Actual->Siguiente;
}

if (Aux1==NULL || Aux2==NULL)
return NULL;

printf ("\n%s",auxn1);
printf ("\n%s",auxn2);

printf ("\n%d",auxs1);
printf ("\n%d",auxs2);

//Intercambia información entre nodos:
for( i=0; *(auxn2+i)!='\0'; i++ )
Aux1->nombre[i]=*(auxn2+i);
Aux1->socio=auxs2;
for( i=0; *(auxn1+i)!='\0'; i++ )
Aux2->nombre[i]=*(auxn1+i);
Aux2->socio=auxs1;

return Lista->Inicio;
}

//-------------------------------------ARRAY DE NODOS---------------------------------//
void *copiar(struct nodo *Lista, char letra)
{
struct nodo *Actual;
int i=0;
char *p[Lista->tam];

Actual=Lista->Inicio;
printf("\n----->");
while (Actual!=NULL)
{
if (Actual->nombre[0] == letra)
{
p[i]=Actual->nombre;
printf ("%s----->",p[i]);
i++;
}
Actual=Actual->Siguiente;
}
}

en estos momentos un troll te diria "te dije que eso explotaba en la estructura y en las funciones" Trollface

pero como no soy troll (?): che, que lastima, venias bien, ojala que encuentres el error Carucha
(03-11-2011 11:16)el pibe escribió: [ -> ]
(03-11-2011 10:38)matyary escribió: [ -> ]Quedó una obra de arte! Pero no funciona del todo bien...

Spoiler: Mostrar
//Librerías.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Estructura.
struct nodo
{
char nombre[50];
int socio;
struct nodo *Siguiente;
struct nodo *Anterior;
struct nodo *Inicio;
struct nodo *Fin;
int tam;
};

//Prototipos de las funciones.
int insertar (struct nodo *Lista , char *n, int s);
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2);
int comparar(char *cad1,char *cad2);
void *copiar(struct nodo *Lista, char letra);
int menu (struct nodo *Lista);
void imprimir (struct nodo *Lista);

//---------------------------------------MAIN-------------------------------------------//
int main (void)
{
struct nodo *lista;
lista=malloc(sizeof(struct nodo));
char *nom;
nom=malloc(50);
int opcion=1;
int soc;
int aux;
char *str1, *str2;
char l;

str1=malloc(50);
str1=malloc(50);

//Incicialización de variables.
lista->Inicio=NULL;
lista->Fin=NULL;
lista->tam=0;

while (opcion!=4)
{
opcion=menu(lista);
switch (opcion)
{
case 4:
printf ("\nFin de la ejecución.\n");
exit(-1);
break;
case 0:
printf ("\nIngrese un nombre:");
scanf ("%s",nom);
printf ("\nIngrese nro. de socio:");
scanf ("%d",&soc);
insertar (lista,nom, soc);
imprimir(lista);
printf ("\n%d elementos.\n",lista->tam);
break;
case 1:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
intercambiar (lista,str1,str2);
imprimir (lista);
break;
case 2:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
aux = comparar (str1,str2);
if (aux==0)
printf ("\nCadenas iguales.\n");
if (aux==1)
printf ("\nPrimera cadena mayor.\n");
if (aux==-1)
printf ("\nSegunda cadena mayor.\n");
break;
case 3:
printf ("\nIngrese letra:");
scanf ("%c",&l);
getchar();
copiar (lista,l);
}
}

return 0;
}

//---------------------------------------MENU-------------------------------------------//
int menu (struct nodo *Lista)
{
int eleccion;

if (Lista->tam==0)
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
if (eleccion==1)
eleccion=4; //Para que coincida con el menú de abajo.
}
else
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Intercambiar nodos.\n2-Comparar nodos.\n3-Copiar nodos.\n4-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
}

return eleccion;
}

//---------------------------------INSERTAR NUEVO NODO----------------------------------//
int insertar (struct nodo *Lista , char *n, int s)
{
struct nodo *Nuevo, *Actual;
int insert;
int i=0;

if ( (Nuevo = malloc (sizeof (struct nodo) ) ) == NULL)
return -1;
//if ( (Nuevo->nombre = malloc (sizeof (char *) ) ) == NULL)
//return -1;

for( i=0; *(n+i)!='\0'; i++ )
{
Nuevo->nombre[i] = *(n+i);
}

Nuevo->nombre[i]='\0';
Nuevo->socio=s;

if (Lista->tam==0)
{
Nuevo->Anterior=Lista->Inicio;
Nuevo->Siguiente=Lista->Fin;
Lista->Inicio=Nuevo;
Lista->Fin=Nuevo;
Lista->tam++;
return 0;
}

else //Inserta después del último nodo ingresado.
{
Actual=Lista->Inicio;
while ( Actual->Siguiente != NULL && strcmp(n,Actual->nombre ) !=0 )
Actual=Actual->Siguiente;


Nuevo->Anterior=Actual;
if (Actual->Siguiente==NULL)
Lista->Fin=Nuevo;
else Actual->Siguiente->Anterior=Nuevo;
Actual->Siguiente=Nuevo;
Lista->tam++;
return 0;
}
}

//------------------------------------IMPRIMIR LISTA--------------------------------------//
void imprimir (struct nodo *Lista)
{
struct nodo *Inverso, *Actual;
int choice;

printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n1-Imprimir lista.\n2-Imprimir lista al revés.\n");
printf ("\nOpción:");
scanf ("%d",&choice);

Actual=Lista->Inicio;
printf ("\n----->");

if (choice==1)
{
while (Actual!=NULL)
{
Inverso=Actual;
printf ("Nombre:%s/Socio:%d----->",Actual->nombre,Actual->socio);
Actual=Actual->Siguiente;
}
}

Inverso=Inverso->Anterior; //Porque sino comienza de NULL.
if (choice==2)
{
while (Inverso!=NULL)
{
printf ("Nombre:%s/Socio:%d----->",Inverso->nombre,Inverso->socio);
Inverso=Inverso->Anterior;
}
}
}

//------------------------------------COMPARA NODOS-----------------------------------//
int comparar(char *cad1,char *cad2)
{
int i=0, j=0, aux=0;

for (i=0 ; *(cad1+i)!='\0' ; i++)
for (j=0 ; *(cad2+j)!='\0' ; j++)
{
if (*(cad1+i)==*(cad2+j))
aux=0;
if (*(cad1+i)<*(cad2+j))
aux=-1;
if (*(cad1+i)>*(cad2+j))
aux=1;
}

return aux;
}

//------------------------------------INTERCAMBIA NODOS-------------------------------//
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2)
{
char *auxn1=NULL, *auxn2=NULL;
int auxs1=0, auxs2=0;
struct nodo *Actual, *Aux1, *Aux2;
int i=0;

Aux1 = malloc (sizeof (struct nodo) );
Aux2 = malloc (sizeof (struct nodo) );

auxn1=malloc(50);
auxn2=malloc(50);

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena1)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn1=Actual->nombre;
auxs1=Actual->socio;
Aux1=Actual;
break;
}
Actual=Actual->Siguiente;
}

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena2)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn2=Actual->nombre;
auxs2=Actual->socio;
Aux2=Actual;
break;
}
Actual=Actual->Siguiente;
}

if (Aux1==NULL || Aux2==NULL)
return NULL;

printf ("\n%s",auxn1);
printf ("\n%s",auxn2);

printf ("\n%d",auxs1);
printf ("\n%d",auxs2);

//Intercambia información entre nodos:
for( i=0; *(auxn2+i)!='\0'; i++ )
Aux1->nombre[i]=*(auxn2+i);
Aux1->socio=auxs2;
for( i=0; *(auxn1+i)!='\0'; i++ )
Aux2->nombre[i]=*(auxn1+i);
Aux2->socio=auxs1;

return Lista->Inicio;
}

//-------------------------------------ARRAY DE NODOS---------------------------------//
void *copiar(struct nodo *Lista, char letra)
{
struct nodo *Actual;
int i=0;
char *p[Lista->tam];

Actual=Lista->Inicio;
printf("\n----->");
while (Actual!=NULL)
{
if (Actual->nombre[0] == letra)
{
p[i]=Actual->nombre;
printf ("%s----->",p[i]);
i++;
}
Actual=Actual->Siguiente;
}
}

en estos momentos un troll te diria "te dije que eso explotaba en la estructura y en las funciones" Trollface

pero como no soy troll (?): che, que lastima, venias bien, ojala que encuentres el error Carucha

Off-topic:
Es lo que me tomaron en el parcial, si lo hago funcionar en la compu tengo más chances de aprobar... pero la mierda esta no quiero hacer lo que yo le digo, me retorna moco (?)
(03-11-2011 11:50)matyary escribió: [ -> ]
(03-11-2011 11:16)el pibe escribió: [ -> ]
(03-11-2011 10:38)matyary escribió: [ -> ]Quedó una obra de arte! Pero no funciona del todo bien...

Spoiler: Mostrar
//Librerías.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Estructura.
struct nodo
{
char nombre[50];
int socio;
struct nodo *Siguiente;
struct nodo *Anterior;
struct nodo *Inicio;
struct nodo *Fin;
int tam;
};

//Prototipos de las funciones.
int insertar (struct nodo *Lista , char *n, int s);
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2);
int comparar(char *cad1,char *cad2);
void *copiar(struct nodo *Lista, char letra);
int menu (struct nodo *Lista);
void imprimir (struct nodo *Lista);

//---------------------------------------MAIN-------------------------------------------//
int main (void)
{
struct nodo *lista;
lista=malloc(sizeof(struct nodo));
char *nom;
nom=malloc(50);
int opcion=1;
int soc;
int aux;
char *str1, *str2;
char l;

str1=malloc(50);
str1=malloc(50);

//Incicialización de variables.
lista->Inicio=NULL;
lista->Fin=NULL;
lista->tam=0;

while (opcion!=4)
{
opcion=menu(lista);
switch (opcion)
{
case 4:
printf ("\nFin de la ejecución.\n");
exit(-1);
break;
case 0:
printf ("\nIngrese un nombre:");
scanf ("%s",nom);
printf ("\nIngrese nro. de socio:");
scanf ("%d",&soc);
insertar (lista,nom, soc);
imprimir(lista);
printf ("\n%d elementos.\n",lista->tam);
break;
case 1:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
intercambiar (lista,str1,str2);
imprimir (lista);
break;
case 2:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
aux = comparar (str1,str2);
if (aux==0)
printf ("\nCadenas iguales.\n");
if (aux==1)
printf ("\nPrimera cadena mayor.\n");
if (aux==-1)
printf ("\nSegunda cadena mayor.\n");
break;
case 3:
printf ("\nIngrese letra:");
scanf ("%c",&l);
getchar();
copiar (lista,l);
}
}

return 0;
}

//---------------------------------------MENU-------------------------------------------//
int menu (struct nodo *Lista)
{
int eleccion;

if (Lista->tam==0)
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
if (eleccion==1)
eleccion=4; //Para que coincida con el menú de abajo.
}
else
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Intercambiar nodos.\n2-Comparar nodos.\n3-Copiar nodos.\n4-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
}

return eleccion;
}

//---------------------------------INSERTAR NUEVO NODO----------------------------------//
int insertar (struct nodo *Lista , char *n, int s)
{
struct nodo *Nuevo, *Actual;
int insert;
int i=0;

if ( (Nuevo = malloc (sizeof (struct nodo) ) ) == NULL)
return -1;
//if ( (Nuevo->nombre = malloc (sizeof (char *) ) ) == NULL)
//return -1;

for( i=0; *(n+i)!='\0'; i++ )
{
Nuevo->nombre[i] = *(n+i);
}

Nuevo->nombre[i]='\0';
Nuevo->socio=s;

if (Lista->tam==0)
{
Nuevo->Anterior=Lista->Inicio;
Nuevo->Siguiente=Lista->Fin;
Lista->Inicio=Nuevo;
Lista->Fin=Nuevo;
Lista->tam++;
return 0;
}

else //Inserta después del último nodo ingresado.
{
Actual=Lista->Inicio;
while ( Actual->Siguiente != NULL && strcmp(n,Actual->nombre ) !=0 )
Actual=Actual->Siguiente;


Nuevo->Anterior=Actual;
if (Actual->Siguiente==NULL)
Lista->Fin=Nuevo;
else Actual->Siguiente->Anterior=Nuevo;
Actual->Siguiente=Nuevo;
Lista->tam++;
return 0;
}
}

//------------------------------------IMPRIMIR LISTA--------------------------------------//
void imprimir (struct nodo *Lista)
{
struct nodo *Inverso, *Actual;
int choice;

printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n1-Imprimir lista.\n2-Imprimir lista al revés.\n");
printf ("\nOpción:");
scanf ("%d",&choice);

Actual=Lista->Inicio;
printf ("\n----->");

if (choice==1)
{
while (Actual!=NULL)
{
Inverso=Actual;
printf ("Nombre:%s/Socio:%d----->",Actual->nombre,Actual->socio);
Actual=Actual->Siguiente;
}
}

Inverso=Inverso->Anterior; //Porque sino comienza de NULL.
if (choice==2)
{
while (Inverso!=NULL)
{
printf ("Nombre:%s/Socio:%d----->",Inverso->nombre,Inverso->socio);
Inverso=Inverso->Anterior;
}
}
}

//------------------------------------COMPARA NODOS-----------------------------------//
int comparar(char *cad1,char *cad2)
{
int i=0, j=0, aux=0;

for (i=0 ; *(cad1+i)!='\0' ; i++)
for (j=0 ; *(cad2+j)!='\0' ; j++)
{
if (*(cad1+i)==*(cad2+j))
aux=0;
if (*(cad1+i)<*(cad2+j))
aux=-1;
if (*(cad1+i)>*(cad2+j))
aux=1;
}

return aux;
}

//------------------------------------INTERCAMBIA NODOS-------------------------------//
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2)
{
char *auxn1=NULL, *auxn2=NULL;
int auxs1=0, auxs2=0;
struct nodo *Actual, *Aux1, *Aux2;
int i=0;

Aux1 = malloc (sizeof (struct nodo) );
Aux2 = malloc (sizeof (struct nodo) );

auxn1=malloc(50);
auxn2=malloc(50);

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena1)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn1=Actual->nombre;
auxs1=Actual->socio;
Aux1=Actual;
break;
}
Actual=Actual->Siguiente;
}

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena2)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn2=Actual->nombre;
auxs2=Actual->socio;
Aux2=Actual;
break;
}
Actual=Actual->Siguiente;
}

if (Aux1==NULL || Aux2==NULL)
return NULL;

printf ("\n%s",auxn1);
printf ("\n%s",auxn2);

printf ("\n%d",auxs1);
printf ("\n%d",auxs2);

//Intercambia información entre nodos:
for( i=0; *(auxn2+i)!='\0'; i++ )
Aux1->nombre[i]=*(auxn2+i);
Aux1->socio=auxs2;
for( i=0; *(auxn1+i)!='\0'; i++ )
Aux2->nombre[i]=*(auxn1+i);
Aux2->socio=auxs1;

return Lista->Inicio;
}

//-------------------------------------ARRAY DE NODOS---------------------------------//
void *copiar(struct nodo *Lista, char letra)
{
struct nodo *Actual;
int i=0;
char *p[Lista->tam];

Actual=Lista->Inicio;
printf("\n----->");
while (Actual!=NULL)
{
if (Actual->nombre[0] == letra)
{
p[i]=Actual->nombre;
printf ("%s----->",p[i]);
i++;
}
Actual=Actual->Siguiente;
}
}

en estos momentos un troll te diria "te dije que eso explotaba en la estructura y en las funciones" Trollface

pero como no soy troll (?): che, que lastima, venias bien, ojala que encuentres el error Carucha

Off-topic:
Es lo que me tomaron en el parcial, si lo hago funcionar en la compu tengo más chances de aprobar... pero la mierda esta no quiero hacer lo que yo le digo, me retorna moco (?)

es que esta mal declarada la escructura y cuando mandas y recibis los parametros en las funciones =P
primer debuggeo en visual studio 2010 (!)
(03-11-2011 11:57)el pibe escribió: [ -> ]
(03-11-2011 11:50)matyary escribió: [ -> ]
(03-11-2011 11:16)el pibe escribió: [ -> ]
(03-11-2011 10:38)matyary escribió: [ -> ]Quedó una obra de arte! Pero no funciona del todo bien...

Spoiler: Mostrar
//Librerías.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Estructura.
struct nodo
{
char nombre[50];
int socio;
struct nodo *Siguiente;
struct nodo *Anterior;
struct nodo *Inicio;
struct nodo *Fin;
int tam;
};

//Prototipos de las funciones.
int insertar (struct nodo *Lista , char *n, int s);
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2);
int comparar(char *cad1,char *cad2);
void *copiar(struct nodo *Lista, char letra);
int menu (struct nodo *Lista);
void imprimir (struct nodo *Lista);

//---------------------------------------MAIN-------------------------------------------//
int main (void)
{
struct nodo *lista;
lista=malloc(sizeof(struct nodo));
char *nom;
nom=malloc(50);
int opcion=1;
int soc;
int aux;
char *str1, *str2;
char l;

str1=malloc(50);
str1=malloc(50);

//Incicialización de variables.
lista->Inicio=NULL;
lista->Fin=NULL;
lista->tam=0;

while (opcion!=4)
{
opcion=menu(lista);
switch (opcion)
{
case 4:
printf ("\nFin de la ejecución.\n");
exit(-1);
break;
case 0:
printf ("\nIngrese un nombre:");
scanf ("%s",nom);
printf ("\nIngrese nro. de socio:");
scanf ("%d",&soc);
insertar (lista,nom, soc);
imprimir(lista);
printf ("\n%d elementos.\n",lista->tam);
break;
case 1:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
intercambiar (lista,str1,str2);
imprimir (lista);
break;
case 2:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
aux = comparar (str1,str2);
if (aux==0)
printf ("\nCadenas iguales.\n");
if (aux==1)
printf ("\nPrimera cadena mayor.\n");
if (aux==-1)
printf ("\nSegunda cadena mayor.\n");
break;
case 3:
printf ("\nIngrese letra:");
scanf ("%c",&l);
getchar();
copiar (lista,l);
}
}

return 0;
}

//---------------------------------------MENU-------------------------------------------//
int menu (struct nodo *Lista)
{
int eleccion;

if (Lista->tam==0)
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
if (eleccion==1)
eleccion=4; //Para que coincida con el menú de abajo.
}
else
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Intercambiar nodos.\n2-Comparar nodos.\n3-Copiar nodos.\n4-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
}

return eleccion;
}

//---------------------------------INSERTAR NUEVO NODO----------------------------------//
int insertar (struct nodo *Lista , char *n, int s)
{
struct nodo *Nuevo, *Actual;
int insert;
int i=0;

if ( (Nuevo = malloc (sizeof (struct nodo) ) ) == NULL)
return -1;
//if ( (Nuevo->nombre = malloc (sizeof (char *) ) ) == NULL)
//return -1;

for( i=0; *(n+i)!='\0'; i++ )
{
Nuevo->nombre[i] = *(n+i);
}

Nuevo->nombre[i]='\0';
Nuevo->socio=s;

if (Lista->tam==0)
{
Nuevo->Anterior=Lista->Inicio;
Nuevo->Siguiente=Lista->Fin;
Lista->Inicio=Nuevo;
Lista->Fin=Nuevo;
Lista->tam++;
return 0;
}

else //Inserta después del último nodo ingresado.
{
Actual=Lista->Inicio;
while ( Actual->Siguiente != NULL && strcmp(n,Actual->nombre ) !=0 )
Actual=Actual->Siguiente;


Nuevo->Anterior=Actual;
if (Actual->Siguiente==NULL)
Lista->Fin=Nuevo;
else Actual->Siguiente->Anterior=Nuevo;
Actual->Siguiente=Nuevo;
Lista->tam++;
return 0;
}
}

//------------------------------------IMPRIMIR LISTA--------------------------------------//
void imprimir (struct nodo *Lista)
{
struct nodo *Inverso, *Actual;
int choice;

printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n1-Imprimir lista.\n2-Imprimir lista al revés.\n");
printf ("\nOpción:");
scanf ("%d",&choice);

Actual=Lista->Inicio;
printf ("\n----->");

if (choice==1)
{
while (Actual!=NULL)
{
Inverso=Actual;
printf ("Nombre:%s/Socio:%d----->",Actual->nombre,Actual->socio);
Actual=Actual->Siguiente;
}
}

Inverso=Inverso->Anterior; //Porque sino comienza de NULL.
if (choice==2)
{
while (Inverso!=NULL)
{
printf ("Nombre:%s/Socio:%d----->",Inverso->nombre,Inverso->socio);
Inverso=Inverso->Anterior;
}
}
}

//------------------------------------COMPARA NODOS-----------------------------------//
int comparar(char *cad1,char *cad2)
{
int i=0, j=0, aux=0;

for (i=0 ; *(cad1+i)!='\0' ; i++)
for (j=0 ; *(cad2+j)!='\0' ; j++)
{
if (*(cad1+i)==*(cad2+j))
aux=0;
if (*(cad1+i)<*(cad2+j))
aux=-1;
if (*(cad1+i)>*(cad2+j))
aux=1;
}

return aux;
}

//------------------------------------INTERCAMBIA NODOS-------------------------------//
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2)
{
char *auxn1=NULL, *auxn2=NULL;
int auxs1=0, auxs2=0;
struct nodo *Actual, *Aux1, *Aux2;
int i=0;

Aux1 = malloc (sizeof (struct nodo) );
Aux2 = malloc (sizeof (struct nodo) );

auxn1=malloc(50);
auxn2=malloc(50);

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena1)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn1=Actual->nombre;
auxs1=Actual->socio;
Aux1=Actual;
break;
}
Actual=Actual->Siguiente;
}

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena2)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn2=Actual->nombre;
auxs2=Actual->socio;
Aux2=Actual;
break;
}
Actual=Actual->Siguiente;
}

if (Aux1==NULL || Aux2==NULL)
return NULL;

printf ("\n%s",auxn1);
printf ("\n%s",auxn2);

printf ("\n%d",auxs1);
printf ("\n%d",auxs2);

//Intercambia información entre nodos:
for( i=0; *(auxn2+i)!='\0'; i++ )
Aux1->nombre[i]=*(auxn2+i);
Aux1->socio=auxs2;
for( i=0; *(auxn1+i)!='\0'; i++ )
Aux2->nombre[i]=*(auxn1+i);
Aux2->socio=auxs1;

return Lista->Inicio;
}

//-------------------------------------ARRAY DE NODOS---------------------------------//
void *copiar(struct nodo *Lista, char letra)
{
struct nodo *Actual;
int i=0;
char *p[Lista->tam];

Actual=Lista->Inicio;
printf("\n----->");
while (Actual!=NULL)
{
if (Actual->nombre[0] == letra)
{
p[i]=Actual->nombre;
printf ("%s----->",p[i]);
i++;
}
Actual=Actual->Siguiente;
}
}

en estos momentos un troll te diria "te dije que eso explotaba en la estructura y en las funciones" Trollface

pero como no soy troll (?): che, que lastima, venias bien, ojala que encuentres el error Carucha

Off-topic:
Es lo que me tomaron en el parcial, si lo hago funcionar en la compu tengo más chances de aprobar... pero la mierda esta no quiero hacer lo que yo le digo, me retorna moco (?)

es que esta mal declarada la escructura y cuando mandas y recibis los parametros en las funciones =P


Off-topic:
Ojo que eso está bien, al compilar no tira ningún error ni warning. Lo que está mal es el algoritmo de las funciones intercambiar y copiar (no hace lo que yo quiero).
Tengo un pasaje el 10 de Diciembre wall thumbdown
Y los finales ? jaja =P
Me sale todo al reves.La reputisima...
(03-11-2011 18:45)rulo escribió: [ -> ]Me sale todo al reves.La reputisima...


Off-topic:
Caminá con las manos, cabeza hacia abajo... vas a ver como te empiezan a salir las cosas.


Estoy empezando a "entender" probabilidad, al menos me salen los ejercicios =)
(03-11-2011 12:55)matyary escribió: [ -> ]
(03-11-2011 11:57)el pibe escribió: [ -> ]
(03-11-2011 11:50)matyary escribió: [ -> ]
(03-11-2011 11:16)el pibe escribió: [ -> ]
(03-11-2011 10:38)matyary escribió: [ -> ]Quedó una obra de arte! Pero no funciona del todo bien...

Spoiler: Mostrar
//Librerías.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Estructura.
struct nodo
{
char nombre[50];
int socio;
struct nodo *Siguiente;
struct nodo *Anterior;
struct nodo *Inicio;
struct nodo *Fin;
int tam;
};

//Prototipos de las funciones.
int insertar (struct nodo *Lista , char *n, int s);
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2);
int comparar(char *cad1,char *cad2);
void *copiar(struct nodo *Lista, char letra);
int menu (struct nodo *Lista);
void imprimir (struct nodo *Lista);

//---------------------------------------MAIN-------------------------------------------//
int main (void)
{
struct nodo *lista;
lista=malloc(sizeof(struct nodo));
char *nom;
nom=malloc(50);
int opcion=1;
int soc;
int aux;
char *str1, *str2;
char l;

str1=malloc(50);
str1=malloc(50);

//Incicialización de variables.
lista->Inicio=NULL;
lista->Fin=NULL;
lista->tam=0;

while (opcion!=4)
{
opcion=menu(lista);
switch (opcion)
{
case 4:
printf ("\nFin de la ejecución.\n");
exit(-1);
break;
case 0:
printf ("\nIngrese un nombre:");
scanf ("%s",nom);
printf ("\nIngrese nro. de socio:");
scanf ("%d",&soc);
insertar (lista,nom, soc);
imprimir(lista);
printf ("\n%d elementos.\n",lista->tam);
break;
case 1:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
intercambiar (lista,str1,str2);
imprimir (lista);
break;
case 2:
printf ("\nIngrese primer nombre:");
scanf ("%s",str1);
printf ("\nIngrese segundo nombre:");
scanf ("%s",str2);
aux = comparar (str1,str2);
if (aux==0)
printf ("\nCadenas iguales.\n");
if (aux==1)
printf ("\nPrimera cadena mayor.\n");
if (aux==-1)
printf ("\nSegunda cadena mayor.\n");
break;
case 3:
printf ("\nIngrese letra:");
scanf ("%c",&l);
getchar();
copiar (lista,l);
}
}

return 0;
}

//---------------------------------------MENU-------------------------------------------//
int menu (struct nodo *Lista)
{
int eleccion;

if (Lista->tam==0)
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
if (eleccion==1)
eleccion=4; //Para que coincida con el menú de abajo.
}
else
{
printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n0-Insertar elemento.\n1-Intercambiar nodos.\n2-Comparar nodos.\n3-Copiar nodos.\n4-Salir.\n");
printf ("\nOpción:");
scanf ("%d",&eleccion);
}

return eleccion;
}

//---------------------------------INSERTAR NUEVO NODO----------------------------------//
int insertar (struct nodo *Lista , char *n, int s)
{
struct nodo *Nuevo, *Actual;
int insert;
int i=0;

if ( (Nuevo = malloc (sizeof (struct nodo) ) ) == NULL)
return -1;
//if ( (Nuevo->nombre = malloc (sizeof (char *) ) ) == NULL)
//return -1;

for( i=0; *(n+i)!='\0'; i++ )
{
Nuevo->nombre[i] = *(n+i);
}

Nuevo->nombre[i]='\0';
Nuevo->socio=s;

if (Lista->tam==0)
{
Nuevo->Anterior=Lista->Inicio;
Nuevo->Siguiente=Lista->Fin;
Lista->Inicio=Nuevo;
Lista->Fin=Nuevo;
Lista->tam++;
return 0;
}

else //Inserta después del último nodo ingresado.
{
Actual=Lista->Inicio;
while ( Actual->Siguiente != NULL && strcmp(n,Actual->nombre ) !=0 )
Actual=Actual->Siguiente;


Nuevo->Anterior=Actual;
if (Actual->Siguiente==NULL)
Lista->Fin=Nuevo;
else Actual->Siguiente->Anterior=Nuevo;
Actual->Siguiente=Nuevo;
Lista->tam++;
return 0;
}
}

//------------------------------------IMPRIMIR LISTA--------------------------------------//
void imprimir (struct nodo *Lista)
{
struct nodo *Inverso, *Actual;
int choice;

printf ("\nElija una de las opciones que aparecen en pantalla:\n");
printf ("\n1-Imprimir lista.\n2-Imprimir lista al revés.\n");
printf ("\nOpción:");
scanf ("%d",&choice);

Actual=Lista->Inicio;
printf ("\n----->");

if (choice==1)
{
while (Actual!=NULL)
{
Inverso=Actual;
printf ("Nombre:%s/Socio:%d----->",Actual->nombre,Actual->socio);
Actual=Actual->Siguiente;
}
}

Inverso=Inverso->Anterior; //Porque sino comienza de NULL.
if (choice==2)
{
while (Inverso!=NULL)
{
printf ("Nombre:%s/Socio:%d----->",Inverso->nombre,Inverso->socio);
Inverso=Inverso->Anterior;
}
}
}

//------------------------------------COMPARA NODOS-----------------------------------//
int comparar(char *cad1,char *cad2)
{
int i=0, j=0, aux=0;

for (i=0 ; *(cad1+i)!='\0' ; i++)
for (j=0 ; *(cad2+j)!='\0' ; j++)
{
if (*(cad1+i)==*(cad2+j))
aux=0;
if (*(cad1+i)<*(cad2+j))
aux=-1;
if (*(cad1+i)>*(cad2+j))
aux=1;
}

return aux;
}

//------------------------------------INTERCAMBIA NODOS-------------------------------//
struct nodo *intercambiar (struct nodo *Lista, char *cadena1, char *cadena2)
{
char *auxn1=NULL, *auxn2=NULL;
int auxs1=0, auxs2=0;
struct nodo *Actual, *Aux1, *Aux2;
int i=0;

Aux1 = malloc (sizeof (struct nodo) );
Aux2 = malloc (sizeof (struct nodo) );

auxn1=malloc(50);
auxn2=malloc(50);

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena1)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn1=Actual->nombre;
auxs1=Actual->socio;
Aux1=Actual;
break;
}
Actual=Actual->Siguiente;
}

Actual=Lista->Inicio;
while (Actual!=NULL)
{
if (comparar (Actual->nombre,cadena2)==0) //Al ser 0, quiere decir que las cadenas son iguales.
{
//Copia información del nodo Actual (nombre y socio) en variables auxiliares.
auxn2=Actual->nombre;
auxs2=Actual->socio;
Aux2=Actual;
break;
}
Actual=Actual->Siguiente;
}

if (Aux1==NULL || Aux2==NULL)
return NULL;

printf ("\n%s",auxn1);
printf ("\n%s",auxn2);

printf ("\n%d",auxs1);
printf ("\n%d",auxs2);

//Intercambia información entre nodos:
for( i=0; *(auxn2+i)!='\0'; i++ )
Aux1->nombre[i]=*(auxn2+i);
Aux1->socio=auxs2;
for( i=0; *(auxn1+i)!='\0'; i++ )
Aux2->nombre[i]=*(auxn1+i);
Aux2->socio=auxs1;

return Lista->Inicio;
}

//-------------------------------------ARRAY DE NODOS---------------------------------//
void *copiar(struct nodo *Lista, char letra)
{
struct nodo *Actual;
int i=0;
char *p[Lista->tam];

Actual=Lista->Inicio;
printf("\n----->");
while (Actual!=NULL)
{
if (Actual->nombre[0] == letra)
{
p[i]=Actual->nombre;
printf ("%s----->",p[i]);
i++;
}
Actual=Actual->Siguiente;
}
}

en estos momentos un troll te diria "te dije que eso explotaba en la estructura y en las funciones" Trollface

pero como no soy troll (?): che, que lastima, venias bien, ojala que encuentres el error Carucha

Off-topic:
Es lo que me tomaron en el parcial, si lo hago funcionar en la compu tengo más chances de aprobar... pero la mierda esta no quiero hacer lo que yo le digo, me retorna moco (?)

es que esta mal declarada la escructura y cuando mandas y recibis los parametros en las funciones =P


Off-topic:
Ojo que eso está bien, al compilar no tira ningún error ni warning. Lo que está mal es el algoritmo de las funciones intercambiar y copiar (no hace lo que yo quiero).


Off-topic:
no, no es error de sintaxis.
un ejemplo, cuando pasas la "lista" como parametro de una funcion, te falta el "&" para marcar que es la direccion de memoria y que va por referencia

pero bueno, si vos decis que es un tema del algoritmo, todo vale. yo descubri que no todos los compiladores aceptan ciertos comandos.
hoy juego al padel
Me la pase estudiando álgebra, me encanta la materia pero ya me tiene las bollas llenas.
Estas cosas anuales son interminables.
(03-11-2011 19:28)el pibe escribió: [ -> ]
(03-11-2011 12:55)matyary escribió: [ -> ]
(03-11-2011 11:57)el pibe escribió: [ -> ]
(03-11-2011 11:50)matyary escribió: [ -> ]
(03-11-2011 11:16)el pibe escribió: [ -> ]en estos momentos un troll te diria "te dije que eso explotaba en la estructura y en las funciones" Trollface

pero como no soy troll (?): che, que lastima, venias bien, ojala que encuentres el error Carucha

Off-topic:
Es lo que me tomaron en el parcial, si lo hago funcionar en la compu tengo más chances de aprobar... pero la mierda esta no quiero hacer lo que yo le digo, me retorna moco (?)

es que esta mal declarada la escructura y cuando mandas y recibis los parametros en las funciones =P


Off-topic:
Ojo que eso está bien, al compilar no tira ningún error ni warning. Lo que está mal es el algoritmo de las funciones intercambiar y copiar (no hace lo que yo quiero).


Off-topic:
no, no es error de sintaxis.
un ejemplo, cuando pasas la "lista" como parametro de una funcion, te falta el "&" para marcar que es la direccion de memoria y que va por referencia

pero bueno, si vos decis que es un tema del algoritmo, todo vale. yo descubri que no todos los compiladores aceptan ciertos comandos.


Off-topic:
Ya solucioné el problema de una de las dos funciones que no trabajaba bien. Había un error en el ingreso de uno de los datos. Me falta corregir la otra, que hace algo similar a lo que quiero pero no es correcto.
En este laburo todos los viernes tenemos facturas gratis =)

asi voy a quedar jajaja
llueve
Ayer empecé gimnasio otra vez y hoy me duelen los brazos. Tendría que empezar y no dejar nunca. Odio mi cuerpo tan débil D:
URLs de referencia