Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-02-2006, 22:00   #1
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
TurboPascal

Ciao!!

Qui porgo, a chi programma in Turbo Pascal le mie domande, per ora ne ho 2:

-Ciclo FOR
-Variabili di tipo BYTE/WORD

1) Ho letto su un manuale che per terminare un ciclo FOR bisogna mettere END; (con punto e virgola), ma se faccio così sia FreePascal che TurboPascal 7.0 mi da errore dicendo che si aspetta un punto, probabilmente quest'istruzione non è valida. Io però voglio che mi venga stampato a video tre volte un messaggio e terminato il ciclo FOR ne venga mostrato un altro, ho fatto così:

Quote:
PROGRAM test_iterazioni;
VAR A : INTEGER;
BEGIN
FOR A:= 3 DOWNTO 1 DO
WRITELN('Conto alla rovescia ',a);
WRITELN('BOOM!');
READLN;
END.
In effetti questo produce l'effetto desiderato, ma non riesco a capire come il compilatore riesca a capire che deve ripetere "BOOM!" una sola volta mentre l'istruzione precedente 3, in altre parole vorrei capire come fa a sapere che il primo WRITELN fa parte di FOR ed il secondo no.
Qualcuno me lo spiega? Un ciclo FOR esegue una sola istruzione e bisogna perciò definire un ciclo FOR per ogni singola istruzione?
O esiste effettivamente un'istruzione che termina il ciclo?

2)Che differenza c'è fra le due?
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2006, 22:27   #2
DarkRevenge
Member
 
Iscritto dal: May 2005
Messaggi: 118
E' da tanto che non programmo in Pascal, ma da quello che ricordo il blocco di istruzioni del for doveva essere racchiudo da BEGIN e END;. Per fare un esempio banale col tuo programma:
Codice:
PROGRAM test_iterazioni;   
VAR A : INTEGER;   
BEGIN   
  FOR A:= 3 DOWNTO 1 DO   
  BEGIN
    WRITELN('Conto alla rovescia);
    WRITELN(a);
  END;
  WRITELN('BOOM!');   
  READLN;   
END.
Se non racchiudi le istruzioni tra begin e end; il compilatore considera solo la prima istruzione come blocco del for.

Per quanto riguarda la seconda domanda la differenza sta nella memoria utilizzata per salvare i dati (BYTE = 8bit, WORD = 16bit), e quindi nel range di valori che possono contenere le variabili dichiarate con quei tipi (BYTE = 0...255, WORD = 0...65535).
DarkRevenge è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2006, 22:52   #3
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Ah ok grazie!!

Per quanto riguarda la memoria utilizzata, è in questo modo che si ottimizzano i programmi?
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2006, 23:05   #4
DarkRevenge
Member
 
Iscritto dal: May 2005
Messaggi: 118
Quote:
Originariamente inviato da metallic
Ah ok grazie!!

Per quanto riguarda la memoria utilizzata, è in questo modo che si ottimizzano i programmi?
Beh non proprio... il concetto di ottimizzazione di programmi è qualcosa di molto più complesso, e spesso la differenza tra un tipo di dato e l'altro non si sente neanche in termini di prestazioni. Certo che anche queste piccole cose possono contribuire a creare un programma leggero, ed è inutile occupare più memoria di quanta realmente ne serve.
DarkRevenge è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2006, 23:14   #5
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Quote:
Beh non proprio... il concetto di ottimizzazione di programmi è qualcosa di molto più complesso, e spesso la differenza tra un tipo di dato e l'altro non si sente neanche in termini di prestazioni. Certo che anche queste piccole cose possono contribuire a creare un programma leggero, ed è inutile occupare più memoria di quanta realmente ne serve.
Ah... Beh le imparerò in seguito, ma è possibile fare queste ottimizzazioni in Pascal no?

Sullo stesso sito (meglio che abbandono quel manuale perchè è pieno di caxate) ho trovato scritto che questo programma

Quote:
PROGRAM potenza;
USES crt;
VAR a,b,c,i:INTEGER;
BEGIN
WRITELN('Inserisci un numero');
READLN(A)
WRITELN(' Inserisci esponente ');
READLN(B);
FOR I:= 1 TO b DO
c:=a*a;
END;
WRITELN('Il risultato della potenza è ' ,c);
READLN;
END.
Dovrebbe generare una potenza con una base ed un esponente QUALSIASI, invece nemmeno funziona. Io l'ho modificato così, ma per qualsiasi valore mi restituisce 0:

Quote:
PROGRAM potenza;
USES crt;
VAR a,b,c,i:INTEGER;
BEGIN
WRITELN('Inserisci un numero');
READLN(A)
WRITELN(' Inserisci esponente ');
READLN(B);
FOR I:= 1 TO b DO
c:=a*a;
END;
WRITELN('Il risultato della potenza è ' ,c);
READLN;
END.
Ora, so che non può restituire effettivamente una potenza qualsiasi (perchè quel FOR dice di eseguire b volte quel calcolo, non di elevare a b la var. a (a proposito, com'è che si potrebbe fare ad ottenere quello scopo?), ma dovrebbe almeno resistuirmi il valore di a*a ossia a elevato alla seconda no? Cosa sbaglio? È solo curiosità, perchè esiste un modo molto più semplice per calcolare l'elevato 2, ossia:

Quote:
PROGRAM elevato_due;
VAR a : INTEGER;
BEGIN
WRITE('Inserisci il numero da elevare alla seconda: ');
READLN(a);
WRITE('Il risultato è: ',a*a);
READLN;
END.
P.S. Ora tu in cosa programmi?
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837

Ultima modifica di metallic : 18-02-2006 alle 23:17.
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 00:49   #6
caviccun
Senior Member
 
L'Avatar di caviccun
 
Iscritto dal: Sep 2005
Città: Genova
Messaggi: 1927
Quote:
Originariamente inviato da metallic
Ah... Beh le imparerò in seguito, ma è possibile fare queste ottimizzazioni in Pascal no?

Sullo stesso sito (meglio che abbandono quel manuale perchè è pieno di caxate) ho trovato scritto che questo programma



Dovrebbe generare una potenza con una base ed un esponente QUALSIASI, invece nemmeno funziona. Io l'ho modificato così, ma per qualsiasi valore mi restituisce 0:



Ora, so che non può restituire effettivamente una potenza qualsiasi (perchè quel FOR dice di eseguire b volte quel calcolo, non di elevare a b la var. a (a proposito, com'è che si potrebbe fare ad ottenere quello scopo?), ma dovrebbe almeno resistuirmi il valore di a*a ossia a elevato alla seconda no? Cosa sbaglio? È solo curiosità, perchè esiste un modo molto più semplice per calcolare l'elevato 2, ossia:



P.S. Ora tu in cosa programmi?
scusa l'intromissione , anche io ho usato T.P , ed adesso uso delphi. delphi è un liguaggio visuale che si appoggia al T.P , cioè la sintassi è la stessa , ci sono le uses , ecc , assolutamente uguale , solo che , invece di usare readln si usano le caselle di testo , invece di write , l'output esce su finestre , tutto quì , ti basta poco per impadronirti del sistema , e poi potresti scrivere programmi in windows , che , se sei d'accordo , sono i più usati sui pc attuali. puoi usare facilmente i database , compreso access , che ti permetterebbe di scivere programmi personalizzati per piccoli magazzini , cosa che , con T.P è un pochino problematico.
__________________
SO di non sapere
caviccun è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 13:57   #7
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
Ci sono vari errori nel tuo codice, ecco quello "corretto":
Codice:
{01}Program Potenza;
{02}Uses crt;
{03}Var
{04}     Base, Esponente: integer;
{05}     iIndice, Risultato: integer;
{06}Begin
{07}     Write('Inserire il numero da elevare: ');
{08}     readln(Base);
{09}     Write('Inserire l''esponente a cui elevare il numero: ');
{10}     readln(Esponente);
{11}
{12}     Risultato:=Base;
{13}     IF (Esponente=0) then
{14}           Risultato:=1
{15}     ELSE IF (Esponente=1) then
{16}           Risultato:=Base
{17}     ELSE BEGIN
{18}           FOR iIndice:=2 to Esponente DO
{19}               Risultato:=Risultato*Base;
{20}     END;
{21}
{22}     Writeln('Il risultato e'': ',Risultato);
{23}     readln;
{24}End.
Qui sono i tuoi errori:
TUO CODICE:
Codice:
FOR I:= 1 TO b DO 
c:=a*a;
CODICE CORRETTO:
Codice:
     Risultato:=Base;
     FOR iIndice:=2 to Esponente DO
           Risultato:=Risultato*Base;
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC

Ultima modifica di leadergl : 23-02-2006 alle 23:17.
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 20:22   #8
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da caviccun
scusa l'intromissione , anche io ho usato T.P , ed adesso uso delphi. delphi è un liguaggio visuale che si appoggia al T.P , cioè la sintassi è la stessa , ci sono le uses , ecc , assolutamente uguale , solo che , invece di usare readln si usano le caselle di testo , invece di write , l'output esce su finestre , tutto quì , ti basta poco per impadronirti del sistema , e poi potresti scrivere programmi in windows , che , se sei d'accordo , sono i più usati sui pc attuali. puoi usare facilmente i database , compreso access , che ti permetterebbe di scivere programmi personalizzati per piccoli magazzini , cosa che , con T.P è un pochino problematico.
wow anchio ho iniziato col TP mitico! penso che però è meglio che impara un pò il pascal prima di passare a delphi.. almeno si toglie qualche dubbio come quello che ha postato.. senza complicarsi con oggetti e interfaccie! poi il passaggio a delphi è gratis
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 22:51   #9
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Quote:
Ci sono vari errori nel tuo codice
Fosse il mio quel codice... C'era scritto su un manuale!
L'ho già sostituito

Quote:
ecco quello "corretto":
2 alla terza fa 16?

C'è qualcosa di sbagliato nel codice...
Però prima di questo, me lo spiegheresti passo-passo? Così leggendolo non riesco a capire esattamente cosa fa, le funzioni della varie variabili (in particolare iIndice),ecc...
grazie

Comunque, "uses [...]" a cosa serve?

Quote:
e poi potresti scrivere programmi in windows
Ho trovato Dev-Pascal (un IDE eccellente, ma devo ancora imparare ad usarlo ) che permette di scrivere programmi in Pascal in concomitanza con le GTK o le API di Windows
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:13   #10
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da metallic
Fosse il mio quel codice... C'era scritto su un manuale!
L'ho già sostituito
bel manuale
Quote:
Originariamente inviato da metallic
2 alla terza fa 16?

C'è qualcosa di sbagliato nel codice...
Però prima di questo, me lo spiegheresti passo-passo? Così leggendolo non riesco a capire esattamente cosa fa, le funzioni della varie variabili (in particolare iIndice),ecc...
grazie
allora indice non è altro che una variabile che conta il numero di cicli.. non serve all'algoritmo in se, ma al programma per capire quando finire di ciclare
per capire devi fare una tabella dove scrivi il valore delle variabili passo-passo.
esempio: decidi di mettere base=2 e esponente=2
quindi risultato alla riga "risultato=base" diventa 2, poi indice diventa 1, il ciclo viene eseguito perchè 1<esponente, e vai avanti nel ciclo e per tutti i cicli

adesso non mi ricordo più l'esatto comportamento di FOR indice:=1 TO esponente.. forse si comporta come <= e non come <, e quindi il ciclo viene eseguito anche con indice=esponente (sarebbe l'errore di cui parlavi)
Quote:
Originariamente inviato da metallic
Comunque, "uses [...]" a cosa serve?
serve a includere librerie nel tuo programma. una libreria non è altro che un file scritto in PASCAL (però con estensione *.unit) contenente delle funzioni che poi puoi usare nei tuoi programmi. crt credo che contiene le funzioni per stampare a schermo ad esempio (è troppo che non uso pascal.. )
Quote:
Originariamente inviato da metallic
Ho trovato Dev-Pascal (un IDE eccellente, ma devo ancora imparare ad usarlo ) che permette di scrivere programmi in Pascal in concomitanza con le GTK o le API di Windows
vacci piano con la grafica.. prima devi essere sicuro con gli algoritmi
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:19   #11
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
ho corretto l'algoritmo
m'ero scordato di far partire il FOR da 2 visto che:
Base^0=1
Base^1=Base
Base^X= ... (con X>1)
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:27   #12
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Quote:
FOR iIndice:=1 to Esponente DO
Risultato:=Risultato*Base;
Non riesco a capire questo:
mettiamo che la base è 2 e l'esponente è 3, allora lui esegue tre volte Risultato*Base, ovvero tre volte 2*2
Ma poi quando ha i tre risultati (4,4,4) cosa ne fa? Come fa a restituirci il risultato della potenza? Credo che la soluzione stia nella seconda riga, ma non riesco proprio a coglierla...
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:28   #13
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Quote:
ho corretto l'algoritmo
m'ero scordato di far partire il FOR da 2 visto che:
Base^0=1
Base^1=Base
Base^X= ... (con X>1)
Buono

Non è che ti potresti unire alla spiegazione? Non riesco a capire bene il funzionamento di FOR...
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:33   #14
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da metallic
Non riesco a capire questo:
mettiamo che la base è 2 e l'esponente è 3, allora lui esegue tre volte Risultato*Base, ovvero tre volte 2*2
Ma poi quando ha i tre risultati (4,4,4) cosa ne fa? Come fa a restituirci il risultato della potenza? Credo che la soluzione stia nella seconda riga, ma non riesco proprio a coglierla...
fidati.. fai una tabellina la prima volta risultato è uguale a base (a causa dell'assegnamento prima del ciclo), quindi risultato*base = base*base che è il nuovo valore di risultato! la seconda volta quindi risultato*base sarebbe (base*base)*base e lo metti in risultato... riesci a seguire?
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:39   #15
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Aaaaaaah ora è chiaro!!!

Va a riprendere il risultato del calcolo di prima giusto? E lo "ricicla" fino alla fine del ciclo FOR?

Io credevo che una volta che il ciclo fosse ricominciato avrebbe azzerato tutto...

Questa è una di quelle cose per cui deve scattare la "scintilla" in testa, prima non c'è modo di capirla
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:42   #16
metallic
Member
 
Iscritto dal: Oct 2005
Messaggi: 155
Quote:
serve a includere librerie nel tuo programma. una libreria non è altro che un file scritto in PASCAL (però con estensione *.unit) contenente delle funzioni che poi puoi usare nei tuoi programmi.
Non vorrei abusare della tua pazienza

Ma... Queste librerie sono indispensabili? Cioè io non sapevo nemmeno esistessero... Ne serve almeno una per I/O o no? Perchè con FreePascal non ne ho mai avuto la necessità... Altre dove le trovo?
__________________
cAsE -> Viper Midi Tower aLiMeNtAtOrE -> RaptoxX 350W 1.3V mAiNbOaRd -> GigaByte K8NS (nForce 3 250) pRoCeSsOrE -> AMD Sempron 64 2800+ rAm -> Apacer 512MB PC3200 chipset Samsug (DDR-400MhZ) sChEdA vIdEo -> Asus Radeon A9250 256DDR dIsCo RiGiDo -> IBM Deskstar 40GB 7200rpm mAsTeRiZzAtOrE -> Plextor PXW161040A (16x10x40x) -> Powerd by... Slackware Linux 10.2 ->] registered Linux user number 401837
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:50   #17
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
Quote:
Originariamente inviato da metallic
Aaaaaaah ora è chiaro!!!

Va a riprendere il risultato del calcolo di prima giusto? E lo "ricicla" fino alla fine del ciclo FOR?

Io credevo che una volta che il ciclo fosse ricominciato avrebbe azzerato tutto...

Questa è una di quelle cose per cui deve scattare la "scintilla" in testa, prima non c'è modo di capirla
si comporta così perchè la variabile risultato è sempre la stessa e quindi non è riinizializzata ad ogni ciclo
Quote:
Originariamente inviato da metallic
Non vorrei abusare della tua pazienza

Ma... Queste librerie sono indispensabili? Cioè io non sapevo nemmeno esistessero... Ne serve almeno una per I/O o no? Perchè con FreePascal non ne ho mai avuto la necessità... Altre dove le trovo?
si le librerie sono indispensabili, ma alcuni compilatori includono di default quelle basilari sapendo che senza le librerie puoi solo assegnare valori a variabili poco utile!
comunque se hai una reference per il pascal.. se cerchi la funzione che vuoi utilizzare di solito c'è scritto se devi includere qualche libreria in particolare. il tuo manuale non ne parla (anche se è scarsamente affidabile )? sennò prova a googlare
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 23:54   #18
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
questa è quella che io chiamo reference http://www.math.uni-hamburg.de/it/so...its/node1.html spero che te la cavi con l'inglese
ci sono tutte le funzioni divise per libreria (o unità in pascal)
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 00:03   #19
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7260
effettivamente crt non ti serve nel programma di prima... writeln e readln sono funzioni che non sono in nessuna librerie, ma sono proprio incluse nel pascal! ok adesso è chiaro..
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2006, 09:42   #20
leadergl
Senior Member
 
Iscritto dal: May 2003
Messaggi: 1113
Ciao,
ieri ti avevo anche commentato il codice in un altro post (oltre a correggere i piccoli errori) ma poi ho premuto un tasto sbagliato ed ho perso tutto...mi rompevo di riscrivere il tutto ma lo faccio adesso:
Codice:
{01}Program Potenza;
{02}Uses crt;
{03}Var
{04}     Base, Esponente: integer;
{05}     iIndice, Risultato: integer;
{06}Begin
{07}     Write('Inserire il numero da elevare: ');
{08}     readln(Base);
{09}     Write('Inserire l''esponente a cui elevare il numero: ');
{10}     readln(Esponente);
{11}
{12}     Risultato:=Base;
{13}     IF (Esponente=0) then
{14}           Risultato:=1
{15}     ELSE IF (Esponente=1) then
{16}           Risultato:=Base
{17}     ELSE BEGIN
{18}           FOR iIndice:=2 to Esponente DO
{19}               Risultato:=Risultato*Base;
{20}     END;
{21}
{22}     Writeln('Il risultato e'': ',Risultato);
{23}     readln;
{24}End.
Analizziamo questo codice riga per riga inserendo per prima la "teoria" sull'elevazione a espenente:

Se prendiamo un generico numero (Base) e lo vogliamo elevare a potenza (Esponente): X^Y (simbolo che si trova in genere sulle calcolatrici) dobbiamo moltiplicare il nostro numero (Base) per se stesso (Base) tante volte quanto è il valore dell'esponente meno una dato che:

Base=2 Esponente=5
2^0=1
2^1=2 (che è la nostra Base di esempio)
2^2=4
2^3=8
2^4=16
2^5=32
32 è quindi il nostro risultato che è anche dato da: 2*2*2*2*2=32

Questo (2*2*2*2*2)=(2^5) si analizza in programmazione nel seguente modo:
1) Si ricerca il caso Base (o i casi base)
2) Si ricerca il passo induttivo

Siccome il nostro problema è molto semplice è un po esagerato parlare di "passo induttivo"...comunque:
1) Il caso, o i casi, base è quella particolare situazione in cui non c'è alcun bisogno di fare dei calcoli perchè il risultato è noto per qualsiasi valore di ingresso (in questo caso per qualsiasi valore della nostra base).

I nostri casi base saranno quando l'esponente è UGUALE a 0 oppure UGUALE ad 1 perchè in entrambi i casi i valori di uscita sono conosciuti:
Quote:
Base^0=1
Base^1=Base
2) Il nostro "passo induttivo" è invece quella formulazione matematica del problema che ci permette di scindere il problema in sotto-problemi di più semplice risoluzione sino ad arrivare ad una serie di problemi talmente semplici che si possono risolvere tramite i nostri casi base.
Come detto nel nostro problema questo non serve poichè è un problema semplicissimo (ed anche perchè in genere questo modo di procedere si utilizza con le funzioni ricorsive), comunque vediamo il nostro algoritmo che effettua la moltiplicazione:
(2*2*2*2*2) = (2^5)
Codice:
{12}     Risultato:=Base;
{13}     IF (Esponente=0) then
{14}           Risultato:=1
{15}     ELSE IF (Esponente=1) then
{16}           Risultato:=Base
{17}     ELSE BEGIN
{18}           FOR iIndice:=2 to Esponente DO
{19}               Risultato:=Risultato*Base;
{20}     END;
Questo è il vero codice del programma e questo:
Codice:
{12}     Risultato:=Base;
{18}           FOR iIndice:=2 to Esponente DO
{19}               Risultato:=Risultato*Base;
è la porzione di codice che ci restituisce il risultato.
Siccome abbiamo detto che per esponenti <2 (ovvero 0 ed 1) siamo nel nostro caso base qui dovremo trattare solo esponenti UGUALI o MAGGIORI di 2 e dovremo effettuare l'operazione:
"Base * Base" = Base^2 successivamente
(Base^2) * Base = Base^3
...
(Base ^ (N-1) * Base = Base^N risultato voluto
Che come vedi sono solo delle semplici moltiplicazioni che in programmazione potremmo scrivere:
Codice:
VAR Risultato, Base, Esponente: Integer;

{se esponente = 5}
Risultato=Base*Base     {2}
Risultato=Risultato*Base{3}
Risultato=Risultato*Base{4}
Risultato=Risultato*Base{5}
che semplificato sarebbe:
Codice:
{18}           FOR iIndice:=2 to Esponente DO
{19}               Risultato:=Risultato*Base;
Inoltre ho usato USES CRT; poichè volevo mettere il comando:
Codice:
clrscr; {pulitura schermo}
che fa parte di quella libreria...ma poi mi son dimenticato

Spero che adesso sia tutto chiaro, in caso contrario chiedi pure
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC
leadergl è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
Tesla, è ufficiale: i Robotaxi fa...
DeepL sempre più evoluto: arriva ...
Un vecchio assegno venduto a 4.800 volte...
Portatili Dell 16 in offerta su Amazon: ...
Amazfit punta ancora più in alto:...
Deep tech e venture capital: ScaleUp Lab...
GWM ha creato un font specifico per i di...
Oro rosa e charm Les Néréi...
La XPeng P7+ è salpata in direzio...
Quali sono i componenti più affid...
Amazon Haul raddoppia lo sconto: -30% su...
Germania e Danimarca accelerano sull'eol...
Azienda cinese che chiede aiuto ad una a...
Per aumentare la competitività ne...
I nuovi MacBook con M5 Pro e Max usciran...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v