Home

A scuola di Delphi

www.gpeano.org 

Introduzione · Capitolo 1 · Capitolo 2 · Capitolo 3 · Capitolo 4 · Capitolo 5 · Download 

Sommario
Euroconvertitore
Area rettangolo
Propagaz. errori
Cubo binomio
Equazione lineare
Calcolatrice
Numeri dispari
Esadecimale
Sommat. Produtt.
Divisori
Somma divisori
Fattori
 

Capitolo 1

Equazione lineare

Questo programma, apparentemente molto semplice, introduce una delle più importanti istruzioni Pascal, cioè la sequenza if-then-else.
Risolve infatti un'equazione di 1º grado, scrivendo il risultato numerico se è determinata o i messaggi impossibile o indeterminata in caso contrario.

Non soffermiamoci sui dettagli degli oggetti presenti sulla form, a parte il Button Risolvi che ha la proprietà Default impostata a True, il che gli permette di essere attivato premendo il tasto Invio.

Riportiamo solamente i nomi consigliati per i vari oggetti presenti e per la form:

  • object FormEquazioneLineare: TFormEquazioneLineare
      Caption = 'Eq. lineare'
  • object EditA: TEdit
      Text = ''
  • object LabelXPiu: TLabel
      Caption = 'x +'
  • object EditB: TEdit
      Text = ''
  • object LabelUgualeZero: TLabel
      Caption = '= 0'
  • object LabelSoluzione: TLabel
      Caption = 'Soluzione dell'#39'equazione'
  • object LabelXUguale: TLabel
      Caption = 'x ='
  • object EditX: TEdit
      Text = ''
  • object ButtonRisolvi: TButton
      Caption = 'Risolvi'
      Default = True
      OnClick = ButtonRisolviClick

La procedura ButtonRisolviClick dovrà leggere da EditA ed EditB i valori dei coefficienti a e b. Quindi se il valore di a è diverso da 0, calcolare il valore di x come -b/a e visualizzarlo in EditX, altrimenti se a è uguale a 0 dovrà verificare se anche b è 0. In caso affermativo il Text di EditX sarà 'indeterminato', altrimenti se b fosse diverso da 0 il Text di EditX sarà 'impossibile'. Scriviamo la procedura:

procedure TFormEquazioneLineare.ButtonRisolviClick(Sender: TObject);
var
  a, b, x: Double;
begin
  a:=StrToFloat(EditA.Text);
  b:=StrToFloat(EditB.Text);
  if a<>0 then
  begin
    x:=-b/a;
    EditX.Text:=FloatToStr(x);
  end
  else
  begin
    if b=0 then
      EditX.Text:='indeterminata'
    else
      EditX.Text:='impossibile';
  end;
end;

Il blocco di istruzioni:

  begin
    x:=-b/a;
    EditX.Text:=FloatToStr(x);
  end

viene eseguito se la condizione a<>0 è vera, altrimenti viene eseguito il blocco:

  begin
    if b=0 then
      EditX.Text:='indeterminata'
    else
      EditX.Text:='impossibile';
  end

Questo secondo blocco contiene la condizione su b; se la condizione b=0 è vera viene eseguita l'istruzione:

      EditX.Text:='indeterminata'

altrimenti viene eseguita l'istruzione:

      EditX.Text:='impossibile'

Da notare il fatto che se vi è un'unica istruzione da eseguire dopo un then o dopo un else non è necessario racchiuderla in un blocco begin-end, come nella condizioni su b.
Al contrario accade per a in cui vi è l'istruzione di calcolo di x e l'assegnazione a EditX.Text. Non sarebbe invece necessario il blocco begin-end per la condizione else su a, perché l'if su b che viene dopo è di fatto un'unica istruzione, ma è stato inserito per una maggiore leggibilità.

N.B. Il segno ; non fa parte integrante del blocco begin-end, ma serve solamente a separare un'istruzione dalla successiva: quindi all'interno di un if-then-else non devono essere inseriti ; perché fornirebbero un errore, in particolare prima dell'else. (Questa è una caratteristica del Pascal: in C/C++ deve essere invece inserito il ; prima dell'else).

 1.05 - Equazione lineare