Pascal...[non Mattia come dice Tony] ; )
riposto qui un intervento che ho fatto forse fuori luogo in un altro "settore"
così dici che va bene Tony?
non scomodiamo il grande Pirandello...feremmo solo..."un buco nel cielo di carta..." ; )
saluti
il vecchio
citazione:
hei Marcello!
ho finito di risolvere il problema..ed è esatto...(mi pare..al 99%)
per caso ti intendi anche di Turbo Pascal?
avevo infatti fatto, prima di affrontare il problema + rigorosamente,
un programma in Pascal che mi sommasse i vari segmentini della curva.
ora tutto era legato ad un K di approssimazione, per cui ovviamente + è piccolo il K, migliore dovrebbe essere il risultato.
ora fino a k=0,00001 il risultato ottenuto è decisamente soddisfacente (almeno in base al mio risultato "rigoroso") poi però mi sballa di brutto!!
a parte il fatto che dopo, per calcolarmi il valore, ci mette qualcosa come 1 ora e mezza!!! ma soprattutto il risultato sballa completamente!! è possibile che dopo una certa approssimazione il Pascal vada in pallone??
questo quesito è ovviamente rivolto a chiunque sappia qualcosa in merito al Pascal..
così dici che va bene Tony?
non scomodiamo il grande Pirandello...feremmo solo..."un buco nel cielo di carta..." ; )
saluti
il vecchio

