elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con Cola en C (sencillo)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Cola en C (sencillo)  (Leído 20,199 veces)
Adry89

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con Cola en C (sencillo)
« en: 30 Mayo 2010, 21:00 pm »

Bueno, pues me da 4 o 5 errores azules de incompatibilidad de tipos sobre todo y no sé que falla, el programa es muy sencillo de 200 líneas...a ver si me podéis ayudar, estoy desesperada =(

Código:
#include <stdio.h>
#include <stdlib.h>

/*declaracion de la cola*/

typedef struct _DATOS
{
    char nombre[20];
    char apellidos[30];
    char telefono[12];
    char movil[12];
    int edad;

}DATOS;

struct nodo
{

int elemento;

struct nodo *siguiente;

};

typedef struct nodo Nodo;

typedef struct
{

Nodo *frente;

Nodo *final;

}Cola;

/*Prototipos de funciones*/

void crearcola(Cola *cola);
void insertar (Cola *cola, int x);
int borrar (Cola *cola);
int estavacia (Cola cola);

int main(void)
{

/*Declaracion de variables locales*/

Nodo *lista;
int num;
DATOS dat;

/*Algoritmo*/

lista = crearcola ();

   do
   {

   printf("--------------------------------\n\n");
   printf("Bienvenido a la agenda del movil \n\n");
   printf("elige una opcion : \n\n");
   printf("1.-Añadir. \n");
   printf("2.-Borrar.\n");
   printf("4.-Salir.\n");

   printf("Su opcion es: ");
   scanf("%d",&num);

    switch(num)
    {

        case 1 :  printf("Introduce los valores del dato");
                  dat = leer ();
                  lista = insertar (dat, lista);
        break;

        case 2 :  borrar (dat, lista);
        break;

        case 3 : 
        break;

      default : printf("Error: Introduce un numero del menu");

    }

   }while(num!=3);


   return(0);

}



/*definicion de las funciones*/

DATOS leer ( void )
{

    /*Declaracion de variables locales*/

    DATOS d;

    /*Algoritmo*/

   printf("Introduce Nombre: ");
   scanf("\n%s", d.nombre);
   printf("Introduce Apellido: ");
   scanf("\n%s",d.apellidos);
   printf("Introduce Telefono: ");
   scanf("\n%s",d.telefono);
   printf("Introduce Movil: ");
   scanf("\n%s",d.movil);
   printf("Introduce Edad: ");
   scanf("%d",&d.edad);

   return(d);
}

void CrearCola(Cola *cola)

{

cola->frente=cola->final=NULL;

}

/*funcion que inserta el dato en la parte final de la cola*/

void insert (Cola *cola, int x)

{

Nodo *nuevo;

nuevo=(Nodo*)malloc(sizeof(Nodo));

nuevo->elemento=x;

nuevo->siguiente=NULL;

if(empty(*cola))

{

cola->frente=nuevo;

}

else

cola->final->siguiente=nuevo;

cola->final=nuevo;

}

/*elimina el elemento que esta aL frente de la cola*/

int remover (Cola *cola)

{

int temp=NULL;

if(!empty(*cola))

{

Nodo *nuevo;

nuevo=cola->frente;

temp=cola->frente->elemento;

cola->frente=cola->frente->siguiente;

free(nuevo);

}

else

printf("ERROR, cola vacia, se puede eliminar\a\n");

return (temp);

}

int empty(Cola cola)

{

return (cola.frente==NULL);

}


En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Ayuda con Cola en C (sencillo)
« Respuesta #1 en: 30 Mayo 2010, 21:20 pm »

Algunos errores a simple vista...

Código:
lista = crearcola();
La funcion crearcola() devuelve void, por lo tanto asignarla a una variable es erroneo

Código:
default: printf("Error: Introduce un numero del menu");
Te falta poner break;

Código:
leer(void)
remover(Cola *cola)
empty(Cola cola)
Te falta definir el prototipo de estas funciones

Código:
estavacia (Cola cola);
Mmmm no hay ninguna definicion de esta funcion

Código:
void crearcola(Cola *cola); // prototipo
void CrearCola(Cola *cola) {} // definicion
No concuerdan el nombre puesto en el prototipo de la funcion con el nombre en la definicion. Acordate que C es un lenguaje case sensitive.

Salu10.


En línea

Adry89

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con Cola en C (sencillo)
« Respuesta #2 en: 30 Mayo 2010, 21:46 pm »

Corregido todo eso los fallos azules siguen apareciendo, no tiene nada que ver con lo que has dicho =(
En línea

.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Ayuda con Cola en C (sencillo)
« Respuesta #3 en: 30 Mayo 2010, 21:50 pm »

default no lleva break nicolas...

Saludos...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Ayuda con Cola en C (sencillo)
« Respuesta #4 en: 30 Mayo 2010, 22:38 pm »

Estas llamando funciones sin pasarle parámetros cuando en los prototipos y definiciones especificas los parámetros necesarios para la correcta ejecución de dicha funcion.
Por otro lado, los errores de incompatibilidad radican en utilizar en forma errónea los tipos de datos que declaraste.

Por ejemplo, en esta función que declaraste:

Código
  1. void insertar (Cola *cola, int x);

La llamas así:

Código
  1. insertar (dat, lista);

donde dat y lista son:

Código
  1. DATOS dat;
  2. Nodo *lista;

Todo esto sumado a los errores que ya mencionaron, como por ejemplo asignar el retorno de una función como dato útil cuando en el prototipo esta declarada como void.
Si solucionaste todos los errores mencionados, vuelve a postear el código.

[code=c]código[/code]

Repasa atentamente el manejo de funciones y estructuras.

Saludos!
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Ayuda con Cola en C (sencillo)
« Respuesta #5 en: 30 Mayo 2010, 22:46 pm »

Cita de: Adry89
Corregido todo eso los fallos azules siguen apareciendo, no tiene nada que ver con lo que has dicho =(

Mmmmm en ningun momento te asegure que corrigiendo esos errores, los "fallos azules" iban a desaparecer :P

Estaria bueno que pongas en el post esos "fallos azules" de los que hablas :¬¬

Salu10.
En línea

Adry89

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con Cola en C (sencillo)
« Respuesta #6 en: 30 Mayo 2010, 22:53 pm »

Muchas gracias a todos por las respuestas. He corregido todo y esto es lo que falla:

hdrhdrh.c:69: error: incompatible types in assignment
hdrhdrh.c:89: error: incompatible type for argument 2 of `insertar'
hdrhdrh.c:89: error: incompatible types in assignment
hdrhdrh.c:185: error: incompatible type for argument 1 of `estavacia'
hdrhdrh.c:192: warning: assignment makes pointer from integer without a cast
hdrhdrh.c:204: error: incompatible types in return

Adjunto el código de nuevo:

Código:
#include <stdio.h>
#include <stdlib.h>
#define TAM 30
#define TRUE 1
#define FALSE 0

/*declaracion de la cola*/

typedef struct _DATOS
{
    char nombre[20];
    char apellidos[30];
    char telefono[12];
    char movil[12];
    int edad;

}DATOS;

struct nodo
{

int elemento;

struct nodo *siguiente;

};

typedef struct nodo Nodo;

typedef struct
{

Nodo *frente;

Nodo *final;

}Cola;

/*Prototipos de funciones*/

Nodo crearcola(Cola *cola);
Nodo insertar (Cola *cola, int x);
Nodo borrar (Cola *cola);
int estavacia (Cola cola);
DATOS leer ( void );

int main(void)
{

/*Declaracion de variables locales*/

Nodo *lista;
int num;
DATOS dat;
Cola *cola;

/*Algoritmo*/

lista = crearcola (cola);

   do
   {

   printf("--------------------------------\n\n");
   printf("Bienvenido a la agenda del movil \n\n");
   printf("elige una opcion : \n\n");
   printf("1.-Añadir. \n");
   printf("2.-Borrar.\n");
   printf("4.-Salir.\n");

   printf("Su opcion es: ");
   scanf("%d",&num);

    switch(num)
    {

        case 1 :  printf("Introduce los valores del dato");
                  dat = leer ();
                  lista = insertar (cola,dat);
        break;

        case 2 :  borrar (cola);
        break;

        case 3 :
        break;

      default : printf("Error: Introduce un numero del menu");

    }

   }while(num!=3);


   return(0);

}



/*definicion de las funciones*/

DATOS leer ( void )
{

    /*Declaracion de variables locales*/

    DATOS d;

    /*Algoritmo*/

   printf("Introduce Nombre: ");
   scanf("\n%s", d.nombre);
   printf("Introduce Apellido: ");
   scanf("\n%s",d.apellidos);
   printf("Introduce Telefono: ");
   scanf("\n%s",d.telefono);
   printf("Introduce Movil: ");
   scanf("\n%s",d.movil);
   printf("Introduce Edad: ");
   scanf("%d",&d.edad);

   return(d);
}

Nodo crearcola(Cola *cola)

{

cola->frente=cola->final=NULL;

}

/*funcion que inserta el dato en la parte final de la cola*/

Nodo insertar (Cola *cola, int x)

{

Nodo *nuevo;

nuevo=(Nodo*)malloc(sizeof(Nodo));

nuevo->elemento=x;

nuevo->siguiente=NULL;

if(estavacia(*cola))

{

cola->frente=nuevo;

}

else

cola->final->siguiente=nuevo;

cola->final=nuevo;

}

/*elimina el elemento que esta aL frente de la cola*/

Nodo borrar (Cola *cola)

{

Nodo *temp;
Nodo *nuevo;

temp = NULL;

if(!estavacia(cola))

{


nuevo=cola->frente;

temp=cola->frente->elemento;

cola->frente=cola->frente->siguiente;

free(nuevo);

}

else

printf("ERROR, cola vacia, se puede eliminar\a\n");

return (temp);

}

int estavacia (Cola cola)

{
    int resp;

    if (cola.frente == NULL)
    {
        resp = TRUE;
    }
    else
    {
        resp = FALSE;
    }

    return (resp);

}
En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Ayuda con Cola en C (sencillo)
« Respuesta #7 en: 30 Mayo 2010, 23:14 pm »

Seguis teniendo el error que te explico Littlehorse

Salu10.
« Última modificación: 30 Mayo 2010, 23:18 pm por nicolas_cof » En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Ayuda con Cola en C (sencillo)
« Respuesta #8 en: 30 Mayo 2010, 23:21 pm »

El código mantiene errores similares al código inicial. Presta atención a los mensajes de error:

Citar
69: incompatible types in assignment

Código
  1. lista = crearcola (cola);

Que es lista? que devuelve crearcola?

el prototipo que declaraste es:

Código
  1. Nodo crearcola(Cola *cola);

Como veras, si lo analizas minuciosamente te darás cuenta que estas cometiendo un error. (204: error: incompatible types in return)

Si vas a devolver una referencia, la función debe ser similar a:

Código
  1. Nodo* crearcola(Cola *cola)

O bien puedes hacer algo como:

Código
  1. typedef struct nodo* Nodo;

pero por supuesto si haces esto ultimo tienes que tener cuidado cuando declaras un puntero a nodo en las funciones (ya que no necesitas el asterisco)

Como recomendación déjame decirte que vas a tardar menos repasando punteros, estructuras y funciones, que arreglando el código. Repasa y replantea el ejercicio y veras que es mas fácil de lo que parece.
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Adry89

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con Cola en C (sencillo)
« Respuesta #9 en: 30 Mayo 2010, 23:27 pm »

Pues me quedan estos 5 fallos :

hdrhdrh.c:59: error: incompatible types in assignment
hdrhdrh.c:79: error: incompatible types in assignment
hdrhdrh.c:175: error: incompatible type for argument 1 of `estavacia'
hdrhdrh.c:182: error: incompatible types in assignment
hdrhdrh.c:194: error: incompatible types in return

Littlehorse, la verdad es que soy bastante novata y no entiendo bien lo que has dicho, sería mucho pedir si me poesn lo que queda de código como le harías tu? Gracias.

Código:
#include <stdio.h>
#include <stdlib.h>
#define TAM 30
#define TRUE 1
#define FALSE 0

/*declaracion de la cola*/

typedef struct _DATOS
{
    char nombre[20];
    char apellidos[30];
    char telefono[12];
    char movil[12];
    int edad;

}DATOS;

struct nodo
{

DATOS elemento;

struct nodo *siguiente;

};

typedef struct nodo Nodo;

typedef struct
{

Nodo *frente;

Nodo *final;

}Cola;

/*Prototipos de funciones*/

Nodo crearcola(Cola *cola);
Nodo insertar (Cola *cola, DATOS x);
Nodo borrar (Cola *cola);
int estavacia (Cola cola);
DATOS leer ( void );

int main(void)
{

/*Declaracion de variables locales*/

Nodo *lista;
int num;
DATOS dat;
Cola *cola;

/*Algoritmo*/

lista = crearcola (cola);

   do
   {

   printf("--------------------------------\n\n");
   printf("Bienvenido a la agenda del movil \n\n");
   printf("elige una opcion : \n\n");
   printf("1.-Añadir. \n");
   printf("2.-Borrar.\n");
   printf("4.-Salir.\n");

   printf("Su opcion es: ");
   scanf("%d",&num);

    switch(num)
    {

        case 1 :  printf("Introduce los valores del dato");
                  dat = leer ();
                  lista = insertar (cola,dat);
        break;

        case 2 :  borrar (cola);
        break;

        case 3 :
        break;

      default : printf("Error: Introduce un numero del menu");

    }

   }while(num!=3);


   return(0);

}



/*definicion de las funciones*/

DATOS leer ( void )
{

    /*Declaracion de variables locales*/

    DATOS d;

    /*Algoritmo*/

   printf("Introduce Nombre: ");
   scanf("\n%s", d.nombre);
   printf("Introduce Apellido: ");
   scanf("\n%s",d.apellidos);
   printf("Introduce Telefono: ");
   scanf("\n%s",d.telefono);
   printf("Introduce Movil: ");
   scanf("\n%s",d.movil);
   printf("Introduce Edad: ");
   scanf("%d",&d.edad);

   return(d);
}

Nodo crearcola(Cola *cola)

{

cola->frente=cola->final=NULL;

}

/*funcion que inserta el dato en la parte final de la cola*/

Nodo insertar (Cola *cola, DATOS x)

{

Nodo *nuevo;

nuevo=(Nodo*)malloc(sizeof(Nodo));

nuevo->elemento=x;

nuevo->siguiente=NULL;

if(estavacia(*cola))

{

cola->frente=nuevo;

}

else

cola->final->siguiente=nuevo;

cola->final=nuevo;

}

/*elimina el elemento que esta aL frente de la cola*/

Nodo borrar (Cola *cola)

{

Nodo *temp;
Nodo *nuevo;

temp = NULL;

if(!estavacia(cola))

{


nuevo=cola->frente;

temp=cola->frente->elemento;

cola->frente=cola->frente->siguiente;

free(nuevo);

}

else

printf("ERROR, cola vacia, se puede eliminar\a\n");

return (temp);

}

int estavacia (Cola cola)

{
    int resp;

    if (cola.frente == NULL)
    {
        resp = TRUE;
    }
    else
    {
        resp = FALSE;
    }

    return (resp);

}
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda en cola
Programación C/C++
josue_tux 0 1,933 Último mensaje 26 Junio 2011, 06:47 am
por josue_tux
[Ayuda] Ejercicio sencillo en C
Programación C/C++
Torino10 7 4,336 Último mensaje 25 Abril 2012, 18:44 pm
por Torino10
Ayuda con Código Sencillo
Java
LaLakers94 5 3,133 Último mensaje 9 Noviembre 2013, 21:00 pm
por Mitsu
ayuda cola circular
Programación C/C++
edo908458 1 2,663 Último mensaje 31 Marzo 2016, 20:22 pm
por LaiaxanIV
Ayuda con 2 métodos de cola:
Programación General
JVerbal 0 1,999 Último mensaje 21 Octubre 2018, 00:29 am
por JVerbal
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines