Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Listas Dinamicas

Estas en el tema de Listas Dinamicas en el foro de C/C++ en Foros del Web. Después de mucho navegar llegué a este foro, ojalá me pudiesen ayudar :) Necesito sumar los elemento ingresados a una lista dinámica, entre varias cosas ...
  #1 (permalink)  
Antiguo 23/03/2011, 23:24
 
Fecha de Ingreso: marzo-2011
Ubicación: concecpcion
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Listas Dinamicas

Después de mucho navegar llegué a este foro, ojalá me pudiesen ayudar :) Necesito sumar los elemento ingresados a una lista dinámica, entre varias cosas más, pero lamentablemente me tira error.

/*Funciones prototipos*/
elemento *NuevoElemento(void);
void error(void);
void menu(void);
void anadir(elemento **, int);
void borrar(elemento **, int);
elemento *sumar(elemento **, int);
void visualizar(elemento *);

/*Función principal*/
int main()
{
elemento *cabecera = NULL;
elemento *q;
int opcion, dato, k = 20;
while(1)
{
do
{
system("cls");
menu();
opcion = getchar();
}while(opcion < '1' || opcion > '5');
system("cls"); // Limpiar Pantalla
switch(opcion)
{
case '1':
printf("Insertar datos: ");
scanf("%d",&dato);
anadir(&cabecera,dato);
break;

case '2':
printf("Borrar dato: ");
scanf("%d",&dato);
borrar(&cabecera,dato);
break;

case '3':
printf("sumar dato: ");
scanf("%d",&dato);
q= sumar(&cabecera,dato);
if(q)
q->dato+=k;
else
printf("Lista vacia\n");
break;


case '4':
visualizar(cabecera);
break;

case '5':
exit(0);
}
printf("\nPulse una tecla para continuar");
getchar();
}
}
.
.
.
.
.
/*Encontrar suma total*/
elemento *sumar(elemento *cabecera, int dato)
{
elemento *actual = cabecera;

while(actual != NULL && dato != actual->dato);


suma = suma + q->dato;
q = q->siguiente;
}

No puse todo el código para que no sea tan engorroso, creo que esto es lo más importante para mi problema, el error lo tengo en la función suma, llevo harto tiempo en esto y no encuentro el error, muchas gracias desde ya!!!
  #2 (permalink)  
Antiguo 24/03/2011, 05:37
 
Fecha de Ingreso: febrero-2011
Ubicación: Paraguay
Mensajes: 59
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Listas Dinamicas

Y cual es el error que te da??
  #3 (permalink)  
Antiguo 24/03/2011, 08:38
 
Fecha de Ingreso: marzo-2011
Ubicación: concecpcion
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Listas Dinamicas

Cita:
Iniciado por Gott Ver Mensaje
Y cual es el error que te da??
In function `elemento* sumar(elemento*, int)':
177 `suma' was not declared in this scope
177 `q' was not declared in this scope

Esos son los errores que me tira, en realidad, no estoy muy claro como sumar los elementos de la lista, y no sé cogido está bien.
  #4 (permalink)  
Antiguo 24/03/2011, 09:46
 
Fecha de Ingreso: febrero-2011
Mensajes: 33
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Listas Dinamicas

los punteros suma y q no tienen valor de referencia *q=&otravariable.
  #5 (permalink)  
Antiguo 29/03/2011, 08:11
 
Fecha de Ingreso: febrero-2011
Ubicación: Paraguay
Mensajes: 59
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Listas Dinamicas

A la función suma le dices que va recibir una matriz y solo le mandas un vector. Estás definiendo mal tus funciones...Arriba en la declaración está bien pero abajo en la definición porque pasas como parámetro un vector?? tiene que ser igual a la declaración de arriba..entiendes??
  #6 (permalink)  
Antiguo 29/03/2011, 14:20
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Listas Dinamicas

Ademas la variable suma no fue nunca definida. Que es lo que quieres que haga la funcion sumar?
  #7 (permalink)  
Antiguo 02/04/2011, 19:55
 
Fecha de Ingreso: marzo-2011
Ubicación: concecpcion
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Listas Dinamicas

Cita:
Iniciado por sam90 Ver Mensaje
Ademas la variable suma no fue nunca definida. Que es lo que quieres que haga la funcion sumar?
Necesito que sume los valores ingresados en la la lista, la verdad no me manejo mucho y viendo en internet he llegado a lo que tengo. cómo debería ser? te lo agradecería mucho,
  #8 (permalink)  
Antiguo 03/04/2011, 09:42
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Listas Dinamicas

No entiendo porque le pasas un entero entonces a la funcion:

Código C:
Ver original
  1. int sumar(elemento *cabecera)
  2. {
  3.     int suma=0;
  4.     elemento *actual = cabecera;
  5.      while(actual != NULL )  {
  6.             suma = suma + actual ->dato;
  7.             actual  = actual ->siguiente;
  8.       }
  9.       return suma;
  10. }
  #9 (permalink)  
Antiguo 10/04/2011, 10:26
 
Fecha de Ingreso: marzo-2011
Ubicación: concecpcion
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Listas Dinamicas

Cita:
Iniciado por sam90 Ver Mensaje
No entiendo porque le pasas un entero entonces a la funcion:

Código C:
Ver original
  1. int sumar(elemento *cabecera)
  2. {
  3.     int suma=0;
  4.     elemento *actual = cabecera;
  5.      while(actual != NULL )  {
  6.             suma = suma + actual ->dato;
  7.             actual  = actual ->siguiente;
  8.       }
  9.       return suma;
  10. }
Muchas gracias por tu ayuda, la verdad estoy recién empezando en esto y me falta mucho por apreder. Si no fuera mucho, me gustaría que me ayudaras con este codigo:

#include <stdio.h>
#include <stdlib.h>


struct Nodo {
int info;
struct Nodo * sig;
};

typedef struct Nodo * TipoLista;

TipoLista inserta_por_cabeza(TipoLista lista, int valor)
{
struct Nodo *nuevo;
nuevo = (Nodo*)malloc(sizeof(struct Nodo));

nuevo->info = valor;
nuevo->sig = lista;
lista = nuevo;
return lista;
}

void muestra_lista(TipoLista lista)
{
struct Nodo * aux;

printf ("->");
for (aux = lista; aux != NULL; aux = aux->sig)
printf ("[%d]->", aux->info);
printf ("|\n");
}

int main(void)
{
TipoLista l;
printf ("Insercion por cola de 1, 5, 10\n");
l = inserta_por_cabeza(l, 1);
l = inserta_por_cabeza(l, 5);
l = inserta_por_cabeza(l, 10);
muestra_lista(l);

system("pause");
}

Como se ve, ingresa los valores 1,5 y 10. Me gustaría modificar este código de tal forma que uno ingrese los números desde el teclado y la cantidad de número que uno quiera, he intentado varias formas pero no me ha resulta, ojala me puedan ayudar. Gracias!
  #10 (permalink)  
Antiguo 10/04/2011, 15:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Listas Dinamicas

Código C:
Ver original
  1. int main(void)
  2. {
  3.     TipoLista l;
  4.     int n,i,numero;
  5.     printf ("Cuantos numeros quieres ingresar");
  6.     scanf("%d",&n);
  7.     fo(i=0;i<n;i++){
  8.          printf("ingrese el numero %d",i+1);
  9.          scanf("%d",&numero);
  10.          l = inserta_por_cabeza(l, numero);
  11.     }
  12.  
  13.     system("pause");
  14. }
  #11 (permalink)  
Antiguo 13/04/2011, 19:25
 
Fecha de Ingreso: marzo-2011
Ubicación: concecpcion
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Listas Dinamicas

Cita:
Iniciado por sam90 Ver Mensaje
Código C:
Ver original
  1. int main(void)
  2. {
  3.     TipoLista l;
  4.     int n,i,numero;
  5.     printf ("Cuantos numeros quieres ingresar");
  6.     scanf("%d",&n);
  7.     fo(i=0;i<n;i++){
  8.          printf("ingrese el numero %d",i+1);
  9.          scanf("%d",&numero);
  10.          l = inserta_por_cabeza(l, numero);
  11.     }
  12.  
  13.     system("pause");
  14. }
De verdad Agradezco mucho tu ayuda, de a poco he ido aprendiendo. Disculpa por molestar, estoy tratando de crear un menú, que tenga la opción de añadir, insertar por cabeza, por cola y visualizar. La idea mia es anadir los elementos, después elegir si los quiero ingresar por cabeza o por cola. pero al darle anadir me ingresa los elementos y de ahí no me aparece de nuevo el menú. en pocas palabras añado los elementos y no puedo ocupar más el menu. Disculpa las molestias!!!!

#include <stdio.h>
#include <stdlib.h>


struct Nodo {
int info;
struct Nodo * sig;
};

typedef struct Nodo * TipoLista;

TipoLista inserta_por_cabeza(TipoLista lista, int valor)
{
struct Nodo *nuevo;
nuevo = (Nodo*)malloc(sizeof(struct Nodo));

nuevo->info = valor;
nuevo->sig = lista;
lista = nuevo;
return lista;
}
TipoLista inserta_por_cola(TipoLista lista, int valor)
{
struct Nodo *nuevo, * aux;
nuevo = (Nodo*)malloc(sizeof(struct Nodo));

nuevo->info = valor;
nuevo->sig = NULL;
if (lista == NULL)
lista = nuevo;
else {
for (aux = lista; aux->sig != NULL; aux = aux->sig) ;
aux->sig = nuevo;
}
return lista;
}

void muestra_lista(TipoLista lista)
{
struct Nodo * aux;

printf ("->");
for (aux = lista; aux != NULL; aux = aux->sig)
printf ("[%d]->", aux->info);
printf ("|\n");
}

int main(void)
{
TipoLista lista;
int valor,i,a,opcion;

printf ("1) Anadir valores\n");
printf ("2) Insertar por cabeza\n");
printf ("3)Insertar por cola \n");
printf ("4) Visualiar lista \n");
scanf ("%d", &opcion);
switch (opcion) {

case 1:
printf ("Ingrese cuantos datos va ingresar a la lista: ");
scanf ("%d",&a);
for (i=0; i<a; i++){
printf ("Ingrese los valores a ingresar a la lista\n");
scanf("%d",&valor);
}
break;

case 2:
lista=inserta_por_cabeza(lista, valor);
break;

case 3:
lista=inserta_por_cola(lista, valor);
break;

case 4:
muestra_lista(lista);
break;

default:
printf ("Opcion no vaalida\n");
break;


}
system("pause");
}

Etiquetas: dinamicas, elementos, listas, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:11.