<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[EAccessViolation]]></title><description><![CDATA[<p>Hallo ihr,<br />
Ich habe jetzt mal so aus Just4Fun ein Proggramm geschrieben, welches einen vom Benutzer eingegebenen String analysiert und ausrechnet -&gt;Also eine Funktionsgleichung löst.<br />
Gerade bin ich endlich mit meiner Hauptfunktion</p>
<p>&quot;String beklammerten_term_aufloesen(String,float)&quot;</p>
<p>fertig geworden.<br />
Die zwei Übergabewerte stehen für den im Textfeld eingegebenen Wert und der zweite Parameter natürlich für den Wert, der für &quot;x&quot; eingesetzt werden soll.<br />
Die Funktion arbeitet perfekt- somit habe ich mich gefreut und mir gedacht:<br />
Jo- jetzt kannste das ganze einfach in eine Schleife bauen, die den zweiten Übergabeparameter immer um 1 hochzählt und schon hast du deine Wertetabelle fertig.<br />
Doch leider hatte ich falsch gedacht.<br />
Lasse ich meine Schleife öfter als 16 mal durchlaufen, so tritt die folgende Fehlermeldung auf:</p>
<p><a href="http://Jesusfreak777.je.funpic.de/EAccess.JPG" rel="nofollow">http://Jesusfreak777.je.funpic.de/EAccess.JPG</a></p>
<p>Ich habe mich bereits totgesucht nach dem Fehler kann aber einfach nicht seine Ursache finden.<br />
Das Komische ist auch, dass die Funktion super arbeitet, wenn ich die Anzahl der Schleifendurchläufe auf 15 reduziere.<br />
Ich könnte Beispielsweise auch bei &quot;15&quot; anfangen und dann bis &quot;30&quot; zählen- das würde auch noch gehen- aber sobald es dann &quot;31&quot; ist spuckt mir der Compiler diesen Fehler.<br />
Kann mir jemand helfen?</p>
<p>cya<br />
David</p>
<p>PS: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Code:</p>
<p>Das Button-Event:</p>
<pre><code>void __fastcall Tfrmgraph::Image1MouseDown
(TObject *Sender,TMouseButton Button, TShiftState Shift,
int X, int Y)
{
    lst1-&gt;Items-&gt;Clear();
    firstnegative=false;
    button-&gt;LoadFromFile(&quot;down.bmp&quot;);
    lblberechnen-&gt;Picture = button;
    klammerende=-1;
    klammerstart=-1;
    male=0;
    String funktionsterm = txtterm-&gt;Text;
    txtrechnung-&gt;Text = funktionsterm;

    txtterm-&gt;Text=leerstellen_ausmerzen(txtterm-&gt;Text);
    txtterm-&gt;Text=mal_einsetzen(txtterm-&gt;Text);
    for(float a=1;a&lt;20;a+=1)
    {
        String funktionsterm2 = beklammerten_term_aufloesen(funktionsterm,a);
        funktionsterm2=klammerlosen_term_aufloesen(funktionsterm2);
        lst1-&gt;Items-&gt;Add(funktionsterm2);
    }
   imggraph-&gt;Canvas-&gt;Draw(0,0,graph);
}
</code></pre>
<p>Das hier ist die Hauptfunktion. Von ihr aus werden noch kleinere Unterfunktionen die unten gepostet sind aufgerufen um das ganze übersichtlicher zu machen:</p>
<pre><code>String beklammerten_term_aufloesen(String funktion, float ix)
{
    funktion = x_einsetzen(funktion,ix);
    for(int a=1;a&lt;=funktion.Length()-1;a++)
    {
       if(funktion[a]==45 &amp;&amp; a==1)
          firstnegative=true;
    }
    while(schleife==false)
    {
          for(int a=1;a&lt;=funktion.Length();a++)
          {
             if(funktion[a]==40)
                klammerstart=a;
             if(funktion[a]==41)
                klammerende=a;
          }
          if(klammerende&gt;-1 &amp;&amp; klammerstart&gt;-1)
          {
             String zwischenterm=&quot;&quot;;
             for(int a=klammerstart+1;a&lt;klammerende;a++)
                zwischenterm+=funktion[a];
             String neuer_term=&quot;&quot;;
             for(int a=1;a&lt;klammerstart;a++)
                neuer_term+=funktion[a];
             neuer_term+=klammerlosen_term_aufloesen(zwischenterm);
             for(int a=klammerende+1;a&lt;=funktion.Length();a++)
                neuer_term+=funktion[a];
             funktion=neuer_term;
             klammerstart=-1;
             klammerende=-1;
          }
          else
             schleife=true;
       }
     funktion=klammerlosen_term_aufloesen(funktion);
     schleife=false;
     return(funktion);
}
</code></pre>
<p>Diese Funktion setzt für x irgendeinen Wert ein:</p>
<pre><code>String x_einsetzen(String l, float w)
{
   String vorterm=&quot;&quot;,nachterm=&quot;&quot;;
   int vor=0;
   for(int a=1;a&lt;=l.Length();a++)
   { :die: 
      if(l[a]==120)
      {
         vor=a-1;
         vorterm=&quot;&quot;;
         nachterm=&quot;&quot;;
         for(int b=1;b&lt;=vor;b++)
            vorterm+=String(l[b]);
         for(int b=vor+2;b&lt;=l.Length();b++)
            nachterm+=String(l[b]);
         l=vorterm+FloatToStr(w)+nachterm;

      }
   }
   return(l);
}
</code></pre>
<p>Diese Funktion löst einen Term, der keine Klammern enthält:</p>
<pre><code>String klammerlosen_term_aufloesen(String t)
{
for(int truth=0;truth&lt;=5;truth++)
{
   for(int a=1;a&lt;=t.Length();a++)
   {
      regel(truth);
      if(t[a] == 42 &amp;&amp; mal == true
      || t[a] == 43 &amp;&amp; plus == true
      || t[a] == 94 &amp;&amp; hoch == true
      || t[a] == 47 &amp;&amp; durch == true
      || t[a] == 45 &amp;&amp; minus == true)
      {
         int multiplikationslaengen=1;
         int multiplikationslaengev=0;

	 //Alle Zeichen nach dem &quot;*&quot; durchlaufen bis es keine Zahl mehr ist.
         String vzahl=&quot;&quot;;
         String nzahl=&quot;&quot;;
         for(int b=a+1;b&lt;=t.Length();b++)
         {
            if(t[b]&gt;47 &amp;&amp; t[b]&lt;58|| t[b]==44)
            {
               nzahl+=String(t[b]);
               multiplikationslaengen++;
            }
            else
               break;
         }
         theterm=false;
	 //Alle Zeichen vor dem &quot;*&quot; durchlaufen bis es keine Zahl mehr ist.
         for(int b=a-1;b&gt;0;b--)
         {
            if(t[b]&gt;47 &amp;&amp; t[b]&lt;58 || t[b]==44|| (t[b]==45&amp;&amp;b==1))
            {
               vzahl+=String(t[b]);
               multiplikationslaengev++;
            }
            else
               break;
         }
         if(vzahl.Length()&gt;0)
         {
         theterm=false;
         vzahl = String_invertieren(vzahl);
         double nachzahl=StrToFloat(nzahl);
         double vorzahl=StrToFloat(vzahl);
         double ergebnis=0;
         switch(truth)
         {
            case 0:
               ergebnis=nachzahl*vorzahl;
            break;
            case 1:
            if(nachzahl!=0)
               ergebnis=vorzahl/nachzahl;
            break;
            case 2:
               ergebnis=nachzahl+vorzahl;
            break;
            case 3:
               ergebnis=vorzahl-nachzahl;
            break;
            case 4:
               ergebnis=pow(vorzahl,nachzahl);
            break;
         }
         String loesung = FloatToStr(double(ergebnis));
         String vorterm=&quot;&quot;;
         String nachterm=&quot;&quot;;
         for(int x=1;x&lt;a-multiplikationslaengev;x++)
            vorterm+=String(t[x]);
         for(int x=a+multiplikationslaengen;x&lt;=t.Length();x++)
            nachterm+=String(t[x]);
         t=vorterm+loesung+nachterm;
         terme[male]=t;
         male++;
         }
      }
   }
}
   return(t);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/174212/eaccessviolation</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 16:37:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174212.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Feb 2007 08:47:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to EAccessViolation on Sat, 24 Feb 2007 08:48:34 GMT]]></title><description><![CDATA[<p>Hallo ihr,<br />
Ich habe jetzt mal so aus Just4Fun ein Proggramm geschrieben, welches einen vom Benutzer eingegebenen String analysiert und ausrechnet -&gt;Also eine Funktionsgleichung löst.<br />
Gerade bin ich endlich mit meiner Hauptfunktion</p>
<p>&quot;String beklammerten_term_aufloesen(String,float)&quot;</p>
<p>fertig geworden.<br />
Die zwei Übergabewerte stehen für den im Textfeld eingegebenen Wert und der zweite Parameter natürlich für den Wert, der für &quot;x&quot; eingesetzt werden soll.<br />
Die Funktion arbeitet perfekt- somit habe ich mich gefreut und mir gedacht:<br />
Jo- jetzt kannste das ganze einfach in eine Schleife bauen, die den zweiten Übergabeparameter immer um 1 hochzählt und schon hast du deine Wertetabelle fertig.<br />
Doch leider hatte ich falsch gedacht.<br />
Lasse ich meine Schleife öfter als 16 mal durchlaufen, so tritt die folgende Fehlermeldung auf:</p>
<p><a href="http://Jesusfreak777.je.funpic.de/EAccess.JPG" rel="nofollow">http://Jesusfreak777.je.funpic.de/EAccess.JPG</a></p>
<p>Ich habe mich bereits totgesucht nach dem Fehler kann aber einfach nicht seine Ursache finden.<br />
Das Komische ist auch, dass die Funktion super arbeitet, wenn ich die Anzahl der Schleifendurchläufe auf 15 reduziere.<br />
Ich könnte Beispielsweise auch bei &quot;15&quot; anfangen und dann bis &quot;30&quot; zählen- das würde auch noch gehen- aber sobald es dann &quot;31&quot; ist spuckt mir der Compiler diesen Fehler.<br />
Kann mir jemand helfen?</p>
<p>cya<br />
David</p>
<p>PS: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Code:</p>
<p>Das Button-Event:</p>
<pre><code>void __fastcall Tfrmgraph::Image1MouseDown
(TObject *Sender,TMouseButton Button, TShiftState Shift,
int X, int Y)
{
    lst1-&gt;Items-&gt;Clear();
    firstnegative=false;
    button-&gt;LoadFromFile(&quot;down.bmp&quot;);
    lblberechnen-&gt;Picture = button;
    klammerende=-1;
    klammerstart=-1;
    male=0;
    String funktionsterm = txtterm-&gt;Text;
    txtrechnung-&gt;Text = funktionsterm;

    txtterm-&gt;Text=leerstellen_ausmerzen(txtterm-&gt;Text);
    txtterm-&gt;Text=mal_einsetzen(txtterm-&gt;Text);
    for(float a=1;a&lt;20;a+=1)
    {
        String funktionsterm2 = beklammerten_term_aufloesen(funktionsterm,a);
        funktionsterm2=klammerlosen_term_aufloesen(funktionsterm2);
        lst1-&gt;Items-&gt;Add(funktionsterm2);
    }
   imggraph-&gt;Canvas-&gt;Draw(0,0,graph);
}
</code></pre>
<p>Das hier ist die Hauptfunktion. Von ihr aus werden noch kleinere Unterfunktionen die unten gepostet sind aufgerufen um das ganze übersichtlicher zu machen:</p>
<pre><code>String beklammerten_term_aufloesen(String funktion, float ix)
{
    funktion = x_einsetzen(funktion,ix);
    for(int a=1;a&lt;=funktion.Length()-1;a++)
    {
       if(funktion[a]==45 &amp;&amp; a==1)
          firstnegative=true;
    }
    while(schleife==false)
    {
          for(int a=1;a&lt;=funktion.Length();a++)
          {
             if(funktion[a]==40)
                klammerstart=a;
             if(funktion[a]==41)
                klammerende=a;
          }
          if(klammerende&gt;-1 &amp;&amp; klammerstart&gt;-1)
          {
             String zwischenterm=&quot;&quot;;
             for(int a=klammerstart+1;a&lt;klammerende;a++)
                zwischenterm+=funktion[a];
             String neuer_term=&quot;&quot;;
             for(int a=1;a&lt;klammerstart;a++)
                neuer_term+=funktion[a];
             neuer_term+=klammerlosen_term_aufloesen(zwischenterm);
             for(int a=klammerende+1;a&lt;=funktion.Length();a++)
                neuer_term+=funktion[a];
             funktion=neuer_term;
             klammerstart=-1;
             klammerende=-1;
          }
          else
             schleife=true;
       }
     funktion=klammerlosen_term_aufloesen(funktion);
     schleife=false;
     return(funktion);
}
</code></pre>
<p>Diese Funktion setzt für x irgendeinen Wert ein:</p>
<pre><code>String x_einsetzen(String l, float w)
{
   String vorterm=&quot;&quot;,nachterm=&quot;&quot;;
   int vor=0;
   for(int a=1;a&lt;=l.Length();a++)
   { :die: 
      if(l[a]==120)
      {
         vor=a-1;
         vorterm=&quot;&quot;;
         nachterm=&quot;&quot;;
         for(int b=1;b&lt;=vor;b++)
            vorterm+=String(l[b]);
         for(int b=vor+2;b&lt;=l.Length();b++)
            nachterm+=String(l[b]);
         l=vorterm+FloatToStr(w)+nachterm;

      }
   }
   return(l);
}
</code></pre>
<p>Diese Funktion löst einen Term, der keine Klammern enthält:</p>
<pre><code>String klammerlosen_term_aufloesen(String t)
{
for(int truth=0;truth&lt;=5;truth++)
{
   for(int a=1;a&lt;=t.Length();a++)
   {
      regel(truth);
      if(t[a] == 42 &amp;&amp; mal == true
      || t[a] == 43 &amp;&amp; plus == true
      || t[a] == 94 &amp;&amp; hoch == true
      || t[a] == 47 &amp;&amp; durch == true
      || t[a] == 45 &amp;&amp; minus == true)
      {
         int multiplikationslaengen=1;
         int multiplikationslaengev=0;

	 //Alle Zeichen nach dem &quot;*&quot; durchlaufen bis es keine Zahl mehr ist.
         String vzahl=&quot;&quot;;
         String nzahl=&quot;&quot;;
         for(int b=a+1;b&lt;=t.Length();b++)
         {
            if(t[b]&gt;47 &amp;&amp; t[b]&lt;58|| t[b]==44)
            {
               nzahl+=String(t[b]);
               multiplikationslaengen++;
            }
            else
               break;
         }
         theterm=false;
	 //Alle Zeichen vor dem &quot;*&quot; durchlaufen bis es keine Zahl mehr ist.
         for(int b=a-1;b&gt;0;b--)
         {
            if(t[b]&gt;47 &amp;&amp; t[b]&lt;58 || t[b]==44|| (t[b]==45&amp;&amp;b==1))
            {
               vzahl+=String(t[b]);
               multiplikationslaengev++;
            }
            else
               break;
         }
         if(vzahl.Length()&gt;0)
         {
         theterm=false;
         vzahl = String_invertieren(vzahl);
         double nachzahl=StrToFloat(nzahl);
         double vorzahl=StrToFloat(vzahl);
         double ergebnis=0;
         switch(truth)
         {
            case 0:
               ergebnis=nachzahl*vorzahl;
            break;
            case 1:
            if(nachzahl!=0)
               ergebnis=vorzahl/nachzahl;
            break;
            case 2:
               ergebnis=nachzahl+vorzahl;
            break;
            case 3:
               ergebnis=vorzahl-nachzahl;
            break;
            case 4:
               ergebnis=pow(vorzahl,nachzahl);
            break;
         }
         String loesung = FloatToStr(double(ergebnis));
         String vorterm=&quot;&quot;;
         String nachterm=&quot;&quot;;
         for(int x=1;x&lt;a-multiplikationslaengev;x++)
            vorterm+=String(t[x]);
         for(int x=a+multiplikationslaengen;x&lt;=t.Length();x++)
            nachterm+=String(t[x]);
         t=vorterm+loesung+nachterm;
         terme[male]=t;
         male++;
         }
      }
   }
}
   return(t);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1234497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234497</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Sat, 24 Feb 2007 08:48:34 GMT</pubDate></item></channel></rss>