Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-02-2006, 21: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, 21: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, 21: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, 22: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, 22: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 22:17.
metallic è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2006, 23: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, 12: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 22:17.
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 19:22   #8
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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, 21: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, 22:13   #10
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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, 22: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, 22: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, 22: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, 22:33   #14
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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, 22: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, 22: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, 22:50   #17
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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, 22:54   #18
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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 23-02-2006, 23:03   #19
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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, 08: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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Apple rinvia due novità di iOS 27...
Una memoria ferroelettrica raggiunge 10 ...
Honor Magic 9, Pro Max e Super Edition: ...
24 offerte Amazon da non perdere, dalla ...
Apple starebbe progettando i propri cont...
Niente borsa per OpenAI prima del 2027: ...
Meta potrebbe aver mostrato in anticipo ...
Bicicletta elettrica L26 a 474,05€: e-bi...
NVIDIA RTX PRO 5500 Blackwell: 84 GB di ...
Sei alla ricerca di un buon gruppo di co...
Blizzard annuncia un nuovo StarCraft: la...
Ecobonus al 65%: il governo valuta il ri...
Biscotti fatti con bottiglie di plastica...
SIHOO B100 a 161€ e B100 Pro a 209€: sed...
ClickFix dilaga: un finto captcha e un c...
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: 11:39.


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