Array in C++
Array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
#include <cstdlib> #include <iostream> #include <ctime> /* PROBLEMA */ /* Si vogliono registrare il numero di ore di lezione fatte in ogni giorno della settimana. Determinare poi la media delle ore di lezione nella settimana. */ using namespace std; //seme (come mischiare il mazzo di carte) void seme(){ srand((unsigned)time(NULL)); } //genera un numero intero casuale compreso fra MIN e MAX int casuale(int MIN, int MAX){ return(rand()%(MAX-MIN+1)+MIN); } int main(int argc, char *argv[]){ /* VERS. 1.0 */ int nOreLU=5; int nOreMA=4; int nOreME=5; int nOreGI=6; int nOreVE=5; int nOreSA=5; int nOreDO=0; float sommaOre, mediaOre; sommaOre=nOreLU+nOreMA+nOreME+nOreGI+nOreVE+nOreSA+nOreDO; mediaOre=sommaOre/7; cout<<"Media: "<<mediaOre<<endl; /* Il metodo utilizzato non è molto efficiente per i seguenti motivi: 1. Se occorre modificare le ore di uno o più giorni della settimana, occorre intervenire manualmente in più punti del programma. 2. Se i giorni di lezione non fossero 7 ma 20 o addirittura 100 (per esempio per gestire il numero delle ore di lezione in un corso universitario di 100 giorni) occorrerebbe creare tante variabili quanti sono i giorni di lezione ->>>> il programma non è SCALABILE */ cout<<"____________________________________________\n"; /* VERS. 2.0 CON GLI ARRAY */ /* Risolvo il problema con gli array e inizialmente potrei essere tentato di dire che in realtà non ho risolto il problema perchè ho ancora lo stesso numero di righe di codice. */ float oreSett[7]; oreSett[0]=5; oreSett[1]=4; oreSett[2]=5; oreSett[3]=6; oreSett[4]=5; oreSett[5]=5; oreSett[6]=0; float s, m; s=oreSett[0]+oreSett[1]+oreSett[2]+oreSett[3]+oreSett[4]+oreSett[5]+oreSett[6]; m=s/7; cout<<"Media: "<<m<<endl; cout<<"____________________________________________\n"; /* VERS. 3.0 CON GLI ARRAY */ /* Però posso utilizzare il ciclo FOR per acquisire da tastiera in automatico i dati, cosa non possibile se non usassi gli array riducendo il numero di righe di codice ... ma non solo */ s=0; cout<<"INPUT ORE\n"; for(int i=0; i<7; i++){ cout<<"Ore del giorno numero "<<i+1<<": "; //cin>>oreSett[i]; oreSett[i]=casuale(4, 6); cout<<oreSett[i]<<endl; s=s+oreSett[i]; } m=s/7; cout<<"Media: "<<m<<endl; cout<<"____________________________________________\n"; /* VERS. 4.0 CON GLI ARRAY */ /* ... ma se il numero di giorni di lezione diventa 100 ... dovrei modificare il precedente programma in tutti i punti in cui ho scritto 7 e farlo diventare 100 */ float ore_Sett[100]; s=0; cout<<"INPUT ORE\n"; for(int i=0; i<100; i++){ cout<<"Ore del giorno numero "<<i+1<<": "; //cin>>ore_Sett[i]; ore_Sett[i]=casuale(4, 6); cout<<ore_Sett[i]<<endl; s=s+ore_Sett[i]; } m=s/100; cout<<"Media: "<<m<<endl; cout<<"____________________________________________\n"; /* VERS. 5.0 CON GLI ARRAY */ /* ... ma esiste un modo più elegante e ottimale che porta alla riduzione o annullamento di errori nella programmazione ... definisco una dimensione generica dell'array attraverso const int N=7; e sostituisco tutte le occorrenze del 7 con N ... e' chiaro che ore il programma diventa FACILMENTE SCALABILE /MODIFICABILE ... basta solo modificare il programma in un solo punto per adattarlo a qualsiasni numero di giorni di lazione. */ const int N=20;// MODIFICHERO' IL PROGRAMMA SOLO IN QUESTO PUNTO float oresett[N]; s=0; cout<<"INPUT ORE\n"; for(int i=0; i<N; i++){ cout<<"Ore del giorno numero "<<i+1<<": "; //cin>>oresett[i]; oresett[i]=casuale(4, 6); cout<<oresett[i]<<endl; s=s+oresett[i]; } m=s/N; cout<<"Media: "<<m<<endl; system("pause"); return 0; } |