Programmeringuppgift 2

Komplexa tal

Denna uppgift är en tillämpning av dataabstraktion.

Uppgift

Skriv en funktion komplex_eval[u], där u är ett matematiskt uttryck som innehåller komplexa tal. Funktionen ska returnera värdet av uttrycket. Uttrycket ska kunna bestå av komplexa tal på rektangulär eller polär form, tecknen +,*,-,/.

Exempel

komplex_eval[(1+i) + (2+i)]
returnerar 3 + 2i

komplex_eval[(2+0i) - (1+0i) + (ett polärt tal med belopp 1 och vinkel 3,14159)]
returnerar 0+0i

Du får själv avgöra om det returnerade talet ska vara på polär eller rektangulär form. Du avgör själv om du vill ha en infix, postfix eller prefix notation. Huruvida resultatet skrivs ut som heltal eller flyttal saknar betydelse.

Du kan ha nytta av funktionerna sin, cos, tan, asin, acos, atan och pi, där de första sex tar ett argument och den sista inget.

Om du vill påverka representationen av tal (vilket inte är obligatoriskt), kan du dessutom vilja använda funktionen float[i], som tar ett argument, ett heltal, och returnerar samma tal som flyttal, samt truncate[f], som tar ett argument, ett flyttal, och returnerar det närmaste heltalet.

Antag parenteser kring alla deluttryck.

Ledning: En möjlig representation för de komplexa talen är såsom en lista av tre element, en "tag" som avgör om listan representerar ett tal på rektangulär eller polär form samt de två talen.

Anvisningar

Uppgiften får lösas individuellt eller i grupper om två. Uppgiften ska redovisas skriftligt med Programmet ska i sin helhet spegla en god programmeringsed för funktionella språk. Ingen felhantering behövs.
Anders Berglund                        Office: Room 1254
Department of Computer Systems         E-mail: Anders.Berglund@docs.uu.se
Box 325                                Phone (work): +46 18 471 31 67
S-751 05 Uppsala                       Mobile phone: +46 70 425 02 11
Sweden                                 Fax (work):   +46 18 55 02 25
                                       

Senast ändrad: 08/30/97 19:08:33