Guida al Pascal

Il Pascal è un linguaggio di programmazione molto facile da comprendere e, per certi tratti, è più semplice del BASIC. Ma ora bando alle ciance e iniziamo con la programmazione vera e propria….

Prepariamo la cassetta degli attrezzi

I compilatori che si possono uttilizzare non sono molti; eccone uno gratuito:
Freepascal disponibile sia per FINESTRE :b che per LINUX e per quasi la totalità dei processori

Una volta installato e avviato si presenterà un’ interfaccia molto comprensibile.

Compariranno vari menu, ma quelli pricipali sono tre: File, Run, Compile.

Il primo è formato da New, per crere un nuovo documento di lavoro; Load-open, per aprire lavori già salvati; Save, per salvare i nostri lavori. Spesso può risultare utile conoscere il comando Destination (nel menu Compile) per decidere se compilare il programma nella Ram oppure in un file eseguibile (nome_programma.exe).

Una volta compilato il programma, però, dobbiamo eseguirlo, e perciò è necessario selezionare dal menu Run il comando Run.

Funzioni e operatori di base

La prima cosa da scrivere in un programma in PASCAL è il nome che vogliamo dare alla nostra applicazione.

Procediamo in questo modo:


PROGRAM guida_al_pascal;

L’operatore PROGRAM va sempre seguito dal nome che abbiamo scelto per il nostro codice.

Nota bene: Teniamo a mente che dopo ogni riga di codice va immesso il Punto e virgola(;), altrimenti al momento della Compilazione del codice ci verrà restituito un errore. L’unica riga di programma in cui non va scritto il punto e virgola è quella contenente il comando BEGIN che analizzeremo adesso e in altri casi particolari.

I secondi comandi che andiamo ad analizzare sono BEGIN, che serve ad iniziare l’algoritmo o procedimento risolutivo, e END, che termina l’algoritmo.(notare che END va sempre seguito dal punto e non dal punto e virgola).

Mettiamoci al lavoro.

PROGRAM guida_al_pascal; {riga di intestazione}
BEGIN {inizio programma}
procedimento risolutivo;
END. {fine programma}

Per ora tutto dovrebbe funzionare però mancano ancora degli operatori indispensabili al funzionamento del programmma che affronteremo nella prossima sezione.

NB: In questo stralcio di programma abbiamo introdotto i commenti al codice che sono racchiusi dalle parentesi graffe (non è l’unico modo di commentare il programma ma è sicuramente il più efficace… per chi non lo sapesse in Windows le graffe si aprono con alt+123 e si chiudono con alt+125)

Riassunto
In sostanza il codice scritto in Pascal può essere suddiviso in tre parti distinte:
Il BLOCCO D’INTESTAZIONE che contiene il nome del programma
Il BLOCCO DELLE DICHIARAZIONI in cui si dichiarano le variabili e la loro tipologia con il comando VAR di cui ci occuperemo ora e le costanti con il comando CONST.
La SEZIONE ESECUTIVA in cui si scrive l’algoritmo

Risolvere un problema

Per cominciare a risolvere dei semplici problemi abbiamo bisogno di introdurre un nuovo comando: VAR. Questo comando serve per definire quali sono le variabili di programma che possono essere di tre tipi:
INTEGER (numeri interi positivi e negativi)
REAL (numeri reali positivi e negativi)
BYTE (numeri interi)
WORD (numeri interi)
STRING[x] (stringa di testo; la x indica il numero di caratteri massimi che deve essere scelto da noi)

INTEGER é una categoria di numeri che vanno da -32767 a +32768. Ciò significa che se se usiamo la classe INTEGER per sommare 1 o più a 32768 (32768+1) il risultato non sarà 32769 ma bensì -32767; questo significa che ogni numero non compreso tra i suddetti estremi produce una situazione che in termini tecnici ciene chiamata overflow (traboccamento). 32768 è una costante indicata con MAXINT (massimo degli interi).

Per il momento ci limiteremo ad adoperare la classe INTEGER, le altre le tratteremo più avanti.

Supponiamo ora di voler calcolare il perimetro e l’area di un quadrato: per prima cosa dobbiamo individuare le variabili che ci serviranno per risolvere il problema. Sicuramente la prima è il lato (di cui dovremo inserire il valore da tastiera il valore da tastiera), poi ci sono il perimetro e l’area. Per cui:

PROGRAM perminetro_e_area_quadrato;
USES CRT;
VAR lato, perimetro, area: INTEGER;
BEGIN
CLRSCR;
READLN(lato);
perimetro:=lato*4;
area:=lato*lato;
WRITELN(perimetro);
WRITELN(area);
READLN
END.


NB: il suffisso +LN ordina al cursore di prepararsi a capo (WRITE–>WRITELN…); e il comando CLRSCR pulisce lo schermo ad ogni esecuzione

Per chiarire alcuni punti del programma è necessario chiarire nuovi comandi e operatori:
USES + metodo: CRT in questo caso—>TASTIERA,MONITOR;COLORI;
READLN + (nome variabile): inizializza la variabile da immettere da tastiera;
:= simile all’operatore aritmetico “=”;
WRITELN: comando che stampa a schermo ciò che è racchiuso fra parentesi; se volessimo inserirci del testo dovremmo racchiuderlo tra apici singoli;
READLN: serve per dare il tempo all’utente di leggere i risultati restituiti che altrimenti rimarrebbero sullo schermo una frazione di secondo. NB: se non si mette il punto e virgola non viene restituito errore;

Abbiamo anche introdotto uno degli operatori interi (*—>moltiplicazione);

Gli operatori della classe INTEGER sono:

  • + {somma}
  • – {differenza}
  • *  {prodotto}
  • DIV {quoziente della divisione euclidea fra due interi}
  • MOD {resto della divisione euclidea fra due interi}

NB: se in espressione sono presenti più di un operatore vengono utilizzati secondo le priorità

Esistono anche degli operatori che confrontano due numeri e restituiscono TRUE (vero) o FALSE (falso). Essi sono:

= Uguale

<> Diverso

< minore

> Maggiore

<= Minore uguale

>= Maggiore uguale

Se volessimo colorare i risultati che compaiono nel programma dovremmo ricorrere a due nuovi comandi:

TEXTCOLOR + (numero colore da 0 a 15);
TEXTBACKGRUOND + (numero colore da 0 a 7);

Essi sono da inserire prima di agni comando WRITELN a cui vogliamo colorare i risultati. ES:

......
TEXTCOLOR(0); {oppure textbackground o entrambi}
WRITELN('ciao');
TEXTBACKGROUND(4); {oppure textcolor o entrambi}
WRITELN ('riciao');
READLN
END.


Esempio pratico di programma con operatori interi

PROGRAM operatori_interi; {blocco d'intestazione}
USES CRT; {tastiera+monitor+colori}
VAR n1,n2,somma,differenza,prodotto,quoziente,resto:INTEGER; {dichiarazione delle variabili}
BEGIN {inizio programma}
CLRSCR; {clear screen}
WRITELN ('inserire il valore dei numeri');
READLN (n1,n2); {inizializiamo le variabili}
somma:=n1+n2; {somma delle due variabili}
differenza:=n1-n2; {diffrenza delle due variabili}
prodotto:=n1*n2; {prodotto delle variabili}
quoziente:=n1 DIV n2; {divisione delle variabili}
resto:=n1 MOD n2; {resto della divisione}
WRITELN ('la somma dei numeri è:',somma); {stampiamo a schermo i risultati}
WRITELN ('la diferenza dei numeri è:',differenza);
WRITELN ('il prodotto dei numeri è:',prodotto);
WRITELN ('il quoziente dei numeri è:',quoziente);
TEXTCOLOR (3); {diamo un po' di colore al resto...}
WRITELN ('il resto della divisione è:',resto); {stampiamo a schermo il resto che sarà colorato}
READLN {diamo il tempo per la lettura dei risultati}
END. {fine programma}

NB: per stampare a schermo i risultati abbiamo diviso quello che c’era fra parentesi in due parti:
una stringa di testo racchiusa tra apici;
la variabile da stampare a schermo;

Le due parti devono sempre essere separate dalla virgola

Funzioni dei numeri interi 

Le funzioni dei numeri interi non sono molte e sono semplici; motivo percui daremo solo un’infarinatura generale… Are you ready?

  • ABS: restituisce il valore assoluto;
  • SQR: quadrarto;
  • PRED: numero precedente;
  • SUC: numero successivo;

Esempio di funzioni di numeri interi

PROGRAM funzioni_intere;
USES CRT;
VAR numero,valore_assoluto,quadrato,radice_quadrata,precedente,successivo:INTEGER;
BEGIN
CLRSCR;
WRITELN ('inserire un numero');
READLN (numero);
valore_assoluto:=ABS(numero);
quadrato:=SQR(numero);
precedente:=PRED(numero);
successivo:=SUC (numero);
WRITELN ('valore assoluto=',valore_assoluto);
WRITELN ('quadrato=',quadrato);
WRITELN ('radice quadrata=',radice_quadrata);
WRITELN ('precedente=',precedente);
WRITELN (successivo=',successivo);
READLN
END.

I numeri reali

Cosa sono i numeri reali?

I numeri reali sono sempilicemente quella categoria di numeri (con cifre decimali) con intervallo che va da 2.9×10^-35 a 1.5 x 10^35. Il loro funzionamento non si discosta molto dalla categoria degli interi; infatti le differenze principali sono:

  • l’operatore “/” al posto di “DIV” per la divisione
  • non esiste la funzione “MOD” (ovvio no?)
  • i numeri vengono visualizzati in notazione scientifica (o esponenziale)
  • un po’ di funzioni in più

Esempio di codice con numeri reali

Mettiamo il caso di voler calcolare la circonferenza di un cerchio, procediamo come segue:

PROGRAM circonferenza del cerchio;
USES CRT;
VAR raggio,circonferenza:REAL;
BEGIN
WRITELN ('inserire il valore del raggio=?');
READLN (raggio);
circonferenza:=2*PI*raggio;
WRITELN ('circonferenza=',circonferenza);
READLN
END.

Commentiamo il codice assieme:

Il blocco di intestazione è sempre lo stesso, quello che è cambiato è il blocco delle variabili. Infatti le variabili sono enytrambe entrambe di tipo REAL.
Notiamo come quando eseguiamo il programma la circonferenza viene visualizzata in notazione esponenziale; ora almeno che non siate dei geni vi risulterà difficile leggere il numero, per ovviare a questo problema modifichiamo il comando WRITELN come segue:

...
WRITELN ('circonfernza=',circonferenza:10:3); ...

Ecco cosa abbiamo fatto: abbiamo assegnato alla variabile circonferenza 10 celle di memoria e 3 cifre decimali.

Naturalmente il numero di celle e cifre decimali possiamo deciderle secondo i nostri gusti personali.

NB: PI è una parola riservata del pascal che indica il pi greco, è un comando molto utile poichè risparmia al programmatore la fatica di immettere un numero con una caterba di cifre decimali 🙂
Funzioni dei numeri reali

  • SQR(x)————-quadrato di x—————- SQR(-2.5)= 6.25
  • SQRT(x)————radice quadrata di x——— SQRT(3.1415)= 1.77
  • ABS(x)————-valore assoluto di x——— ABS(-4.45)= 4.45
  • TRUNC(x)———–troncamento di x ———— TRUNC(14.7983)= 14
  • ROUND(x)———–arrotondamento di x———- ROUND(14.7983)= 15
  • INT(x)————-parte intera di x———— INT(-24.678)= -24

Naturalmente ora che sapete come si scrive un codice (e il funzionamento è sempre lo stesso) non starò qui a scrivere il

codice di esempio… mi limito solo a rammentarvi che le funzioni dei numeri reali producono errore se usate per i numeri interi 🙂

Work in progress!!!

Dizionario del Pascal

  • ABS(n)–> valore assoluto di un numero
  • AND –> operatore logico “et”
  • ARRAY –> vettore o matrice
  • BEGIN –> inizio
  • BOOLEAN –> boleana
  • CASE –> caso
  • CHAR –> carattere (character)
  • CLRSCR –> pulisce lo schermo (clear screen)
  • CONST –> costante (constant)
  • COS –> funzione coseno (cosinus)
  • DIV –> divisione tra numeri interi (divide)
  • DO –> esegui
  • ELSE –> altrimenti
  • END –> fine
  • FALSE –> falso
  • TRUE –> vero
  • FILE –> archivio
  • IF –> se
  • FUNCTION –> funzione
  • INPUT –> ingresso
  • OUTPUT –> uscita
  • INTEGER –> numeri interi da -32767 a +32768
  • REAL –> numeri reali da 2.9×10^-36 a 1.5 x 10^35
  • BYTE –> numeri interi da 0 a 255
  • WORD –> numeri interi da 0 a 65535
  • MAXINT –> massimo valore intero
  • MOD –> resto di divisione tra interi
  • NOT –> operatore logico “non”
  • OR –> operatore logico “oppure inclusivo”
  • PRED –> precedente
  • SUCC –> successivo
  • VAR –> variabile
  • WRITE(“) –> scrivi
  • WRITELN(“) –> scrive e va a capo
  • READ(var) –> leggi
  • READLN(var) –> legge e va capo
  • READLN –> da il tempo di leggere i risultati
  • TRUNC –> tronca la parte decimale
  • THEN –> allora
  • TO –> a (valori crescenti)
  • DOWNTO –> a (valori decrescenti)
  • TYPE –> tipo
  • RANDOM(n) –> genera un numero a caso compreso tra 0 e il numero indicato in parentesi (max 255)
  • WHILE –> mentre
  • ORD –> ordine
  • PROGRAM –> programma
  • REPEAT –> ripeti
  • PROCEDURE –> procedura
  • PLOT –> disegna un punto
  • DRAW –> disegna un segmento
  • WITH –> con
  • DELAY(n) –> crea un ciclo di attesa lungo n (millisecondi)
  • STRING[n] –> tipo di dato formato da n caratteri alfanumerici (compresi gli spazi). Usato senza parametri non definisce la lunghezza della stringa o nel caso in cui si dichiari una lunghezza minore del dato inserito,il programma non considerera i cartteri in eccesso

Tavola dei colori

  • 0 nero
  • 1 blu
  • 2 verde
  • 3 turchese
  • 4 rosso
  • 5 viola
  •  6 marrone
  •  7 grigio
  • 8 Grigio scuro
  • 9 Blu chiaro
  • 10 Verde chiaro
  • 11 Turchese chiaro
  • 12 Rosso chiaro
  • 13 Viola chiaro
  • 14 Giallo
  • 15 Bianco

NB: qualsiasi numero sopra il 15 produce lampeggiamento; per colorare lo sfondo di tutto il programma anzichè solo la parola TEXTBACKGROUND va inserito prima di CLRSCR (clearscreen)

Configurare internet in una Slackware con D-Link302T

Avendo da poco installato Slackware 12.0 sul mio computer, ho trovato non pochi problemi a configurare la connessione internet. Per connettermi utilizzo un modem D-Link302T, che non mi ha dato grossi problemi né con Windows né con Ubuntu 9.04. In ogni caso, secondo me, connettersi ad internet con Linux è molto più semplice se si possiede un router!

Prerequisiti

Per seguire questa guida dovete avere:

  • Un computer funzionante (ma va? 🙂 );
  • Slackware 12.0; (probabilmente funziona anche con le versioni precedenti, che però ancora non ho testato)
  • Un modem D-Link302T o simile; (probabilmente questa guida può esservi utile anche se avete un altro modem);
  • rp-pppoe, un pacchetto cui al suo interno è contenuto pppoe, che se non è ancora installato lo potete trovare da qua;
  • Avere i moduli della scheda di rete correttamente installati(In questa guida non mi soffermerò, non avendo provato). Si può capire se ci sono digitando da terminale un “ifconfig eth0”. Se non vi rileva nulla, allora andate sul sito http://www.slacky.eu, e li con molta probabilità troverete qualcuno che ne sa più di me sull’argomento!!!!

Procedimento

Innanzitutto controllate che il modem sia connesso al PC, mi raccomando che lo sia attraverso la presa Ethernet, e al cavo dell’alimentazione (sembra ovvio, ma spesso succede di dimenticarsene).

Fatto questo, si può cominciare. Date il comando

# ifconfig eth0 up

per attivare la vostra interfaccia di rete. Se tutto funziona correttamente, nell’output dovrebbero comparire le parole UP e RUNNING.

Ora dovete scompattare rp-pppoe:

# tar -xvzf /percorso/rp-pppoe-3.10.tar.gz

Successivamente eseguite lo script go, contenuto nella cartella appena scompattata:

# cd /perco/rp-pppoe-3.10
# ./go

questo script, molto comodo, installerà il pacchetto e lancerà il programma; ora inizia la configurazione vera e propria (ho inserito dei commenti preceduti da #):

Welcome to the Roaring Penguin PPPoE client setup.  First, I will run
some checks on your system to make sure the PPPoE client is installed
properly...

Looks good!  Now, please enter some information:

USER NAME

>>> Enter your PPPoE user name (default alice): #Inserite l'username che vi è stato fornito al momento dell'attivazione dell'adsl

INTERFACE

>>> Enter the Ethernet interface connected to the DSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where 'n' is a number.
(default eth0): #Premete semplicemente invio, a meno che non utilizziate un'interfaccia di rete diversa da eth0

Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped.  If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses.  You may have some problems with demand-activated links.
>>> Enter the demand value (default no):#Premete invio

DNS

Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
>>> Enter the DNS information here: #Digitate "server" e premete invio

PASSWORD

>>> Please enter your PPPoE password: #Digitate la password che vi è stata fornita assieme all'username
>>> Please re-enter your PPPoE password: #Ri-digitatela

FIREWALLING

Please choose the firewall rules to use.  Note that these rules are
very basic.  You are strongly encouraged to use a more sophisticated
firewall setup; however, these will provide basic security.  If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself.  Otherwise, the firewall rules will deny
access to all standard servers like Web, e-mail, ftp, etc.  If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.

The firewall choices are:
0 - NONE: This script will not set any firewall rules.  You are responsible
         for ensuring the security of your machine.  You are STRONGLY
         recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
                for a LAN
>>> Choose a type of firewall (0-2): #Qui dovete scegliere il tipo di Firewall, normalmente quello base

** Summary of what you entered **

Se avete fatto esattamente come me l’output sarà uguale:

Ethernet Interface: eth0
User name:          ********
Activate-on-demand: No
DNS addresses:      Supplied by ISP's server
Firewalling:        STANDALONE

>>> Accept these settings and adjust configuration files (y/n)? #Digitate y e premete invio
Adjusting /etc/ppp/pppoe.conf
Adjusting /etc/ppp/pap-secrets and /etc/ppp/chap-secrets
 (But first backing it up to /etc/ppp/pap-secrets-bak)
 (But first backing it up to /etc/ppp/chap-secrets-bak)

Congratulations, it should be all set up!

Type 'pppoe-start' to bring up your PPPoE link and 'pppoe-stop' to bring

Congratulazioni, avete configurato correttamente il vostro modem! Ora ogni volta che avviate Slackware, per poter navigare dovrete dare il comando, da root con il comando su per l’autenticazione dal vostro utente :

# pppoe-start

Oppure potete aggiungerlo al file /etc/rc.d/rc.inet1 per fare in modo che parta automaticamente all’avvio del PC. Per farlo editate (con i permessi di root) tale file e aggiungeteci semplicemente queste righe:

### Attivazione di pppoe:
pppoe-start

Le righe precedute da # sono commenti in tutti i file di configurazione e eseguibili in Linux. Abituatevi a usarli, vi faranno sempre comodo!

A me, questo procedimento e’ andato alla grande, sta a voi ora metterlo in pratica, e……………. CIBIVLFAB !!!!!!!!!!(Che Il Buon Iddio Ve La Faccia Andare Buona)
Fonti

Per configurare il modem e poter scrivere questa guida ho seguito queste istruzioni, sono sintetiche ma se uno ha un minimo di esperienza sono un ottima alternativa: http://www.scorianz.com/?p=15

Installare Ruby con RVM

Vediamo come installare Ruby in modo facile non intrusivo sul nostro sistema GNU/Linux.

Sulle distribuzioni GNU/Linux è possibile installare l’ecosistema Ruby da pacchetto, ma questo è sconsigliato per tutta una serie di motivi.

  • Si può usare una sola versione
  • Spesso il pacchetto include una release troppo vecchia
  • Ci possono essere conflitti tra alcune gemme e alcune librerie di sistema

Il metodo più pulito per installare Ruby da utente è di farlo con RVM (Ruby enVironmnent Manager). Usando RVM si hanno interprete, librerie e gemme isolati dal sistema operativo (RVM installa le release di Ruby in una directory .rvm nella home dell’utente) e sempre sicuramente funzionanti: garantisce la community. Inoltre è possibile usare più versioni di Ruby con tutte le gemme isolate da una versione all’altra e saltare da un all’altra con un comando semplicissimo.

Per l’installazione in un ambiente di sviluppo/test, da utente (non da root) assicurarsi di avere a disposizione il comandocurl. Eventualmente installatelo (apt-get -y install curl, yum -y install curl). Assicuratevi di usare bash, e che il vostro emulatore di terminale (gnome-terminal, kterm, il terminale di xfce, supporti l’opzione “Eseguire i comandi come shell –login“, ed abilitarla). Poi digitare:

$ \curl -L https://get.rvm.io | bash -s stable

Uscendo e rientrando nella shell avrete a disposizione il comando rvm.

Eseguite

$ rvm requirements

Per verificare che sul sistema sia presente tutto il software che vi serve. Fate riferimento all’interprete MRI, quello ufficiale, e installate le eventuali dipendenze di sistema che vi mancano usando il vostro gestore di pacchetti (come apt-get o yum).

A questo punto, se prevedete di usare software più complesso del mero interprete (per esempio Rails), io consiglio sempre di installare alcune librerie di sistema necessarie a Ruby dentro la distribuzione di RVM:

$ rvm pkg

Usage:

rvm pkg {install,uninstall} {readline,iconv,curl,openssl,zlib,autoconf,ncurses,pkgconfig,gettext,glib,mono,llvm,libxml2,libxslt,libyaml}

Assicuratevi di installare almeno readline, iconv, openssl e zlib:

$ rvm pkg install <pacchetto>

Adesso finalmente potete installare una distribuzione di Ruby.

Verificate quali distribuzioni sono disponibili con il comando

$ rvm list known

Oltre alla versione ufficiale (MRI), potete installare anche JRuby – un adattamento di Ruby sulla Java Virtual Machine -, Rubinius, mruby, IronRuby e altri.

$ rvm install 1.9.2

A questo punto verificate che sia tutto a posto:

$ rvm list
rvm rubies

  ruby-1.9.2-p318 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

Perfetto! Avete installato la 1.9.2 ma non è ancora impostata come default. Quindi finite la configurazione

$ rvm --default use 1.9.2

Uscite e rientrate con il terminale e tadan!

$ ruby -v
ruby 1.9.2p318 (2012-11-10 revision 37606) [x86_64-linux]

Se un giorno installarete nuove versioni potrete cambiare da una all’altra semplicemente così:

$ rvm use 1.9.3

Oppure una cosa del genere nel caso di Rubinius:

$ rvm use rbx

Buon divertimento con Ruby!