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 ;)