Sign in to follow this  

Recommended Posts

Ho realizzato un piccolo programma con realbasic che crea un anteprima di un file jpg più grande.

Il problema é che se il programma gira sotto mac il file generato é perfetto, mentre se gira sotto win 2k l'immagine appare sgranata !!!

Posted Image

Qualcuno sa perché e come si può risolvere ??

I comandi usati sono:

- Dim exporter as QTGraphicsExporter

- Dim p, a as Picture

- Dim r as Boolean

- exporter=GetQTGraphicsExporter("JPEG")

- a=NewPicture(200,n,32)

- a.Graphics.drawpicture p, 0, 0, 200, n, 0, 0, p.width, p.height

- f=GetFolderItem("ppp.jpg")

- r=exporter.SavePicture(f,a)

Share this post


Link to post
Share on other sites
Guest

Visto che è QuickTime che si occupa della gestione del multimedia e del salvataggio del file, hai verificato che le impostazioni di QuickTime, nonchè la versione di QuickTime sia la stessa?

Share this post


Link to post
Share on other sites

Comunque usando solo comandi di quickTime (ovvero trasformando l'immagine in un traccia QT Video e ridimensionandola per poi salvarla come frame singolo) sono riuscito a risolvere il problema ma è terribilmente lento !!!

Share this post


Link to post
Share on other sites
Guest

Salve a tutti. Sono uno studente alla facoltà di matematica ed avrei la necessità di scrivere un programma che letta una stringa del tipo "sin(x)+cos(x)-x^2" (dove ho opportunamente definito ^) ne calcolo il valore in un punto x scelto dall'utente.

Qualcuno potrebbe dirmi come fare o mostrarmi il codice necessario?

Grazie a tutti!

Share this post


Link to post
Share on other sites
Guest

Veramente è un mio pallino da anni. Comunque mi farebbe comodo usarlo per un programma da realizzare in un corso universitario!

Share this post


Link to post
Share on other sites

Vabbe', non ho mai fatto una cosa del genere, ma proviamoci pure. La prima cosa che mi viene in mente è di costruire un albero. Ogni nodo rappresenterà un simbolo; i nodi che corrispondono ad operatori avranno gli operandi come discendenti, le costanti e le variabili saranno le foglie dell'albero, i nodi con priorità più altra saranno più in basso (la priorità di un operatore è definita secondo le convenzioni dell'algebra; le costanti e le variabili si assumono a priorità infinita).

Per fare questo, leggi i simboli da sinistra a destra. Quando devi aggiungere un nodo confronta la sua priorità con quella della foglia più a destra, poi con il suo genitore e così via finche non trovi una posizione occupata da un nodo di priorità maggiore o uguale ma con un genitore di priorità minore di quella dell'elemento da inserire. Naturalmente se arrivi in cima all'albero il nuovo nodo diventerà la radice.

Quando sostituisci un elemento ad un altro, questo diventerà il suo primo operando.

La posizione da cui partire per l'inserimento del prossimo elemento è sempre quella del primo operando mancante dell'ultimo operatore, oppure del suo ultimo operando se non ne manca nessuno.

Dopo aver seguito questo algoritmo, se la mia idea è giusta (non offro garanzie, l'ho scarabocchiata in cinque minuti su un post-it), avrai un albero ordinato che rappresenta l'espressione.

A questo punto puoi già utilizzarlo per risolvere l'espressione. Se devi riutilizzarlo più volte ti conviene convertirlo in un vettore secondo la notazione polacca inversa.

Lo so che un esempio aiuterebbe molto, ma disegnare col computer è una palla e non ho lo scanner. Se però è proprio necessario proverò a mettere insieme qualcosa.

Share this post


Link to post
Share on other sites
Guest

La ringrazio per i preziosissimi suggerimenti e chiedo scusa se le chiedo se può scrivere magari qualche frammento di codice in c++ o c, vengo dal turbo pascal e solo da poco ho iniziato a studiare il c/c++

grazie mille, gennaro tangari

Share this post


Link to post
Share on other sites
Guest

inoltre scusi il nuovo disturbo. In macos x c'è il compilatore standard unix "cc". Quando compilo un semplice programmino tipo "hello world!" ottengo dopo una compilazione senza errori, un file a.out, com'è possibile a questo punto ottenere il file eseguibile?

chiedo ancora scusa alla mia inesperienza, ma alla facoltà di matematica non si fa troppa programmazione, anzi.....

cordiali saluti, gennaro

Share this post


Link to post
Share on other sites

[Rispondo solo ora perché sono stato fuori città negli ultimi giorni.]

Per cominciare diamoci del tu, che se no mi sento vecchio. ;-)

Dunque, il problema del linguaggio e quello dell'algoritmo sono ortogonali. Se non conosci ancora bene il C puoi implementare l'algoritmo in Pascal e convertirlo più tardi; oppure puoi imparare il C e riprendere l'algoritmo in un secondo tempo. Fare entrambe le cose contemporaneamente può essere controproducente; comunque vedi tu...

Se hai bisogno di aiuto su una specifica parte del programma devi per lo meno dirmi di cosa si tratta. A che punto sei?

Per utilizzare cc immagino si debba indicare il file di output sulla linea di comando. Non conosco la sintassi esatta, controlla la documentazione.

Inoltre il programma va linkato. Non ho Mac OS X, quindi non so che linker venga fornito.

Share this post


Link to post
Share on other sites
Guest

Per dire la verità dopo aver letto il tuo preziosissimo consiglio, ho cominciato a studiare gli alberi, perchè in passato non li avevo mai usati. Mi permetto di chiderti un esempio concreto, ad esempio se la stringa inserita è "exp(x)-x" come funziona esattamente l'algoritmo?

grazie ancora per i preziosissimi consigli!

Ciao, Gennaro.

Share this post


Link to post
Share on other sites

Dimenticavo un paio di cosette.

Il procedimento che ho descritto per inserire un elemento è necessario solo quando si inserisce un operatore che può avere un argomento a sinistra: in pratica, si tratta di controllare se l'qualche elemento inserito in precedenza come operando destro di un altro operatore non era in realtà il sinistro del nuovo.

L'altra cosa sono le parentesi. Le parentesi indicano semplicemente un pezzo dell'albero da costruire separatamente e da inserire in blocco in una certa posizione. Possiamo considerare la parentesi aperta come un nodo speciale ad un argomento che "blocca" la risalita degli operatori, e la parentesi chiusa come un indicatore che riporta la posizione di inserimento al nodo della parentesi aperta. Quindi finché la parentesi è aperta la sua priorità è la più bassa, cioè nei confronti degli operatori interni ad essa si comporta come un nodo a bassissima priorità che impedisce ad essi di risalire oltre la sua posizione nell'albero e quindi di "uscire" dalla parentesi; quando la parentesi è chiusa si comporta nei confronti degli operatori esterni ad essa come un nodo ad altissima priorità, cioè come un blocco monolitico come una costante o una variabile.

Ed ora, ecco l'esempio che hai chiesto. Per ogni passaggio ho indicato l'elemento da inserire (vengono semplicemente letti da sinistra a destra) e la struttura dell'albero dopo l'inserimento. Ciascun nodo dell'albero è indicato con un numero che rimane fisso (nella pratica può essere l'indice in un array); la struttura dell'albero è data dai collegamenti fra i nodi. La radice è indicata con R seguito dal numero del nodo radice. I nodi che hanno argomenti sono seguiti da parentesi quadre con gli argomenti separati da virgole. Per esempio:

7.+[3,9]

questo indica che il nodo 7 è un operatore somma con i nodi 3 e 9 come operandi.

Quando un argomento non è ancora stato riempito è indicato con "_". Infine, l'ultimo elemento inserito, che può essere "catturato" dall'operatore successivo, è indicato in grassetto.

Esempio: "exp(x)-x*3"

1) "exp": inserito alla radice dell'albero

