Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

RELAZIONE SUL PROGETTO DI UN PROGRAMMA CON GESTIONE DEGLI ERRORI

tecnica



Relazione sul progetto di un

programma con gestione degli errori.


1. Descrizione del programma


Il programma errori.exe calcola l'ennesima potenza di una matrice di reali, quadrata (ovvio) e di ordine cento. N è un valore naturale scelto dall'utente.

Fin qui tutto facile, ma ciò che 242j94c di veramente interessante fa questo programma è compiere un salvataggio automatico dei risultati con una certa frequenza. In questo modo, dovesse il programma terminare la sua elaborazione prima di aver trovato il risultato voluto, è possibile riprendere l'elaborazione dall'ultimo risultato intermedio salvato. Questa è, naturalmente, una gestione degli errori backward o all'indietro.


Le componenti del programma sono:

1) Il file di programma 'errori.exe', indispensabile.




2) Il file di testo 'matrice.txt' contiene la matrice da elevare, indispensabile e modificabile dall'utente.


3) Il file di testo 'result.txt' contiene il risultato, viene creato dal programma quando ha terminato    l'elaborazione. I risultati di precedenti calcoli devono essere spostati o rinominati o verranno distrutti dalla successiva esecuzione.


4) Il programma di utilità casual.exe crea una matrice reale di ordine cento contenente valori casuali e la mette in 'matrice.txt'. Distrugge il contenuto precedente di questo file.


5) Tre file di gestione del controllo degli errori, flag.bin, backa.bin e backb.bin. Il primo di questi è indispensabile. Dovesse mancare crearlo con un editor di testo mettendoci dentro uno zero. Gli altri due sono creati dal programma durante la sua esecuzione.


6) Questa relazione.


2. Descrizione dell'interfaccia


L'interfaccia del programma è semplice:

Se, alla partenza, non viene rilevato alcun procedimento interrotto viene chiesto il fattore di elevamento a potenza, che deve essere un numero intero maggiore o uguale a zero.

Se il programma si accorge che l'ultima operazione è stata interrotta prima del tempo avverte l'utente e chiede se desidera continuare il procedimento interrotto o iniziarne uno nuovo.

Se il file di controllo flag.bin non è presente o ha valori non congrui il programma avverte ed esce. In questo caso vedere punto 5 del paragrafo precedente.

L'elaborazione vera e propria viene segnalata mostrando il numero dei passi da compiere. E' possibile se richiesto dall'utente, che il programma attenda conferma, premendo un tasto, prima di eseguire ogni passo.

Finito il lavoro, l'utente viene avvertito e, dopo che è stato premuto un tasto, si torna al sistema operativo.


3. Effettivo funzionamento del programma e funzioni usate


Innanzitutto, il programma si appoggia pesantemente ai seguenti file:


Di fondamentale importanza è il file flag.bin. Esso contiene uno dei tre possibili valori:

Non ci sono stati errori nella precedente esecuzione, si può procedere normalmente.

La precedente elaborazione non è terminata regolarmente. Il risultato intermedio da riprendere, se l'utente vuole proseguire è nel file backa.bin.

Come sopra, solo che si riprende dai risultati di backb.bin.


2) Matrice.txt contiene la matrice di partenza. Essa viene prelevata all'inizio della fase regolare del programma (cioè se non vengono rilevati precedenti errori). Il suo contenuto è poi travasato in un array bidimensionale in memoria, su cui saranno poi effettivamente eseguite le operazioni.


3) Backa.bin e backb.bin contengono i risultati intermedi dell'elaborazione. Tali risultati vengono salvati alternativamente nell'uno e nell'altro. Questo nel caso il programma si blocchi proprio mentre stiamo salvando in uno di questi file. In tal caso si usa l'altro che contiene un risultato sicuramente corretto.


4) Result.txt contiene il risultato. In memoria è presente una seconda matrice che contiene i risultati parziali dell'elevamento a potenza della prima. Quando i passi sono stati compiuti tutti, in questa è il risultato, che viene copiato nel file in questione.


Come già accennato, l'algoritmo che segue questo programma è il seguente:


a) Controllare il contenuto del file flag.bin. Se è zero continuare con l'esecuzione normale (vai a b), se è uno o due c'è stato un errore, vai a c. Altrimenti il file è corrotto, uscita.


b) Chiedere all'utente il fattore di elevamento, copiare il contenuto di matrice.txt in memoria (l'array si chiama moby) e procedere all'elevamento vero e proprio(d).


c) Recuperare dal file indicato in flag.bin (backa.bin se uno o backb.bin se due) il risultato salvato e metterlo nell'array moby, recuperare anche il fattore rimasto. Se l'utente dà l'ok proseguire con l'elevamento(d), altrimenti vai a b.


d) Se il fattore è zero copiare la matrice identità nell'array dick proseguire (e).


e) Copiare il contenuto di moby nell'array dick, proseguire(f).


f) Finché il fattore è maggiore di uno moltiplicare moby per dick (cioé A^n=A*A^n-1), salvare il risultato intermedio in acab (array di supporto), quello finale in dick e decrementare il fattore di elevamento. Ogni [?] passi eseguire g. Poi proseguire (h).


g) Salvare il contenuto di dick e il fattore residuo in backa.bin o in backb.bin, alternativamente, scrivere 1 o 2 in flag.bin e tornare ad f.


h) Copiare il contenuto di dick in result.txt, scrivere zero in flag.bin e egnalare la riuscita. Uscire.

4. Funzioni del programma


File errore.cc.


#include <fstream.h>

#include <conio.h>


Variabili e costanti globali


fstream file;

const int m_size=100;

const int svfreq=10;

int scelta;

char decisione;

double numero;

double moby[m_size][m_size];

double dick[m_size][m_size];

double acab[m_size][m_size];


void pausa()

Attende la pressione di un tasto.



void eleva(int n)

Riceve in ingresso il fattore cui elevare la matrice ed esegue sia i calcoli effettivi che il salvataggio di sicurezza ogni tanto (il valore esatto della frequenza di salvataggio è nella costante svfreq che vale, ora coeme ora, dieci). A cose fatte si occupa anche di salvare il risultato finale.

//if

// Per cominciare copia moby in dick

for(int i=0;i<m_size;i++)

for(int j=0;j<m_size;j++)

dick[i][j]=moby[i][j];


clrscr();

cout << "Conferma passo passo(s/n)?" << endl;

scelta=getch();

if (scelta==int('s')) pippo=1;

while(iterationx>1)

//for

for(int i=0;i<m_size;i++)

for(int j=0;j<m_size;j++)

dick[i][j]=acab[i][j]; // copio i risultati finali

iterationx-=1;

// fase autosave

if(iterationx%svfreq==0)

//if


}//while

file.open("result.txt",ios::out);

for(int i=0;i<m_size;i++)

//for

file.close();

file.open("flag.bin",ios::out);

file << 0;

file.close();

}//eleva

void inizio()

Prepara l'esecuzione delle operazioni se non sono stati rilevati errori in precedenza. chiede il fattore di elevamento e copia il contenuto di matrice.txt nell'array moby.


file.close();

eleva(scelta);



int avverti()



void riprendi(int m)

Queste due funzioni preparano l'esecuzione nel caso siano stati rilevati errori, nel qual caso la matrice di partenza diventa il contenuto del file di salvataggio indicato da flag.bin, come pure il coefficente di elevamento per la matrice.


if(m==1) file.open("backa.bin",ios::in);

else file.open("backb.bin",ios::in);

for(int i=0;i<m_size;i++)

for(int j=0;j<m_size;j++)


file >> scelta;

file.close();

eleva(scelta);




void main()

A seconda del valore contenuto in flag.bin la main chiama il programma giusto per cominciare le elaborazioni. Alla fine avverte l'utente del successo ed esce.


clrscr();

cout << "Lavoro terminato! La matrice risultante di trova nel file 'result.txt'" << endl;

pausa();



File casual.cc

Semplice programmino che genera una matrice di valori reali casuali compatibile con il programma errori.exe e la salva nel file matrice.txt. Genera valori tra +500 e -500.


#include <stdlib.h>

#include <fstream.h>


const int m_size=100;



void main()


file << endl;

}


file.close();





Privacy




Articolo informazione


Hits: 2646
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024