Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <fstream>
- using namespace std;
- struct squadra{
- int punteggio;
- char nome[31];
- squadra*next;
- };
- struct classifica{
- squadra*testa;
- };
- void inizializza(classifica&c){
- c.testa=0;
- }
- void inserisciordinato(classifica&c, const char* id, int i){
- if(id==0||strlen(id)>30) return;
- squadra*p=0;
- squadra*q;
- for(q=c.testa;q!=0 && (q->punteggio)>i;q=q->next){
- if(strcmp(q->nome,id)==0) return;
- p=q;
- }
- squadra*r=new squadra;
- r->punteggio=i;
- r->next=q;
- if(q==c.testa)
- c.testa=r;
- else
- p->next=r;
- }
- void aggiungi(classifica& cla, const char*str){
- ifstream in(str);
- if(!in)
- cerr<<"errore apertura file"<<endl;
- char e[30];
- while(cin>>e){
- if(strlen(e)>30) return;
- for(squadra*q=cla.testa;q!=0;q=q->next) {
- inserisciordinato(cla, e, 0);
- }
- }
- in.close();
- }
- int elimina(classifica&c, const char*id){
- if(id==0||strlen(id)>30) return 0;
- squadra*p=0;
- squadra*q;
- for(q=c.testa;q!=0 && q->nome!=id;q=q->next){
- p=q;
- }
- if(q==0) return 0;
- if(q==c.testa)
- c.testa=q->next;
- else
- p->next=q->next;
- int punti =q->punteggio;
- delete q;
- return punti;
- }
- void risultato(classifica&c, const char*sq1, int ris1, const char*sq2, int ris2){
- if(c.testa==0|| sq1==0||strlen(sq1)>30|| sq2==0|| strlen(sq2)>30) return;
- if(ris1!=0 && ris1!=1 && ris1!=3) return;
- if(ris2!=0 && ris2!=1 && ris2!=3) return;
- bool trovata1;
- for(squadra*q=c.testa;q!=0;q=q->next){
- if(strcmp(q->nome, sq1)==0)
- trovata1=true;
- }
- if(!trovata1) return;
- bool trovata2;
- for(squadra*q=c.testa;q!=0;q=q->next){
- if(strcmp(q->nome, sq2)==0)
- trovata2=true;
- }
- if(!trovata2) return;
- int punti1=elimina(c,sq1);
- int punti2=elimina(c, sq2);
- punti1+=ris1;
- punti2+=ris2;
- inserisciordinato(c,sq1, punti1);
- inserisciordinato(c, sq2, punti2);
- }
- void stampa(classifica c){
- cout<<"Classifica:"<<endl;
- int i=0;
- while(i<3){
- for(squadra*q=c.testa;q!=0;q=q->next){
- cout<<q->nome<<","<<q->punteggio<<endl;
- if(q->punteggio!=(q->next)->punteggio)
- i++;
- }
- }
- }
- //funzione ausiliaria per frequenza
- int frequenzasingola(classifica c, int i){
- if(c.testa==0||i<0) return 0;
- int conta=0;
- for(squadra*q=c.testa;q!=0; q=q->next){
- if(q->punteggio==i)
- conta++;
- }
- return conta;
- }
- int frequenza(classifica c){
- if(c.testa==0) return 0;
- int max=0;
- for(squadra*q=c.testa; q!=0;q=q->next){
- if(frequenzasingola(c,q->punteggio)>max)
- max=q->punteggio;
- }
- return max;
- }
- void eliminapunteggio(classifica&c, int i){
- if(i<0) return;
- squadra*p=0;
- squadra*q;
- for(q=c.testa;q!=0 && q->punteggio!=i;q=q->next){
- p=q;
- }
- if(q==c.testa)
- c.testa=q->next;
- else
- p->next=q->next;
- delete q;
- }
- void cancellaultime(classifica&c){
- if(c.testa==0) return;
- eliminapunteggio(c, 0);
- }
- int main() {
- classifica C;
- inizializza (C);
- stampa (C); // Classifica:
- aggiungi(C,"prova2");
- stampa (C);
- risultato (C, "Benevento", 3, "Entella", 0);
- risultato (C, "Entella", 0, "Pisa", 3);
- risultato(C, "Pisa", 3, "Benevento", 0);
- stampa (C);
- cout << frequenza(C) << endl; // 0
- cancellaultime(C);
- stampa(C);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement