martedì 21 settembre 2010

Informatica-Dai Diagrammi A Blocchi al linguaggio C++

I Diagrammi A Blocchi (DAB), sono spesso utilizzati per rappresentare graficamente gli algoritmi.

Un DAB può essere composto da 5 tipi di blocchi elementari;

   1. Blocco inizio
   2. Blocco di I/O (parallelogramma)
   3. Blocco di elaborazione (rettangolo)
   4. Blocco di controllo(rombo)
   5. Blocco di fine

Facciamo un esempio di progettazione di un programma, che scambi il contenuto di 2 variabili:
  1. Per prima cosa valutiamo quante variabili ci servono
  Ci servono le 2 variabili da scambiare, e una variabile di appoggio per non perdere il contenuto di una delle 2:
  1. variabile x
  2. variabile y
  3. variabile app
     2. Il secondo passo sarà la costruzione del diagramma a blocchi
  

     3. A questo punto potremmo scrivere lo pseudo codice
  1. INIZIO
  2. Leggi x;
  3. Leggi y;
  4. Copia il contenuto di x in app
  5. Copia il contenuto di y in x
  6. Copia il contenuto di app in y
  7. Mostra x;
  8. Mostra y;
  9. FINE
    4. Alla fine possiamo scrivere il codice C++


/* Specifiche: questo algoritmo scambia il contenuto di due
variabili x ed y dato in input da tastiera e mostra il
contenuto invertito*/
//dice al compilatore di usare la lista comandi iostream.h
#include <iostream.h>

//chiama la funzione main che da inizio al programma
main ()
//apre il blocco di istruzioni
{
  //dichiara le variabili intere x, y, app
  int x, y, app;
  //mostra all'utente user un messaggio
  cout << "!!!!SCAMBIA IL CONTENUTO DI 2 VARIABILI x ED y!!!! \n";
  //chiede all'utente user di inserire un numero
  cout << "Inserisci un numero nella variabile x: ";
  //inserisce il numero dato in INPUT da tastiera nella variabile x
  cin >> x;
  //chiede all'utente user di inserire un numero
  cout << "Inserisci un valore mella variabile y: ";
  //inserisce il numero dato in INPUT da tastiera nella variabile y
  cin >> y;
  //mostra all'utente user i numeri che ha inserito
  cout << "Il numero inserito nella variabile x è " << x
  cout << " e il numero inserito nela variabile y è " << y <<"\n";
  //assegna alla variabile app il contenuto della variabile x
  app = x;
  //assegna alla variabile x il contenuto della variabile y 
  x = y;
  //assegna alla variabile y il contenuto della variabile app
  y =app;
  //mostra all'utente user il contenuto delle variabili invertito
  cout << "Il valore contenuto nella variabile x è " <<x;
  cout << " e il valore contenuto nella variabile y è " << y;
  cout << " \n ";
  //mostra all'utente user un messaggio
  cout << "                  !!!FINE!!!";

Informatica-Dati e Variabili

Nella resltà un problema ha sempre dei dati che elaborati in un certo modo portano a una soluzione soluzione; in informatica, in metodo che ci permette di elaborare i dati è l'algoritmo e i dati da elaborare sono le variabili.
Le variabili sono come dei contenitori, che si trovano nella memoria del nostro esecutore e possono essere letti, modificati e cancellati, a seconda delle nostre esigenze.
Consideriamo un problema molto semplice come la somma di 2 numeri; le variabili che ci servono sono rappresentate dai due numeri e dalla variabile somma; chiamiamo i nostri 2 numeri num1 e num2.
  1. Inseriamo il valore in num1
  2. Inseriamo il valore in num2
  3. In somma inseriamo la somma tra num1 e num2
  4. Leggiamo la variabile somma
Potremmo anche paragonare le variabili a 2 scatole contenenti un certo numero di palline. Potremmo procedere anche in un altro modo per fare la somma, cioè potremmo trasferire tutte le palline della scatola num2 nella scatola num1.
Questo è un altro metodo di risoluzione, valido quanto il primo, ma che non ci permette di conservare i valori delle variabili che vengono sovrascritti.

Informatica-Linguaggi di programmazione

Un linguaggio è un insieme di segni e regole volti a permettere la diffusione di informazioni.

Un linguaggio di programmazione è un linguaggio formale, dotato di un lessico, di una sintassi e di una semantica.

Per lessico intendiamo l'insieme delle locuzioni che compongono il linguaggio, per sintassi si intendono le regole che stabiliscono la correttezza formale delle istruzioni, e con la semantica si prende in considerazione il significato delle istruzioni.

I linguaggi utilizzati in informatica possono essere ad basso e ad alto livello; i primi sono molto vicini al linguaggio macchina, infatti, sono in rapporto 1:1 con le istruzioni macchina, i secondi sono molto potenti e complessi, e hanno un rapporto 1:N con le istruzioni macchina.
Entrambi i linguaggi devono essere tradotti in istruzioni macchina; per fare ciò abbiamo bisogno di un traduttore, che può essere un interprete o un compilatore.
La differenza tra questi 2 traduttori è che il primo, traduce le istruzioni una alla volta a mano a mano che vengono impartite, mentre il secondo traduce l'intero algoritmo al termine della sua stesura.
Un altro tipo di linguaggio è lo pseudocodice, questo non è un vero e proprio linguaggio di programmazione, ma è piuttosto un linguaggio di progettazione, che può sostituire i diagrammi di flusso.
Questo linguaggio non ha sintassi, semantica e lessico ben definiti, ma variano a seconda del programmatore.

I linguaggio che prenderemo in considerazione è il Linguaggio C++, che è un linguaggio ad alto livello e compilato.
Per compilare i programmi io uso queste applicazioni:
Su WINDOWS:  Dev C++
Su KUBUNTU/UBUNTU o altri sistemi Linux g++ (consultare la guida all'installazione del proprio sistema)

Informatica-Esecutori e algoritmi

L'informatica, cioè l'informazione automatica, è lo studio di algoritmi che descrivono e trasformano l'informazione.
Gli algoritmi sono un insieme di istruzioni necessarie a risolvere un problema.
Un algoritmo deve essere eseguito da un esecutore, cioè da colui che segue le istruzioni di un dato algoritmo.
Un esecutore, quindi, non sa fare altro che eseguire le istruzioni date dal programmatore.
Dato un problema non è detto che ci sia una sola soluzione, sta a noi stabilire quella migliore, a seconda del numero di istruzioni e delle risorse disponibili.
Un esempio pratico, al di fuori dell'ambito informatico, è la cottura della pasta; un esecutore dotato di intelligenza saprebbe eseguire l'operazione senza la necessità di ulteriori istruzioni, ma un esecutore ideale (che imiti il comportamento di un calcolatore) ha bisogno di seguire un algoritmo e di avere alcune informazioni.
Le informazioni necessarie potrebbero essere:
  • Quantità di acqua necessaria alla cottura
  • Quantità di sale 
  • Quantità di pasta da cuocere
  • Tempo di cottura
Un possibile algoritmo è il seguente:
  1. Prendi una pentola
  2. Metti 1 litro di acqua nella pentola
  3. Metti 5 g di sale nell'acqua
  4. Accendi il fornello
  5. Metti la pentola sul fornello
  6. Attendi che l'acqua abbia raggiunto i 100°
  7. Metti 500 g di pasta nell'acqua
  8. Attendi 10 minuti
  9. Spegni il fornello
  10. Scolare l'acqua di cottura
Questo algoritmo potrebbe non essere il miglior metodo di risoluzione del problema, ma è certamente un metodo funzionante, perché le istruzioni rispettano le 4 proprietà fondamentali degli algoritmi:
  1. Le istruzioni devono essere finite
  2. Le istruzioni devono essere eseguibili
  3. Le istruzioni devono portare ad un risultato
  4. Le istruzioni non devono essere ambigue
Ci sono inoltre 2 errori da non compiere, perché il nostro algoritmo porti al risultato desiderato: gli errori di sintassi, e gli errori di semantica.
L'errore di sintassi si verifica quando sbagliamo la forma dell'istruzione, cioè non rispettiamo la sintassi stabilita dal linguaggio in uso; nel nostro caso abbiamo usato l'italiano e un errore di sintassi consisterebbe in un errore grammaticale, per cui l'algoritmo non verrebbe eseguito.
ES. egni il fornello  Questa istruzione è incomprensibile perché non corretta grammaticalmente

L'errore di  semantica è più difficile da individuare, perché si verifica quando è sbagliato il significato dell'istruzione, che resta eseguibile, ma non porta al risultato desiderato.
ES. 
  1. Prendi una pentola
  2. Metti 1 litro di acqua nella pentola
  3. Metti 5 g di sale nell'acqua
  4. Spegni il fornello      Questa operazione è eseguibile, ma l'algoritmo non porterà al risultato
  5. Metti la pentola sul fornello
  6. Attendi che l'acqua abbia raggiunto i 100°
  7. Metti 500 g di pasta nell'acqua
  8. Attendi 10 minuti
  9. Spegni il fornello
  10. Scolare l'acqua di cottura

lunedì 20 settembre 2010

Istruzioni per l'uso

Salve a tutti,
ho creato questo blog come supporto  a una piccola attività di ripetizioni private, che ho deciso di intraprendere.
Pubblicherò i lavori che ho realizzato durante i miei studi e vari appunti.
Spero di poter essere utile anche ad altri utenti.
Buona lettura e a presto!