domenica 9 novembre 2014

ESER. INFORMATICA - ESERCIZIO 5

ESERCIZIO 5

Si supponga che 3 dispositivi trasferiscano dati rispettivamente ad una velocità di 6 Gbit/s, 3Gbit/sec e 1,5 Gbit al secondo, calcolare per ciascun dispositivo il tempo necessario per eseguire il backup di un hdd da 500 GByte e di un Hdd da 1 TByte.

Parto sempre dal considerare che 1 byte=8 bit e quindi :

6 Gbit/sec = 0,75 GByte/sec;
3 Gbit/sec = 0,375 GByte/sec;
1,5 Gbit/sec = 0,1875 GByte/sec;

Quindi mi basterà dividere la capacità dei dispositivi per la velocità di trasferimento per trovare il tempo necessario a riempire i 2 Hard Disk.
Userò un ciclo che si ripeterà e ogni volta dimezzerà la velocità.

Hdd da 500 gb;

6 Gbit/sec = 500 / (6/8) = 666 secondi = 11 minuti e 6 secondi ;
3 Gbit/sec = 500 / (3/8) = 1333 secondi = 22 minuti e 13 secondi ;
1,5 Gbit/sec = 500 / (1,5/8) = 2666 secondi = 44 minuti e 26 secondi .

Hdd da 1 TB;

Considerato che 1 GByte=2^30 e che 1TB=2^40 ;

6 Gbit/sec = (1*2^40) / (6/8*2^30) = 1365 secondi = 22 minuti e 45 secondi ;
3 Gbit/sec = (1*2^40) / (3/8*2^30) = 2730 secondi = 45 minuti e 30 secondi ;
1,5 Gbit/sec = (1*2^40) / (1,5/8*2^30) = 5461 secondi = 1 ora 31 minuti 1 secondo .

L’esercizio non richiede l’inserimento di dati dall’utento o la generazione di numeri casuali ma assegna velocità stabilite e dimensioni stabilite. Il risultato dell’operazione sarà espressa in secondi e quindi poi passerò alla trasformazione in ore, minuti e secondi.

Variabili:

L’esercizio non richiede l’inserimento di dati dall’utente o di generare numeri casuali ma i valori sono prestabiliti quindi come input userò la variabile che contiene la velocità e saràdi tipo float in quanto saranno valori con la virgola.
Userò il tipo intero per tutte le altre variabili perché i decimali dei secondi non mi sevono.

velocita : di tipo float (a cui assegnerò di volta in volta la velocità per il calcolo); Input;
i : di tipo float (che userò come contatore che mi permetterò di uscire dal ciclo); Lavoro ;
hdd : di tipo int  (a cui assegno i risultati dei secondi totali per gli HDD); lavoro;
mintot : di tipo int (che userò per calcolare il resto dei minuti e le ore); lavoro;
ore : di tipo int (che uso per stampare le ore); output;
minuti: di tipo int (che uso per stampare i minuti); output;
secondi : di tipo int (che uso per stampare le ore); output;

Strumenti:

divisione;
moltiplicazione;
modulo;
pow;


Bozza Programma:

int mintot,ore,minuti,secondi,hdd,i;
float velocita;
           
i=1;
velocita=6;
printf(“Per fare un backup di un disco da 500 Gb occorrono : \n\n”);
do
{
hdd=500/(velocita/8);
secondi=hdd%60;
mintot=hdd/60;
minuti=mintot%60;
ore=mintot/60;
printf ("%d ore : %d minuti : %d secondi - Alla velocita' di %.2f Gbit/sec \n" ,ore,minuti,secondi,velocita);
i++;
velocita=velocita/2;
}          
while (i<=3);
i=1;
velocita=6;
printf("\n\nPer fare un backup di un disco da 1 TByte occorrono : \n\n");
do
{
hdd=(1*pow(2,40))/(velocita/8*pow(2,30));
secondi=hdd%60;
mintot=hdd/60;
minuti=mintot%60;
ore=mintot/60;
printf ("%d ore : %d minuti : %d secondi - Alla velocita' di %.2f Gbit/sec \n", ore,minuti,secondi,velocita);
i++;
velocita=velocita/2;
}
while (i<=3);


Codifica in linguaggio C:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main ()

