Gleichung ???

Tutorials.at
Verfügbare Informationen zu "Gleichung ???"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: exbs - X - DrPhil_Guth - matze(2)
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 15
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Gleichung ???
  • Letzte Antwort: vor 17 Jahren, 6 Monaten, 2 Tagen, 8 Stunden, 2 Minuten
  • Alle Beiträge und Antworten zu "Gleichung ???"

    Re: Gleichung ???

    exbs - 12.10.2006, 17:07

    Gleichung ???
    Hallo liebe Forumgemeinde :D !!!

    Ich habe mal wieder ein Problem. Ich möchte eine Mathe.Gleichung in einem Programm lösen. Dazu habe ich mir überlegt, da mir grad nix besseres einfiehl :oops: , einfach die beiden Seiten zu vergleichen und in einer DO-WHILE Schleife alle Möglichkeiten durchzuspielen. Und wenn dann die Ergebniss übereinstimmen soll abgebrochen werden.

    Ja das is sicher nicht effektiev nur leider fiehl mir nichts besseres ein.

    Code: #include <stdio.h>

    #define FALSE 0
    #define TRUE !FALSE

    int main()
    {
        float x, temp1, temp2;
        int fertig = FALSE;
             
        do
        {
                    system("cls"); //geht bei DEV-CPP :P
                    temp1 = 0;
                    temp2 = 0;
                   
                    x = -100;
                   
                    temp1 = 10 * (x + 3) + ((2 - 40 * x) / 4);
                    temp2 = 50.5 - ((5 * x + 30) / 2);
                   
                    if (temp1 == temp2)
                              fertig = TRUE;
                   
                    else
                              fertig = FALSE;
                    printf("Akutelle Zahl %f\n", x); 
                           
                   // x = /*?????*/       // welche "erhöungswert sollte ich idealerweise wählen ???
                             
        }while (fertig == FALSE);
       
        printf(" x = %f ... !!!\n", x);
        fflush(stdin);
        getchar();
    }

    Meine Fragen nun ...

    Welche Wert sollte ich zur Erhöhung von x nehmen?
    Oder noch besser, habt ihr eine Idee wie so eine Gleichung effektiever gelöst werden kann ??

    thx und greetzz exbs



    Re: Gleichung ???

    exbs - 12.10.2006, 17:42


    Ok ... also meine erste Frage hat sich geklärt!

    Hab nen kleinen Denkfehler gehabt.

    Aba nun ist mein Ehrgeiz ein allgemeingültieges Gleichunsprogramm zu schreiben. Doch wie geht man da ran, wie kann mam zum Beispiel die Gleichung verwendbar einlesen :?: ??

    greetzz exbs



    Re: Gleichung ???

    X - 12.10.2006, 20:05


    Hi,

    hatte auch mal vor so ein Programm zu schreiben. Habs dann aber gelassen.

    Einlessen musst du die Gleichung als String. Denk aber dran es gibt mehr als nur +,-,*,/.
    ---
    Ich kann dir eventuell ein paar Codeausschnitte von mir geben von einem Rechner den ich mal geprogt hab (ist aber Java). Der kann dann auch Klammern auflösen, Potenzen(auch bei Klammern), Prozent, Brüche, Trigonometrie, Fakultät und ein paar Sachen der Wahrscheinlichkeitsrechnung und och soen Kram.
    ---

    Aber ich glaub nich das des mit C möglich ist, wenn solltest du schon C++ verwenden.

    Aber nun zur Verarbeitung der Gleichung.
    Du musst deinem Programm schon eine gewise Intelligenz geben. Ich weiß ja nicht wie schwer und komplex die Gleichungen sein sollen.

    Aber wenn ich mir deinen Code so anschaue willst du einfach zwei Gleichungen gleichsetzen und dann alle x durchlaufen. Dann kann ich dir nur den kleinsten möglichn Schritt empfehlen. Ich glaub der liegt bei 10^-128, bin mir aber nich sicher. So ist es am sichersten deinen Wert zu treffen^^. An sonsten würde ich dir 10^-3er Schritte empfehlen. Dabei kannst du halt nur hoffen das er korrekt (und vor allem glücklich) rundet, so das zwei gleiche Werte rauskommen.



    Re: Gleichung ???

    exbs - 12.10.2006, 20:36


    Ja also zu der Gleichung da ... das Ergebnis is 2 ... mmmh :roll: das konnte man noch einfach finde. Denn, wenn ich ganz kleine Schritte gehe, dann dauert das ewig :evil: ! Und mir ist aufgefallen, dass dies dann auch sehr ungenau wird, da die Schritte wohl zu klein sind.

    Zu dem, inzwischen hab ich mich mal informiert "Parser" :oops: , wäre nett, wenn du mir mal ein Paar Schnipsel schicken würdest, vlt kann ich ja wenigstens einen Ansatz finden, der mir helfen kann.
    Ich wäre dir sehr dankbar !!!

    meine Mail: bug_fixed55@gmx.net

    thx und greetzz exbs



    Re: Gleichung ???

    X - 13.10.2006, 13:49


    Hier mal ein Ausschnit der nichts anderes macht als minus oder Plus zu berechnen.
    Das gleiche hab ich auch noch für *,/ sieht ähnlich aus. Aber versteh erst mal das dann geb ich dir weitere Snipes.

    Ist aber noch zu meinen Anfängen gewesen, da gibts bestimmt viel zu verbessern^^.
    Code:
    //JAVA-CODE!!!

    public String Simpel(String ein)
      {
        String aus1,aus2;            //zum speichern von zwischenergebnisen
        int z1=0,z2=0,länge,ii;
        boolean lauf,ok=true;
        double erg=0;

        länge=ein.length();

    for(int i=0;i<länge;i++)
        {
          if(ein.charAt(0)=='-'&&ok==true){i++;ok=false;}
          if(ein.charAt(i)=='+'||ein.charAt(i)=='-'&&ein.charAt(i-1)!='E')  //kontrolliert ob potenz vorliegt
          {
            ii=0;
            aus1="";
            while(ein.charAt(ii)!='+'&&ein.charAt(ii)!='-'||ein.charAt(ii)=='-'&&ii==0)
            {
              aus1 +=ein.charAt(ii);
              ii++;
            }     //liest erste zahl ein
            ii++;
            aus2="";
            while(ii<länge)
            {
              if(ein.charAt(ii)=='+'||ein.charAt(ii)=='-'&&aus2.length()>0)break;
              aus2 +=ein.charAt(ii);
              ii++;
              z2=ii;   //liest zweite zahl ein
            }
            double zahl1=Double.parseDouble(aus1);
            double zahl2=Double.parseDouble(aus2);
            if(ein.charAt(i)=='+'){erg=zahl1+zahl2;}
            if(ein.charAt(i)=='-'){erg=zahl1-zahl2;}
            String zwischenerg=Double.toString(erg);
            StringBuffer bearbeiten=new StringBuffer(ein);
            bearbeiten.delete(0,z2);
            bearbeiten.insert(0,zwischenerg);
            String ersatz=new String(bearbeiten);
            ein=ersatz;
            länge=ein.length();
            i=-1;
            ok=true;   //berechnet ergebnis und setzt es in gleichun ein, dabei wird der Rechenoperator gelöscht
          }
        }
        return ein;   //gibt neue gleichung zurück
    }

    da fehlen jetzt noch die ganzen "Sonderrechenarten". Am Schluss von allem steht aber die oben aufgeführte Funktion. Wenn dus geschaft hast des in C umzusetzen würd ichs gerne mal sehen. Dann geb ich dir mehr zum lösen^^; viel mehr.
    Wäre auch bereit dir dabei zu helfen wenn ich denn Zeit finde. Interessiert mich nämlich, so was hin zu bekommen.

    Was für andere Programmiersprachen kannst du denn??
    Von Parserfunktionen in C++ hab ich nämlich keine Ahnung. Die müssteste nämlich alle nachbilden, wenn du es mit der oberen Methode machen willst.
    Die gibts in anderen Sprachen schon fix und fertig und in meinem Programm setz ich halt voll auf die.



    Re: Gleichung ???

    exbs - 13.10.2006, 14:37

    DANKE!!!!
    Also können tuhe ich eigl. nur C und wegen Schule auch PASCAL, aber ich muss sagen, dass mr C am besten liegt und ich es auch echt gut finde.

    Ich muss jetzt erstml weg und werde mir den Code nacher intensiever ansehn. Sieht aber nach schön viel Arbeit aus .. wieder ein Grund weniger für Schule zu machen :wink: !!

    So also danke erstmal ... Ach ja über Hilfe würde ich mich freuen, aber ich möchte erstmal lernen das Ganze zu verstehn.

    THX ... greetzz exbs



    Re: Gleichung ???

    X - 13.10.2006, 17:48


    Hi

    also der gesamte Code ist 640 Zeilen lang. Ich shätze das 400 davon für die Rechenfunktion dienen. Hast also ziemlich viel vor dir.

    Was C angeht.
    Ich wei ehrlich gesagt nicht genau ob man da einfach so mit den Datentypen rumspielen kann wie in anderen Sprachen. Vor allem da du ja keine "richtigen" Strings hast sondern nur char-Arrays.

    Gruß



    Re: Gleichung ???

    exbs - 13.10.2006, 18:27


    Ich habe mir von einem Freund schon mal ein Java-Buch geholt, dann kann deinen Code auch besser verstehen. :D

    Mmmh, habe ich mit auch schon Gedanken gemacht, aber ich denke man kann (fast) alles realisieren [oder zumindest glaube ich das in meiner Naivietät :wink: ] ...

    Ich werd mich da jetzt gleich ransetzen, evtl hab ich heut Abend schon einen kleinen Ansatz.

    Cool das es dieses Forum gibt!!

    thx greetzz exbs



    Re: Gleichung ???

    X - 13.10.2006, 18:30


    Hi

    als was das alles realisieren angeht, da hast du schon recht. Nur mit ein bischen Schul-C und noch ein bischen was selbst beigebracht ist da nicht so viel zu machen.

    Gruß



    Re: Gleichung ???

    DrPhil_Guth - 26.10.2006, 12:14


    Hi! Also ich hab mich gedanklich mal ein bisschen mit dem Thema auseinandergesetzt, rausgekommen ist nicht viel.
    Ich denke das ganze ist WIRKLICH kompliziert.

    Das einzige was ich geschafft habe zu programmieren, ist ein Programm, dass einem aus einem String zahlen ausliest, und deren Wert, ziffernlänge und die Stelle an der sie vorkommen angibt.

    http://www.esnips.com/nsdoc/fb8ea902-1df9-4324-b3f8-145835e8d89b

    Ich weiß net, vl. hilfts ja ein bisschen was. Auf jeden fall wäre es ganz interessant sowas zu programmieren.
    Wir könnten daraus auch ein gemeinschaftsprojekt machen, falls wer lust hätte...



    Re: Gleichung ???

    matze(2) - 26.10.2006, 16:06


    hab ich mal in pascal versucht. mehr als ein versuch ists aber nicht geworden. eine grundlegende frage ist, ob man durch ausprobieren für x oder durch mathematisches auflösen auf die lösung der gleichung kommen will.



    Re: Gleichung ???

    DrPhil_Guth - 26.10.2006, 18:13


    ausprobieren ist unmöglich, wenns ne float zahl ist. aber ich hab irgendwo gelesen, dass man mithilfe von Matrizen Gleichungssysteme lösen kann, das problem ist nur, wie mach ich aus nem String ne Matrize?



    Re: Gleichung ???

    X - 26.10.2006, 20:19


    Hi Dr,

    ich glaub was du meinst ist ein LGS. Und da sprichst du richtig von SystemEN. Die sind nämlich für Gleichungen mit mehreren Variablen gedacht. Bei einer: vereinfachen und ausrechnen, geht am einfachsten; auch bei LGS muss man rechnen.

    Gruß



    Re: Gleichung ???

    DrPhil_Guth - 26.10.2006, 21:10


    naja, "vereinfachen und ausrechnen" klingt doch relativ einfach, wenn man es am Papier macht ist es das auch.
    Ich habe aber absolut keine Ahnung, wie man den Vorgang "Vereinfachen" am Computer machen kann.
    Das problem liegt nämlich darin, dass für uns eine Gleichung aus Zahlen, Variablen und Operatoren besteht, die miteinander in beziehung stehen.
    wir stellen das in unserer Zeichensprache dar und können damit arbeiten.
    Für den computer hingegen ist und bleibt das ganze ein String. Er hat z.B. keine ahnung von Klammernsetzung, oder dass Punkt vor Strich kommt.
    Verstehst du, es geht nicht nur um reine Rechenarbeit.
    Man müsste eine Headerdatei Schreiben, die
    1. Aus nem String Zahlen, Variablen und Operatoren herausholt
    2. Diese richtig einordnet
    3. und zueinandern richtig in Beziehung setzt
    4. Dann das ganze "vereinfacht" (Wenn man sich mal selbt beim vereinfachen komplizierter beobachtet, dann wird man bemerken, dass das das anwenden Vieler Regeln ist, und nebenbei noch etwas Kreativität fordert. Dann muss der Computer noch beurteilen, was "einfach" ist)
    5. Schlussendlich die glg. noch ausrechnet

    Ich muss schon sagen, ich hab gerade mal ein drittel von 1. gelöst, und das nicht sehr zufriedenstellend und in ziemlich langer zeit.

    Wie gesagt, dafür gibt es keine schnelle und einfache lösung. Nur ne menge Arbeit...

    äh, und was is ein LGS ?



    Re: Gleichung ???

    X - 27.10.2006, 20:00


    Hi

    LGS = Lineares Gleichungssystem.

    Die Vorgehensweise die wir Menschen anwenden muss dem PC beigebracht werden. Das geschieht bei allen Programmen die mit dem Benutzer interagieren. Du musst nur wissen wie.
    Die ganzen Rechenregeln hab ich meinem Java-Rechner ja auch "beigebracht", ohne griße Probleme. Das schwere an der Sache ist, das wie soll er dabei vorgehen. Aber da der PC bei Rechnen nichts übersieht oder vergisst oder sich verrechnet ist es egal ob er den eifachsten oder den schwersten Weg wähl. Da spiel nur die Rechenzeit eine Roll. Und von der gibts genug.
    Ob das Ergebins gleich nach dem Klicken erscheint oder 0,5s später spielt keine Rolle. Niemand kann so schnell reagieren.

    Gruß



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    PROGRAMMSAMMLUNG - gepostet von DrPhil_Guth am Freitag 25.08.2006
    könnt ihr mir helfen??? - gepostet von MaRcO123 am Dienstag 05.06.2007
    Linker- Probleme mit gcc - undefined reference to ... - gepostet von DrPhil_Guth am Sonntag 10.12.2006
    Fenstergröße - gepostet von metzel-monkey am Dienstag 30.05.2006
    'Sound'-Prozedur funktioniert nicht - gepostet von Jedra am Freitag 06.04.2007
    Windows Uhr in C Programm übernehmen - gepostet von alias_omega am Donnerstag 28.06.2007
    Nachfolger von C (C/C++/C#) ?! - gepostet von Dirty Oerty am Mittwoch 07.02.2007



    Ähnliche Beiträge wie "Gleichung ???"

    Gleichung - canuma2all (Dienstag 13.04.2004)
    Gleichung - n0w4y0ut (Samstag 30.06.2007)