Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Delphi] Frazioni in Delphi

    Ciao a tutti, ancora non mi sono presentato, sono nuovo. Ho deciso di entrare qui perchè questo sito è fatto veramente bene, con guide ottime e tante persone che rispondono a mille domande. Passiamo ai fatti

    Sono giorni che provo a usare le frazioni in delphi, siccome non sono un esperto ma un novizio, ho cercato in giro e credo che non esista questa funzione. Quello che vorrei fare è trasformare i numeri decimali in frazioni. Mi sono messo all'opera e volevo creare una procedura, ma non ci riesco

    codice:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Math;
    
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      function Potenza(base:integer;esponente:integer):integer;
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    function TForm1.Potenza(base:integer;esponente:integer):integer;
    var i:integer;                   // La funzione dichiarata calcola la potenza
        x:integer;                   // n-esima di un numero qualsiasi di tipo
    begin                            // integer. Accetta due parametri, base
        if esponente = 0 then        // (di tipo integer, per assicurarci
           Potenza := 1              // che non sia troppo grande) ed esponente
        else                         // (di tipo integer).
          begin                      // Se l’esponente è uguale a 0, allora il
          x := base;                 // risultato sarà 1 e con la struttura if...then
          for i:=2 to esponente do   // viene evitato un calcolo inutile.
            x := x * base;
          Potenza := x;
        end;
    end;
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      n, i, f, g, p: Real;
      s, u, z: String;
      c, v: Integer;
    begin
      s := Edit1.Text;               // <= Il valore decimale inserito nella casella di
      for c := 1 to Length(s) do     // testo Edit1 viene memorizzato in una
        if s[c] in ['.', ','] then   // variabile stringa locale; facendo la
          s[c] := DecimalSeparator;  // scansione della stringa, ogni carattere che
      n := StrToFloat(s);            // corrisponda ad un punto o ad una virgola
      f := Frac(n);                  // viene sostituito col separatore "ufficiale"
      u := FloatToStr(f);            // dei decimali.
      Delete(u, 1, 2);               // <= Cancella il 1° e il 2° carattere.
      z := '+u';
      i := StrToFloat(z);
      while i = 0 do
        begin
        f := f * 10;
        v := v + 1;
        end;
      p := Potenza(10 ,v);
      g := n * p;
      Edit2.Text :=  FloatToStr(g);
      Edit3.Text := FloatToStr(p);
    end;
    
    
    end.
    Ho messo tutto il codice perchè ho utilizzato anche altre procedure, una di queste l'ho prese da questo sito , non riesco a capire quale sia l'errore, no, mi spiego meglio l'errore l'ho capito, non posso trasformare uno string che toglie dei caratteri in float (0 (zero) e ,) perchè utilizzando frac mi da 0, (e il numero decimale). Non so ditemi cosa fare, ho spiegato proprio male, però aiutatemi, se vi servono chiarimenti perchè non sono stato abbastanza chiaro fatemi sapere, grazie.

  2. #2
    Risolto, grazie comunque. Ho trovato anche un modo per farlo meglio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.