Archivi categoria: Pillole di programmazione

Articoli brevi sui linguaggi di programmazione

Pillole C++ n.3

In questa lezione parleremo delle strutture condizionali. Le strutture condizionali sono delle strutture dell’algoritmo che permettono di modificare l’esecuzione dello stesso sulla base di una o pià condizioni.
Esse sono distinte in:

  • Condizione Semplice
  • Condizione nidificata o annidata
  • Condizione Multipla

Condizione semplice

Lo svolgimento dell’algoritmo cambia sulla base di una condizione essa in termini generali di diagramma di flusso si rappresenta:

L’esempio qui mostrato non è unico. L’algoritmo nel momento in cui incontra la condizione esegue l’istruzione 1 se la condizione è verificata, l’istruzione 2 e 3 se la condizione non è verificata.
Ad esempio modifichiamo lo spezzone di flow chart in:

In termini di codifica in Linguaggio C++ si ha

if (A>B)
SOMMA:=A+B:
else
{DIFFERENZA:=A-B;
SOMMA=0;}

Da notare che il linguaggio C++ obbliga al’utilizzo delle parentesi graffe di apertura e chiusura solo nel caso in cui all’interno della condizione vero o falso indifferentemente sia presente più di un’istruzione. e virgola.

Condizioni nidificate

Molto spesso durante lo svolgimento dell’algoritmo è necessario verificare se si verificano più condizioni. Ad esempio per verificare che un numero x è interno ad un’intervallo a e b occorrono più condizioni. La struttura con condizioni nidificate proprio perchè deriva da un insieme di condizioni semplice connesse secondo quelle che sono le richieste del problema non ha una struttura unica.
un tipico esempio di una condizione concatenata è sotto riportata.

Questa struttura mostra che all’interno della prima condizione è presente un’altra condizione.
In termini di codifica C++ si ha:

if condizione
if condizione
istruzione 3
else
istruzione 4
else {
istruzione 1;
istruzione 3;
}

E’ utile notare come quando ci sono più istruzioni if .. then non sono necessarie le parentesi graffe.

Condizione multipla

Quando all’interno di un algoritmo occorre controllare che una variabile assuma una gamma finita di valori conviene utilizzare una struttura detta di condizione multipla che però risulta essere utilizzabile solo se la variabile oggetto della condizione ha un numero finito di valori interi o di tipo carattere. Non è quindi possibile a meno di manipolazioni all’interno dell’algoritmo utilizzare la condizione multipla nel C++ per controllare se una data variabile assume un range di valori.
Nel flow chart la condizione multipla si può rappresentare come tante condizioni in cascata come mostrato sotto:

La codifica in C++ di questo spezzone di codice è:

switch (variabile){
case valore 1:{
istruzione;
break;}
case valore 2:{
istruzione;
break;}
case valore 2:{
istruzione;
break;}
default:
istruzione;}

In C++ la condizione multipla prende nome di switch in quanto lè possibile controllare solo valori enumerativi e non intervalli. Infatti non è possibile controllare se una data variabile è all’interno di un intervallo numerico ma solo se assume valori precisi.

Esercizio:

Un giocatore partecipa ad un gioco a estrazione di palline puntando un importo x. A seconda del colore della pallina estratta egli realizza una vincita secondo lo scherma sotto riportato:

COLOREVINCITA
NERA0
ROSSA2 VOLTE LA PUNTATA
VERDE4 VOLTA LA PUNTATA

Questo problema ha le seguenti variabili

Input X reale, C colore pallina estratta “N”,”R”,”V” per i colori nero, rosso, verde quindi un tipo carattere
Output Vincita Reale.

L’algoritmo viene lasciato per esercizio allo studente.
La codifica in C++ è:

#include <iostream>
#include <string>
using namespace std;
char c;
float x,vincita;
int main () {
vincita=0;
cout << “Inserisci l’importo che desideri giocare” << endl;
cin >> x;
cout << endl << “Inserisci colore estratto” << endl;
cin >> c;
switch (c) {
case ‘n’:
vincita=0;
break;
case ‘r’:
vincita =2*x;
break;
case ‘v’:
vincita=4*x;
break;
default:
cout << “colore non valido” << endl;
}
cout << “Hai totalizzato vincita pari a : “;
cout <<endl<< vincita << endl;
}

In questo listato C++ è utile notare che è importante racchiudere fra apici singoli i valori di tipo char. E’ gestito anche l’errore qualora il colore inserito non sia valido.

Pillola n.2 C++

La manipolazione dei dati in C++ – Pillola 2

Nella lezione precedente abbiamo visto che la gestione dell’Input Output è delegata alla libreria iostream la quale mette a disposizione del programmatore le istruzioni cin e cout. Ora tali istruzioni sebbene utili non consentono la formattazione dell’Input e dell’Output.

Ad esempio se il risultato di una divisione fra due numeri ha un numero elevato di cifre decimali come fare per troncare ad un numero di cifre voluto il numero ?

Dobbiamo innanzitutto ricordare che i numeri reali in singola e doppia precisione in C++ sono dichiarati con float e double che la rappresentazione nel calcolatore dei numeri reali avviene in virgola mobile ovvero scrivendo il numero in notazione scientifica normalizzata.

Ad esempio il numero x=-432,334441 in notazione normalizzata si esprime come x=-0,432334441 x10E3.

Quindi il numero si compone di una mantissa parte frazionaria compressa fra 0 e 1 e da una caratteristica esponente della base 10.

Pillole Java n.1

Programmazione in Java

Il primo esempio che utilizzeremo è una classe in Java che permette di passare tramite il metodo stampa il valore di un stringa e visualizzarlo a video.

Questo esercizio è molto intuitivo e semplice e permette di apprendere alcuni concetti nell’introduzione alla programmazione in Java

Ecco il listato (la classe si deve chiamare messaggio.classe)

import java.io.*;
public class messaggio {
String msg;
void stampa(String m)
{
    System.out.println(m);
    return;
}
public static void main(String args[])
{
String scritta;
scritta=”Ciao Mondo\n”;
messaggio m;
m=new messaggio();
m.stampa(scritta);
}
}

La classe ha un attributo pubblico di nome msg una variabile di tipo stringa che conterrà un testo che viene passato attraverso il metodo stampa.

Il metodo stampa non è altro che un una funzione che riceve come parametro una stringa che nel momento in cui l’oggetto viene creato nel metodo main è possibile trasferire e quindi stampare a video.

E’ utile notare che nel metodo main abbiamo un’istanza dell’oggetto definito e istanziato grazie alle due righe di codice

messaggio m;
m=new messaggio();

Nel momento in cui viene chiamato il metodo stampa avviene la stampa a video.

Il secondo listato in Java prevede la lettura di una stringa dallo standard input la tastiera e la stampa a video del testo.

Ridefiniamo la classe messaggio in messaggio2 aggiungendo un nuovo metodo leggi() che prende un testo da tastiera e lo memorizza nell’attributo msg della classe.

Il secondo listato è:

import java.io.*;

public class messaggio2 {
String msg;
public void stampa(String m)
{
    m=msg;
    System.out.println(m);
    
    return;
}
public void leggi(String s)
{
    InputStreamReader lettore = new InputStreamReader(System.in);
    BufferedReader tastiera = new BufferedReader(lettore);
    try {
    s=tastiera.readLine();
    }
    catch (Exception e) {
        System.out.println(“\n Attenzione errore in lettura dati \n”);
    }
    msg=s;
    return;
}
public static void main(String args[])
{
String scritta=””;
int k=0;
messaggio2 m2;
m2=new messaggio2();
m2.leggi(scritta);
m2.stampa(scritta);
scritta=”\n”+scritta+”*****”;
System.out.println(scritta);
}
}

In questo caso i due metodi sono dichiarai con la clausola public per poter rendere accessibile dall’esterno della classe l’attributo msg che deve essere inizializzato con il valore letto da tastiera.

