Il Bar dell'Ingegneria

PASCAL E-learning

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    Ok INIZIAMO

    Installato Lazarus e preparato questo form:



    Il programmino che voglio creare è semplicissimo: inserisco il valore di phi, premo il pulsantino e ottengo nelle altre 2 caselle di testo i valori di Ka e di Kp.

    Come scrivo il codice?
     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Seleziona il bottonicino con su scritto "calcola"
    Adesso guarda l'ispettore degli oggetti.
    attiva la linguetta "eventi"
    Cerca l'evento OnClik
    A destra ci sta un pulsantino con tre puntini.
    Clikka su quest'ultimo

    93qXLPg

    Il teletrasporto di Lazarus ti trasferirà nella pagina di edit del codice in corrispondenza della procedura che gestisce l'evento clik del pulsante.

    Da qui inizia il bello.

    Lazarus ti propone la struttura minima vuota che dovrai riempire tu col codice specifico.

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    begin

    end;

    end.


    Il primo end; seguito dal punto e virgola è la fine della procedura mentre il secondo end. seguito dal semplice puntino è la fine del programma
    Adesso per andare avanti occorre conoscere il problema prima di conoscere la sintassi

    Cosa dobbiamo fare?
    Applicare certamente la formula che ci fornisce il Ka noto che sia l'angolo di attrito phi

    Per adesso limitiamoci alla formula di Colomb:

    Ka = tang²(45-phi/2)


    MA phi ancora non lo abbiamo, è solo stato digitato dall'user nel dialogo e finche non lo leggiamo e non lo si deposita in una variabile non lo abbiamo a disposizione

    Definiamo quindi una variabile locale che chiamo per esempio f_deg che rappresenta l'angolo espresso in sessadecimali
    A noi serve pure esprimerlo in radianti, quindi definiamo altra variabile f_rad che conterra l'angolo espresso in radianti

    Edited by afazio - 3/2/2014, 15:17
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 15:04) 
    Seleziona il bottonicino con su scritto "calcola"
    Adesso guarda l'ispettore degli oggetti.
    attiva la linguetta "eventi"
    Cerca l'evento OnClik
    A destra ci sta un pulsantino con tre puntini.
    Clikka su quest'ultimo

    (IMG:https://i.imgur.com/93qXLPg.jpg)

    Il teletrasporto di trasferirà nella pagina di edit del codice in corrispondenza della procedura che gestisce l'evento clik sul pulsante.

    Da qui inizia il bello.

    Lazarus ti propone la struttura minima vuota che dovrai riempire tu col codice specifico.

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    begin

    end;

    end.

    Siiiiiiiii....ok.....
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (lisa_camayana @ 3/2/2014, 15:13) 
    CITAZIONE (afazio @ 3/2/2014, 15:04) 
    Seleziona il bottonicino con su scritto "calcola"
    Adesso guarda l'ispettore degli oggetti.
    attiva la linguetta "eventi"
    Cerca l'evento OnClik
    A destra ci sta un pulsantino con tre puntini.
    Clikka su quest'ultimo

    (IMG:https://i.imgur.com/93qXLPg.jpg)

    Il teletrasporto di trasferirà nella pagina di edit del codice in corrispondenza della procedura che gestisce l'evento clik sul pulsante.

    Da qui inizia il bello.

    Lazarus ti propone la struttura minima vuota che dovrai riempire tu col codice specifico.

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    begin

    end;

    end.

    Siiiiiiiii....ok.....

    Ok

    Le variabili si dichiarano prima del blocco begin... end della procedura, cioe subito dopo l'intestazione della procedura:

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     f_deg:double;
     f_rad:double;

    begin

    end;


    Dichiarare una variabile significa definirne il nome ed il tipo. Questo in Pascal è fondamentale. Ogni variabile non preventivamente dichiarata nel nome e nel tipo non è riconosciuta dal compilatore che per ripicca si arresta inesorabilmente

    Nota che ogni istruzione deve terminare col punto e virgola.
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 15:21) 
    CITAZIONE (lisa_camayana @ 3/2/2014, 15:13) 
    Siiiiiiiii....ok.....

    Ok

    Le variabili si dichiarano prima del blocco begin... end della procedura, cioe subito dopo l'intestazione della procedura:

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     f_deg:double;
     f_rad:double;

    begin

    end;


    Dichiarare una variabile significa definirne il nome ed il tipo. Questo in Pascal è fondamentale. Ogni variabile non preventivamente dichiarata nel nome e nel tipo non è riconosciuta dal compilatore che per ripicca si arresta inesorabilmente

    Nota che ogni istruzione deve terminare col punto e virgola.

    Perfetto...le accetta.

    Ora che faccio?
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Ecco il ricorso alla oprima unità.

    In pascal, ma anche in altri linguaggi, il set di funzioni matematiche è limitato a quelli strettamente necessari e comunque sufficienti a poter eseguire anche altre funzioni.
    Questa potrebbe apparire come grave mancanza ma è lo stesso compilatore che però mette a disposizione le librerie in cui ha raccolto numerosisime funzioni
    La libreria standard di ObjectPascal che raccoglie le funzioni matematiche è la unit "Math.pas" che si trova in uno dei percorsi noti al compilatore.

    Per avere a disposizione queste funzioni, dovremo inserire anche questa unit nella sezione Uses del programma:

    CODICE
    unit Unit1;

    {$mode objfpc}{$H+}

    interface

    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;

    type

     { TForm1 }

     TForm1 = class(TForm)
    ....
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 15:26) 
    Ecco il ricorso alla oprima unità.

    In pascal, ma anche in altri linguaggi, il set di funzioni matematiche è limitato a quelli strettamente necessari e comunque sufficienti a poter eseguire anche altre funzioni.
    Questa potrebbe apparire come grave mancanza ma è lo stesso compilatore che però mette a disposizione le librerie in cui ha raccolto numerosisime funzioni
    La libreria standard di ObjectPascal che raccoglie le funzioni matematiche è la unit "Math.pas" che si trova in uno dei percorsi noti al compilatore.

    Per avere a disposizione queste funzioni, dovremo inserire anche questa unit nella sezione Uses del programma:

    CODICE
    unit Unit1;

    {$mode objfpc}{$H+}

    interface

    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;

    type

     { TForm1 }

     TForm1 = class(TForm)
    ....

    Quindi copio questo frammento di codice appena sotto "uses"?
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Ho voluto parlare delle unit solo per farti capire che spesso ottieni errore laddove proprio non ti aspetti solo perche ti sei dimenticata di richiamare nella sezione Uses l'unità in cui è definito il tipo o la variabile o la funzione.

    Nello specifico intendo operare la trasformazione da deg a radianti in due modi diversi

    il primo sarebbe quello di ricorrere all'operazione

    rad= deg*3.14/180

    mentre il secondo è quello di richiamare una specuifica funzione bella e fatta.

    CITAZIONE (lisa_camayana @ 3/2/2014, 15:29) 
    CITAZIONE (afazio @ 3/2/2014, 15:26) 
    Ecco il ricorso alla oprima unità.

    In pascal, ma anche in altri linguaggi, il set di funzioni matematiche è limitato a quelli strettamente necessari e comunque sufficienti a poter eseguire anche altre funzioni.
    Questa potrebbe apparire come grave mancanza ma è lo stesso compilatore che però mette a disposizione le librerie in cui ha raccolto numerosisime funzioni
    La libreria standard di ObjectPascal che raccoglie le funzioni matematiche è la unit "Math.pas" che si trova in uno dei percorsi noti al compilatore.

    Per avere a disposizione queste funzioni, dovremo inserire anche questa unit nella sezione Uses del programma:

    CODICE
    unit Unit1;

    {$mode objfpc}{$H+}

    interface

    uses
     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;

    type

     { TForm1 }

     TForm1 = class(TForm)
    ....

    Quindi copio questo frammento di codice appena sotto "uses"?

    No.
    Devi semplicemente aggiungere , Math dopo l'ultima unit richiamata.

    Nella sezione Uses puoi aggiungere, separate da una virgola, quante unita desideri ed alla fine chiudere l'istruzione col punto e virgola
    Volendo puoi anche andare a capo (senza quidni mettere il punto e virgola) e continuare ad aggiungere altre unit. Solo alla fine metterai il punto e virgola di chiusura
     
    Top
    .
  9.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 15:30) 
    Ho voluto parlare delle unit solo per farti capire che spesso ottieni errore laddove proprio non ti aspetti solo perche ti sei dimenticata di richiamare nella sezione Uses l'unità in cui è definito il tipo o la variabile o la funzione.

    Nello specifico intendo operare la trasformazione da deg a radianti in due modi diversi

    il primo sarebbe quello di ricorrere all'operazione

    rad= deg*3.14/180

    mentre il secondo è quello di richiamare una specuifica funzione bella e fatta.

    CITAZIONE (lisa_camayana @ 3/2/2014, 15:29) 
    Quindi copio questo frammento di codice appena sotto "uses"?

    No.
    Devi semplicemente aggiungere , Math dopo l'ultima unit richiamata.

    Nella sezione Uses puoi aggiungere, separate da una virgola, quante unita desideri ed alla fine chiudere l'istruzione col punto e virgola
    Volendo puoi anche andare a capo (senza quidni mettere il punto e virgola) e continuare ad aggiungere altre unit. Solo alla fine metterai il punto e virgola di chiusura

    Ok. procediamo....cosa scrivo e dove lo scrivo?
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Leggiamo l'angolo di attrito dal form.

    Per l'input dell'angolo di attrito abbiamo usato un EditBox

    Questo permette l'inserimento di qualsiasi carattere digitabile da tastiera. Ciò significa che potremmo anche trovarci il dato Lisa27
    Certamente non utile come angolo di attrito.
    Ma anche quando trovassimo la scritta 27, questo non sarebbe un numero, bensi un testo col quale non riusciremmo a fare operazioni matematiche.
     
    Top
    .
  11.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 15:36) 
    Leggiamo l'angolo di attrito dal form.

    Per l'input dell'angolo di attrito abbiamo usato un EditBox

    Questo permette l'inserimento di qualsiasi carattere digitabile da tastiera. Ciò significa che potremmo anche trovarci il dato Lisa27
    Certamente non utile come angolo di attrito.

    ...eh si, non sempre funziona :D
     
    Top
    .
  12.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Per adesso non occupiamoci del controllo dell'input ed assumiamo di trovarci un testo numerico

    Ci serve quindi la funzione che trasformi un testo numerico in un numero numerico.

    In effetti esiste una procedura (non una funzione) che trasforma un testo in numero
    Trattasi della procedura Val(Testo,numero)

    Allora subito dopo il begin della procedura che gestisce l'evento onClik del bottone iniziamo a scrivere il rigo:

    Val(edit1.text,f_deg);

    Con qeusta abbiamo trasferito il valore numerico nella variabile f_deg

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     f_deg :double;
     f_rad :double;

    begin
    val(edit1.Text,f_deg);
    end;


    Digitando il codice vedrai che dopo aver scritto val(edit1. aspettando qualche secondo dopo aver digitato il puntinoappare la lista delle proprietà e dei metodi relativi all'oggetto edit1

    NsfPPHH

    Avuto l'angolo di attrito in deg trasformiamolo in radianti mediante il PI.Greco
    Per il Pi.Greco possiamo abbreviare con un valore approssimato 3.14145 oppure farlo calcolare direttamente al Pascal.

    In questo secondo caso dobbiamo definire una variabile apposita (per esempio Pi) e usare la formula:

    Pi:=4*Arctan(1)


    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     f_deg :double;
     f_rad :double;
     Pi : Double;
    begin
    Pi:=4*arctan(1);
    val(edit1.Text,f_deg);
    f_rad:=f_deg*Pi/180;

    end;
     
    Top
    .
  13.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 15:47) 
    Per adesso non occupiamoci del controllo dell'input ed assumiamo di trovarci un testo numerico

    Ci serve quindi la funzione che trasformi un testo numerico in un numero numerico.

    In effetti esiste una procedura (non una funzione) che trasforma un testo in numero
    Trattasi della procedura Val(Testo,numero)

    Allora subito dopo il begin della procedura che gestisce l'evento onClik del bottone iniziamo a scrivere il rigo:

    Val(edit1.text,f_deg);

    Con qeusta abbiamo trasferito il valore numerico nella variabile f_deg

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     f_deg :double;
     f_rad :double;

    begin
    val(edit1.Text,f_deg);
    end;


    Digitando il codice vedrai che dopo aver scritto val(edit1. aspettando qualche secondo dopo aver digitato il puntinoappare la lista delle proprietà e dei metodi relativi all'oggetto edit1

    (IMG:https://i.imgur.com/NsfPPHH.jpg)

    Perfetto!

    Praticamente ciò che viene scritto in edit1 viene assegnato alla variabile f_deg?
     
    Top
    .
  14.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Andiamo al secondo modo e cioè quello di sfruttare la libreria matematica che abbiamo richiamato in uses.

    Siccome non è assolutamente detto che noi si debba ricordare la struttura di una determinata funzione, allora ricorriamo proprio alla tecnica sopra descritta, facendoci suggerire da Lazarus la lista delle possibilità

    Digitiamo la parola Math. e dopo aver digitato il punto aspettiamo qualche secondo
    ci propone una lista infinita con tutte le funzioni e procedure definite in quella unit
    siccome noi siamo interessati ad eventuale funzione procedura che trasformi i deg in rad, con ogni probabilita il nome della funzione inizia per d.
    digitiamo la d ed ecco restringersi la lista delle funzioni/procedure alle solo che iniziano per d.

    eccola la nostra funzione:

    rS5Umot

    CITAZIONE (lisa_camayana @ 3/2/2014, 15:54) 
    CITAZIONE (afazio @ 3/2/2014, 15:47) 
    Per adesso non occupiamoci del controllo dell'input ed assumiamo di trovarci un testo numerico

    Ci serve quindi la funzione che trasformi un testo numerico in un numero numerico.

    In effetti esiste una procedura (non una funzione) che trasforma un testo in numero
    Trattasi della procedura Val(Testo,numero)

    Allora subito dopo il begin della procedura che gestisce l'evento onClik del bottone iniziamo a scrivere il rigo:

    Val(edit1.text,f_deg);

    Con qeusta abbiamo trasferito il valore numerico nella variabile f_deg

    CODICE
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     f_deg :double;
     f_rad :double;

    begin
    val(edit1.Text,f_deg);
    end;


    Digitando il codice vedrai che dopo aver scritto val(edit1. aspettando qualche secondo dopo aver digitato il puntinoappare la lista delle proprietà e dei metodi relativi all'oggetto edit1

    (IMG:https://i.imgur.com/NsfPPHH.jpg)

    Perfetto!

    Praticamente ciò che viene scritto in edit1 viene assegnato alla variabile f_deg?

    Diciamo si e no.

    Avendo usato la funzione VAL, Pascal tenterà di trasformare quello che era stato digitato in edit1, in valore numerico. se ci riesce, trasferisce il numero ottenuto in f_deg, altrimenti ci mette valore nullo.
     
    Top
    .
  15.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    792
    Reputation
    +15

    Status
    Offline
    CITAZIONE (afazio @ 3/2/2014, 16:05) 
    Andiamo al secondo modo e cioè quello di sfruttare la libreria matematica che abbiamo richiamato in uses.

    Siccome non è assolutamente detto che noi si debba ricordare la struttura di una determinata funzione, allora ricorriamo proprio alla tecnica sopra descritta, facendoci suggerire da Lazarus la lista delle possibilità

    Digitiamo la parola Math. e dopo aver digitato il punto aspettiamo qualche secondo
    ci propone una lista infinita con tutte le funzioni e procedure definite in quella unit
    siccome noi siamo interessati ad eventuale funzione procedura che trasformi i deg in rad, con ogni probabilita il nome della funzione inizia per d.
    digitiamo la d ed ecco restringersi la lista delle funzioni/procedure alle solo che iniziano per d.

    eccola la nostra funzione:

    (IMG:https://i.imgur.com/rS5Umot.jpg)

    CITAZIONE (lisa_camayana @ 3/2/2014, 15:54) 
    Perfetto!

    Praticamente ciò che viene scritto in edit1 viene assegnato alla variabile f_deg?

    Diciamo si e no.

    Avendo usato la funzione VAL, Pascal tenterà di trasformare quello che era stato digitato in edit1, in valore numerico. se ci riesce, trasferisce il numero ottenuto in f_deg, altrimenti ci mette valore nullo.

    Ricapitoliamo...

    In var hai dichiarato le 3 variabili
    In Begin fai le operazioni in modalità parametrica
     
    Top
    .
91 replies since 3/2/2014, 14:45   1979 views
  Share  
.