{
            int mintot,ore,minuti,secondi,hdd,i;
            float velocita;
           
            i=1; // variaile per il controllo di uscita dal ciclo
            velocita=6; // parto dai 6 Gbit all secondo
           
            printf("Per fare un backup di un disco da 500 Gb occorrono : \n\n");

            do
                        {
                                   hdd=500/(velocita/8);
                                   secondi=hdd%60;
                                   mintot=hdd/60;
                                   minuti=mintot%60;
                                   ore=mintot/60;
                                   printf ("%d ore : %d minuti : %d secondi - Alla velocita' di %.2f Gbit/sec \n", ore,minuti,secondi,velocita);
                                   i++;
                                   velocita=velocita/2;
                        }         
            while (i<=3); // il ciclo si ripete fino a quando i è minore o uguale a 3

            i=1; //reimposto il contatore per il ciclo a 1
            velocita=6; // reimposto la velocita a 6 gbit/sec
            printf("\n\nPer fare un backup di un disco da 1 TByte occorrono : \n\n");

            do
                        {
                                   hdd=(1*pow(2,40))/(velocita/8*pow(2,30));
                                   secondi=hdd%60;
                                   mintot=hdd/60;
                                   minuti=mintot%60;
                                   ore=mintot/60;
                                   printf ("%d ore : %d minuti : %d secondi - Alla velocita' di %.2f Gbit/sec \n", ore,minuti,secondi,velocita);
                                   i++;
                                   velocita=velocita/2;
                        }
            while (i<=3);
                       
            return 0;
}



Diagramma di Flusso (Algobuild):


ESER. INFORMATICA - ESERCIZIO 4

ESERCIZIO 4

Si supponga che un dispositivo trasferisca dati ad una velocità di 10 MBIT/sec calcolare il tempo necessario per trasferire il contenuto di un CD di un DVD e di un Blue Ray.

Prima di tutto recupero le capacità dei supporti:

CD-ROM = 700 MByte;
DVD = 4,7 GByte;
Blu-Ray = 25 GByte.

Considerato che : 1 byte = 8 bit -> 10 Mbit/sec = 1,25 Mbyte/sec e che 1 MByte=2^20 e che 1 GByte= 2^30;
non devo far altro che dividere la capacità dei tre supporti per la velocità in Mbyte/sec e quindi;

CD-ROM 700 Mbyte = (700*2^20) / (1,25*2^20) = 560 secondi = 9 minuti e 20 secondi ;

DVD = 4,7 GByte = (4,7*2^30) / (1,25*2^20) = 3,76*2^10= 3850 secondi = 1 ora 4 minuti e 10 secondi;

Blu-ray = 25 GByte = (25*2^30) / (1,25*2^20) = 20*2^10 = 20480 secondi = 5 ore 41 minuti 20 secondi;

Troverò prima i secondi totali e poi passerò al calcolo delle ore, minuti e secondi.

Variabili :

L'esercizio non richiede l'inserimento di un dato dall'utente o la generazione di un numero casuale ma assegna una velocità e una dimensione prestabiliti. Non utilizzerò quindi variabili di input ma solo di lavoro e di output. Userò solo variabili di tipo intero perché i decimali dei secondi non mi servono.

cdrom – di tipo int  (a cui assegno i secondi necessari a riepirlo); variabile di lavoro;
dvd – di tipo int (a cui assegno i secondi necessari a riempirlo); variabile di lavoro;
bluray – di tipo int (a cui assegno i secondi necessari a riempirlo); variabile di lavoro;
mintot – di tipo int (che utlizzo per trovare le ore e i minuti residui); variabile di lavoro;
ore – di tipo int (che utlizzo per la stampa in output delle ore); variabile di output;
minuti – di tipo int (che utilizzo per la stampa in output dei munuti); variabile di output;
secondi – di tipo int (che utlizzo per la stampa in output dei secondi); variabile di output;

Strumenti:

divisione;
moltiplicazione;
modulo;
pow(2,20);

Bozza programma:

int mintot,ore,minuti,secondi,cdrom,dvd,bluray;

cdrom=700 / 1,25;
dvd=(4.7*pow(2,30)) / (1.25*pow(2,20));
bluray=(25*pow(2,30)) / (1.25*pow(2,20));

secondi=cdrom%60;
mintot=cdrom/60;
minuti=mintot%60;
printf("%d minuti : %d secondi ci vogliono per riempire un CD da 700 MByte \n\n", minuti,secondi);

secondi=dvd%60;
mintot=dvd/60;
minuti=mintot%60;
ore=mintot/60;
printf("%d ore : %d minuti : %d secondi ci vogliono per riempire un DVD da 4,7 GByte \n\n", ore,minuti,secondi);
           
secondi=bluray%60;
mintot=bluray/60;
minuti=mintot%60;
ore=mintot/60;
printf("%d ore : %d minuti : %d secondi ci vogliono per riempire un Bluray da 25 GByte \n\n", ore,minuti,secondi);


Codifica in Linguaggio C:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()

