-
.
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?. -
.
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
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.CODICEprocedure 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. -
.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.CODICEprocedure TForm1.Button1Click(Sender: TObject);
begin
end;
end.
Siiiiiiiii....ok...... -
.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.CODICEprocedure 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:CODICEprocedure 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.. -
.
Ok
Le variabili si dichiarano prima del blocco begin... end della procedura, cioe subito dopo l'intestazione della procedura:CODICEprocedure 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?. -
.
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:CODICEunit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
type
{ TForm1 }
TForm1 = class(TForm)
..... -
.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:CODICEunit 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"?. -
.
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.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:CODICEunit 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. -
.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.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?. -
.
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.. -
.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. -
.
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_degCODICEprocedure 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
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)CODICEprocedure 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;. -
.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_degCODICEprocedure 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?. -
.
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: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_degCODICEprocedure 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.. -
.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)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.