Crea sito

Algoritmi e Flow-Chart

"Imparare a programmare è imparare a pensare"

( Steve Jobs ).

Algoritmi

La programmazione costituisce una parte fondamentale dell’informatica.

Infatti solo attraverso di essa si apprende la logica che ci permette di comunicare al computer le azioni da effettuare.
Il computer non dispone di una conoscenza a priori e senza il nostro aiuto non è in
grado di svolgere alcuna operazione.

Tutto quello che vogliamo che esso compia deve essere specificato nei minimi dettagli; in altre parole è compito del programmatore trasmettere i termini del problema al computer insieme con le operazioni da eseguire; solo a questo punto l’utente può richiedere alla macchina di svolgere una determinata azione.
Il terminie di algoritmo deriva dal nome di un matematico arabo Al-Khuwarizmi, vissuto nel IX secolo. Quando ci troviamo di fronte ad un problema, tentando di sviluppare un procedimento di soluzione cerchiamo l’algoritmo; cioè

DEFINIZIONE di Algoritmo
 "L’algoritmo è un insieme di operazioni (non solo di natura matematica) che portano alla soluzione di un problema."
L’algoritmo deve possedere caratteristiche di completezza e logicità: deve prevedere
ogni azione necessaria al raggiungimento della soluzione e la sequenza delle
operazioni deve rispettare la logica del problema.

Diagrammi di flusso o flow-chart

 ESCAPE='HTML'

Struttura sequenziale

Esempio di struttura sequenziale

Scriviamo l'algoritmo di un programma che permetta all'utente di inserire i valori di A e B e visualizzi sullo schermo il prodotto dei due numeri.

Algoritmo del prodotto.

Inizio

definiamo  A, B, C di tipo intero

leggi A

leggi B

assegna a C il risultato del prodotto C=A*B

stampa C

fine

Selezione binaria o booleana

selezione-binaria ESCAPE='HTML'

Selezione multipla

selezione multipla ESCAPE='HTML'

Ordinamento di tre numeri con l'if...else

Ordiniamento di tre numeri inseriti dall'esterno.

Il programma chiede all'utente di inserire tre numeri a piacere e li ordinera' in modo crescente.

Questo programma puo essere realizzato con l'istruzione If... else introducendo una variabile ausiliare di supporto che abbiamo chiamato inter, cioe' valore intermedio tra i valori inseriti.

Il primo numero inserito lo abbiamo chiamato A e lo abbiamo posto uguale al valore massimo max, il secondo numero lo abbiamo chiamato B e lo abbiamo posto  uguale al valore minimo min, il terzo numero lo abbiamo chiamato C e lo abbiamo posto uguale al valore intermedio inter.

I tre if...else  sono necessari per verificare che i valori min, inter, e max siano ordinati e visualizzati. 

Dopo aver compilato il programma e averlo eseguito  otteniamo il seguente Output del programma sullo schermo.

Istruzione If...Else con operatore &&

Scriviamo adesso un programma che permette all'utente di inserire un numero dall'esterno. Se il numero inserito è compreso in un intervallo (nel nostro esempio il numero deve essere maggiore di 0 e minore di 10) dà la stampa in output " Bravo! hai inserito un numero valido" altrimenti scrive sullo schermo "Il numero inserito non è valido".

Ciclo FOR

Lo schema di iterazione è uno schema in cui un’azione o un gruppo di azioni
può essere ripetuta un numero di volte finito o infinito.

Nella risoluzione di un problema può essere necessario ripetere un insieme di operazioni elementari
(LOOP = CICLO) fino a quando non si raggiunge una determinata condizione.

Il ciclo FOR esegue una iterazione finita in quanto l'iterazione ha un inizio (esempio i=0) ha una fine (esempio i<=10) ed un incremento i++

la sua struttura e':

 

for ( i=0; i<=10:  i++)

{

esegui istruzione n;

}

 

in questo caso l'istruzione n verra' ripetuta undici volte perche' dobbiamo incrementare la variabile i dal valore zero al valore uguale a 10.

Programma con il for che scrive dieci volte ciao

#include<conio.h>
  #include<stdio.h>
   //Prof.ssa Maria Rosa Malizia
  
  main()
  {
    int i;
    printf("\nprogramma che stampa dieci volte ciao\n");
       for (i=1;i<=10;i++) 
  
        {
        printf("ciao\n");
       
              
          }
         
        getch();
   }

Dopo aver scritto il programma precedente avremo il seguente output:

Istruzione while e do...while

Iterazione con controllo di uscita o di coda o do ... while

controllo di coda ESCAPE='HTML'

Cioè: ripeti la sequenza di comandi specificata, finchè condizione non diventa vera

(ripeti…finchè in italiano è ambiguo, perché a volte assume il significato di mentre;

in questo caso invece qui corrisponde all’inglese repeat … until).

In altre parole ripeti le istruzioni dentro le parentesi graffe fintantoche e' verificata la condizione.

Con il do...while il programma viene eseguito almeno una volta perchè la verifica della condizione e' in coda.

Esempio con il do..while

Supponiamo adesso di voler simulare una cassa del supermercato, che chieda di inserire il valore del prodotto comparato, esegue lo sconto del 10 per cento sul totale e visualizza il totale scontato del 10 per cento.

Per far ciò impostiamo il programmo con l'istruzione do...while e terminiamo la somma dei prodotti inserendo lo zero.

Alla fine il programma visualizzera' la somma totale, lo sconto del dieci per cento e il prezzo totale scontato.

Ciclo While o ciclo con controllo di testa

Lo schema di iterazione è uno schema in cui un’azione o un gruppo di azioni
può essere ripetuta un numero di volte finito o infinito. Nella risoluzione di un
problema può essere necessario ripetere un insieme di operazioni elementari
(LOOP = CICLO) fino a quando non si raggiunge una determinata condizione.

while ESCAPE='HTML'

Lo schema di iterazione indefinita (cioè non conosciamo a priori il numero di
ripetizioni necessarie) viene anche detto con controllo di testa o con controllo di
entrata. In questo caso se all’inizio del ciclo la condizione è subito FALSA il ciclo
non viene mai eseguito. Esso ha il seguente schema:

struttura while ESCAPE='HTML'

Esempio con il while

Questo programma stampa a video tutti i numeri compresi tra zero e dieci attravero un ciclo while. 

Un ciclo while e' anche detto ciclo con controllo di testa, in quanto la condizione del test ,cioe' la condizione del while , e' inserita in testa alle istruzioni contenute nelle parentesi graffe del ciclo while.

Questo ciclo si differenzia dal ciclo DO..WHILE  ( cioe' con controllo di coda) perche' in questo caso se la condizione del test e' subito falsa il programma non viene mai esesguito.

Output del programma della media con il while

La funzione gotoxy

Il software dev C non ha tutte le istruzioni che aveva il turbo C della Borland.

Per i nostalgici di questa funzione dico che è possibile utilizzarla ancora se scriviamo una nuova funzione con il dev C ed eventualmente la salviamo nella nostra libreria personale e la richiamiamo tutte le volte che vogliamo. Come si realizza una libreria personale verrà trattato in un altro modulo all'interno di questo sito.

Scriviamo quindi la funzione

gotoxy(int column, int line)

per muovere le scritture sullo schermo.

Questa funzione e' molto utile per abbellire la nostra console di uscita o il nostro output.

Vediamo il seguente programma che visualizza tre scritture posizionate in tre coordinate distinte che possiamo variare a piacere:

 

#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<dos.h>

using namespace std;

void gotoxy( int column, int line ) {
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord);
}

main() {
gotoxy(15,10);
cout<<"Elettronicadoc";
gotoxy(30,14);
cout<<"Elettronicadoc";
gotoxy(15,20);
printf("GRAZIE A TUTTI I FANS DI ELETTRONICADOC");
getch();
}

Altro metodo per realizzare la funzione gotoxy in Dev C++

Eseguiamo adesso un altro metodo per utilizzare la funzione gotox,y del vecchio C della borland, utilizzando il software Dev C++.

Scriviamo quindi due scritte con la funzione printf spostandoci nelle coordinate dichiarate dalla funzione gotoxy.

 

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>

void gotoxy(int x, int y) {
                for (int i = 0; i < y; i++) {
                printf("\n");
                }
                for (int i = 0; i < x; i++) {
                printf(" ");
                }
                }
main()
{     gotoxy(20,10);
      printf("CIAO A TUTTI");
      gotoxy(30,5);
      printf("da Elettronicadoc");
      getch();
      }

L'output in uscita del precedente programma e' il seguente:

Introduciamo il colore sulla schermata.

Coloriamo lo schermo con il Dev C++.

Programma svolto in Dev C++

Vediamo adesso come scrivere un programma che visualizzi la scritta ITIS con sfondo e testo di colore diverso

#include <stdio.h>
#include <conio.h>//per l'istruzione getch()
#include <stdlib.h>//per l'istruzione system
main()
{

system("color 2a"); //colore verde sfondo e verde chiaro testo
 
  printf("\n\n\n\n\n\n\n");
  printf("\t\tXX  XXXXXX   XX     XXX   \n");
  printf("\t\tXX    XX     XX    X      \n");
  printf("\t\tXX    XX     XX    X      \n");
  printf("\t\tXX    XX     XX    X      \n");
  printf("\t\tXX    XX     XX     XXX   \n");
  printf("\t\tXX    XX     XX        X  \n");
  printf("\t\tXX    XX     XX        X  \n");
  printf("\t\tXX    XX     XX        X \n");
  printf("\t\tXX    XX     XX     XXX   \n");
  printf("\n\n\thttp:\\www.elettronicadoc.altervista.org");
  getch();
  system("cls");
 
  system("color 2e");//colore verde sfondo e giallo testo
 
  printf("\n\n\n\n\n\n\n");
  printf("\t\tXX  XXXXXX   XX     XXX   \n");
  printf("\t\tXX    XX     XX    X      \n");
  printf("\t\tXX    XX     XX    X      \n");
  printf("\t\tXX    XX     XX    X      \n");
  printf("\t\tXX    XX     XX     XXX   \n");
  printf("\t\tXX    XX     XX        X  \n");
  printf("\t\tXX    XX     XX        X  \n");
  printf("\t\tXX    XX     XX        X \n");
  printf("\t\tXX    XX     XX     XXX   \n");
  printf("\n\n\thttp:\\www.elettronicadoc.altervista.org");
  getch();

}