Resolver ejercicio

juan
26 de Febrero del 2004
#include <stdio.h>
#include <conio.h>

// Definicio de constants ...

const unsigned int MAX_FETS = 50; // màxim nombre de fets/dpmt
const unsigned char MAX_DPMTS = 5; // màx. nombre de departament

typedef struct {int dia,mes,any;} TData; //identifica una data
typedef char TFet[40]; // descripció del fet
typedef char TAutor[40]; // nom de l'autor/s
typedef char TDepartament[40]; // nom del departament


typedef struct {
TData Dia; // Data del fet
TFet Fet; // Descripció ...
TAutor Autor; // i autor
} TEsdeveniment;

typedef struct {
TDepartament Dpmt; // Nom del departament
TEsdeveniment Fets[MAX_FETS]; // Descripció dels fets
unsigned int NombreFets; // Nombre de fets reals
} TBaseDpmt;

typedef struct {
TBaseDpmt Dpmts[MAX_DPMTS]; // posició/departament
unsigned int NombreDpmts; // nombre real de departaments
} TBaseEUSS;

// prototips funcions inicials donandes
int menu (void);
void inicialitza (TBaseEUSS &);

// prototips funcions a realitzar demanades a l'enuanciat
TBaseEUSS AfegirFet ( TBaseEUSS, TDepartament );
int BuscaPosicioDpmt( TBaseEUSS, TDepartament);
int NouDpmt( TBaseEUSS &, TDepartament);
int NouFet (TBaseDpmt &, TEsdeveniment);
void LlistaFets ( TBaseEUSS );
void LlistaDpmt ( TBaseDpmt );

// prototips d'altres funcions dissenyades pel grup

// programa principal
void main (void)
{int fi=0;
// fer declaracions de variables i inicialitzacions....

do {
switch(menu() ){
case '1': printf("nAlta d'un nou fet a la base de dades.");
// afegir crida a funció
break;
case '2': printf("nLlistat dels fets de la base de dades.");
// afegir crida a funció
break;
case '0': fi=1;
break;
default: printf("nOpci¢ incorrecta !!");
}
if (!fi) {printf ("nPr‚mer tecla per continuar ..."); getch();}
} while (!fi);
}

int menu (void)
{
clrscr();
printf("nn");
printf(" 1.- Alta d'un nou fet a la base de dadesn");
printf(" 2.- Llistat dels fets de la base de dadesn");
printf("n 0.- Fi programan");

return getch();
}

void inicialitza (TBaseEUSS &base)
{ base.NombreDpmts=0;}

// funcions a realitzar ...................................

el enunciodo del ejercicio es.
Programació Curs 2003-04 Pràctiques.
P1 - 1
Pràctica 1. Tipus de dades i estructures internes.
Objectius
• Repassar conceptes adquirits a l’assignatura de fonaments informàtics, recalcant els punts:
Definició de nous tipus de dades i organització en estructures internes.
Utilització dels prototipus de les funcions per definir el comportament.
Pas de paràmetres a funcions per valor i per referència, així com tipus de dades del
retorn de l’execució de la funció.
Enunciat
Volem memoritzar els esdeveniments més importants de l’escola per tal de deixar un històric
amb informació sobre les principals accions que succeeixin i els seus autors. Cada
departament de l’escola portarà una base de dades pròpia, corresponent als fets que li són
rellevants. Tindrem una estructura que englobarà les dades de tots els departaments.
El disseny de les estructures de dades que utilitzarem serà el següent:
Constants:
const unsigned int MAX_FETS = 50; // màxim nombre de fets/dpmt
const unsigned char MAX_DPMTS = 5; // màx. nombre de departament
Tipus bàsics de dades:
typedef struct {int dia,mes,any;} TData; //identifica una data
typedef char TFet[40]; // descripció del fet
typedef char TAutor[40]; // nom de l’autor/s
typedef char TDepartament[40]; // nom del departament
Estructures auxiliars:
typedef struct {
TData Dia; // Data del fet
TFet Fet; // Descripció ...
TAutor Autor; // i autor
} TEsdeveniment;
typedef struct {
TDepartament Dpmt; // Nom del departament
TEsdeveniment Fets[MAX_FETS]; // Descripció dels fets
unsigned int NombreFets; // Nombre de fets reals
} TBaseDpmt;
typedef struct {
TBaseDpmt Dpmts[MAX_DPMTS]; // posició/departament
unsigned int NombreDpmts; // nombre real de departaments
} TBaseEUSS;
Es demana
Fer els següents apartats:
Afegir un nou fet a la llista d’un departament
Fer una funció que permeti afegir un nou esdeveniment, que tingui el següent prototip:
Programació Curs 2003-04 Pràctiques.
P1 - 2
TBaseEUSS AfegirFet ( TBaseEUSS, TDepartament );
En cas de que el departament no existeixi, l’afegirà a la llista de l’estructura TBaseEUSS per
introduir-hi el nou fet. Retornarà l’estructura TBaseEUSS resultant desprès d’afegir el nou fet.
Per a la realització d'aquest apartat, es demana realitzar i utilitzar les funcions:
int BuscaPosicioDpmt( TBaseEUSS, TDepartament);
busca la posició del departament que té el nom donat i ens retorna la posició de l’array, o –1 si
no el troba.
int NouDpmt( TBaseEUSS &, TDepartament);
Dóna d’alta un nou departament (sempre que hi hagi el lloc per fer-ho i ens deixa les dades
TBaseEUSS, passada per referència, amb la nova informació. També ens retorna el valor 0
(definició de fals) en cas de no poder-ho fer i un valor diferent de 0 (definició de cert) en cas
contrari.
int NouFet (TBaseDpmt &, TEsdeveniment);
Funciona similar a l’anterior afegint un esdeveniment a un departament.
Fer un llistat dels esdeveniments de cada departament.
Fer un llistat que mostri l’autor, la data del fet i el fet per a cada departament de la nostra base
de dades.
El prototip de la funció serà:
void LlistaFets ( TBaseEUSS );
Per a realitzar això, es demana fer les funcions:
void LlistaDpmt ( TBaseDpmt );
que llista els fets d’un departament.