Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

PROGRAM Komplexe Zahlen

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Theoretische Informatik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sjomka
Gast





BeitragVerfasst am: 12. Mai 2005 19:52    Titel: PROGRAM Komplexe Zahlen Antworten mit Zitat

Ich hab ein Program geschrieben mit dem man mit komplexen zahlen addieren, subtrahieren,potenzieren und radizieren kann. Jetzt möcht ich nur noch dass man die ganze Rechnung in einmal eingeben kann. Ich habe einen Automaten geschrieben der mir das löst. Nur hab ich ein Problem er rechnet alles von links nach rechts ohne auf klammern zu achten. ich hab mal etwas von UPN gehört. weiß jemand wie man einen therm in UPN umwandeln kann? Oder kennt jemand eine andere Art wie man das Problem lösen könnte.
Für eure hilfe wäre ich sehr dankbar

SIMON
Nach oben
Toxman



Anmeldungsdatum: 15.02.2005
Beiträge: 42
Wohnort: Freiburg i. Brsg.

BeitragVerfasst am: 13. Mai 2005 17:02    Titel: Antworten mit Zitat

Du müsstest mal nach Parsern suchen. Solche Programme machen genau das, was du suchst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schlimu
Gast





BeitragVerfasst am: 12. Jun 2005 12:14    Titel: Antworten mit Zitat

Also, die umgekehrte polnisch notation (auch postfix notation genannt) ist relativ einfach zu machen; du arbeitest am besten mit nem stack. Ich bezieh mich jetzt weiter auf java...

das beste ist, dass du alle mathematischen therme in klammerschreibweise einliest, bspw. so : " ( 2 + 3 ) * ( 3 - 1 * 4 )" .

Dann nimmst du einen StringTokenzier und zerlegst erstmal den String in alle seine Teile.
Jetzt poste ich mal meinen Code, weil ich keine Lust habe, zu beschreiben; ich denke, er ist selbsterklärend. smile

public static String into_postfix(Object [] array){
String s2="";
Stack sta=new Stack();

for (int i=0;i<array.length;i++){
if (istKlammerauf(array[i])){
sta.push(array[i]);
}
if (istZahl(array[i])){
s2+=" "+array[i];
}
if (istOperator(array[i])){
sta.push(array[i]);
}
if (istKlammerzu(array[i])){
while (!sta.peek().equals("(")){
s2+=" "+sta.pop();
}
sta.pop();
}
}
if (sta.peek().equals("+")||sta.peek().equals("-")||sta.peek().equals("*")||sta.peek().equals("/"))
s2+=" "+sta.pop();

// sta.pop();
System.out.println("\n\nStack empty:\t"+sta.isEmpty());
if (!sta.isEmpty())
System.out.println("\noben auf Stack:\t"+sta.peek());
// System.out.println("\ns2:\t"+s2);
return s2;
}

.... kopiers dir einfach mal raus... dann sieht das auch nicht soooo schlimm aus wie hier aufm board.

gruß

Lars
Nach oben
ED209



Anmeldungsdatum: 30.05.2005
Beiträge: 122

BeitragVerfasst am: 12. Jun 2005 15:11    Titel: Re: PROGRAM Komplexe Zahlen Antworten mit Zitat

Sjomka hat Folgendes geschrieben:
Ich hab ein Program geschrieben mit dem man mit komplexen zahlen addieren, subtrahieren,potenzieren und radizieren kann. Jetzt möcht ich nur noch dass man die ganze Rechnung in einmal eingeben kann. Ich habe einen Automaten geschrieben der mir das löst.


Ein Programm oder einen Automaten?

Zitat:

Nur hab ich ein Problem er rechnet alles von links nach rechts ohne auf klammern zu achten. ich hab mal etwas von UPN gehört. weiß jemand wie man einen therm in UPN umwandeln kann? Oder kennt jemand eine andere Art wie man das Problem lösen könnte.


Du hast ja nicht nur das Problem dass du die Klammern beachten musst, sondern du hast ja auch noch Regeln wie Punktrechnung vor Strichrechnung und Hochrechnung vor Punktrechnung.
Du musst dir ueberlegen wie du das ganze im so Programm abspeicherst, dass du moeglichst gut sehen kannst, welche Rechnungen als erstes und Rechnungen als letztes erledigt werden muessen. Und du dann die Zwischenschritte berechnen und abspeichern kannst.

In der UPN kommen bei einer Operation erst die Operanden, dann der Operator. Klammer braucht man nicht mehr.
Aus ( 2 + 3 ) * ( 3 - 1 * 4 ) wird in der UPN 2 3 + 3 1 - 4 * *
Das sieht zwar wuest aus, ist aber mit nem Programm einfacher zu berechnen.

Um von der Infix-Notation (die normale) in die UPN zu kommen, wuerde ich in dem Eingabeterm als String erst nach dem Operator suchen, der als letztes angewandt wird (hier das Mal zwischen den beiden Klammerausdruecken), die Teilstrings links und rechts davon (mit demselben Verfahren) auswerten und anschliessend den Operator hinschreiben.

Wenn du soweit bist, dass den Term in UPN hinschreiben kannst, koenntest du ihn aber vermutlich auch direkt auswerten.

Gruss
ED209

PS: @Schlimu, sorry aber deinen Code find ich nicht selbsterklaerend.



[/code]

_________________
+++++++++++++[>++++>+<<-]>.--.>---.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Theoretische Informatik Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen