Messaggioda vecchio » 21/04/2004, 21:39

si si, funziona uguale...ma...che ho fatto??

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 386 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda tony » 21/04/2004, 22:43

il "compiler directive" {$N+} nel tuo sorgente, equivale a (e ha la precedenza su) l'opzione "menu/options/compiler/Numeric processing/8087 acceso" oppure, per quanto ricordo, ".../emulator acceso".

se tutto ora funzia senza il {$N+}, vai in quel menu e controlla l'opzione; se la trovi accesa, vuol dire che l'hai (tra ieri e oggi)accesa: ed è naturale che tutto funzioni.
spegnila e riprova: non deve più compilare.

s p e r i m e n t a r e !

tony

*Edited by - tony on 21/04/2004 23:44:43
tony
Average Member
Average Member
 
Messaggio: 323 di 873
Iscritto il: 10/11/2005, 23:47
Località: milano

Messaggioda fireball » 22/04/2004, 15:23

Potete (soprattutto Vecchio) spiegarmi cosa sono 'procedure' e 'function',
qual è la differenza e quando si devono usare? Magari con degli esempi...
Mi serve perché Martedì io e un mio amico dobbiamo spiegare alla classe l'argomento.

Grazie!



Modificato da - fireball il 22/04/2004 16:27:03
fireball
Cannot live without
Cannot live without
 
Messaggio: 920 di 6906
Iscritto il: 12/03/2003, 20:35

Messaggioda vecchio » 23/04/2004, 15:21

dunque...cominciamo dalle procedure..
ti sarai certamente reso conto che spesso un programma richiede una quantità assurda di passaggi...bene, le procedure ti permettono di spezzettare il programma in tanti sotto programmi...e alla fine per ottenere il programma principale {main} basta richiamare le procedure...

vediamo un esempio stupido...

<pre id=code><font face=courier size=2 id=code>
program matematicamente_nick;
uses crt;
var nome, nick: string;

procedure nome; {con questa procedura ottieni il sottoprogramma per scrivere acquisire il nome dell'utente}
begin
writeln('scrivi il tuo nome');
readln(nome);
end;

procedure nick;
begin
writeln('qual è il tuo nick?');
readln(nick);
end;

procedure output;
begin
writeln('il tuo nome è',nome,'e il tuo nick è ',nick);
end;

{a questo punto del programma però ancora non abbiamo scritto il corpo del programma prinicipale...}

begin {main}
clrscr;
nome; {con questo comando richiamiamo la procedure, sopara scritta che si chiama 'nome'}
nick;
output;
readln;
end.
</font id=code></pre id=code>

ovviamente questo programma non aveva bisogno delle procedure!!! ma non finisce qui...infatti in questo caso le variabili le ho messe tutte all'inizio del programma...ma posso anche decidere di mettere le varibili nelle stesse procedure...decidendo se voler mantenere il loro valore una volta finita la procedura..(questo si ottiene mettendo var prima del nome della varibile..se non ce lo metti il valore della variabile non viene memorizzando..impegnando così, se non sbaglio, meno memoria..)
un esempio?mm vediamo...



<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 387 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda vecchio » 23/04/2004, 15:47

vediamo quindi di spiegare le variabili locali e globali...
esempio di variabile LOCALE...

<pre id=code><font face=courier size=2 id=code>
program volume;
uses crt;
var A,B,h,V:real;

procedure introduzione;
begin
writeln('le dimensinioni della base sono');
readln(A,B);
writeln('l'altezza del parallelepipedo è');
reaedln(h);
end;

procedure volume;
<b>var A_base:real;</b> {questa variabile ha valore solo nella procedura, per i resto del programma (fuori da questa procedura) qeusta variabile non esiste}
begin
A_base:=A*B;
V:=A_base*h;
writeln('il volume è',V:10:2);
end;

begin {main}
clrscr;
introduzione;
volume;
repeat until keypressed
end.
</font id=code></pre id=code>

per farti capire meglio la variabile locale e la differenza con la variabile globale (quella denunciata all'inizio del programma) ti faccio un altro esempio...

<pre id=code><font face=courier size=2 id=code>
program variabili_somma;
uses crt;
var X,a,b,c,somma:integer;

procedure introduzione;
begin
writeln('introduci 3 numeri separati da invio');
readln(a,b,c);
end;

procedure somma;
var X:integer;
begin
X:=a+b;
Somma:=X+c;
writeln('qui nella procedura X vale',X);
end;

begin {main}
clrscr;
X:=15; {questo valore glielo do io...così..a caso...}
writeln('nel programma principale X=',X);
introduzione;
somma;
writeln('dopo la procedura somma la X vale',x);
readln;
end.

</font id=code></pre id=code>

..fai girare il programma...te ne accorgerai da te...


<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>

Modificato da - vecchio il 23/04/2004 16:49:31
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 388 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda vecchio » 23/04/2004, 16:02

a questo punto vediamo le procedure con passaggio di parametri per valore...

questo in pratica ci permette di fare qualcosa di ancora più generale...è come se con la procedura costruissimo lo scheletro del programma e poi di volta in volta gli mettiamo la pelle che vogliamo...forse l'immagine non è molto poetica..ma questa è la sensazione che ho sempre avuto...

esempio:

<pre id=code><font face=courier size=2 id=code>
program quadrati;
uses crt;
var a,b,c:real;

procedure potenza(x:integer); {significa che la procedura attenderà un valore x introdotto...questo valore verrà dichiarato nel main...}
var n:real;
begin
n:=x*x;
writeln('il quadrato di',x:10:2,'è ',n:10:2);
end;

begin {main}
clrscr;
a:=2;
b:=4;
c:=7;
potenza(a);
potenza(b);
potenza(c);
readln;
end.

</font id=code></pre id=code>

spero che sia chiaro...bè questa è solo un'infarinatura...cmq credo che se prendi il tuo libro di testo potrà esserti + chiaro l'argomento...
per le funzioni il discorso è molto simile...ma ora non ho tempo..

ciao
il vecchio

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 389 di 1036
Iscritto il: 17/07/2003, 14:35

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite