Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/05/2009, 12:37
ikune
 
Fecha de Ingreso: noviembre-2006
Mensajes: 2
Antigüedad: 17 años, 6 meses
Puntos: 0
Duda con estructuras en C

Hola, estoy haciendo este ejercicio:

Se define una lista de enteros de longitud máxima 20 implementada como un
registro con un campo contenido que es un array de 20 posiciones y el campo
longitud que representa el numero de posiciones del array ocupadas. Con esta
nueva representación, es posible manipular listas que estén sólo parcialmente
llenas y, por tanto, insertar en ella nuevos elementos o eliminar elementos ya
existentes. Con la definición anterior y considerando que los elementos de la
lista están ordenados en orden NO DECRECIENTE, implementar las funciones
siguientes:
· El subproblema inicializar que inicialice a vacía la lista argumento.
· El subproblema vacia que devuelva TRUE en caso de que la lista lo esté y
FALSE en caso contrario.
· El subproblema llena que devuelva TRUE si existen max_elementos válidos
dentro de la lista y FALSE en caso contrario.
· El subproblema mostrar que muestre el contenido de la lista.
· El subproblema buscar que busque un elemento en la lista y devuelva si el
elemento está en la lista y si está, la posición en la que dicho elemento aparece
por primera vez. Contemplar el caso en el que todos los elementos son
distintos.
· El subproblema insertar que introduce un elemento en la lista en la posición
adecuada (si ello fuera posible).
· El subproblema eliminar que elimina la primera ocurrencia de un elemento en
la lista si dicho elemento existe (si ello fuera posible).


Y tengo hecho esto del código:

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


const int max_elementos = 20;

typedef struct
{
int numeros[20];
int longitud;
}lista_enteros;

lista_enteros l;

typedef enum {false=0, true=1} bool;

void inicializar(lista_enteros l);
bool leerDatos(lista_enteros l);
bool listaVacia(lista_enteros l);
bool listaLlena(lista_enteros l);

int main()
{
inicializar(l);
printf("%d\n", l.longitud);
leerDatos(l);
printf("%d\n", l.longitud);
if(listaVacia(l))
printf("La lista esta vacia\n");
if(listaLlena(l))
printf("La lista esta llena\n");

system("pause");
return 0;
}

void inicializar(lista_enteros l)
{
l.longitud = 0;
printf("%d\n", l.longitud);
}

bool leerDatos(lista_enteros l)
{
int i;
bool longok = true;
printf("Introduzca la longitud de la lista: ");
scanf("%d", &l.longitud);
if(l.longitud > max_elementos)
{
printf("\nEl numero maximo de elementos permitidos es %d\n", max_elementos);
printf("\n");
longok = false;
}
else
{
for(i=0; i<l.longitud; i++)
{
printf("Introduzca el numero %d: ", i+1);
scanf("%d", &l.numeros[i]);
}
}
printf("%d\n", l.longitud);
return longok;
}

bool listaVacia(lista_enteros l)
{
bool vacia = false;
if(l.longitud == 0);
vacia = true;

return vacia;
}

bool listaLlena(lista_enteros l)
{
bool llena = false;
if(l.longitud == max_elementos)
llena = true;
return llena;
}

El problema es que cuando cambio la longitud en inicializar (por ejemplo) me la cambia solo en la función, como puedo hacer se quede cambiada para el resto del programa??

Muchas gracias

Última edición por ikune; 29/05/2009 a las 13:09