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

Fattori

Alla pressione del tasto Cerca, questo programma prende il numero intero presente nella casella N ed elenca nella casella Fattori di N tutte le possibili coppie di numeri interi che hanno come prodotto N.

La Label multiline spega in maniera esauriente ciò che fa questo programma.
Il problema può essere come implementare l'algoritmo di ricerca.

Gli oggetti presenti sulla form sono già stati tutti visti precedentemente, quindi non perderemo tempo in altre spiegazioni.

Prima di tutto elenchiamo, come al solito, gli oggetti da inserire nella form con le loro proprietà:

  • object FormFattori: TFormFattori
      Caption = 'Fattori'
  • object LabelN: TLabel
      Caption = 'N'
      WordWrap = True
  • object EditN: TEdit
      Text= ''
  • object LabelFattoriDiN: TLabel
      Caption = 'Fattori di N'
  • object MemoFattoriDiN: TMemo
      Line = ''
      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
      Fattori di N tutte le possibili coppie di numeri interi che hanno come
      prodotto N.'
  • object BitBtnCerca: TBitBtn
      Caption = '&Cerca'
      Kind = bkOK
      OnClick = BitBtnCercaClick
  • object BitBtnEsci: TBitBtn
      Caption = '&Esci'
      Kind = bkClose

Per effettuare la ricerca esaustiva delle possibili coppie di numeri che moltiplicati tra loro danno n, effettuiamo un doppio ciclo for su i e su j da 1 a n e per ogni coppia di valori (i,j) verifichiamo se il loro prodotto è n. In caso affermativo inseriamo la coppia nella Memo come i × i = n. Riportiamo la procedura associata alla pressione del Tasto Cerca:

procedure TFormFattori.BitBtnCercaClick(Sender: TObject);
var
  n, i, j: Integer;
begin
  MemoFattoriDiN.Lines.Clear;
  n:=StrToIntDef(EditN.Text, 0);
  for i:=1 to n do
    for j:=1 to n do
      if i*j=n then
        MemoFattoriDiN.Lines.Add(IntToStr(i)+' × '+IntToStr(j));
end;

Esercizio. Modificare l'algoritmo in modo da renderlo più efficiente. Senza troppa difficoltà è possibile trasformare il tempo di ricerca da quadratico (n² passi) a lineare (n passi).

 1.12 - Fattori