{
            int mintot,ore,minuti,secondi,cdrom,dvd,bluray;
                                                          
            //qui faccio le operazioni e trovo i secondi totali necessari a riempire i supporti
            cdrom=700/1.25;
            dvd=(4.7*pow(2,30))/(1.25*pow(2,20));
            bluray=(25*pow(2,30))/(1.25*pow(2,20));
           
            printf("Alla velocita' di trasferimento di 10Mbit/sec ci vogliono : \n\n");
           
            // qui faccio la procedura per calcolare il tempo del CDrom         in minuti e secondi
            secondi=cdrom%60;
            mintot=cdrom/60;
            minuti=mintot%60;
           
            printf("%d minuti : %d secondi per riempire un CD da 700 MByte \n\n", minuti,secondi);
           
            // qui faccio la procedura per calcolare il tempo del DVD in ore,minuti e secondi
            secondi=dvd%60;
            mintot=dvd/60;
            minuti=mintot%60;
            ore=mintot/60;
            printf("%d ore : %d minuti : %d secondi per riempire un DVD da 4,7 GByte \n\n", ore,minuti,secondi);
           
            // qui faccio la procedura per calcolare il tempo del Bluray in ore,minuti e secondi
            secondi=bluray%60;
            mintot=bluray/60;
            minuti=mintot%60;
            ore=mintot/60;
            printf("%d ore : %d minuti : %d secondi per riempire un Bluray da 25 GByte \n\n", ore,minuti,secondi);
            return 0;        
                       

}


Diagramma di Flusso (Algobuild):






































ESER. INFORMATICA - ESERCIZIO 3

ESERCIZIO 3

Se la velocità di trasferimento di un dispositivo è di 1Gbit/sec trasformarla in : KByte/min,  GByte/ora, Gbit/ora, GByte/min e Gbit/min.

Per prima cosa passo subito a trasformare il Gbit/sec in Gbit/min e Gbit/ora e quindi mi basterà moltiplicare per 60 per i minuti e 3600 per le ore. Quindi 1Gbit/sec = 60 Gbit/min = 3600 Gbit/ora.

Per trasformare invece da Gbit a KByte e GByte posso iniziare a considera che;

1 byte = 8 bit ;

Quindi mi basterà dividere per 8 per trovare i GByte e quindi 1 Gbit = 0,125 GByte e poi moltiplicare per 60 per i minuti e per 3600 per le ore. Quindi 1 Gbit/sec= 7,5 GByte/min = 450 GByte/ora.

Per calcolare invece i Kbyte/min posso iniziare a considerare che si lavora sempre con numeri binari e quindi multipli di 2. Quindi :

1 KB = 2^10 = 1024 Byte
1 MB = 2^20 = 1048576 Byte
1 GB = 2^30 = 1073741824 Byte

Quindi 1GByte = 1048576 Kbyte (2^30/2^10=2^20)  e quindi 0,125 Gbyte/sec = 131072 Kbyte/sec. Infine mi basterà moltiplicare per 60 per i minuti e quindi 131072 KByte/sec = 7864320 KByte/min.

Variabili:

L'esercizio non richiede di acquisire dati dall'utente o di generare numeri casuali, ma assegna un numero di partenza (1 Gbit/sec), quindi non mi serviranno variabili di input ma solo di output. Mi Serviranno variabili di tipo float in quanto ci saranno numero con i decimali e numeri che superano lo spazio previsto per i numeri di tipo int (2^16=65536 cioè da -32768 a 32767).

gbitora (Gbit/ora) tipo float : output;
gbitmin (Gbit/min) tipo float : output;
gbytemin (GByte/min) tipo float : output;
gbyteora (GByte/ora) tipo float : output;
kbytemin (KByte/min) tipo float : output;

Strumenti:

divisone;
moltiplicazione;
pow(2^20);

Bozza programma;

float gbitsec,kbytemin,gbyteora,gbitmin,gbytemin,gbitmin;
gbitmin=1*60;
gbitora=1*3600;
gbytemin=0.125*60;
gbyteora=0.125*3600;
kbytemin=0.125*(pow(2,20))*60; 
printf (“1 gbit/sec sono : %f Gbit/minuto ; %f Gbit/Ora ; %f GByte/min ;  %f GByte/ora ; %f KByte/min” ,             gbitmin,gbitora,gbytemin,gbyteora,kbytemin);


Codifica in Linguagio C:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()

{
            float gbitsec,gbitmin,gbitora,gbytemin,gbyteora,kbytemin;
           
            gbitmin=1*60;
            gbitora=1*3600;
            gbytemin=0.125*60;
            gbyteora=0.125*3600;
            kbytemin=0.125*(pow(2,20))*6;
            printf ("1 Gbit/sec sono : %.2f Gbit/minuto ; %.2f Gbit/Ora ; %.2f GByte/min ;\n\n %.2f             GByte/ora ; %.2f KByte/min \n" ,gbitmin,gbitora,gbytemin,gbyteora,kbytemin);
            return 0;
}



Diagramma di Flusso (Algobuild):