R: 0

0.exp[_]

2) "(": diventa l'argomento di "exp"

R: 0

0.exp[1]

1.([_]

3) "x": diventa l'argomento di "("

R: 0

0.exp[1]

1.([2]

2.x

4) ")": risalgo fino alla prima parentesi aperta, la chiudo

R: 0

0.exp[1]

1.()[2]

2.x

5) "-": parto dalla parentesi (in grassetto sopra): ha priorità più alta; salgo al nodo exp; anche questo ha priorità più alta; salgo ancora e il nuovo nodo prende il posto della radice, mentre la vecchia radice diviene il suo primo operando

R: 3

0.exp[1]

1.()[2]

2.x

3.-[0,_]

6) "x": inserito come secondo operando del nodo 3

R: 3

0.exp[1]

1.()[2]

2.x

3.-[0,4]

4.x

7) "*": parto dal nodo 4 (in grassetto): ha priorità più alta, salgo; il nodo 3 ha priorità più bassa, mi fermo; il nuovo nodo prende il posto del 4 che diventa il suo primo operando

R: 3

0.exp[1]

1.()[2]

2.x

3.-[0,5]

4.x

5.*[4,_]

8) "3": diventa il secondo operando del nodo 5

R: 3

0.exp[1]

1.()[2]

2.x

3.-[0,5]

4.x

5.*[4,6]

6.3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this