Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

21/04/2004, 21:39

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

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

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

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

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>

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

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>
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.