Pagine: 1 ... 5 6 [7] 8 9 ... 14

18 Gen 2012 - Pascal Script

Se vi è mai capitata la necessità di eseguire del codice pascal arbitrario in un vostro eseguibile Free Pascal la soluzione a tale problema si chiama Pascal Script

Questa è il wiki di Lazarus: http://wiki.freepascal.org/Pascal_Script

E' possibile scaricare il pacchetto da SVN al seguente indirizzo http://code.remobjects.com/svn/pascalscript (informazioni più approfondite nel wiki sopramenzionato)

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
In qualsiasi linguaggio di programmazione che si rispetti si necessita di poter gestire gli errori e Lazarus/Free Pascal non fanno eccezzione.
Per realizzare tale necessità ci viene incontro la seguente sintassi
Codice: [Seleziona]

     try
        try
           
           //nostro codice da eseguire su cui vogliamo effettuare una gestione degli errori
           ...
           
        finally
               //codice da effettuare a fine procedura sia che va bene il codice sopra sia che il codice ha sollevato un'eccezzione              
       end;
     except
           on E: Exception do
           begin
             
              //codice da eseguire solo se si verifica un eccezzione
             
           end;
     end;

Vediamo ora un esempio, immaginiamo una form con due EditBox in cui imputare due valori numerici e un pulsante che effettua una divisione tra i due valori inputati nelle EditBox, il codice per gestire al meglio tale esempio è:
Codice: [Seleziona]

var
   app: string;
begin
     try
        try
           app:=FloatToStr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text));
        finally
               //Sono a fine procedura
               ShowMessage(app);
       end;
     except
           on E: Exception do
           begin
              ShowMessage('Errore: ' + E.message);
              Application.Terminate;
           end;
     end;
end;

Ora per capire bene cosa fa questo codice basta compilare (l'esempio allegato) ed eseguire il programma compilato (non in versione debug di lazarus). Provate a cliccare sul pulsante senza inputare i valori e vedrete cosa succede, poi provate a dividere un numero tipo 18,7 per 0 e vedete il risultato. Poi provate a dividere ad esempio 20 con 3 e vedrete un altro risultato.
Esempio completo: http://www.lazaruspascal.it/esempi/Errori.zip
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
un modo semplice (valido per Windows e Linux), utilizzando le Librerie Indy

unico neo delle Indy che hanno poca compatibilita' verso le rel. precedenti quando fanno
una nuova versione.

Codice: [Seleziona]

rel. 9
uses IdMessage
TIdAttachment.Create(MailMessage.MessageParts, ledAttachment.Text);

rel.10
uses IdAttachmentFile
 TIdAttachmentFile.Create(IdMessage.MessageParts, EdAllegato.Text);

[b]IdAttachmentFile[/b] specifico della versione 10 di Indy, hanno modificato
le classi di gestione allegati presenti fino alla rel. 9 nella unit IdMessage


TIdSMTP -> pannello Indy Clients Protocols (nz)
TIdMessage -> pannello Indy Misc Protocols

aggiungere nelle uses IdAttachmentFile

EdMittente, EdDestinatario, EdConoscenza, EdOggetto,
EdCorpo, EdAllegato: sono normali TEdit
MemoStato -> componente standard TMemo

nel componete TIdSmtp ATTIVARE L'Evento OnStatus

Codice: [Seleziona]

//si possono visualizzare le operazioni durante la connessione
//al server di posta
//
procedure Tfrm_InvioMail.IdSMTPStatus(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: string);
begin
  MemoStato.Lines.Insert(0,'Status: ' + AStatusText);
end;        

procedure Tfrm_InvioMail.act_InvioMailExecute(Sender: TObject);
begin
  MemoStato.Clear;

  IdSMTP.Host := EdHost.Text;  //indirizzo posta uscita del server
  IdSMTP.Port := 25;           //porta utilizzata dal servizio email

  //configurazione messaggio mail
  IdMessage.From.Address := EdMittente.Text;
  IdMessage.Recipients.EMailAddresses := EdDestinatario.Text + ',' + EdConoscenza.Text;

  IdMessage.Subject := EdOggetto.Text;
  IdMessage.Body.Text := EdCorpo.Text;

  //per selezioneare l'allegato si puo' utilizzare il compponente standard OpenDialog
  //
  if FileExists(EdAllegato.Text) then
    TIdAttachmentFile.Create(IdMessage.MessageParts, EdAllegato.Text);

  //invio mail
  try
    try
      IdSMTP.Connect;           //connessione
      IdSMTP.Send(IdMessage);
    except on E:Exception do
      //
      //segnalazione eventuale problema di connessione
      MemoStato.Lines.Insert(0, 'ERROR: ' + E.Message);
    end;
  finally
    //segnalazione invio effettuato
     MemoStato.Lines.Insert(0, 'ERROR: ' + E.Message);

    if IdSMTP.Connected then IdSMTP.Disconnect;  //disconnessione dal server di posta
  end;
end;
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

21 Dic 2011 - Brute force

Il metodo "forza bruta" (anche noto come ricerca esaustiva della soluzione) è un algoritmo di risoluzione di un problema che consiste nel verificare tutte le soluzioni teoricamente possibili fino a che si trova quella effettivamente corretta.

Il suo principale fattore positivo è che consente teoricamente sempre di trovare la soluzione corretta, ma per contro è sempre la soluzione più lenta o dispendiosa; viene utilizzato come ultima risorsa sia in crittanalisi che in altre parti della matematica solamente in quei casi dove sia l'unico procedimento conosciuto.

Usare il metodo "forza bruta" o "brute force" non serve solo a scovare password, ma può essere usato nei problemi più disparati, ad esempio se dobbiamo creare una griglia con le intestazioni di colonne e righe che siano alfanumerici e non solo numerici (pensiamo alle colonne e alle righe dei fogli di calcolo per intenderci) la "forza bruta" può essere un validissimo algoritmo per risolvere tale problematica. Ho realizzato un piccolo programma d'esempio che potete scaricare da qui: www.lazaruspascal.it/esempi/MyBruteForce.zip

Una volta compilato l'esempio e lanciato l'eseguibile dovrete specificare se volete tenere in considerazione:

1. Lettere minuscole

2. Lettere maiuscole

3. Numeri (da 0 a 9)

E in più dovete dargli un massimo della lunghezza del risultato, per esempio se date 3 come lunghezza massima e selezionate solo i numeri allora otterrete un risultato che parte da 0 e finisce a 999.

Spero che l'esempio sia d'aiuto qualcuno.
Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon

19 Dic 2011 - Le permutazioni

Una permutazione è un modo di ordinare in successione n oggetti distinti, come nell'anagrammare una parola.
Per capire come affrontare questa problematica informatica con Lazarus e il Free Pascal l'obbiettivo del programma d'esempio sarà proprio anagrammare una parola passata come input.
Per prima cosa bisogna sapere che per stabilire a priori tutte le possibili combinazioni bisogna calcolare il fattoriale della lunghezza della parola da anagrammare.
Ad esempio se vogliamo anagrammare la parola "abcd" le permutazioni totali saranno 24. Vediamo allora il codice per generare il fattoriale di un numero:

Read More

Share on Twitter! Digg this story! Del.icio.us Share on Facebook! Technorati Reddit StumbleUpon
Pagine: 1 ... 5 6 [7] 8 9 ... 14