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 - Numeri immaginari Equazione di Secondo Grado
Forum - Pascal - Numeri immaginari Equazione di Secondo Grado

Avatar
Smallman647 (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/10/2010

Segnala al moderatore
Postato alle 21:00
Martedì, 19/10/2010
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 il 19/10/2010 alle 21:00
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 21:03
Martedì, 19/10/2010
1) Usa un record;
2) Se non ricordo male, è la funzione readkey.

PM
Avatar
Smallman647 (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/10/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 0:24
Mercoledì, 20/10/2010
Testo quotato

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 il 20/10/2010 alle 0:26
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 18:53
Mercoledì, 20/10/2010
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.

PM
Avatar
Smallman647 (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/10/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 10:06
Giovedì, 21/10/2010
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 il 21/10/2010 alle 10:10
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 17:18
Giovedì, 21/10/2010
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.

PM
Avatar
Smallman647 (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/10/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 22:28
Giovedì, 21/10/2010
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?

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 16:00
Venerdì, 22/10/2010
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.

PM