La difficoltà di questa nuova classe è la gestione dell’input che deve utilizzare il system.in ovvero l’input tramite console quello che per usare un paragone era l’istruzione “cin” del C++.

Occorre definire un InputStreamReader ovvero un oggetto della classe che associa un flusso di dati in input.

La seconda fase è quella di andare a catturare in una variabile collegata allo stream di dati in input definito, i dati una variabile buffer. Per finire occorre utilizzare il metodo readLine()

che legge dalla tastiera il valore e lo associa ad una variabile opportunamente definita.

La parte più importante è ad andare ad assegnare con la riga

msg=s;

nel metodo leggi() il valore all’attributo della classe.

Ultime considerazioni comuni è l’utilizzo delle classi del package java.io che consento l’uso delle classi per la gestione dell’input e dell’output.

Pillole di Linguaggio C++ n.1

Linguaggio C++

Il linguaggio C++ nasce come evoluzione del C ed è un linguaggio molto utilizzato in ambito scientifico e professionale. Esso è caratterizzato come tutti i linguaggi di programmazione ad alto livello di una sintassi e semantica molto rigida.
La caratteristica principale è quella di essere modulare ovvero organizzato in funzioni che svolgono compiti specifici. In C++ vi sono funzioni per la gestione dell’input/output, manipolazione di numeri, gestione stampa.Ciascun gruppo di funzione viene incluso in librerie che sono dei file che contengono le istruzioni elementari per l’uso delle funzioni. In ogni programma C++ ogni volta che occorre una funzione devo assicurarmi che essa sia inclusa nelle librerie che io dispongo all’interno del programma. Ogni libreria sarà disponibile con un nome che identifica la classe di funzione e un estensione. Ad esempio string.h è la libreria per la gestione delle stringhe.

Ambienti

Struttura di un programma C++

Un programma C++ può essere pensato e suddiviso in tre parti

intestazione o header

dichiarazione delle variabili e costanti

programma

Intestazione o header

Rappresenta l’elenco delle funzioni che devono essere disponibili all’interno del programma che stiamo creando.
Nel C++ definisco le intestazioni mediante la parola chiave include secondo la sintassi seguente:

#include <nome libreria>

posso ripetere più volte l’istruzione include per ogni libreria che mi occorre.

Dichiarazione di variabili e costanti.

Nel C++ come in tutti i linguaggi di programmazione sono ammesse variabili di tipo numerico, alfanumerico, logico. La dichiarazione di una variabile avviene secondo la sintassi generale:

tipo_dato nome variabile

ad esempio

int p dichiara un numero p intero

string cognome dichiara una variabile stringa cognome

float x dichiara una variabile reale x in singola precisione

Per dichiarare una costane si usa

la sintassi: #define nome costane valore

ad esempio #define pi greco 3.14 definisce una costante reale.

programma

Ogni programma in C++ deve essere racchiuso in una funzione nel caso più semplice

int main (){

istruzione 1

istruzione 2

}

fare molto attenzione a scrivere le variabili sempre in minuscolo o in maiuscolo fa differenza !

Inoltre terminare ogni istruzione con un punto e virgola.

Gestione dell’Input/Output

In C++ ci sono diverse librerie per la gestione dell’Input/Output le più utilizzate sono le funzioni della libreria iostream che permettono di formattare automaticamente i dati numerici.

L’istruzione di scrittura e:

cout << variabile per la stampa di un valore

cout << “messaggi” per la stampa di messaggi

Per la gestione dell’Input si usa l’istruzione cin << variabile

In C++ per poter utilizzare le funzioni cin e cout si deve dichiarare sotto la sezione #include e comunque prima della dichiarazione delle variabili e costanti la frase:

using namespeca std; per evitare di incorrere nell’utilizzo di funzioni senza qualificare la classe di cui fanno parte. Nel nostro caso la classe è std. Se non vi fosse tale dichiarazione ogni volta che utilizziamo cin o cout si deve dichiarare std:cin .. o std:cout.