APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
Strutture Dati Candidati e Voti Candidati: ("abc","Barack","Obama"), (123","Mitt","Romney") Voti: ("abc","Roberto","De Virgilio"), ("abc","Andrea","Rossi"), ("123","Mario","Verdi"), ("aaa","Mario","Neri");
Strutture Dati candidato.h
Strutture Dati voto.h
Non è possibile utilizzare <string.h> Strutture Dati Candidati e Voti Non è possibile utilizzare <string.h> Candidati: ("abc","Barack","Obama"), (123","Mitt","Romney") Voti: ("abc","Roberto","De Virgilio"), ("abc","Andrea","Rossi"), ("123","Mario","Verdi"), ("aaa","Mario","Neri");
Strutture Dati stringhe.h
Progetto voto.h stringhe.h candidato.h
Funzionalità funzioni per aggiungere una votazione e un candidato ai rispettivi insiemi #include "stringhe.h" typedef struct { string codice; string nome; string cognome; } candidato; typedef struct elem{ candidato info; struct elem* next; } cnode; typedef cnode* candidati; void addcandidato(candidati*, string, string, string); candidato.h
Funzionalità funzioni per aggiungere una votazione e un candidato ai rispettivi insiemi #include "stringhe.h" typedef struct { string codice; string nomev; string cognomev; } voto; typedef struct elem2{ voto info; struct elem2* next; } vnode; typedef vnode* voti; void addvoto(voti*, string, string, string); voto.h
Funzionalità dato l’insieme di voti, ritornare la dimensione dell’insieme (numero di voti). #include "stringhe.h" typedef struct { string codice; string nomev; string cognomev; } voto; typedef struct elem2{ voto info; struct elem2* next; } vnode; typedef vnode* voti; void addvoto(voti*, string, string, string); int numbervoti(voti); voto.h
Funzionalità dato l’insieme di voti e l’insieme di candidati, contare quanti voti non sono validi (voti che hanno un codice che non corrisponde ad alcun candidato nell’insieme dei candidati). #include "candidato.h” typedef struct { string codice; string nomev; string cognomev; } voto; typedef struct elem2{ voto info; struct elem2* next; } vnode; typedef vnode* voti; void addvoto(voti*, string, string, string); int numbervoti(voti); int checkvoti(voti, candidati); voto.h
Progetto voto.h stringhe.h candidato.h
Funzionalità dato l’insieme dei voti, l’insieme dei candidati e nome e cognome di un candidato, contare quanti voti ha ottenuto quel candidato #include "candidato.h” typedef struct { string codice; string nomev; string cognomev; } voto; typedef struct elem2{ voto info; struct elem2* next; } vnode; typedef vnode* voti; void addvoto(voti*, string, string, string); int numbervoti(voti); int checkvoti(voti, candidati); int count(voti, candidati, string, string); voto.h
Funzionalità dato l’insieme dei voti e l’insieme dei candidati, rimuovere dall’insieme dei voti tutti gli elementi non validi (quei voti che hanno un codice che non corrisponde ad alcun candidato nell’insieme dei candidati). #include "candidato.h” typedef struct { string codice; string nomev; string cognomev; } voto; typedef vnode* voti; void addvoto(voti*, string, string, string); int numbervoti(voti); int checkvoto(voto, candidati); int checkvoti(voti, candidati); int count(voti, candidati, string, string); void removeinvalid(voti*, candidati); typedef struct elem2{ voto info; struct elem2* next; } vnode; voto.h
Progetto voto.h stringhe.h candidato.h main.c
Stringhe.c #include "stringhe.h" int lung(string s){ int i=0; while(s[i] != '\0'){ i++; } return i;
Stringhe.c int confronta(string s1, string s2){ if (lung(s1) == lung(s2)){ int i = 0; while ((s1[i] == s2[i]) && (s1[i] != '\0') && (s2[i] != '\0')) i++; return (s1[i] == '\0') && (s2[i] == '\0'); } else return 0;
Stringhe.c void copia(string s1, string s2){ int i=0; while (s2[i] != '\0'){ s1[i] = s2[i]; i++; } s1[i] = '\0';
Progetto voto.h stringhe.h candidato.h main.c
candidato.c #include "candidato.h" #include <stdlib.h> #include <stdio.h> void addcandidato(candidati* cds, string cod, string n, string m){ candidati nc = (candidati)malloc(sizeof(cnode)); copia(nc->info.codice, cod); copia(nc->info.nome, n); copia(nc->info.cognome, m); nc->next = *cds; *cds = nc; }
Progetto voto.h stringhe.h candidato.h main.c
Voto.c #include "voto.h" #include <stdlib.h> #include <stdio.h> void addvoto(voti* vs, string cod, string n, string m){ voti v = (voti)malloc(sizeof(cnode)); copia(v->info.codice, cod); copia(v->info.nomev, n); copia(v->info.cognomev, m); v->next = *vs; *vs = v; }
Voto.c int numbervoti(voti vs){ int count = 0; while (vs != NULL){ vs = vs->next; } return count;
Voto.c candidato.h candidato.c int checkvoto(voto v, candidati cds){ return checkcandidato(cds, v.codice); } candidato.h int checkcandidato(candidati, string); candidato.c int checkcandidato(candidati cds, string cod){ int test = 0; while ((cds != NULL) && (!test)){ test = confronta(cds->info.codice, cod); cds = cds->next; } return test;
Voto.c int checkvoti(voti vs, candidati cds){ int cont = 0; while (vs != NULL) { if (checkvoto(vs->info,cds)) cont++; vs = vs->next; } return cont;
Voto.c int count(voti vs, candidati cds, string n, string m){ string s; copia(s,getcodice(cds,n,m)); while (vs != NULL){ if (confronta(vs->info.codice,s)) count++; vs = vs->next; } return count;
char* getcodice(candidati, string, string); candidato.h char* getcodice(candidati, string, string); candidato.c char* getcodice(candidati cds, string n, string m){ while (cds != NULL) { if (confronta(cds->info.nome,n) && confronta(cds->info.cognome,m)) return cds->info.codice; else cds = cds->next; } return "";
Voto.c void removeinvalid(voti *vs, candidati cds){ int l = numbervoti(*vs); if (l >= 2) { voti prev = *vs; voti curr = prev->next; while (curr != NULL) { if (!checkvoto(curr->info,cds)) { voti temp = curr; curr = curr->next; prev->next = curr; free(temp); } // end if else{ prev = prev->next; } // end else } // end while
Voto.c void removeinvalid(voti *vs, candidati cds){ …[continua] if (l > 0) { if (!checkvoto((*vs)->info,cds)) { voti temp = *vs; *vs = (*vs)->next; free(temp); }
Progetto voto.h stringhe.h candidato.h main.c
main.c #include <stdio.h> #include "voto.h" int main (int argc, const char * argv[]) { candidati cds = NULL; voti vs = NULL; addcandidato(&cds,"abc","Barack","Obama"); addcandidato(&cds,"123","Mitt","Romney"); addvoto(&vs,"abc","Roberto","De Virgilio"); addvoto(&vs,"abc","Andrea","Rossi"); addvoto(&vs,"123","Mario","Verdi"); addvoto(&vs,"aaa","Mario","Neri"); printf("Voti validi: %d\n", checkvoti(vs,cds)); removeinvalid(&vs,cds); printf("Voti di Barack Obama: %d\n", count(vs,cds,"Barack","Obama")); return 0; }
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia Corso di Algoritmi e strutture Dati APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia FINE