Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct list{
- char nome[10];
- char cognome[10];
- int matricola;
- char materia[20];
- int voto;
- struct list* prossimo;
- };
- typedef struct list* ptr;
- ptr crea(ptr testa, FILE* fp);
- void stampa(ptr testa);
- ptr elimina(ptr testa);
- ptr ordina(ptr testa);
- int compara(char c[], char m[]);
- int main()
- {
- ptr testa;
- FILE* fp;
- testa = crea(testa, fp);
- stampa(testa);
- testa = elimina(testa);
- printf("\n\n");
- stampa(testa);
- testa = ordina(testa);
- printf("\n\n");
- stampa(testa);
- }
- ptr crea(ptr testa, FILE* fp)
- {
- ptr nodo;
- fp = fopen("esame.txt", "r");
- if(fp == NULL)
- {
- printf("\nFile non trovato!");
- }
- testa = (ptr)malloc(sizeof(struct list));
- fscanf(fp, "%s %s %d %s %d", testa->nome, testa->cognome, &testa->matricola, testa->materia, &testa->voto);
- nodo = testa;
- while(!feof(fp))
- {
- nodo->prossimo = (ptr)malloc(sizeof(struct list));
- nodo = nodo->prossimo;
- fscanf(fp, "%s %s %d %s %d", nodo->nome, nodo->cognome, &nodo->matricola, nodo->materia, &nodo->voto);
- }
- nodo->prossimo = NULL;
- fclose(fp);
- return testa;
- }
- void stampa(ptr testa)
- {
- ptr nodo;
- nodo = testa;
- while(nodo->prossimo!=NULL)
- {
- printf("%s %s %d %s %d\n", nodo->nome, nodo->cognome, nodo->matricola, nodo->materia, nodo->voto);
- nodo = nodo->prossimo;
- }
- }
- ptr elimina(ptr testa)
- {
- ptr prec;
- ptr nodo;
- prec = NULL;
- nodo = testa;
- while(nodo->prossimo!=NULL)
- {
- if(nodo->prossimo->voto < 18)
- {
- prec = nodo;
- nodo = nodo->prossimo;
- prec->prossimo = nodo->prossimo;
- free(nodo);
- nodo = prec;
- nodo = nodo->prossimo;
- }
- else if(prec == NULL && nodo->voto < 16)
- {
- testa = nodo->prossimo;
- free(nodo);
- nodo = testa;
- }
- else
- {
- nodo = nodo->prossimo;
- }
- }
- return testa;
- }
- ptr ordina(ptr testa)
- {
- ptr i, j;
- char nome[10];
- char cognome[10];
- char materia[20];
- int voto;
- int matricola;
- for(i=testa; i!=NULL; i=i->prossimo)
- {
- for(j=i->prossimo; j!=NULL; j=j->prossimo)
- {
- if(compara(i->nome, j->nome) == 1 && compara(i->cognome, j->cognome) == 1)
- {
- strcpy(nome, i->prossimo->nome);
- strcpy(cognome, i->prossimo->cognome);
- strcpy(materia, i->prossimo->materia);
- voto = i->prossimo->voto;
- matricola = i->prossimo->matricola;
- strcpy(i->prossimo->nome, j->nome);
- strcpy(i->prossimo->cognome, j->cognome);
- strcpy(i->prossimo->materia, j->materia);
- i->prossimo->voto = j->voto;
- i->prossimo->matricola = j->matricola;
- strcpy(j->nome, nome);
- strcpy(j->cognome, cognome);
- strcpy(j->materia, materia);
- j->voto = voto;
- j->matricola = matricola;
- }
- }
- }
- return testa;
- }
- int compara(char c[], char m[])
- {
- int r = 0;
- int i = 0;
- if(c[i] == m[i])
- {
- while(c[i] == m[i])
- {
- r = 1;
- i++;
- }
- }
- else
- {
- r = 0;
- }
- return r;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement