Foros aprenderaprogramar.com
		Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: madness en 17 de Abril 2014, 22:42
		
			
			- 
				Muy buenas tardes gente :) Necesito de su ayuda :( estoy realizando una tarea en donde debo ingresar nombres diferentes en una lista, y lo único que he logrado es que guarde una letra ! A continuación mi código:
 
 Persona *agregarNom(char nombre)
 {
 Persona *pdato;
 if(pdato = (Medicos *) malloc(sizeof(Persona)))
 {
 /* Se almacena la información en Info */
 pdato->nombre = nombre;
 /* pdato->dato2 = dato2; */
 return pdato;
 }
 else
 {
 printf("problemas en la inserción\n");
 exit(0);
 }
 }
 
 char insertarNomMed(Lista *plista, char persona)
 {
 Nodo *aux;
 int i;
 Persona *dato = agregarNom(persona);
 // Se crea un nodo con datos y apunta al siguiente nodo
 if(aux = crearNodo(dato, plista->inicio)) //además, se almacena en aux
 {
 plista->inicio = aux;
 if(plista->tamano == 0)
 plista->fin = aux;
 plista->tamano++;
 }
 }
 
 int main(int argc, char *argv[])
 {
 Lista *L;
 L = creaLista();
 int i;
 char nombreMed[1];
 printf("Ingrese nombre del medico: ");
 scanf("%s", nombreMed);
 insertarNomMed(L, *nombreMed);
 return 0;
 }
 Espero que me puedan ayudar lo mas pronto posible y muchas gracias de antemano :D
- 
				A mí el código no me compila ¿falta código que no has puesto?
 
 Lo que veo a simple vista es que estás trabajando con char que representa un caracter cuando para representar nombres necesitas un array de char
 
 Persona *agregarNom(char nombre)
 char insertarNomMed(Lista *plista, char persona)
 
 Si usas un array de char:
 Persona *agregarNom(char[] nombre)
 char insertarNomMed(Lista *plista, char[] persona)
 
 Aquí dices que nombreMed tiene un solo caracter, con lo cual solo te coge el primer caracter que escribas:
 char nombreMed[1];
 
 Tendrías que declararlo como:
 char nombreMed[100];
 
 De este modo te cogerá hasta 100 caracteres
 
 Sl2
 
 
- 
				Sí, la verdad es que falta las estructuras que definí en miprograma.h, el cual lo incluí en el programa que expuse y, al compilarlo, solo imprime el primer caracter :(, aún asi definiendo nombreMed[100] :/.  El problema que tengo es que debo insertar nombres en una lista, y cada nombre de la lista es asociado a una cola... Ya no sé que hacer u.u no me resulta insertar un nombre completo :( ayuda porfa :(
			
- 
				Hola, pega el código del programa completo incluido los .h para poder revisarlo. 
 
 
- 
				Hola Cesar :D, aquí va mi código:
 
 Lista *creaLista()
 {
 Lista *nuevo;
 
 if(nuevo = (Lista *) malloc(sizeof(Lista))) // Pide memoria para la lista
 {
 nuevo->tamano = 0; // Lista vacía
 nuevo->inicio = nuevo->fin = NULL; // Inicio y Fin apuntan a NULL
 }
 return nuevo;
 }
 void destruirLista(Lista *plista)
 {
 Nodo *aux;
 
 while(plista->inicio != NULL)
 {
 aux = plista->inicio;
 plista->inicio = plista->inicio->siguiente;
 free(aux->datos);
 free(aux);
 }
 free(plista);
 }
 
 
 Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente)
 {
 Nodo *nuevo;
 if(nuevo = (Nodo *) malloc(sizeof(Nodo))) // Pide memoria para el nodo
 {
 nuevo->datos = dato;
 nuevo->anterior = anterior;
 nuevo->siguiente = siguiente;
 }
 return nuevo;
 }
 
 Info *agregar(int dato1)
 {
 Info *pdato;
 if(pdato = (Info *) malloc(sizeof(Info)))
 {
 /* Se almacena la información en Info */
 pdato->dato1 = dato1;
 /* pdato->dato2 = dato2; */
 return pdato;
 }
 else
 {
 printf("problemas en la inserción\n");
 exit(0);
 }
 }
 
 
 bool insertar(Lista *plista, char info)
 {
 Nodo *aux;
 Info *dato = agregar(info);
 // Se crea un nodo con datos y apunta al siguiente nodo
 if(aux = crearNodo(dato, NULL, plista->inicio)) //además, se almacena en aux
 {
 if(plista->tamano == 0)
 plista->fin = aux;
 else
 plista->inicio->anterior = aux;
 plista->inicio = aux;
 plista->tamano++;
 
 return true;
 }
 else
 return false;
 }
 int main(int argc, char *argv[])
 {
 Lista *L1, *L2, *L3, *L4, *L5;
 L1 = creaLista();
 L2 = creaLista();
 L3 = creaLista();
 L4 = creaLista();
 L5 = creaLista();
 Cola *C1, *C2, *C3, *C4, *C5;
 C1 = creaCola();
 C2 = creaCola();
 C3 = creaCola();
 C4 = creaCola();
 C5 = creaCola();
 Pila *P1, *P2, *P3, *P4, *P5;
 P1 = creaPila();
 P2 = creaPila();
 P3 = creaPila();
 P4 = creaPila();
 P5 = creaPila();
 char polola1[100], polola2[100], polola3[100],
 polola4[100], polola5[100];
 int i;
 printf("Ingrese nombre: ");
 scanf("%s", polola1);
 /*printf("Ingrese nombre: ");
 scanf("%s", polola2);
 printf("Ingrese nombre: ");
 scanf("%s", polola3);
 printf("Ingrese nombre: ");
 scanf("%s", polola4);
 printf("Ingrese nombre: ");
 scanf("%s", polola5);*/
 for(i=0;i<strlen(polola1);i++)
 {
 insertar(L1, polola1[i]);
 }
 /*for(i=0;i<strlen(polola2);i++)
 {
 insertar(L2, polola2[i]);
 }
 for(i=0;i<strlen(polola3);i++)
 {
 insertar(L3, polola3[i]);
 }
 for(i=0;i<strlen(polola4);i++)
 {
 insertar(L4, polola4[i]);
 }
 for(i=0;i<strlen(polola5);i++)
 {
 insertar(L5, polola5[i]);
 }*/
 
 return 0;
 }
 Aquí va el programa.h:
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include <string.h>
 
 typedef struct info {
 int dato1;
 /* int dato2; */
 /* ... */
 }Info;
 
 
 typedef struct nodo {
 Info *datos;
 struct nodo *siguiente;
 struct nodo *anterior;
 }Nodo;
 
 
 typedef struct lista {
 Nodo *inicio;
 Nodo *fin;
 int tamano;
 }Lista;
 
 
 /* Funciones de las operaciones básicas*/
 Lista *crearLista();
 Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente);
 Info * agregar(int dato1);
 bool insertar(Lista *plista, char info);;
 Realmente no sé cómo se insertan varios nombres en una sola lista... :/ solo logre insertar en una lista todos los carácteres de un nombre pero eso no es válido :( Y no solo eso me piden, ya que también me piden ingresar nombres en pilas y colas :/ ayuda por favor !
- 
				Que tal ! Finalmente pude lograrlo ! después de unas horas modificando el código resultó :D. Cuando termine el plazo para entregar mi tarea la subiré por acá, ya que es posible que mis compañeros de Universidad pueden caer en esta página y me copian todo! jajaja xD. Saludos!
			
- 
				Si puedes subir el código te lo agradecemos, así aprendemos todos con las aportaciones. Saludos,
			
- 
				Pero por supuesto ! lo que pasa esque no quiero que me copien mis compañeros después de mucho esfuerzo ! pero a penas termine el plazo lo subo por acá :D ! Saludos!
			
- 
				Como prometí, aquí les traigo el código para insertar nombres en una lista, es decir, en cada nodo insertaremos un nombre:
 
 #include "lista.h"
 
 
 Lista *creaLista()
 {
 Lista *nuevo;
 
 if(nuevo = (Lista *) malloc(sizeof(Lista))) // Pide memoria para la lista
 {
 nuevo->tamano = 0; // Lista vacía
 nuevo->inicio = nuevo->fin = NULL; // Inicio y Fin apuntan a NULL
 }
 return nuevo;
 }
 
 
 Nodo *crearNodoCola(Info *dato, Nodo *ptro)
 {
 Nodo *nuevo;
 if(nuevo = (Nodo *) malloc(sizeof(Nodo))) // Pide memoria para el nodo
 {
 nuevo->datos = dato;
 nuevo->siguiente = ptro;
 }
 return nuevo;
 }
 
 
 Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente)
 {
 Nodo *nuevo;
 if(nuevo = (Nodo *) malloc(sizeof(Nodo)))
 {
 nuevo->datos = dato;
 nuevo->anterior = anterior;
 nuevo->siguiente = siguiente;
 }
 return nuevo;
 }
 
 
 Info *agregar(char *dato1)
 {
 Info *pdato;
 if(pdato = (Info *) malloc(sizeof(Info))){
 pdato->dato1 = dato1;
 return pdato;
 }else{
 printf("problemas en la inserción\n");
 exit(0);
 }
 }
 
 void ingresar(Info **pdato, char *dato1)
 {
 if(*pdato = (Info *) malloc(sizeof(Info)))
 {
 (*pdato)->dato1 = dato1;
 }
 else
 {
 printf("problemas en el push\n");
 exit(0);
 }
 }
 
 bool insertar(Lista *plista, char *nombre)
 {
 Nodo *aux;
 Info *dato = agregar(nombre);
 if(aux = crearNodo(dato, NULL, plista->inicio)){
 if(plista->tamano == 0)
 plista->fin = aux;
 else
 plista->inicio->anterior = aux;
 plista->inicio = aux;
 plista->tamano++;
 
 return true;
 }
 else
 return false;
 }
 
 void recorrer(Lista *plista)
 {
 Nodo *i;
 i = plista->inicio;
 printf("La lista tiene = ");
 while(i != NULL)
 {
 printf("%s ", i->datos->dato1);
 i = i->siguiente;
 }
 printf("\n");
 }
 
 
 int main(int argc, char *argv[])
 {
 Lista *nombres;
 nombres = creaLista();
 
 char n1[100]="Nicole", n2[100]="Sandra", n3[100]="Javiera", n4[100]="Camila", n5[100]="Johana";
 
 insertar(nombres, n1);
 insertar(nombres, n2);
 insertar(nombres, n3);
 insertar(nombres, n4);
 insertar(nombres, n5);
 recorrer(nombres);
 
 return 0;
 }
 A continuación lista.h
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include <string.h>
 
 
 typedef struct{
 char* dato1;
 }Info;
 
 typedef struct nodo {
 Info *datos;
 struct nodo *siguiente;
 struct nodo *anterior;
 }Nodo;
 
 
 typedef struct lista {
 Nodo *inicio;
 Nodo *fin;
 int tamano;
 }Lista;
 
 
 Lista *crearLista();
 Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente);
 void destruirLista(Lista *plista);
 bool insertar(Lista *plista, char *nombre);
 void recorrer(Lista *plista);
 Espero que les sirva :). Ahora voy por árboles binarios xD. Saludos :)
- 
				Gracias por acordarte! Si estás con árboles binarios supongo que los generas con recursión... interesante pero complicado! Saludos ;)