PDA

View Full Version : Problema pascal


demonbl@ck
25-12-2006, 15:05
Ciao a tutti , ho un problema con il pascal.( e te pareva :muro: )
Dunque , se io con una readln leggo un espressione da tastiera (es. 23+4+5+6*12-34) e poi con un writeln provo a stamparla mi esce

Il risultato e' : 23+4+5+6*12-24

utile no? :D

La domanda era quindi: come faccio a fare in modo che anziche stamparmi il contenuto di "espressione" ( sn fantasioso con i nomi eh? :D ) mi stampi il risultato di espressione?

k0nt3
25-12-2006, 19:47
Ciao a tutti , ho un problema con il pascal.( e te pareva :muro: )
Dunque , se io con una readln leggo un espressione da tastiera (es. 23+4+5+6*12-34) e poi con un writeln provo a stamparla mi esce

Il risultato e' : 23+4+5+6*12-24

utile no? :D

La domanda era quindi: come faccio a fare in modo che anziche stamparmi il contenuto di "espressione" ( sn fantasioso con i nomi eh? :D ) mi stampi il risultato di espressione?
potresti ad esempio calcolare l'espressione :fagiano:

^TiGeRShArK^
25-12-2006, 20:32
potresti ad esempio calcolare l'espressione :fagiano:
basta parsificarla riconoscendo i caratteri di controllo e regolandoti di consenguenza in modo da fargli fare i calcoli giusti....

demonbl@ck
27-12-2006, 17:25
basta parsificarla riconoscendo i caratteri di controllo e regolandoti di consenguenza in modo da fargli fare i calcoli giusti....

tradotto? :D

dunque io ho un costrutto del tipo

begin

writeln('Inserire l'espressione da calcolare');
readln(espressione);
writeln(espressione);

end

io devo fare in modo che la writeln anziche stamparmi il contenuto di espressione ( che mi serve a meno di niente :D ) mi stampi ( sullo schermo) il risultato dell'espressione che sta dentro alla variabile "espressione" (di tipo string ovviamente).

mi potresti postare un esempio di codice? (è il mio primo programma dopo quello dei quadratini a random o della bandiera italiana :cry: )

k0nt3
27-12-2006, 19:22
praticamente devi prendere la stringa contenente l'espressione, dividerla in tanti pezzi e calcolarla.
ad esempio.. se hai "8-2" leggi la stringa fino al primo operatore (in questo caso fino al "-"), e salvi il risultato (che sarà "8"), poi leggi fino al prossimo operatore oppure fino alla fine dell'espressione nel caso non ci sono più operatori (come in questo caso), e salvi sempre quello che hai letto (ora sarà "9"). una volta che hai fatto tutto questo lavoro che si chiama PARSING dovresti essere in grado di calcolarti l'espressione rispettando le regole della matematica (come le precedenze degli operatori ecc...).
comunque non è proprio una cosa facile facile :)
se hai idee postale ;)

vizzz
27-12-2006, 19:32
anche perchè dovresti rispettare le precedenze, parentesi....
edit. ops ho letto troppo frettolosamente il post di k0nt3...chiedo scusa :)

demonbl@ck
27-12-2006, 20:07
sapresti fare un esempio? non riesco a seguirti.. come faccio a fermare la lettura al primo operatore?

es.

writeln('blablabla');
readln(espressione);

e poi???

azz cm mi sento niubbo :doh:

demonbl@ck
05-01-2007, 23:58
up

demonbl@ck
06-04-2007, 19:59
up :confused:

k0nt3
06-04-2007, 22:27
non è una cosa banale quella che vuoi fare... mmm ti consiglio di fare una cosa più semplice e cioè prendi un input alla volta. puoi fare un ciclo dove ti chiede di inserire gli operatori e l'operazione da compiere e magari stabilire che termina quando inserisci il carattere "=".
un esempio:
"5"
"+"
"3"
"="
e il programma sputa fuori 8 elaborando i dati :fagiano: cosa ne dici? inoltre visto che trattare espressioni di lunghezza teoricamente infinita non è banale magari ti consiglio di pensare a espressioni semplici e con un numero di elementi predeterminato

RagingBull
07-04-2007, 00:12
spero di aver capito bene....ma in questo caso nn è più logico fare un passaggio tra variabili di tipo diverso???

esempio:

var espressione:string;
risultato:real;

begin

writeln "scrivi l'espressione:";
readln espressione;
write "espressione=";
risultato = espressione;
writeln "risultato";
end.

non scrivo due righe in pascal da parecchio....forse l'ho fatta troppo facile :p

skerdz
07-04-2007, 00:28
spero di aver capito bene....ma in questo caso nn è più logico fare un passaggio tra variabili di tipo diverso???

esempio:

var espressione:string;
risultato:real;

begin

writeln "scrivi l'espressione:";
readln espressione;
write "espressione=";
risultato = espressione;
writeln "risultato";
end.

non scrivo due righe in pascal da parecchio....forse l'ho fatta troppo facile :p

Come fai a dare un valore string ad una variabile real?
Poi il Pascal mi sembrava un attimino diverso come sintassi...

Ciao

demonbl@ck
07-04-2007, 16:19
spero di aver capito bene....ma in questo caso nn è più logico fare un passaggio tra variabili di tipo diverso???

esempio:

var espressione:string;
risultato:real;

begin

writeln "scrivi l'espressione:";
readln espressione;
write "espressione=";
risultato = espressione;
writeln "risultato";
end.

non scrivo due righe in pascal da parecchio....forse l'ho fatta troppo facile :p

La sintassi sarebbe

program espressione;
var espressione:string;
risultato:real;

begin

writeln ('scrivi l'espressione);
readln (espressione);
write ('espressione=');
risultato := espressione;
writeln ('risultato');
end.

però stai cercando di assegnare un valore string ad una variabile real, con l'inevitabile errore di sintassi "Type Mismatch".

cionci
07-04-2007, 18:07
E' una cosa abbastanza complicata da fare...soprattutto se sei agli inizi...

RagingBull
08-04-2007, 22:56
sapevo di averla fatta troppo facile :D

comunque mi avete dato addosso per un ":" che mi sono mangiato :D

tanto per avere pure io una delucidazione: possibile ke non ci sia un modo per effettuare il passaggio tra variabili di tipo diverso?