Oppure

Loading
19/10/10 19:00
Smallman647
Salve a tutti.
Volevo fare inanzitutto i complimenti per l'ottimo forum.

Ho realizzato in Pascal il programma per trovare qualsiasi soluzione di un'equazione del tipo ax^2+bx+c=0.
Ho alcuni problemi.
1)Innanzitutto, quando il delta è <0 è risaputo che non ci sono soluzioni reali, ma complesse che sono x1/x2=(-b±(-(b^2-4ac)i)/2a.
Ora il problema è come rappresentare quella i nei calcoli?

2)
Avendo già programmato abbastanza in C, avevo visto il comando getch, che prendeva il codice ASCII di un tasto.
Esiste lo stesso comando per il Pascal?

Mi serviva ad esempio una cosa del genere:

repeat
......
until(getch()='s')


Ultima modifica effettuata da Smallman647 19/10/10 19:00
aaa
19/10/10 19:03
Il Totem
1) Usa un record;
2) Se non ricordo male, è la funzione readkey.
aaa
19/10/10 22:24
Smallman647
Postato originariamente da Il Totem:

1) Usa un record;
2) Se non ricordo male, è la funzione readkey.


1)Cioè un tipo di dato personalizzato? Ma per cosa? Per la i? Oppure esiste un tipo di dato che racchiude i numeri complessi?

2)Grazie tante:hail: Sono riuscito a risolvere così:
------
var ch:char;
repeat
......
......

writeln('Vuoi rieseguire il programma?(s\n)');
ch:=Readkey;
until ch<>#115
end.
------
Ultima modifica effettuata da Smallman647 19/10/10 22:26
aaa
20/10/10 16:53
Il Totem
Un record per i numeri complessi. Dopotutto, un numero complesso non è altro che una coppia di numeri reali. Non mi pare che nelle librerie standard ci siano funzioni per il calcolo complesso, però. Quindi, se ti serve, dovrai sviluppare tu qualcosa ad hoc.
aaa
21/10/10 8:06
Smallman647
Grazie Totem, ma alla fine sono riuscito a risolvere senza usare i record.
Ho calcolato separatamente la parte reale e la parte immaginaria e poi ho aggiunto la i alla parte immaginaria così:

writeln('L''equazione Š impossibile in R');
writeln('ed ha 2 soluzioni complesse ',x1:1:2,' + ',x1i:1:2,'i e ',x2:1:2,' ',x2i:1:2,'i .');

Poi ci sarebbero un'altre 2 dubbi...:(

Cioè:

1) Si possono scrivere i numeri reali sotto forma di frazione?

2) Il mio programma è diviso in 2 parti. Una che ti mostra l'equazione con i valori inseriti ed una che svolge calcoli e da le soluzioni.

Nella prima parte l'equazione base è ax^2+bx+c=0.

Ho provato inizialmente così:
writeln(L'equazione è ,a:1:0,'x^2+',b:1:0,'x+',c:1:0,'=0');

Però, se ad esempio metto a=0, b=0 e c=3 mi esce scritto 0x^2+0x+3=0, invece di 3=0. Per ovviare a questo problema ho dovuto fare un casino di if/then/else.:d
Ultima modifica effettuata da Smallman647 21/10/10 8:10
aaa
21/10/10 15:18
Il Totem
1) Sì. X:= 5 / 2;
2) Non puoi fare a meno di usare if se non vuoi passare al caso più generale di un'equazione polinomiale di grado n nella singola incognita x a coefficienti "reali". In quel caso useresti un array e sarebbe semplice bypassare tutti i coefficienti nulli con un ciclo.
aaa
21/10/10 20:28
Smallman647
1)No, intendevo il calcolo di un'operazione. Se ad esempio una soluzione esce 0.5, la deve trasformare in 1/2.

2)Ah, ok... Il programma funziona benissimo, solo che mi sembravano un po' troppe 182 linee di if/then/else per far uscire scritto "L'equazione è: ....... ":rofl:

P.S. Ho provato a creare la mia libreria ma ho un problema. Posso postare qui le linee di codice o apro un'altro thread?
aaa
22/10/10 14:00
Il Totem
1) Beh, in teoria è possibile. Dovresti trasformare il numero razionale espresso come decimale in intero prendendo tutte le cifre decimali, quindi assumere come denominatore 10^n, dove n è il numero di cifre + 1. Poi procedi a semplificare numeratore e denominatore trovando l'MCD. Il problema sono sempre gli errori di approssimazione che sussistono nel moltiplicare i floating point per 10...

Apri un altro thread per l'altro problema.
aaa