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

Divisori di un numero

Questo programma costituisce fondamentalmente un ripasso dei concetti appresi ultimamente: l'utilizzo del ciclo for e dell'oggetto Memo.

Ci sono però due piccole novità. La prima riguarda la grande Label multilinea visibile nella form dell'applicazione e che fa da commento per l'utente. Per ottenere questo effetto è sufficiente impostare la proprietà WordWrap da False a True ed ingrandire quanto si vuole il rettangolo che contiene la Label. In tal caso la Caption della Label può essere anche molto lunga.

La seconda riguarda l'operatore matematico da utilizzare sui numeri interi per calcolare il resto di una divisione intera, cioè mod. Dati due numeri Integer a e b, l'espressione: a mod b, restituisce il resto della divisione intera di a per b. Quindi se il risultato è 0 vuol dire che a è divisibile per b.

Riportiamo l'elenco completo degli operatori aritmetici binari tratto dall'help di Delphi 2.0:

Operatore Operazione Tipo degli operandi Tipo del risultato
+ Addizione intero intero
reale reale
- Sottrazionne intero intero
reale reale
* Moltiplicazione intero intero
reale reale
/ Divisione intero reale
reale reale
div Divisione intera intero intero
mod Modulo intero intero

Qui di seguito elenchiamo le proprietà degli oggetti della form:

  • object FormDivisori: TFormDivisori
      Caption = 'Divisori'
  • object LabelN: TLabel
      Caption = 'N'
  • object EditN: TEdit
      Text = ''
  • object LabelDivisoriDiN: TLabel
      Caption = 'Divisori di N'
  • object MemoDivisoriDiN: TMemo
      Lines = ''
      ScrollBars = ssVertical
  • object LabelCommento: TLabel
      Caption = 'Alla pressione del tasto &Cerca, questo programma
      prende il numero intero presente nella casella N ed elenca nella
      casella Divisori di N tutti i possibili divisori di questo numero
      compresi fra 1 ed N.'
      WordWrap = True
  • object BitBtnCerca: TBitBtn
      Caption = '&Cerca'
      Kind = bkOK
      OnClick = BitBtnCercaClick
    object BitBtnEsci: TBitBtn
      Caption = '&Esci'
      Kind = bkClose

Infine la procedura associata al bottone Cerca:

procedure TFormDivisori.BitBtnCercaClick(Sender: TObject);
var
  n, i: Integer;
begin
  MemoDivisoriDiN.Lines.Clear;
  n:=StrToIntDef(EditN.Text, 0);
  for i:=1 to n do
    if n mod i=0 then
      MemoDivisoriDiN.Lines.Add(IntToStr(i));
end;

Un ciclo for sulla variabile i elenca tutti i numeri interi da 1 ad n ed aggiunge alla MemoDivisoriDiN solamente quegli i che sono divisori di n, ovvero quelli per cui n mod i è uguale a 0.

N.B. Invece di utilizzare la funzione StrToInt per convertire la stringa EditN.Text in numero, si è utilizzata la funzione StrToIntDef, che ha il vantaggio di non fornire errori se la stringa è vuota o non rappresenta un numero, ma restituisce invece come risultato il numero indicato come secondo argomento della funzione (in questo caso 0). Sfortunatamente non esiste un'analoga funzione StrToFloatDef per i numeri reali!

 1.10 - Divisori