fork(1) download
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #define MAXCANALIBLOCCABILI 50
  4. #define MAXCANALE 889
  5. #define MAXLUMINOSITA 100
  6. using namespace std;
  7.  
  8. class televisione
  9. {
  10. private:
  11. bool accesa;
  12. string marca;
  13. int nPollici;
  14. int volume;
  15. int luminosita;
  16. int canaleAttuale;
  17. string stanza;
  18.  
  19. bool parentalControlAttivo;//true attivo, false: non attivo
  20. int canaliBloccati[MAXCANALIBLOCCABILI];
  21. int numCanaliBloccati;
  22.  
  23. bool isBloccato(int c);//dice se il canale c è nell'elenco dei bloccati
  24.  
  25. public:
  26. //costruttori
  27. televisione();
  28. televisione(string room);
  29. televisione(string room, int pollici);
  30. televisione(string room, string m, int pollici);
  31. //distruttore
  32. ~televisione();
  33. //azioni del telecomando
  34. void accendi();
  35. void spegni();
  36. void setCanale(int c);//i canali vanno da 0 a CANALEMAX
  37. void setLuminosita(int l);
  38. void changeCanale(bool su);//su=true aumenta di uno, false diminuisce
  39. void changeLuminosita(bool su);//su=true aumenta di uno, false diminuisce
  40. void setParentalControl(bool pc);//true = attiva, false=disattiva
  41. //controlli e visualizzazioni
  42. bool isAccesa();
  43. void visualizzaStato();
  44. void addBloccoCanale(int c);
  45. void getCanaliBloccati();
  46. };
  47.  
  48. //costruttori
  49. televisione::televisione()
  50. {
  51. stanza="salotto";
  52. marca = "LG";
  53. nPollici=22;
  54. accesa=false;
  55. volume=20;
  56. luminosita=50;
  57. canaleAttuale=1;
  58. parentalControlAttivo=false;
  59. for(int i=0; i<MAXCANALIBLOCCABILI;i++)
  60. canaliBloccati[i]=0;
  61. numCanaliBloccati=0;
  62. }
  63.  
  64. televisione::televisione(string room)
  65. {
  66. stanza=room;
  67. nPollici=24;
  68. marca = "LG";
  69. accesa=false;
  70. volume=20;
  71. luminosita=50;
  72. canaleAttuale=1;
  73. parentalControlAttivo=false;
  74. for(int i=0; i<MAXCANALIBLOCCABILI;i++)
  75. canaliBloccati[i]=0;
  76. numCanaliBloccati=0;
  77. }
  78.  
  79. televisione::televisione(string room, int pollici)
  80. {
  81. stanza=room;
  82. nPollici=pollici;
  83. marca = "LG";
  84. accesa=false;
  85. volume=20;
  86. luminosita=50;
  87. canaleAttuale=1;
  88. parentalControlAttivo=false;
  89. for(int i=0; i<MAXCANALIBLOCCABILI;i++)
  90. canaliBloccati[i]=0;
  91. numCanaliBloccati=0;
  92. }
  93. televisione::televisione(string room, string m, int pollici)
  94. {
  95. stanza = room;
  96. marca = m;
  97. nPollici = pollici;
  98. accesa = false;
  99. volume = 20;
  100. luminosita = 50;
  101. canaleAttuale = 1;
  102. parentalControlAttivo = false;
  103. for(int i=0; i<MAXCANALIBLOCCABILI;i++)
  104. canaliBloccati[i]=0;
  105. numCanaliBloccati=0;
  106. }
  107. //implementazione del distruttore
  108. televisione::~televisione(){}
  109. //implementazione azioni del telecomando
  110. void televisione::accendi(){ accesa = true; }
  111. void televisione::spegni(){ accesa = false; }
  112. void televisione::setCanale(int c)
  113. {
  114. if( (parentalControlAttivo == true) and (isBloccato(c)) ) return;
  115. if((c>=0) and (c<=MAXCANALE))
  116. canaleAttuale = c;
  117. //altrimenti il canaleAttuale resta quello di prima
  118. }
  119. void televisione::setLuminosita(int l)
  120. {
  121. if((l>=0) and (l<MAXLUMINOSITA))
  122. luminosita = l;
  123. }
  124. /*
  125. void televisione::changeCanale(bool su)
  126. {
  127.   if(su == true) canaleAttuale++;
  128.   else canaleAttuale--;
  129.  
  130.   //qui ho settato il canaleAttuale ma potrebbe essere bloccato
  131.   if(parentalControlAttivo == true)
  132.   if(isBloccato(canaleAttuale) ) changeCanale(true);
  133.   //funzione ricorsiva cioè una funzione che richiama se stessa
  134. }
  135. */
  136. //versione con controllo errori:
  137. void televisione::changeCanale(bool su)
  138. {
  139. if(su) canaleAttuale = (canaleAttuale+1) % (MAXCANALE+1) ;
  140. else canaleAttuale--;
  141.  
  142. if(canaleAttuale == 0 )
  143. if(su) canaleAttuale++;
  144. else canaleAttuale = MAXCANALE;
  145.  
  146. //qui ho il canaleAttuale ma potrebbe essere bloccato
  147. if(parentalControlAttivo == true)
  148. if(isBloccato(canaleAttuale) ) changeCanale(true);
  149. //funzione ricorsiva cioè una funzione che richiama se stessa
  150. }
  151.  
  152. void televisione::changeLuminosita(bool su)
  153. {
  154. if(su) luminosita++; else luminosita--;
  155. }
  156. //versione con controllo degli errori
  157. //si fa come quella di changeCanale
  158. void televisione::setParentalControl(bool pc)
  159. {
  160. parentalControlAttivo = true;
  161. }
  162. //controlli
  163. bool televisione::isAccesa(){ return accesa; }
  164. void televisione::visualizzaStato()
  165. {
  166. if( accesa == false )
  167. {
  168. cout<<"ATTENZIONE: accendere il televisore"<<endl;
  169. return;
  170. }
  171. cout<<"televisore: "<<marca<<" "<<nPollici<<" pollici"<<endl;
  172. cout<<"canale: "<<canaleAttuale<<endl;
  173. //eccetera
  174. }
  175.  
  176. void televisione::addBloccoCanale(int c)
  177. {
  178. if(isBloccato(c)) return;
  179. if((c>=0) and (c<MAXCANALE))
  180. {
  181. canaliBloccati[numCanaliBloccati] = c;
  182. numCanaliBloccati++;
  183. }
  184. return;
  185. }
  186. bool televisione::isBloccato(int c)
  187. {
  188. for(int i=0; i<MAXCANALE; i++)
  189. if(canaliBloccati[i] == c) return true;
  190. return false;
  191. }
  192. void televisione::getCanaliBloccati()
  193. {
  194. cout<<"CANALI BLOCCATI: "<<endl;
  195. for(int i=0; i<numCanaliBloccati ;i++)
  196. cout<<canaliBloccati[i]<<" ";
  197. cout<<endl;
  198.  
  199. }
  200.  
  201. int main() {
  202. televisione a("bambini");
  203. int scelta;
  204.  
  205. do{
  206. cout<<"scegli:"<<endl;
  207. cout<<"0: spegni"<<endl;
  208. cout<<"1: accendi"<<endl;
  209. cout<<"2: cambia canale"<<endl;
  210. cout<<"3: aumenta canale"<<endl;
  211. cout<<"4: diminuisci canale"<<endl;
  212. cout<<"5: cambia luminosita'"<<endl;
  213. cout<<"6: aumenta luminosita'"<<endl;
  214. cout<<"7: diminuisci luminosita'"<<endl;
  215. cout<<"8: attiva il controllo parentale'"<<endl;
  216. cout<<"9: disattiva il controllo parentale'"<<endl;
  217. cout<<"10: blocca canale"<<endl;
  218. cout<<"11: visualizzaStato"<<endl;
  219. cout<<"12: dammi l'elenco dei canali bloccati"<<endl;
  220. cout<<"13: esci dal programma"<<endl;
  221. cin>>scelta;
  222. switch(scelta)
  223. {
  224. case 0:
  225. a.spegni();
  226. break;
  227. case 1:
  228. a.accendi();
  229. break;
  230. case 2:
  231. int c;
  232. cout<<"dammi il canale: ";
  233. cin>>c;
  234. a.setCanale(c);
  235. break;
  236. case 3:
  237. a.changeCanale(true);
  238. break;
  239. case 4:
  240. a.changeCanale(false);
  241. break;
  242. case 5:
  243. int l;
  244. cout<<"dammi la luminosita: ";
  245. cin>>l;
  246. a.setLuminosita(l);
  247. break;
  248. case 6:
  249. a.changeLuminosita(true);
  250. break;
  251. case 7:
  252. a.changeLuminosita(false);
  253. break;
  254. case 8:
  255. a.setParentalControl(true);
  256. break;
  257. case 9:
  258. a.setParentalControl(false);
  259. break;
  260. case 10:
  261. cout<<"dammi il canale da bloccare: ";
  262. cin>>c;
  263. a.addBloccoCanale(c);
  264. break;
  265. case 11:
  266. a.visualizzaStato();
  267. break;
  268. case 12:
  269. a.getCanaliBloccati();
  270. break;
  271. case 13:
  272. cout<<"bye bye!!!"<<endl; break;
  273. break;
  274. default:
  275. cout<<"scelta errata!!!"<<endl;
  276. system("PAUSE");
  277. }
  278. } while(scelta != 13);
  279.  
  280. return 0;
  281. }
  282.  
