Sto provando a scrivere il codice delle funzioni e fare in modo che possano essere utilizzate in un progrmma ma ho diversi problema. Ho realizzato le funzioni come descritte nel testo dell'esercizio:
Le richieste per alloggi studenti possono essere gestite attraverso le seguenti costanti e strutture:
const int MAXRIC = 100;
const int MAXS = 100;
typedef enum {Singola, Doppia} Tipo;
typedef struct{
char nome[MAXS];
char cognome[MAXS];
Tipo tipo;
int punti;
} Richiesta;
typedef struct{
Richiesta ric[MAXRIC];
int numRich;
} InsiemeRichieste;
La struttura Richiesta si compone di:
un campo nome che contiene il nome dello studente che chiede un alloggio, il campo cognome che contiene il cognome dello studente stesso, un campo tipo che indica il tipo di alloggio richiesto (Singola o Doppia) e infine un campo punti che determinerà la sua posizione in graduatoria.
La struttura InsiemeRichieste è composta da due campi: un array ric che contiene i dati delle richieste, e il campo numRich che indica il numero di richieste effettivamente presenti.
Scrivere il corpo delle seguenti funzioni C:
1. int inserisci(InsiemeRichieste* pi, const char no[], const char co[], Tipo ti, bool fu, float re, float me) che inserisce nell'insieme una nuova richiesta di alloggio. La nuova richiesta può essere inserita solo se c'è spazio disponibile nell'insieme.
I parametri no e co indicano rispettivamente il nome e il cognome dello studente che fa la richiesta. Il parametro ti indica se lo studente vuole una camera singola o una doppia.
Il parametro fu indica se lo studente è fuorisede (1) oppure no (0). Il parametro re indica il reddito della sua famiglia. Il parametro me indica la media dei voti dello studente. I parametri fu, re e me vengono usati per calcolare i punti da associare alla richiesta.
In particolare:
Se lo studente è fuorisede vengono attribuiti 5 punti, 0 se non lo è.
Se il reddito della famiglia è minore di 10000 vengono attribuiti 5 punti, se il reddito della famiglia è maggiore o uguale a 10000 ma minore di 20000 vengono attribuiti 2 punti, se il reddito è maggiore di 20000 non vengono attribuiti punti.
Per quanto riguarda la media, vengono attribuiti punti in quantità pari alla differenza tra la media arrotondata all'intero più vicino e 18 (per esempio, se lo studente ha come media 23.3 gli verranno attribuiti 5 punti).
Quando una nuova richiesta viene inserita nell'array ric, questa deve essere inserita in modo tale da lasciare tale array ordinato per valori decrescenti del campo punti. La funzione restituisce 1 se l'inserimento va a buon fine, 0 altrimenti.
Suggerimento: utilizzare una funzione separata per il calcolo dei punti di una richiesta.
2. int alloggioDisponibile(InsiemeRichieste* pi, Tipo ti) che elimina dall'insieme delle richieste quella che ha il maggior numero di punti e che corrisponde al tipo indicato da ti. La rimozione di una richiesta implica un ricompattamento del contenuto dell'array ric, avendo cura di non perturbare l'ordinamento delle richieste.
La funzione restituisce 1 se una richiesta viene rimossa, 0 altrimenti.
Ma sono rimasto bloccato a causa di vari errori del compilare e non riesco ad andare avanti nella scrittura del codice. Qualcuno potrebbe darmi una mano? vi posto il testo del codice che ho scritto fin ora:
#include <stdio.h>
#include <stdlib.h>
const int MAXRIC =100;
const int MAXS = 100;
typedef enum {Singola, Doppia} Tipo;
typedef struct{
char nome[MAXS];
char cognome[MAXS];
Tipo tipo;
int punti;
}Richiesta;
typedef struct{
Richiesta ric[MAXRIC];
int numRich;
} InsiemeRichieste;
// int inserisci(InsiemeRichieste* pi, cont char no[], const char co[], Tipo ti, bool fu, float re, float me)
int main(){
int calcolaPunti(int fuorisede, float reddito, float media){
int p=0;
if(fuorisede)p+=5;
if(reddito<20000)p+=2;
float x;
x=round(media);
x-=18;
p+=x;
return p;
}
int inserisci(InsiemeRchieste* pi, const char no[], const char co[], Tipo ti, int fu, float re, float me){
if(pi->numRich == MAXRIC) return 0;
Richiesta r;
strcpy(r.nome,no) // copia no su r.nome
strcpy(r.cognome,co)
r.tipo = ti;
r.punti = calcolaPunti(fu,re,me);
for(int i=0; i<pi->numRich && r.punti<=pi->ric[i].punti; i++);
for (int j=0; j=pi->ric[j-1]; j>i; i--)
pi->ric[i]=r;
pi->numRich++;
return 1;
}
int allogioDisponibile(insiemeRichie* pi, Tipo ti){
for(int i=0; i<pi->numRich; i++)
if(pi->ric[i].tipo == ti){
for(int j=i; j<pi->numRich-1; j++){
pi->ric[j]= pi->ric[j+1];
}
pi->numRich--;
return 1;
}
return 0;
}
char nome[30];
char cognome[30];
char tipostanza[30];
int posizione; //fuorisede o no
int reddito;
float mediavoti;
printf("Inserisc nome\n");
scanf("%s",&nome);
printf("Inserisc cognome\n");
scanf("%s",&cognome);
printf("Inserisci tipo stanza\n");
scanf("%s",&tipostanza);
printf("Inserisci posizione se fuorisede o no\n");
scanf("%s",&posizione);
printf("Inserisci reddito\n");
scanf("%d",&reddito);
printf("Inserisci media dei voti\n");
scanf("%f",&reddito);
system("pause");
}
Non riesco a capire cosa manche e perchè mi dia vari errori. Ringrazio in anticipo chiunque tenti di aiutarmi.