Advertisement
Guest User

provaesamematteomemoria

a guest
Dec 13th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.23 KB | None | 0 0
  1. /*
  2. Studente: RUGGIERO MATTEO
  3. Matricola: 042/005027
  4. Docente: Amalfitano1
  5.  
  6. Esercitazione di Fondamenti di Informatica (9 CFU)
  7. Data: 13/12/2019
  8. docente: Ing. Domenico Amalfitano
  9.  
  10. Scrivere un programma per la gestione di una nuova tipologia di memoria. La memoria può essere modellata come
  11. un vettore di registri. Ogni registro è caratterizzato dal valore in esso memorizzato (stringa di 8 caratteri '0' e '1'), dal
  12. tempo di accesso in scrittura (valore float), e dal tempo di accesso in scrittura.
  13. Il programma deve fornire le funzionalità descritte di seguito, tenendo presente che i primi tre requisiti
  14. sono precondizioni per l'esecuzione dei rimanenti. Per raggiungere la sufficienza è necessario svolgere
  15. correttamente i primi tre punti e un punto scelto tra il quarto e il quinto.
  16. 1. Inserimento del numero di registri della memoria. Il programma chiede all'utente di inserire il numero
  17. di registri della memoria. Se l'utente inserisce un valore di dimensione minore o uguale di zero allora il
  18. programma deve mostrare un messaggio di errore e chiedere all'utente di inserire nuovamente la dimensione
  19. fin quando questa non sia corretta.
  20. 2. Inserimento dei valori dei registri. Il programma chiede all'utente di inserire i valori dei diversi registri
  21. della memoria.
  22. 3. Stampa a video dello stato della memoria. Il programma mostra a video lo stato attuale della memoria
  23. RAM.
  24. 4. Riorganizzazione della memoria. Scrivere una funzione che riorganizza i registri della memoria in base ai
  25. tempi medi di accesso in lettura di ogni registro. La riorganizzazione viene fatta in ordine crescente.
  26. 5. Calcolo del tempo medio di accesso in scrittura di tutti i registri in cui è memorizzato il valore
  27. '00000000'. Scrivere una funzione che calcola e restituisce il tempo medio di accesso in scrittura di tutti i
  28. registri in cui è memorizzato il valore '00000000'. Nel caso in cui non ci siano registri che memorizzano
  29. il valore '00000000' deve essere mostrato un opportuno messaggio di avviso (Prevedere un
  30. opportuno valore di ritorno della funzione).
  31.  
  32.  
  33. Esempio di funzionamento:
  34. Inserisci il numero di registri: 0
  35. Errore la memoria non puo' essere vuota
  36.  
  37. Inserisci il numero di registri: 5
  38.  
  39. Inserimento del registro 0:
  40. Valore memorizzato: 00000000
  41. Tempo accesso lettura: 0.23
  42. Tempo accesso scrittura: 6.25
  43.  
  44. Inserimento del registro 1:
  45. Valore memorizzato: 00001000
  46. Tempo accesso lettura: 0.43
  47. Tempo accesso scrittura: 5.33
  48.  
  49. Inserimento del registro 2:
  50. Valore memorizzato: 00000000
  51. Tempo accesso lettura: 0.11
  52. Tempo accesso scrittura: 11.25
  53.  
  54. Inserimento del registro 3:
  55. Valore memorizzato: 00000000
  56. Tempo accesso lettura: 0.12
  57. Tempo accesso scrittura: 3.45
  58.  
  59. Inserimento del registro 4:
  60. Valore memorizzato: 00011000
  61. Tempo accesso lettura: 0.23
  62. Tempo accesso scrittura: 0.11
  63.  
  64. Lo stato della memoria e':
  65. Registro 0: 00000000 0.23 6.25
  66. Registro 1: 00001000 0.43 5.33
  67. Registro 2: 00000000 0.11 11.25
  68. Registro 3: 00000000 0.12 3.44
  69. Registro 4: 00011000 0.23 0.11
  70. Lo stato della memoria dopo la riorganizzazione e':
  71.  
  72. Registro 0: 00000000 0.11 11.25
  73. Registro 1: 00000000 0.12 3.44
  74. Registro 2: 00000000 0.23 6.25
  75. Registro 3: 00011000 0.23 0.11
  76. Registro 4: 00001000 0.43 5.33
  77.  
  78. Il tempo medio di accesso in scrittura di tutti i registri in cui è memorizzato il valore
  79. '00000000' e': 6.98
  80.  
  81. */
  82.  
  83.  
  84. #include <iostream>
  85. #include <stdlib.h>
  86. #include <string.h>
  87. using namespace std;
  88.  
  89. typedef struct{
  90. char valore[9];
  91. float lettura;
  92. float scrittura;
  93. }registro;
  94.  
  95. void insDim(int&);
  96. void insReg(registro*, int);
  97. void StampaMem(registro*, int);
  98. void OrdinaCrescente(registro *, int);
  99.  
  100. int main (){
  101. registro *memoria;
  102. int dim;
  103. //PUNTO 1
  104. insDim(dim);
  105. memoria = new registro[dim];
  106. //PUNTO 2
  107. cout<<endl;
  108. insReg(memoria, dim);
  109. //PUNTO 3
  110. cout<<"Lo stato della memoria e\': "<<endl;
  111. StampaMem(memoria, dim);
  112. //PUNTO 4
  113. cout<<"\nLo stato della memoria dopo l'ordinamento crescente 'e\': "<<endl;
  114. OrdinaCrescente(memoria, dim);
  115. StampaMem(memoria, dim);
  116.  
  117.  
  118.  
  119.  
  120. cout<<endl;
  121. system("PAUSE");
  122. return 0;
  123. }
  124.  
  125. void insDim(int &dim){
  126. do{
  127. cout<<"Inserisci il numero di registri: ";
  128. cin>>dim;
  129. if(dim<=0){
  130. cout<<"Errore la memoria non puo\' essere vuota!!"<<endl;
  131. }
  132. }while(dim<=0);
  133. }
  134.  
  135. void insReg(registro* vet, int dim){
  136. for(int i=0; i<dim; i++){
  137. cout<<"Inserimento del registro "<<i<<endl;
  138. cout<<"Valore memorizzato: ";
  139. cin>>(vet+i)->valore;
  140. cout<<"Tempo accesso lettura: ";
  141. cin>>(vet+i)->lettura;
  142. cout<<"Tempo accesso scrittura: ";
  143. cin>>(vet+i)->scrittura;
  144. cout<<endl;
  145. }
  146. }
  147.  
  148. void StampaMem(registro * vet, int dim){
  149. for(int i=0; i<dim; i++){
  150. //Registro 0: 00000000 0.23 6.25
  151. cout<<"Registro "<<i<<": "<<(vet+i)->valore<<" "<<(vet+i)->lettura<<" "<<(vet+i)->scrittura<<endl;
  152. }
  153. }
  154.  
  155. void OrdinaCrescente(registro *vet, int dim){
  156. /*4.Riorganizzazione della memoria. Scrivere una funzione che riorganizza i registri della memoria in base ai
  157. tempi medi di accesso in lettura di ogni registro. La riorganizzazione viene fatta in ordine crescente.*/
  158. registro temp;
  159.  
  160. for(int volte=0; volte<dim-1; volte++){
  161. for(int i=0; i<dim-1; i++){
  162. if((vet+i)->lettura>(vet+i+1)->lettura){
  163. //scambio
  164. temp=*(vet+i);
  165. *(vet+i)=*(vet+i+1);
  166. *(vet+i+1)=temp;
  167. }
  168. }
  169. }
  170.  
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement