Il pascal e primo programma

Il Pascal è un linguaggio di programmazione, e non è il solo, ma noi approfondiremo questo perché Lazarus si basa proprio su Free Pascal. Analizziamo ora il significato del termine 'linguaggio di programmazione'. 'linguaggio' è un modo di comunicare. Noi, per esempio, comunichiamo con i nostri connazionali tramite l'italiano, mentre se volessimo parlare con un inglese dovremmo comunicare con lui tramite l'inglese, con un francese usando il francese e così via. Quindi possiamo capire che il Pascal, essendo un linguaggio, ha le sue regole di sintassi esattamente come la lingua italiana. Ora analizziamo il termine 'di programmazione'. Si riferisce all'atto di programmare un computer perché, come tutti sanno, se il computer non fosse programmato per fare qualcosa (scrivere documenti, calcolare, trasmettere dati) sarebbe solo un ammasso di pezzi elettronici e basta.
Iniziamo a capire la sintassi del Pascal attraverso la scrittura della nostra prima console application. Innanzitutto andare sulla voce 'File', poi su 'Nuovo'.
Ora si dovrebbe aprire una finestra con alcune voci. Tra queste dovrebbe comparire 'Console Application'.
Cliccando su ok ci si dovrebbe aprire una finestra con questo scritto dentro.
Codice: delphi [Seleziona]
program project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp,
  { you can add units after this };
type
  { TMyApplication }
  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure WriteHelp; virtual;
  end;
{ TMyApplication }
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
  Esco: String;
begin
  // quick check parameters
  ErrorMsg:=CheckOptions('h','help');
  if ErrorMsg'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Halt;
  end;
  // parse parameters
  if HasOption('h','help') then begin
    WriteHelp;
    Halt;
  end;
  { add your program here }
  // stop program loop
  Terminate;
end;
constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;
destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;
procedure TMyApplication.WriteHelp;
begin
  { add your help code here }
  writeln('Usage: ',ExeName,' -h');
end;

var
  Application: TMyApplication;
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.
   
Questo codice è la base di partenza per ogni nuovo programma da linea di comando. Per il momento prendiamo per buono quello che c'è scritto, ed andiamo ad inserire la parte che a noi interessa approfondire al momento.
Dove troviamo la scritta    
Codice: Delphi [Seleziona]
{ add your program here }

andremo ad inserire la seguenti righe di codice:
Codice: Delphi [Seleziona]

    writeln('Primo programma');
    Clrscr;
    writeln('Hello world!');
    write('Ciao');
    write(' ');
    write('mondo!');
    readkey; {volendo avrei potuto usare anche la dicitura: repeat until keypressed;}

E poi per terminare l'opera ad inizio codice dove c'è scritto
Codice: Delphi [Seleziona]

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp
  { you can add units after this };

andiamo ad inserire:
Codice: Delphi [Seleziona]
, Crt.

Così il codice in quel punto diventa:
Codice: Delphi [Seleziona]

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp, Crt
  { you can add units after this };

Sostituiamo anche la riga:
Codice: Delphi [Seleziona]
program project1;

con
Codice: Delphi [Seleziona]
program PrimoProgramma;

Salviamo in una directory a noi nota con il nome PrimoProgramma; poi clicchiamo sul pulsante a forma di triangolino verde e vedremo comparire il risultato del nostro primo programma.
Ora andiamo ad analizzare quello che abbiamo fatto. Aggiungendo la voce Crt nelle uses abbiamo inserito una libreria che ci permette di utilizzare determinate funzioni e procedure (in questo caso mi permette di usare il clrscr e il keypressed).
Ora prendiamo in esame ogni singola riga:
Codice: Delphi [Seleziona]
writeln('Primo programma');

Writeln mi permette di scrivere a video tutto quello che sta tra le parentesi. In questo caso mi ha stampato la stringa Primo programma, anche se non la vedo a video (con la prossima riga di codice scopriremo come mai) ed è andato a capo.
Codice: Delphi [Seleziona]
Clrscr;

Clrscr vuol dire clear screen, ovvero pulisci schermo. E quindi è per questo che non si vede a video la scritta "Primo Programma", perchè è stata scritta ma poi cancellata.
Codice: Delphi [Seleziona]
writeln('Hello world!');

Come visto precedentemente scrivo a video "Hello world!" e vado a capo.
Codice: Delphi [Seleziona]
write('Ciao');

Scrivo a video "Ciao" ma non vado a capo.
Codice: Delphi [Seleziona]
Write(' ');

Scrivo a video uno spazio ma non vado a capo.
Codice: Delphi [Seleziona]
write('mondo!');

Scrivo a video mondo! ma non vado a capo.
Codice: Delphi [Seleziona]
 readkey; {volendo avrei potuto usare anche la dicitura: repeat until keypressed;}

Aspetto che l'utente digiti un tasto qualsiasi. Questo perchè se non avessimo inserito quest'ultima istruzione non avremmo visto a video nessun risultato, perchè sarebbe stato eseguito ma non si sarebbe fermato e quindi si sarebbe automaticamente chiusa la finestra. Volendo si può sostituire readkey; con repeat until keypressed; si otterrebbe comunque lo stesso risultato.
Bene, a questo punto abbiamo capito che per scrivere a video si possono usare le due parole write e writeln, la prima non va a capo dopo aver scritto quello che deve mentre la seconda sì.
Ok ora iniziamo a vedre anche le altre cose importanti che questo primo programma ci può offrire. Iniziamo con una premessa: il file sorgente non contiene solo parole che servono per realizzare il programma, ma anche parole che servono a ricordarsi cosa un pezzo di codice scritto precedentemente realizzava. Cio' si può ottenere tramite i commenti, ovvero pezzi di codice ignorati dal compilatore. Prendiamo un esempio se scrivo writeln('Hello world!'); a video vedrò la suddetta scritta ma se invece scrivessi {writeln('Hello world!');} a video non vedrei niente perchè il compilatore lo ignorerebbe considerandolo un commento. L'utilità di questa pratica (commentare i sorgenti) è quella di mettere delle informazioni, note o impressioni che sicuramente non ci si può ricordare (ad esempio a distanza di due mesi). Servono per la manutenzione del codice sorgente.
Ora notiamo che il programma inizia con la parola Program che è una di quelle parole riservate del linguaggio pascal, e identifica l'inizio della scrittura di un programma pascal. Program viene seguito dal nome del programma nell'esempio riportato da PrimoProgramma. Un'altra parola riservata molto utile è Uses che come abbiamo visto precede le librerie necessarie al funzionamento del programma stesso.
Notiamo anche che nel corso del programma ci siamo imbattuti più volte nella digitura begin e in end , bene queste due parole servono al compilatore a differenziare la parte esecutiva del programma. A volte troviamo l'end con il punto e altre con il punto e virgola, la prima versione sta a identificare la parte esecutiva principale del programma, mentre la seconda serve a identificare la parte esecutiva di procedure e funzioni (argomento che verrà trattato più avanti - in altri articoli) Quindi tutto quello che noi vogliamo vedere a video verrà immesso tra un begin ed un end.
Tutto il resto lo capiremo nel corso di altri articoli.
N.B. Definizione di codice sorgente: sono uno o più file che contenenti delle informazione che se correttamente compilate danno vita ad un programma.
N.B. Definizione di compilatore: è un programma che legge i codici sorgenti e se sono corretti sintatticamente genera un programma.
N.B. Lazarus genera eseguibili veramente molto grossi, basta andare a vedere le dimensioni del programma appena creato. Per ovviare a questo problema basta selezionare Progetto → Opzioni compilatore...  nelle voci Codice e Linking verificare che i parametri siano li stessi sotto riportati.
Le voci che devono essere selezionate sono:

Se questo modo di compilare non dovesse ridurre le dimensioni degli eseguibili si può tentare quanto segue per l'ambiente windows:
Ovviamente applicazione.exe è il nome del programma scritto in FreePascal/Lazarus che si intende ridurre di dimensione, ad esempio C:\ProgrammaProva.exe .
Bene avete appena creato il vostro primo programma in free pascal usando Lazarus.

SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article