Risposte
*quote:
..."un buco nel cielo di carta..."
ha ragione, vecchio signor Meis! che piacere parlarLe di altre marionette ...
vengo al punto:
in molti abbiamo "quasi toccato la perfezione" di risultati in semplici "loop" di programma, e poi (il meglio è nemico del bene, ricordava cannigo) siamo piombati nella più incredibile spazzatura.
c'è sempre dietro qualche nostro tentativo di usare uno strumento al di là dei suoi limiti.
ad es. tempo fa in questo forum, qualcuno, cercando un limite, fece vedere che un'innocentissima funzione, diagrammata per valori vicinissimi allo zero, invece di essere praticamente una retta orizzontale (come madre natura e ogni elementare ragionamento dettavano), oscillava in modo inquietante, aumentando parossisticamente d'ampiezza man mano che si avvicinava allo zero [e il bello è che, invece di dar retta al proprio ragionamento, hanno ipotizzato che potessero esitere dei "falsi dottori"];
non mi ricordo gli estremi, ma son sicuro che, commentando la loro "fede" nell'abuso dei limiti dello strumento [perchè qui stava la ragione di quel diagramma illusorio (un'altra fata morgana, toccano tutte a te, vecchio?)], avevo riassunto con un "non cavi sangue da una rapa"; se fai una search per "rapa" a mio nome, forse ritrovi il gustoso topic (trascura le eventuali occorrenze di "rapa" nel mio curriculum).
torno, ed è un caso, all'argomento, con un interrogatorio:
[1] quante volte figliolo, quante volte, hai ripetuto il loop?
[2] com'era definita la variabile del loop (real, etc.)?
[3] (consegue dalle prec.) quant'era l'incremento?
[4] com'eran definite le variabili dell'espressione calcolata (real, et.)?
[5] qual'era il criterio di uscita dal loop?
io mi son trovato a oscillare migliaia di volte intorno a una soluz. prima cadere entro l'epsilon che avevo stabilito per uscire
[6] aggiungi un contatore del numero di ripetiz. e vedi come varia da quando il loop "grossolano" funzionava a quando quello "raffinato" ci mette una vita.
[7] a latere... se cerchi di integrare in coord cartes. una funz. tipo semicerchio, vedi che, in prossimità dei due punti estremi è praticamente verticale, e questo ti comporta una forte imprecisione
come vedi, sto orientando questa prima analisi alla precisione delle variabili da te usate; non è detto che basti, ma è un inizio.
(pover'a ttè quando sbrodolerò il prossimo intervento!)
poi, forse, possiamo usare un semplicissimo esempio (area del semicerchio centrato nell'origine) postando qui le poche rige dei sorgenti, e ferocemente commentandole.
forse sta prendendo una piega divertente
tony
P.S.
ma tu, vecchio, il signor Meis quando l'hai conosciuto?
*Edited by - tony on 17/04/2004 02:56:19
dunque Tony...non te la prendere...ma non è che io abbia capito gran che del tuo intervento...che diavolo è 'sto "loop"??? per quanto riguarda le variabili sono tutte in real...questa è l'unica cosa che ho capito...
per quanto riguarda il mio incontro col Signor Meis...purtroppo è avvenuto dopo la "morte" prematura del compianto Mattia Pascal...notizia pervenutami solo qualche mese fa...quando ho intrapreso lo studio di Pirandello (sono in 5° scientifico...)
ciao
grazie e scusa ancora se non sono all'altezza delle tue spiegazioni..
P.S.
a proposito...ma tu stai su un altro fuso orario o davvero consulti il forum alle 3 di notte??????
per quanto riguarda il mio incontro col Signor Meis...purtroppo è avvenuto dopo la "morte" prematura del compianto Mattia Pascal...notizia pervenutami solo qualche mese fa...quando ho intrapreso lo studio di Pirandello (sono in 5° scientifico...)

ciao
grazie e scusa ancora se non sono all'altezza delle tue spiegazioni..
P.S.
a proposito...ma tu stai su un altro fuso orario o davvero consulti il forum alle 3 di notte??????

int a = 1
repeat
a=a+1
until a<1
La sintassi dovrebbe essere capibile... Questo è un loop. Ovvero quando un calcolo comincia a richiamare parti di se stesso all'infinito...
Meglio, diciamo che se attivi la funzione di ripetizione nel tuo lettore cd hai messo il cd in loop...
repeat
a=a+1
until a<1
La sintassi dovrebbe essere capibile... Questo è un loop. Ovvero quando un calcolo comincia a richiamare parti di se stesso all'infinito...
Meglio, diciamo che se attivi la funzione di ripetizione nel tuo lettore cd hai messo il cd in loop...
Come è stato detto, un loop (ciclo) è l'esecuzione iterativa di una o più istruzioni che si ripetono in un programma.
Vecchio, se vuoi avere maggiori informazioni, c'è un testo fondamentale sugli algoritmi e le strutture dati, realizzato dal padre del linguaggio Pascal:
"Algorithms + Data Structures = Programs"
Niklaus Wirth
Prentice-Hall 1975
ISBN 0-13-022418-9
Vecchio, se vuoi avere maggiori informazioni, c'è un testo fondamentale sugli algoritmi e le strutture dati, realizzato dal padre del linguaggio Pascal:
"Algorithms + Data Structures = Programs"
Niklaus Wirth
Prentice-Hall 1975
ISBN 0-13-022418-9
scusa, vecchio, per il termine loop in inglese per descrivere una cosa che tu fai in italiano da chissà quanto tempo.
(in Basic è addirittura una parola riservata del linguaggio, mentre non c'è in Pascal); e magari avete addirittura gli help in italiano.
non è detto che ci si possa capire d'acchito; pian piano arriveremo al nodo.
il tuo increm. "cattivo" è 10^-6, no?
non è piccolissimo, ma comunque riprova dichiarandole "double", e vedi se le cose migliorano e il punto in cui van male si sposta;
se sì, riprova con "extended".
ma prova anche a descriverci quanto chiedevo negli altri punti.
buon lavoro.
tony
*Edited by - tony on 18/04/2004 02:49:02
(in Basic è addirittura una parola riservata del linguaggio, mentre non c'è in Pascal); e magari avete addirittura gli help in italiano.
non è detto che ci si possa capire d'acchito; pian piano arriveremo al nodo.
*quote:
...per quanto riguarda le variabili sono tutte in real...[vecchio]
il tuo increm. "cattivo" è 10^-6, no?
non è piccolissimo, ma comunque riprova dichiarandole "double", e vedi se le cose migliorano e il punto in cui van male si sposta;
se sì, riprova con "extended".
ma prova anche a descriverci quanto chiedevo negli altri punti.
buon lavoro.
tony
*Edited by - tony on 18/04/2004 02:49:02
mm..mi sento sempre + ignorante...cos'è l'incremento cattivo??? gli help sono in inglese...e infatti non mi sono per niente d'aiuto
ho provato a dichiarare le variabili con double o extended...ma non mi compila il programma..credo a causa del fatto che forse non posso operare con seno e coseno con quel tipo di variabili...
cmq...per togliere ogni dubbio..
questo è il listato del programma (ovviamente ho modificato la formula "risolutrice" per creare contestazioni...cmq + o meno le somiglia...)
se invece ritenete che io possa postare il "vero" testo del programma fatemi sapere...
spero con questo che tu Tony riesca a dare risposta alle tue domande...visto che io non so risponderti...sorry...
aspetto vostre risposte

ho provato a dichiarare le variabili con double o extended...ma non mi compila il programma..credo a causa del fatto che forse non posso operare con seno e coseno con quel tipo di variabili...
cmq...per togliere ogni dubbio..
questo è il listato del programma (ovviamente ho modificato la formula "risolutrice" per creare contestazioni...cmq + o meno le somiglia...)
program curva_strana;
uses crt;
const
k=0.001;
R=0.5;
var
S,a,a_0,L_0:real;
function tan(x:real):real;
begin
tan:=sin(x)/cos(x);
end;
begin
clrscr;
s:=0;
a:=0;
repeat
a_0:=a+k;
L_0:=*R*sqrt(sqr(tan(a_0))+sqr(tan(a))+*tan(a_0)*tan(a)*sin(2*k));
S:=L_0+S;
a:=a_0;
until a+k>pi/4;
writeln(S:10:6);
se invece ritenete che io possa postare il "vero" testo del programma fatemi sapere...
spero con questo che tu Tony riesca a dare risposta alle tue domande...visto che io non so risponderti...sorry...
aspetto vostre risposte

*quote:
...cos'è l'incremento cattivo??? [vecchio]
intendevo quello che tu lamenti che fa sballare le tue prove.
grazie del listato. lo scarico, ci lavoro sopra, e, in un fuso più opportuno

proporrei, per la limpidezza, di occuparci del seguente problema:
" calcolare l'arco di una semicirconf. di raggio 2 (centro nell'origine, quadranti I e II)"
è sufficientemente asettico, direi.
tra l'altro, provaci anche tu, per vedere se ti da gli stessi guai.
altra domanda, "che pascal usi?" (io ho versioni antidiluviane)
tony
ah io no!! mi dispiace ma sto al passo con la tecnologia avanzata della mia scuola...Turbo Pascal 5.5...per scaricarlo sono andato sul "museo storico" della Borland...fai due conti...
se vuoi provare il programma "vero" dimmelo che te lo mando via mail...tanto tu hai già risolto il problema no?
quindi mi stai dicendo di fare un programma per calcolare la circonferenza?..ok proverò...
ora vado a cena
...cucino io...

se vuoi provare il programma "vero" dimmelo che te lo mando via mail...tanto tu hai già risolto il problema no?
quindi mi stai dicendo di fare un programma per calcolare la circonferenza?..ok proverò...
ora vado a cena
...cucino io...

Potreste farmi un programma in Pascal che calcoli la somma di due matrici?
Modificato da - fireball il 19/04/2004 13:50:19
Modificato da - fireball il 19/04/2004 13:50:19
matrici come?? di che dimensioni?? non so..non è che abbia molto tempo...però chissà...di notte...tu intanto dimmi poi vedremo..

hei Tony!! sono riuscito a farlo funzionare con double!! non funzionava perchè dovevo mettere all'inizio del programma questa dicitura {$N+}
ora la domanda sorge spontanea...che vuol dire?? cmq se uso questo tipo di variabile il risultato migliora decisamente!!! anzi direi che è quasi perfetto!!!!!
che ganzo!!!!!
ora la domanda sorge spontanea...che vuol dire?? cmq se uso questo tipo di variabile il risultato migliora decisamente!!! anzi direi che è quasi perfetto!!!!!
che ganzo!!!!!

Due matrici quadrate di ordine 4.
ma perchè non c'hai voglia te o perchè non 6 capace?

eccolo qua...
program matrici(i,o); { ESEGUE LA SOMMA TRA 2 MATRICI }
uses crt;
const m=4;n=4;
type mat=array[1..m,1..n] of real;
var A,B,S:mat;
i,j:integer;
PROCEDURE introduzione(var H:mat);
begin
clrscr;
writeln('INSERIRE I COEFFICIENTI MATRICIALI:');
writeln;
for i:=1 to m do
for j:=1 to n do
begin
write('H[',i,',',j,']=');
readln(H[i,j]);
end;
end;
PROCEDURE visualizzazione(H:mat);
begin
writeln;
for i:=1 to m do
begin
for j:=1 to n do
begin
write(H[i,j]:8:3,' ')
end;
writeln;
end;
end;
procedure somma(H,K:mat;var l:mat);
begin
for i:= 1 to m do
for j:= 1 to n do
begin
L[i,j]:=H[i,j]+K[i,j];
end
end;
BEGIN { M A I N }
textcolor(white);
introduzione(A);
introduzione(B);
clrscr;
writeln(' MATRICI DI PARTENZA');
textcolor(red);
visualizzazione(A);
textcolor(green);
writeln;
visualizzazione(B);
textcolor(white);
writeln;
writeln('la somma delle matrici S ');
writeln;
somma(A,B,S);
textcolor(15);
visualizzazione(S);
repeat until keypressed;
END.

Perché non sapevo come si faceva... GRAZIE!!!!!
ma questo è solo uno dei tanti modi in cui potresti fare...basta ragionarci un po' e ne troverai sicuramente altre mille!! forse anche + eleganti!!


scusate, riesumo l'argomento iniziale
bene, vecchio, ce l'hai fatta da solo.
la "N" del "directive" da te usato credo voglia dire "Numeric co-processor" (* nota 1), indicazione d'altri tempi, quando non tutte le macchine avevano questo dispositivo; in caso mancasse, il linguaggio restringeva le tue libertà, impedendoti, per es. tipi di dato più "raffinati".
questa spiega la trovi nel famigerato help in inglese. (* nota 2)
comunque, se non vuoi modificare il tuo programma aggiungendo la riga {$N+} puoi sempre agire nel menu "options/compiler/Numeric processing"
accendendo "8087".
avevi cambiato solo questo, per far girare soddisfacentemente il prgm?
un consiglio: torna alle condiz. iniziali e ripeti la prova: potresti aver toccato ANCHE qualcos'altro.
conosci il linguaggio (e, da quanto vedo dal tuo pgm sulla somma di matrici, hai idee piacevolmente "pulite") ma lo strumento non l'hai abbastanza "vissuto" per sentirtelo in mano con scioltezza.
forza! (peccato che oggi, sul pascal, tu trovi pochi interlocutori)
(* nota 1) c'è qualcuno del classico che ci voglia intrattenere su un possibile "copro-cessor"?
(* nota 2) : ma, scusa, hai fatto francese?
tony
P.S. ti prego, indipendentemente da qualsiasi accettabilissaima considerazione, NON mandarmi il sorgente del quesito prima del semaforo rosso.
un po' di disciplina, no?
*quote:
hei Tony!! sono riuscito a farlo funzionare con double!! non funzionava perchè dovevo mettere all'inizio del programma questa dicitura {$N+}
ora la domanda sorge spontanea...che vuol dire?? cmq se uso questo tipo di variabile il risultato migliora decisamente!!! anzi direi che è quasi perfetto!!!!!
bene, vecchio, ce l'hai fatta da solo.
la "N" del "directive" da te usato credo voglia dire "Numeric co-processor" (* nota 1), indicazione d'altri tempi, quando non tutte le macchine avevano questo dispositivo; in caso mancasse, il linguaggio restringeva le tue libertà, impedendoti, per es. tipi di dato più "raffinati".
questa spiega la trovi nel famigerato help in inglese. (* nota 2)
comunque, se non vuoi modificare il tuo programma aggiungendo la riga {$N+} puoi sempre agire nel menu "options/compiler/Numeric processing"
accendendo "8087".
avevi cambiato solo questo, per far girare soddisfacentemente il prgm?
un consiglio: torna alle condiz. iniziali e ripeti la prova: potresti aver toccato ANCHE qualcos'altro.
conosci il linguaggio (e, da quanto vedo dal tuo pgm sulla somma di matrici, hai idee piacevolmente "pulite") ma lo strumento non l'hai abbastanza "vissuto" per sentirtelo in mano con scioltezza.
forza! (peccato che oggi, sul pascal, tu trovi pochi interlocutori)
(* nota 1) c'è qualcuno del classico che ci voglia intrattenere su un possibile "copro-cessor"?
(* nota 2) : ma, scusa, hai fatto francese?
tony
P.S. ti prego, indipendentemente da qualsiasi accettabilissaima considerazione, NON mandarmi il sorgente del quesito prima del semaforo rosso.
un po' di disciplina, no?
no...studio inglese..ma no sapendo cosa fosse quel {$N+}...non c'avevo capito un gran che..cmq alla fine ci sono arrivato!! ; )
riguarda al listato ok!! scusa ma ero ansioso di sapere dove sbagliavo!! cmq tutto ok ora! grazie mille per l'aiuto!!
ho ripreso il programma iniziale e ho ripetuto quello che ho fatto prima...ho scritto al posto di real, duoble e ho aagiunto {$N+}all'inizio..non capisco a cosa si riferisca quel tuo "ANCHE"..bo?
grazie per i complimenti per il pascal...effettivamente l'ho masticato purtroppo un po' poco...infatti, pur facendo un corso sperimentale, abbiamo visto il computer poche volte in 5anni...perchè ai miei compagni non frega nulla di informatica (ma che hanno preso a fa la sperimentazione in informatica allora??mah..) quindi quello che so è perhcè ho rotto le scatole al mio prof e ho studiato da solo a casa...mi piace decisamente molto!!
purtroppo però mi manca la grafica...che dovrebbe essere decismante stimolante..il problema è che sui libri che ho io non c'è una spiegazione decente introduttiva..e non volgio imparare tutto a memoria!!! volgio capire!!!uff..
ora vado..
grazie ancora
il vecchio
riguarda al listato ok!! scusa ma ero ansioso di sapere dove sbagliavo!! cmq tutto ok ora! grazie mille per l'aiuto!!
ho ripreso il programma iniziale e ho ripetuto quello che ho fatto prima...ho scritto al posto di real, duoble e ho aagiunto {$N+}all'inizio..non capisco a cosa si riferisca quel tuo "ANCHE"..bo?
grazie per i complimenti per il pascal...effettivamente l'ho masticato purtroppo un po' poco...infatti, pur facendo un corso sperimentale, abbiamo visto il computer poche volte in 5anni...perchè ai miei compagni non frega nulla di informatica (ma che hanno preso a fa la sperimentazione in informatica allora??mah..) quindi quello che so è perhcè ho rotto le scatole al mio prof e ho studiato da solo a casa...mi piace decisamente molto!!
purtroppo però mi manca la grafica...che dovrebbe essere decismante stimolante..il problema è che sui libri che ho io non c'è una spiegazione decente introduttiva..e non volgio imparare tutto a memoria!!! volgio capire!!!uff..
ora vado..
grazie ancora
il vecchio

*quote:
prima...ho scritto al posto di real, duoble e ho aagiunto {$N+}all'inizio..non capisco a cosa si riferisca quel tuo "ANCHE"..bo?
quell'"ANCHE", vecchio, è autobiografico:
quando ritocco qualcosa in un programma, non sono (quasi) mai sicuro di aver raggiunto la soluzione avendo variato UNA sola cosa; spesso, senza pensarci, ne ho toccata ANCHE (almeno) un'altra, solo apparentemente irrilevante, ma che talvolta era la VERA chiave della soluzione.
(è un mestiere divertente per uno "sperimentale")
non mi dici se, anche sulla tua vers. di pascal [io ho la 7 (pascal, turbo pascal e pascal for windows) e la consideravo decrepita!] risolvi (una volta per tutte, salvando l'opzione) il problema del {$N+} con la risposta che ti suggerivo a "menu /options/compiler/Numeric processing".
non c'è fretta.
tony
*Edited by - tony on 21/04/2004 01:25:11
si si, funziona uguale...ma...che ho fatto??
