Duda en C, sobre listas.

E

Hola muy buenas, para la Universidad tengo que entregar una entrega de programación en C y me ha surgido una duda, a ver si alguien por aquí puede ayudarme.

Tengo un tipo strcut llamado Asignatura. Y tengo declarado un Array de Asignatura llamado ArrayAsignatura. Hasta ahí todo perfecto.

El problema viene cuando debo declarar el tipo struct Grado, que contiene entre otras dos variables del tipo ArrayAsignatura uno para las asignaturas obligatorias y otras para las optativas.

Mi problema es que no se como manejar el número de asignaturas que tiene ese Array(su tamaño es 100, pero no tiene porque es estar lleno).

Hemos visto por encima las lista con struct, pero con Arrays sólo vienen nombradas en los apuntes y la verdad es que no se como saber su tamaño. Que es lo que me interesa para hacer algunas funciones que necesito.

A ver si alguien puedo ayudarme, un saludo y gracias de antemano.

cabron

En C no puedes saber el tamaño de un array, tienes que encargarte tú de controlar que posiciones están vacías y cuales no.

DaRk-eXe

si no vas a usar vectores dinámicos, pues te toca usar una variable para controlar el tamaño del vector.

E

Pero como tendría que declarar esa variable para tener controlado el tamaño? Necesito recorrer el array con un for para algunas funciones, pero no se cuando pararlo, porque en general aunque el tamaño del array es 100, va a haber menos asignaturas en él.

A ver si alguién me puede guiar un poco...Muchas gracias a todos por responder.

PD: ahora es cuando me acuerdo de JAVA y su .size() jejeje.

B

#1 Pues inicializas un contador a 0. Cada vez que haces un insert en el Array, sumas +1 al contador y cada vez que quitas un elemento del Array restas 1 al contador. Contador +1 y tienes tu .size().

Puedes añadir a todas tus funciones el argumento contador he ir pasando la variable por referencia.
Puedes hacer algo mas simple como crear una variable global y pista.

1 respuesta
E

#5 Si eso ya la había pensando. El problema es que tengo que hacer un par de excepciones (entro otras cosas) y en una de ellas, por ejemplo (la más fácil, pero en ambas necesito el tamaño de la tabla) tengo que comprobar que los créditos de la asignaturas optativas sean todos iguales, sino que salte la excepción. Es decir sería recorrer el array, y comprobar que (siendo por ejemplo, Asignatuta a) a.creditos tengan todos el mismo valor, en las asignaturas del array... Entonces ahí no serviría eso, o a lo mejor es que yo no llego a ver como se haría...

Alguna sugerencia? Muchas gracias a todos!!!

1 respuesta
B

#6 A ver si te sigo. Tienes que dividir las asignaturas por numero de créditos¿

Es decir en ArrayAsignatura4 tendrías todas las asignaturas con Asignatura a.creditos = 4?
Cuando haces un insert de una asignatura lo primero que tienes que hacer es comprobar el numero de créditos, y luego, dependiendo del numero lo añades en el array correspondiente. Porque hay un valor máximo y mínimo de créditos digo yo no¿ De entre [1,10] por ejemplo.

1 respuesta
E

#7 Me explico.
Tengo un struct de Asignatura. Cuya forma es esta

typedef struct{
Cadena nombre;
int curso;
Cadena departamento;
TipoAsignatura tipo;
TipoCodigo codigo;
double creditos;
....
...
...
...
}Asignatura;

y luego digamos que tengo un array de Asignaturas, cuyo valor máximo es 100.

Tengo que programar una funciones genéricas, no directamente ir añadiendo asignaturas...Y una de ellas es comprabar que todas las asignaturas del array tienen todas el mismo número de créditos.

Es decir si los creditos de una es 6.0, todas tienes que tener ese mismo valor en ese parámetro...

Lo mismo estoy diciendo algo imposible, pero es lo que me pide un apartado del proyecto jejeje. Bueno en realidad no, lo de las excepciones no lo dice porque lo tienes que dar por sabidas por el enunciado.Estas son funciones extras para otras funciones digamos, y que no se cumplan irregularidades no permitidas supuestamente.... jejeje.

Perdonen mi ignorancia, pero como ya he dicho varias veces este es mi primer año, y llevamos poco con C, empezamos con JAVA, por si digo alguna barbaridad o algo, perdonen jejeje.

Un saludo, y gracias por las respuestas.

2 respuestas
Gif

#8 crea un struct que tenga la array de asignaturas y dos variables una el máximo del array y otra un contador que vas aumentando / disminuyendo según añades quitas asignaturas.

1 respuesta
B

#8 Es decir, la función comprueba si todas las asignaturas del array tienen el mismo numero de créditos. Pero en ningún momento te piden que crees un array de asignaturas y que todas las asignaturas tengan el mismo numero de créditos.

Declara la función de tipo Bool y le pasas el vector ArrayAsignatura.

for(int i=0; i < tamañoVector; ++i){
     if(ArrayAsignatura [0].creditos != ArrayAsignatura[i].creditos) return false;
     }
return true;
E

#9 como? podrías explicarme esa idea mejor?

Muchas gracias!

1 respuesta
B

#11 lo que el te dice es que crees un struct y dentro le pongas el ArrayAsignatura un int máximo y un int contador.

Puedes pegar el enunciado y así te puedo ayudar mejor?

1 respuesta
E

edit.

1 respuesta
E

#12 ok, ok pues lo pensaré. A ver si me sale. Muchas gracias a todos!!

B

#13 que tiene que no entiendas de esa función?

Una función que hace un return -1 si alguno de los valores de res, nombre, código, créditos, tipo, curso o departamento no cumple con las restricciones y return 1 si todos los valores cumplen las restricciones.

E

edit.

E

Pero nada no os preocupéis más, ya habéis ayudado y puesto bastante interés. Lo pensaré a ver si consigo hacerlo y vendré aquí y lo pondré por si alguien tiene el mismo problema que yo jejeje.

Muchas gracias a todos, sois unos fenómenos ^^

Usuarios habituales