Success #stdin #stdout 0s 3468KB
stdin
11   1   11     3   11  13
stdout
scegli:
0: spegni
1: accendi
2: cambia canale
3: aumenta canale
4: diminuisci canale
5: cambia luminosita'
6: aumenta luminosita'
7: diminuisci luminosita'
8: attiva il controllo parentale'
9: disattiva il controllo parentale'
10: blocca canale
11: visualizzaStato
12: dammi l'elenco dei canali bloccati
13: esci dal programma
ATTENZIONE: accendere il televisore
scegli:
0: spegni
1: accendi
2: cambia canale
3: aumenta canale
4: diminuisci canale
5: cambia luminosita'
6: aumenta luminosita'
7: diminuisci luminosita'
8: attiva il controllo parentale'
9: disattiva il controllo parentale'
10: blocca canale
11: visualizzaStato
12: dammi l'elenco dei canali bloccati
13: esci dal programma
scegli:
0: spegni
1: accendi
2: cambia canale
3: aumenta canale
4: diminuisci canale
5: cambia luminosita'
6: aumenta luminosita'
7: diminuisci luminosita'
8: attiva il controllo parentale'
9: disattiva il controllo parentale'
10: blocca canale
11: visualizzaStato
12: dammi l'elenco dei canali bloccati
13: esci dal programma
televisore: LG 24 pollici
canale: 1
scegli:
0: spegni
1: accendi
2: cambia canale
3: aumenta canale
4: diminuisci canale
5: cambia luminosita'
6: aumenta luminosita'
7: diminuisci luminosita'
8: attiva il controllo parentale'
9: disattiva il controllo parentale'
10: blocca canale
11: visualizzaStato
12: dammi l'elenco dei canali bloccati
13: esci dal programma
scegli:
0: spegni
1: accendi
2: cambia canale
3: aumenta canale
4: diminuisci canale
5: cambia luminosita'
6: aumenta luminosita'
7: diminuisci luminosita'
8: attiva il controllo parentale'
9: disattiva il controllo parentale'
10: blocca canale
11: visualizzaStato
12: dammi l'elenco dei canali bloccati
13: esci dal programma
televisore: LG 24 pollici
canale: 2
scegli:
0: spegni
1: accendi
2: cambia canale
3: aumenta canale
4: diminuisci canale
5: cambia luminosita'
6: aumenta luminosita'
7: diminuisci luminosita'
8: attiva il controllo parentale'
9: disattiva il controllo parentale'
10: blocca canale
11: visualizzaStato
12: dammi l'elenco dei canali bloccati
13: esci dal programma
bye bye!!!