Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - scrivere un programma che permette di fare tutti i tipi di operazioni
Forum - Pascal - scrivere un programma che permette di fare tutti i tipi di operazioni

Avatar
allex (Normal User)
Newbie


Messaggi: 4
Iscritto: 05/01/2012

Segnala al moderatore
Postato alle 11:13
Giovedì, 05/01/2012
salve a tutti mi sono iscritto oggi del linguaggio pascal so abbastanza... ma ho un problema nel creare il tipo di programma che ho messo nel titolo, vi spiego il funzionamento di esso: quando digiti la parola es:'addizione' il programma deve utilizzare la dll che ho creato per eseguire l' operazione, in pratica io non so come devo importarla nel programma e specialmente in quale parte del programma devo scrivere la funzione che mi permetta di fare ciò.
ecco il codice sorgente della dll:

Codice sorgente - presumibilmente Delphi

  1. library addizione;
  2. uses crt;
  3. var add1,add2,add3,add4,somma:real; n_add:integer;
  4. begin
  5. clrscr;
  6. writeln('scrivi numero addendi');
  7. readln(n_add);
  8. if n_add>=2 then
  9. begin
  10. writeln('scrivi valore primo addendo');
  11. readln(add1);
  12. writeln('scrivi valore secondo addendo');
  13. readln(add2);
  14. somma:=(add1+add2);
  15. writeln('ecco la somma');
  16. writeln(somma:6:2);
  17. repeat until keypressed;
  18. end;
  19. if n_add>=3 then
  20. begin
  21. writeln('scrivi valore primo addendo');
  22. readln(add1);
  23. writeln('scrivi valore secondo addendo');
  24. readln(add2);
  25. writeln('scrivi valore terzo addendo');
  26. readln(add3);
  27. somma:=(add1+add2+add3);
  28. writeln('ecco la somma');
  29. writeln(somma:6:2);
  30. repeat until keypressed;
  31. end;
  32. if n_add>=4 then
  33. begin
  34. writeln('scrivi valore primo addendo');
  35. readln(add1);
  36. writeln('scrivi valore secondo addendo');
  37. readln(add2);
  38. writeln('scrivi valore terzo addendo');
  39. readln(add3);
  40. writeln('scrivi valore quarto addendo');
  41. readln(add4);
  42. somma:=(add1+add2+add3+add4);
  43. writeln('ecco la somma');
  44. writeln(somma:6:2);
  45. repeat until keypressed;
  46. end
  47. else writeln('il numero massimo di addedndi è 4');
  48. end.
  49. end.




ma nella compilazione della dll nn ci sono problemi, gli errori li riscontro nell' eseguibile:

Codice sorgente - presumibilmente Delphi

  1. program calcolatrice;
  2. uses crt;
  3. var t_operazione:string [10];
  4. begin
  5. clrscr;
  6. writeln('scrivi il tipo di operazione che vuoi effettuare');
  7. readln(t_operazione);
  8. if t_operazione>=addizione then;
  9. export external ('addizione.dll');



chiaramente devo ancora finire il mio eseguibile, ma credo che questa parte di codice basti a far capire il funzionamento del mio programma.

spero di essere stato chiaro e di nn aver dato l' impressione di un' ignorante.



Ultima modifica effettuata da Phi il 23/01/2012 alle 23:21
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:26
Giovedì, 05/01/2012
Ciao e benvenuto sul form!

Il modo più semplice per risolvere il problema, a mio avviso, è di implementare un' unita in cui inserire le funzioni.
Ecco come fare: http://www.pierotofy.it/pages/guide/Guida_Pascal/Scrivere_ ...
Qui c' è anche un esempio: http://www.pierotofy.it/pages/guide/Guida_Pascal/Esercizi_ ...

PM Quote
Avatar
allex (Normal User)
Newbie


Messaggi: 4
Iscritto: 05/01/2012

Segnala al moderatore
Postato alle 16:27
Giovedì, 05/01/2012
la dll l' ho già creata, ma nn so come "collegarla" all' eseguibile, che tramite l' istruzione di controllo if, then, else dovrà accedere alla dll ed eseguire le istruzioni di essa...
javascript:addsmile(':pat:')

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:10
Giovedì, 05/01/2012
insieme alla dll dovresti aver creato un' altro file, quello lo metti assieme alle librerie statiche (mi scuso se non è il termine adeguato ma l' idea è questa) e dopo uses del programma che deve utilizzare la tua dll metti il nome della tua unit. Stavi cercando questo?

PM Quote
Avatar
allex (Normal User)
Newbie


Messaggi: 4
Iscritto: 05/01/2012

Segnala al moderatore
Postato alle 21:22
Giovedì, 05/01/2012
si... più o meno... sto cominciando a capire come fare, poi ho trovato su questo sito ho trovato, nella guida pascal ho trovato una pagina che spiga il funzionamento dell' istruzione external...
grazie mille

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:34
Giovedì, 05/01/2012
Testo quotato

Postato originariamente da allex:

la dll l' ho già creata, ma nn so come "collegarla" all' eseguibile, che tramite l' istruzione di controllo if, then, else dovrà accedere alla dll ed eseguire le istruzioni di essa...
javascript:addsmile(':pat:')



Quello che hai scritto nella libreria non è utilizzabile perché non ci sono funzioni o procedure, a cui fare riferimento.

Le librerie a collegameto dinamico sono dei "contenitori" che archiviano una o più funzioni. Queste librerie possono essere collegate con più programmi contemporaneamente risparmiando spazio sulla memoria centrale.
Grazie alle librerie a collegamento dinamico si può evitare di inserire delle funzioni uguali in più programmi, in modo da risparmiare spazio sulla RAM.

Ecco la sintassi:
Codice sorgente - presumibilmente Delphi

  1. library nome;
  2.  
  3. procedure nome_funz; export;
  4.  
  5. var ........;
  6.  
  7. begin
  8.  
  9. //istruzioni;
  10.  
  11. end;
  12.  
  13. //si possono inserire quante procedure o funzioni vogliamo
  14.  
  15. exports nome_funz,.......;
  16.  
  17. begin
  18.  
  19. end.


Da notare che dopo il nome della procedura si inserisce l'opzione EXPORT. Alla fine tutti i nomi delle procedure vanno messi nella direttiva EXPORTS per essere esportate.
Per richiamare una dll in un programma su usa la seguente sintassi:
program test_dll;

Codice sorgente - presumibilmente Pascal

  1. procedure nome_funz; external 'nome.dll';
  2.  
  3. begin
  4.  
  5. nome_funz;
  6.  
  7. end.




Ultima modifica effettuata da Poggi Marco il 05/01/2012 alle 22:07
PM Quote
Avatar
allex (Normal User)
Newbie


Messaggi: 4
Iscritto: 05/01/2012

Segnala al moderatore
Postato alle 8:57
Venerdì, 06/01/2012
ah!! ho capito grazie mille a tutti e due, su google non avrei mai trovato due spiegazioni cosi chiare!

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:43
Venerdì, 06/01/2012
Bravo poggi bela spiegazione, io pensavo ai problemi con le librerie statiche e dinamiche in C dato che mi danno problemi un giorno si  e l' altro anche O.o

PM Quote