AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suchen und Ersetzen

Ein Thema von rennpunto · begonnen am 3. Dez 2007 · letzter Beitrag vom 3. Dez 2007
Antwort Antwort
rennpunto

Registriert seit: 3. Dez 2007
3 Beiträge
 
#1

Suchen und Ersetzen

  Alt 3. Dez 2007, 16:40
Hi, ich programmiere einen FUnktionsplotter für die Schule der ganzrationale Funktionen zeichen soll. Bei Funktionen wie 3x^3+x^2 entstehen keine Probleme. Allerdings bekommt mein Programm Probleme wenn das "Potenzzeichen" fehlt, also da wo man einfach ^1 dahinter schreiben könnte. Ich möchte jetzt den ganzen String nach solchen Problemstellen durchsuchen und ^1 anfügen.

Beispiel: Aus 3x^3 + x + 5 ---> 3x^3 + x^1 + 5^1

Wie mache ich das jetzt am besten? Ich weiß nicht genau wonach ich suchen soll und ich glaube, dass es bei der Konstanten am Schluss ein Problem geben könnte. Ich hab hier mal nen Ansatzt entwickelt, bei dem ich alle Möglichkeiten an denen das Programm eingreifen müsste (x+ , x-, und dann prinzipiell alle Konstanten die alleine stehen ) selbstständig ^1 ergänzen soll. Allerdings gibt das Probleme und ist nicht besonders effizient. Wer hat eine bessere Lösung?



var
Eingabeterm:string;
i:integer;
---

Eingabeterm:=frmPlotter.edtEingabe.text;
for i:= 1 to length(Eingabeterm) do begin
if Eingabeterm[i]= 'x+' then
Eingabeterm:=StringReplace(Eingabeterm,
'x+', 'x^1+', [rfReplaceAll]);

frmPlotter.edtEingabe.text:=Eingabeterm;
---
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Suchen und Ersetzen

  Alt 3. Dez 2007, 16:43
Hi,

Also dein Quelltext ist erstmal unnötig lang

Delphi-Quellcode:
Eingabeterm:=frmPlotter.edtEingabe.text;
Eingabeterm:=StringReplace(Eingabeterm,'x+', 'x^1+', [rfReplaceAll]);
frmPlotter.edtEingabe.text:=Eingabeterm;
würde ausreichen. Das Problem ist halt: Was passiert wenn man "x +" eingibt oder es gibt immerhin auch andere Rechenarten als +...

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Suchen und Ersetzen

  Alt 3. Dez 2007, 16:43
Das ist natürlich blöd, wenn man: x^1 + 5^1 schreiben muss.
Es gibt nur eine Lösung: sorge dafür, das dein Programm auch mit Ausdrücken wie x+5 zurecht kommt.
Andreas
  Mit Zitat antworten Zitat
rennpunto

Registriert seit: 3. Dez 2007
3 Beiträge
 
#4

Re: Suchen und Ersetzen

  Alt 3. Dez 2007, 16:52
Gibts denn da keine bessere Möglichkeit?
Ich müsste sonst das gleiche für x- machen, und mit den Konstanten hab ich dann ja immer noch ein Problem

Ich bräuchte sowas wie: Wenn das Zeichen hinter dem x kein "^" ist, dann füge hinter dem x "^1" ein.
Und was ist dann mit der Konstanten?

---

Ähnliches Problem: Ichn will, dass der für x=1 z.B. bei "4x^2" auch "4* 2^2" rechnet und nicht "42^2" Da müsste ich wieder sagen, wenn vor dem x was steht, was kein + oder minus ist, dann multipliziere damit. Was soll ich da machen?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Suchen und Ersetzen

  Alt 3. Dez 2007, 16:58
Zitat von rennpunto:
Gibts denn da keine bessere Möglichkeit?
Ich müsste sonst das gleiche für x- machen, und mit den Konstanten hab ich dann ja immer noch ein Problem
Nein, es geht wirklich nur so. Das Suchen & Ersetzen wäre nur "Gemurkse" um eine unzureichende Funktion zu überdecken.
Du hast doch sicher eine Funktion, die den String zerpflückt und dann ein Array mit den Polynomfaktoren befüllt, oder ?
Beispiel:
Delphi-Quellcode:
func := '3*x^2-20*x+4';
// dann wären die Polynomfaktoren
p[0] := 4.0;
p[1] := -20.0;
p[2] := 3.0;
p[3] := 0.0;
Dann zeigt doch mal den Sourcecode.
Andreas
  Mit Zitat antworten Zitat
rennpunto

Registriert seit: 3. Dez 2007
3 Beiträge
 
#6

Re: Suchen und Ersetzen

  Alt 3. Dez 2007, 17:06
Das zerlegen geht so:

procedure ZerlegeTerm; //Zerlegt den Term und ersetzt Zeichen "x" durch "f"-Wert
var
Eingebeterm: TStrings;
i:integer;
begin
frmPlotter.libSummanden.clear;
Eingebeterm := TStringList.Create;
frmPlotter.edtEingabe.text := StringReplace(frmPlotter.edtEingabe.text,
'-', '#-', [rfReplaceAll]); // "#" als Trennzeichen für Delimitter setzen
frmPlotter.edtEingabe.text := StringReplace(frmPlotter.edtEingabe.text,
'+', '#+', [rfReplaceAll]); // "#" als Trennzeichen für Delimitter setzen

Eingebeterm.Delimiter := '#';

Eingebeterm.DelimitedText := frmPlotter.edtEingabe.text;

for i:=0 to Eingebeterm.Count -1 do begin
frmPlotter.libSummanden.Items.Add(Eingebeterm.Stri ngs[i]);
frmPlotter.libSummanden.Items[i]:= StringReplace
(frmPlotter.libSummanden.Items[i],'x', FloatToStr(f), [rfReplaceAll]);
// Alle "x" durch f ersetzen
end;

frmPlotter.edtEingabe.text := StringReplace(frmPlotter.edtEingabe.text,
'#', '', [rfReplaceAll]); //"#"-Zeichen entfernen
end;


lib.Summanden ist eine Listbox, die ich nachher einfach ausblenden will. Aber was ich jetzt vorhabe mit dem ^1 ergänzen, amch ich besser als eigene Prozedur, oder?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz