Salve a tutti ragazzi, sto svolgendo un esercizio in linguaggio C, mi sono imbattuto in una funzione che non riesco proprio ad implementare. La funzione ha questa richiesta: Funzione di modifica turno tra due studenti. Scambia tra loro due studenti(appartenenti a turni diversi). La funzione da implementare deve avere la seguente struttura:
nome della funzione: Scambia Turno
valore restituito: esito operazione (0: operazione fallita, 1: eliminazione effettuata con successo.
parametri: lista dei prenotati, matricola studente 1, matricola studente 2;
Questa è la struttura dati:
(fino ad adesso questo è tutto quello che ho fatto, so implementare bene o male questa funzione ma non mi riesce! Aiutatemi voi pls
nome della funzione: Scambia Turno
valore restituito: esito operazione (0: operazione fallita, 1: eliminazione effettuata con successo.
parametri: lista dei prenotati, matricola studente 1, matricola studente 2;
Questa è la struttura dati:
(fino ad adesso questo è tutto quello che ho fatto, so implementare bene o male questa funzione ma non mi riesce! Aiutatemi voi pls
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*DEFINIZIONE STRUTTURE DATI*/
typedef struct Prenotato {
char cognome[15];
char nome[15];
char matricola[10];
}TPrenotato;
typedef struct NodoPrenotato {
TPrenotato info;
struct NodoPrenotato *next;
}TNodoPrenotato;
typedef TNodoPrenotato* TListaPrenotati;
typedef struct Turno {
int numero_turno;
TListaPrenotati elenco_prenotati;
}STurno;
typedef struct NodoTurno {
STurno info;
struct NodoTurno *next;
}TNodoTurno;
typedef TNodoTurno* TListaTurni;
/*FUNZIONI IMPLEMENTATE*/
TListaPrenotati CreaListaPrenotati() {
return NULL;
}
TListaTurni CreaListaTurni() {
return NULL;
}
//1 Funzione: Inserimento in ordine in base al cognome degli studenti
void InserisciInOrdineInListaPrenotati(TListaPrenotati *lis, TPrenotato elem) {
TListaPrenotati prec, curr, newnode;
if ((newnode = (TListaPrenotati)malloc(sizeof(TNodoPrenotato))) == NULL) {
printf("Errore: Impossibile allocare memoria.\n");
exit(1);
}
newnode->info = elem;
prec = NULL;
curr = *lis;
while (curr != NULL && strcmp(curr->info.cognome, elem.cognome) < 0) {
prec = curr;
curr = curr->next;
}
newnode->next = curr;
if (prec != NULL) {
prec->next = newnode;
}
else {
*lis = newnode;
}
}
//2 Funzione: Caricamento degli studenti prenotati all'esame tramite un file .txt
int CaricaPrenotati(char *nomefile, TListaPrenotati *plis) {
FILE *f;
TPrenotato prenotato;
int numero_studenti = 0;
if ((f = fopen(nomefile, "r")) == NULL) {
printf("Errore nell'apertura del file.\n");
exit(1);
}
*plis = NULL;
while (!feof(f)) {
if (fscanf(f, "%s\t%s\t%s", prenotato.cognome, prenotato.nome, prenotato.matricola) != 3)
break;
InserisciInOrdineInListaPrenotati(plis, prenotato);
numero_studenti++;
}
fclose(f);
return numero_studenti;
}
/*FUNZIONE PRINCIPALE MAIN*/
int main(void) {
char nomefile[20];
int n;
TListaPrenotati lista_prenotati;
TListaTurni lista_turni;
lista_prenotati = CreaListaPrenotati();
lista_turni = CreaListaTurni();
printf("Inserisci il nome del file da cui caricare gli studenti: ");
scanf("%s", nomefile);
n = CaricaPrenotati(nomefile, &lista_prenotati);
printf("\n");
printf("Sono stati caricati %d studenti.\n", n);
return 0;
}
//3 Funzione: Modifica il turno tra