<?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[Auslesen Eines Arrays: fehlerhafte Werte]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich schreibe momentan ein Programm zur Berechnung von Passungen für den Metallbereich. In Excel läuft das Ding schon. Aus Sicherheitsgründen<br />
(Manipulatiossicherheit) und der Portierbarkeit will ich es in C++<br />
umschreiben. Da ich selbst als Messtechniker schon welche erlebt habe,<br />
die vorsätzlich andere Zahlen reinschrieben oder Messgeräte manipulierten,<br />
skalen verdrehten usw.<br />
Aber ich kennt das sicher. Dem will ich einen Riegel vorschieben.<br />
Die Werte kommen später als Konstanten in ein zweidimensionales Array<br />
und werden dort für die Berechnungen ausgelesen. Das Array ist Einheitswelle[41][33];</p>
<pre><code>Ab Einheitswelle[15][1];
</code></pre>
<p>liefert die Funktion falsche Werte.<br />
Ich arbeite mit codeblocks 13.12 und Suse Linux Leap 42.1.</p>
<pre><code>int getwellebeginn(double nennmass, int suchspalte, short welle[41][33])
{
short zeile;
short ug, og, rewer = -1;
cout &lt;&lt; &quot;\nGetwellebeginn:\n&quot;;
for (zeile = 0; zeile &lt; 41; zeile++)
 {
  ug = welle[zeile][0];
  og = welle[zeile][1];
  //cout &lt;&lt;&quot;\nug &quot;&lt;&lt; ug &lt;&lt; &quot;og&quot; &lt;&lt; og;

  if ((nennmass &gt; ug) &amp;&amp; (nennmass &lt;= og))
  {
   rewer = welle[zeile][suchspalte + 2];
   //cout &lt;&lt;&quot;\nug=&quot; &lt;&lt; ug &lt;&lt; &quot;   og=&quot;&lt;&lt; og &lt;&lt; &quot;    wert=&quot; &lt;&lt; rewer &lt;&lt;  &quot; suchspalte=&quot; &lt;&lt; suchspalte &lt;&lt; &quot; zeile=&quot; &lt;&lt;zeile &lt;&lt; endl;
   break;
  }
 }

return rewer;
}
</code></pre>
<p>Die Ausgabezeilen dienen zu Fehlersuche. Kann das sein, das das Array zu groß ist(Speicherverwaltung)für diese Art der Initialisierung;<br />
Eine einstellung für den Heap habe ich in der IDE nicht gefunden. Gibt es noch<br />
einen Weg, anstatt das Array aufzuteilen? Ein weiteres array ITTolerances[22][22] läuft einwandfrei, geplant ist noch ein weiteres Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335701/auslesen-eines-arrays-fehlerhafte-werte</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 12:01:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335701.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Dec 2015 17:50:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sat, 05 Dec 2015 17:50:22 GMT]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich schreibe momentan ein Programm zur Berechnung von Passungen für den Metallbereich. In Excel läuft das Ding schon. Aus Sicherheitsgründen<br />
(Manipulatiossicherheit) und der Portierbarkeit will ich es in C++<br />
umschreiben. Da ich selbst als Messtechniker schon welche erlebt habe,<br />
die vorsätzlich andere Zahlen reinschrieben oder Messgeräte manipulierten,<br />
skalen verdrehten usw.<br />
Aber ich kennt das sicher. Dem will ich einen Riegel vorschieben.<br />
Die Werte kommen später als Konstanten in ein zweidimensionales Array<br />
und werden dort für die Berechnungen ausgelesen. Das Array ist Einheitswelle[41][33];</p>
<pre><code>Ab Einheitswelle[15][1];
</code></pre>
<p>liefert die Funktion falsche Werte.<br />
Ich arbeite mit codeblocks 13.12 und Suse Linux Leap 42.1.</p>
<pre><code>int getwellebeginn(double nennmass, int suchspalte, short welle[41][33])
{
short zeile;
short ug, og, rewer = -1;
cout &lt;&lt; &quot;\nGetwellebeginn:\n&quot;;
for (zeile = 0; zeile &lt; 41; zeile++)
 {
  ug = welle[zeile][0];
  og = welle[zeile][1];
  //cout &lt;&lt;&quot;\nug &quot;&lt;&lt; ug &lt;&lt; &quot;og&quot; &lt;&lt; og;

  if ((nennmass &gt; ug) &amp;&amp; (nennmass &lt;= og))
  {
   rewer = welle[zeile][suchspalte + 2];
   //cout &lt;&lt;&quot;\nug=&quot; &lt;&lt; ug &lt;&lt; &quot;   og=&quot;&lt;&lt; og &lt;&lt; &quot;    wert=&quot; &lt;&lt; rewer &lt;&lt;  &quot; suchspalte=&quot; &lt;&lt; suchspalte &lt;&lt; &quot; zeile=&quot; &lt;&lt;zeile &lt;&lt; endl;
   break;
  }
 }

return rewer;
}
</code></pre>
<p>Die Ausgabezeilen dienen zu Fehlersuche. Kann das sein, das das Array zu groß ist(Speicherverwaltung)für diese Art der Initialisierung;<br />
Eine einstellung für den Heap habe ich in der IDE nicht gefunden. Gibt es noch<br />
einen Weg, anstatt das Array aufzuteilen? Ein weiteres array ITTolerances[22][22] läuft einwandfrei, geplant ist noch ein weiteres Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478290</guid><dc:creator><![CDATA[rustyoldguy]]></dc:creator><pubDate>Sat, 05 Dec 2015 17:50:22 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sat, 05 Dec 2015 18:10:27 GMT]]></title><description><![CDATA[<p>Hallo rustyoldguy,</p>
<p>ich habs noch nicht so wirklich verstanden, wo der Fehler/das Problem liegt.<br />
Du sagst nur da passt was nicht, aber das was nicht passt finde ich in Deinem Codeabschnitt nicht wieder. Übersehe ich gerade was?</p>
<pre><code>int myarray[5];
</code></pre>
<p>Das wird auf dem Stack abgelegt und nicht auf dem Heap.</p>
<p>Für die Heap-Allokation benötigt man den new Operator.<br />
Beispiel:</p>
<pre><code>int* myarray = new int[5];

myarray[0] = 123;
</code></pre>
<p>Initialisierung vom Speicher nicht vergessen.</p>
<p>Was die Heapgröße angeht, die maximale Größe ist Dein Arbeitsspeicher, Stackgröße ist meines Wissens CPU abhängig.</p>
<p>Viele Grüße,</p>
<p>Jakob</p>
<p>---</p>
<p>edit: Schau dir mal die STL Container Klassen an wie den std::vector -&gt; <a href="http://www.cplusplus.com/reference/stl/" rel="nofollow">http://www.cplusplus.com/reference/stl/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478291</guid><dc:creator><![CDATA[__jb__]]></dc:creator><pubDate>Sat, 05 Dec 2015 18:10:27 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sat, 05 Dec 2015 18:29:04 GMT]]></title><description><![CDATA[<p><strong>jb</strong> schrieb:</p>
<blockquote>
<p>Stackgröße ist meines Wissens CPU abhängig.</p>
</blockquote>
<p>Falsch.</p>
<p>Zu groß ist das Array sicher nicht. Aber rohe Arrays sind in C++ ziemlich fehleranfällig. Ich müsste auch erst überlegen, wie man das richtig macht (auch, weil ich das noch nie gemacht habe). Benutz einen std::vector oder eine eigene Datenstruktur, die den vector oder ähnliche Container kapselt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478293</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sat, 05 Dec 2015 18:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sat, 05 Dec 2015 18:40:20 GMT]]></title><description><![CDATA[<p>Das Programm klappt jetzt.</p>
<p>Nach dem Gegenlesen wurde ein Komma übersehen, so das sich die Werte beim Initialisieren verschoben hatten. Handeingabe, da<br />
kein gutes Freeware-OCR-Programm für Suse-Linux! Da hätte ich die OCR-Ergebnisdateienmehr<br />
korrigiert, als das ganze Scannen wert ist!</p>
<p>By the way, wie bringe ich eigentlich ein solches<br />
Monster-Array eigentlich in eine Klasse beim initialisieren?</p>
<p>Auf meine Recherchen bei verschiedenen Autoren habe ich nichts gefunden, wie<br />
ein zweidimensionales Array innerhalb einer Klasse beim Konstruktor<br />
initialisiert wird, oder ist es besser, das ganze gleich in eine Include-Datei<br />
zu legen? die Gesamtzahl aller Werte ist 3343. Ich denke das eine Änderung der DIN ISO 286-1 sowie der DIN ISO 296-2<br />
(Passungsberechnungen für Außen- und Innenmaße) wohl noch längere Zeit, wenn überhaupt auf sich warten lässt, eine Deklaration<br />
als const in einer include-Datei würde sich eher anbieten.<br />
Zudem sind ja die Werte an die Schulungsunterlagen gebunden, die ich beim Kursus zum DGQ-Qualitätsassistenten- und Fachkraft sowie<br />
Messtechnik bekam.<br />
Gelänge es mir diese innerhalb einer Klasse zu verbergen, bliebe<br />
das Copyright unverletzt. Geplant ist eine Programmversion für<br />
Umschüler, als Lernhilfe.</p>
<p>Wie denkt Ihr darüber?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478295</guid><dc:creator><![CDATA[rustyoldguy]]></dc:creator><pubDate>Sat, 05 Dec 2015 18:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 09:13:17 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p><strong>jb</strong> schrieb:</p>
<blockquote>
<p>Stackgröße ist meines Wissens CPU abhängig.</p>
</blockquote>
<p>Falsch.</p>
</blockquote>
<p>Ziemlich einsilbig. Was ist den korrekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478336</guid><dc:creator><![CDATA[__jb__]]></dc:creator><pubDate>Sun, 06 Dec 2015 09:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 09:22:21 GMT]]></title><description><![CDATA[<p>Die Stackgröße kannst du in den Linkereinstellungen setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478337</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Sun, 06 Dec 2015 09:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 11:08:25 GMT]]></title><description><![CDATA[<p>Warum soll er an den stacksettings spielen??? Was hat das mit dem Problem zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478349</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Sun, 06 Dec 2015 11:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 11:21:19 GMT]]></title><description><![CDATA[<p>Beiträge freuen sich, wenn man sie ließt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478352</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Sun, 06 Dec 2015 11:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 12:06:19 GMT]]></title><description><![CDATA[<p>rustyoldguy schrieb:</p>
<blockquote>
<p>By the way, wie bringe ich eigentlich ein solches<br />
Monster-Array eigentlich in eine Klasse beim initialisieren?</p>
<p>Auf meine Recherchen bei verschiedenen Autoren habe ich nichts gefunden, wie<br />
ein zweidimensionales Array innerhalb einer Klasse beim Konstruktor<br />
initialisiert wird, oder ist es besser, das ganze gleich in eine Include-Datei<br />
zu legen?</p>
</blockquote>
<p><code>#include</code> ist mMn. schon das richtige Stichwort.<br />
Du musst Deine Daten halt irgendwie in C++-Syntax dengeln und los. Z.B.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;iomanip&gt;

const double data[20][13]=
  {
    #include &quot;EihWe.data&quot;
  };

int main(){
  for(const auto&amp; z:data){
    for(const auto&amp; t:z)
      std::cout &lt;&lt; std::setw(6) &lt;&lt; t;
    std::cout &lt;&lt; '\n';
  }
}
</code></pre>
<p>Wie Du die Eingabedatei umwandelst ist Dir überlassen - ich habe das auch schon mit Notepad und Word gemacht.</p>
<p>Aber für den Source von oben mit <code>sed</code> und <code>make</code> .<br />
Datei EihWe.csv</p>
<pre><code>0,3 0,4 0,4 0,5 0,6 0,6 0,8 1  1,2 2  2,5 3  4 
0,5 0,6 0,6 0,8 1  1  1,2 1,5 2  3  4  5  6 
0,8 1  1  1,2 1,5 1,5 2  2,5 3,5 4,5 6  7  8 
1,2 1,5 1,5 2  2,5 2,5 3  4  5  7  8  9  10 
2  2,5 2,5 3  4  4  5  6  8  10  12  13  15 
3  4  4  5  6  7  8  10  12  14  16  18  20 
4  5  6  8  9  11  13  15  18  20  23  25  27 
6  8  9  11  13  16  19  22  25  29  32  36  40 
10  12  15  18  21  25  30  35  40  46  52  57  63 
14  18  22  27  33  39  46  54  63  72  81  89  97 
25  30  36  43  52  62  74  87  100  115  130  140  155 
40  48  58  70  84  100  120  140  160  185  210  230  250 
60  75  90  110  130  160  190  220  250  290  320  360  400 
100  120  150  180  210  250  300  350  400  460  520  570  630 
140  180  220  270  330  390  460  540  630  720  810  890  970 
250  300  360  430  520  620  740  870  1000  1150  1300  1400  1550 
400  480  580  700  840  1000  1200  1400  1600  1850  2100  2300  2500 
600  750  900  1100  1300  1600  1900  2200  2500  2900  3200  3600  4000 
1000  1200  1500  1800  2100  2500  3000  3500  4000  4600  5200  5700  6300 
1400  1800  2200  2700  3300  3900  4600  5400  6300  7200  8100  2200  9700
</code></pre>
<p>Makefile:(Zeilen 4 u. 7. beginnen mit einem TAB - nicht mit SPACE)</p>
<pre><code>CXXFLAGS+=-std=c++14 -Wall -pedantic

%.data : %.csv
	sed -e 's/,/./g;s/$$/},/g;s/^/{/g;s/[ ]\+/, /g' &lt;$^ &gt;$@

data: data.o
	$(CXX) $(LDFLAGS) $^ -o $@

data.o : EihWe.data
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2478364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478364</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 06 Dec 2015 12:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 12:11:01 GMT]]></title><description><![CDATA[<p>Wäre es nicht besser, es als Datei zu speichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478369</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Sun, 06 Dec 2015 12:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 12:32:51 GMT]]></title><description><![CDATA[<p>roflo schrieb:</p>
<blockquote>
<p>Wäre es nicht besser, es als Datei zu speichern?</p>
</blockquote>
<p>Mit der executable mitliefern und im Konstruktor auslesen? Vielleicht. Aber dann hätten wir wieder das Ausgangsproblem der manipulierten Tabellen.</p>
<p>Davon abgesehen finde ich den Weg des direkten einfügens in den Source auch recht gangbar und effizient.<br />
Natürlich darfst Du neu Kompilieren, sollten sich die Tabellen jemals ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478372</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 06 Dec 2015 12:32:51 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen Eines Arrays: fehlerhafte Werte on Sun, 06 Dec 2015 14:17:02 GMT]]></title><description><![CDATA[<p>Daran habe ich auch schon gedacht. Ich habe mich für die Lösung mit der include-Datei entschieden.</p>
<p>Das Risiko, das einer die Datei verschlampt oder löscht, ist mir zu groß.<br />
Ich habe in den Listen der DIN IS0 noch die Nennmaßbereiche mit<br />
reingepackt, damit eine Selbstkontrolle möglich ist.<br />
Bei der Masse von Daten habe ich festgestellt, muß der Text für die<br />
Include-Datei sehr sauber formatiert werden, wegen dem Kontoll-Lesen.<br />
Würde die Stackgröße nicht stimmen, müßte das Programm diese zur<br />
Kontrolle ins Array eingepflanzten Werte nicht richtig lesen. Aber<br />
bei insgesammt 3400 const double-Werten sollte das noch keinen PC<br />
Schwierigkeiten machen.</p>
<p>Normalerweise gehen die meisten Tabellenbücher bis 500 mm Nennmaß<br />
nicht hinaus. Die Toleranzen gehen aber von 1 bis 3150 mm. Einige<br />
Passungen wie zum Beispiel 27p7 oder 15Z11 stehen in den normalen<br />
Tabellenbüchern nicht drin. Daher das Programm. Sogar im Internet<br />
habe ich schon Seiten gefunden, wo diese falsch berechnet werden.<br />
Das kann bei einer Mängelrüge eines Kunden, bei einer Abweisung<br />
einer Lieferung ziemlich teuer werden. Komischerweise können sogar<br />
einige Techniker solche Passungen nicht mit der Hand berechnen.<br />
Dabei ist das so, wenn man weis wie es geht und die<br />
Berechnungsunterlagen dazu hat, ist es ganz einfach. Aber wer gibt<br />
schon mehr als 100 Euro nur für ein Buch zur Passungsberechnung aus.<br />
Schätze mal, da bin ich einer der wenigen, die so was kaufen(müssen).<br />
Bei Umschülern zum Qualitätsfachmann für Längenprüftechnik habe ich<br />
keine Angst vor Fehlbedienung. Dafür ist die Ausbildung bei einem<br />
BFW viel zu gut. Wohl aber bei beruflichen Seiteneinsteigern(sorry!).<br />
Deshalb habe ich bei einem anderen Forum absichtlich die EXCEL-Datei<br />
für Windows gesperrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478396</guid><dc:creator><![CDATA[rustyoldguy]]></dc:creator><pubDate>Sun, 06 Dec 2015 14:17:02 GMT</pubDate></item></channel></rss>