|
Autor |
C++: Zahlenkette, Programm int max(int feld[], int size) |
|
Kajam
Aktiv  Dabei seit: 18.02.2020 Mitteilungen: 316
 |
Hallo, kann mir jemand die Elemente dieses Programms erklären:
if (size==-1) return -7; // Kuckuck
Wie kann hier die Größe "-1" sein? Ich kann doch höchstens keine, also 0 Felder haben. Wie kann ich ins Minus gehen? Wie soll ich das verstehen? Was ist mit //Kuckuck gemeint?
if (feld == NULL)
throw std::runtime_error("nullptr not expected");
Das NULL kann ich auch mit dem "0" gleichsetzen? Und was heißt dann throw std::runtime_error("nullptr not expected") ? Wenn es also Null Felder sind, passiert was?
Und ist "*feld" das gleiche wie "feld[]" ?
Liebe Grüße, Kajam
|
Für Kajam bei den Matheplanet-Awards stimmen
Notiz Profil
Quote
Link |
pzktupel
Aktiv  Dabei seit: 02.09.2017 Mitteilungen: 1746
Herkunft: Thüringen
 |     Beitrag No.1, eingetragen 2020-11-14
|
Ich kann zwar kein C++, aber denke ich kann es deuten.
size==-1 ist programmintern eine Regelung, weil Size immer >=0 ist, außer
es gibt nichts zu prüfen. Es gibt nicht einmal feld[0]. Also wenn garnix da ist, setzte -1. Das Programm weiß dann, was los ist.
dann setzt der feld[0]=max als Startwert zum späteren vergleichen.
dann prüft der einzeln alle Felder durch und setzt max neu, falls feld[i] das alte max übersteigt.
Rückgabe von max am Ende.
P.S. Am Ende kann natürlich teilweise was falsch von mir sein.
----------------- zum Primzahl k-Tupel Thread
PDFs on "Mathematik alpha"
Hinweis: MP-Notizbuch
|
Für pzktupel bei den Matheplanet-Awards stimmen
Notiz Profil
Quote
Link |
ligning
Senior  Dabei seit: 07.12.2014 Mitteilungen: 3202
Herkunft: Berlin
 |     Beitrag No.2, eingetragen 2020-11-14
|
2020-11-14 12:11 - Kajam im Themenstart schreibt:
if (size==-1) return -7; // Kuckuck
Wie kann hier die Größe "-1" sein? Ich kann doch höchstens keine, also 0 Felder haben. Wie kann ich ins Minus gehen? Wie soll ich das verstehen? Was ist mit //Kuckuck gemeint? Die Größe kann nicht -1 sein. Aber der Parameter size kann -1 sein, wenn da jemand nämlich -1 übergibt. Es kann auch jemand -2 übergeben. Ich weiß ehrlich gesagt nicht, was diese Abfrage soll und was das Ergebnis -7 soll, aber der Kommentar "Kuckuck" macht ja schon deutlich, dass wir es hier mit einem Scherzkeks zu tun haben.
Normalerweise würde man für den size-Parameter den Datentyp size_t verwenden, der ist vorzeichenlos und außerdem ausreichend groß, um jede mögliche Arraygröße darzustellen (was int nicht ist.)
if (feld == NULL)
throw std::runtime_error("nullptr not expected");
Das NULL kann ich auch mit dem "0" gleichsetzen?
NULL ist ein Makro, das für eine Nullpointerkonstante stehen soll. Es ist typischerweise einfach also 0 definiert. Das ist aus mehreren Gründen problematisch, in modernem C++ benutzt man stattdessen das Schlüsselwort nullptr.
Und was heißt dann throw std::runtime_error("nullptr not expected") ? Wenn es also Null Felder sind, passiert was?
Es wird geprüft, ob feld ein Nullpointer ist, nichts mit "null Feldern". Und wenn das so ist, wird eine Exception geworfen.
Und ist "*feld" das gleiche wie "feld[]" ?
Hier ja. Soweit ich weiß ist das in Deklarationen von Funktionsargumenten der Fall, außerdem bei extern-Deklarationen.
|
Für ligning bei den Matheplanet-Awards stimmen
Notiz Profil
Quote
Link |
DerEinfaeltige
Senior  Dabei seit: 11.02.2015 Mitteilungen: 2606
 |     Beitrag No.3, eingetragen 2020-11-14
|
Die Abfrage size==-1 ist schon merkwürdig.
Sie soll wohl verdeutlichen, dass die Funktion darauf vertrauen muss, dass man ihr nur sinnvolle Werte übergibt.
size kann grundsätzlich eine beliebige Integerzahl sein, das Programm ergibt jedoch nur dann Sinn, wenn size positiv ist und der Länge des Feldes entspricht.
Es wäre daher besser, alle nichtpositiven Werte von size einer Sonderbehandlung zu unterziehen.
Auch dann verbliebe das Problem, dass size größer sein kann als das feld und das Programm daher Speichermüll aus dem Datennirvana analysieren und bestenfalls mit einer Zugriffsverletzung abstürzen würde.
Aus solchen Gründen arbeitet man in der Praxis wenn möglich mit Containern wie std::vector und nicht direkt mit Arrays.
Die nächste Abfrage stellt sicher, dass feld nicht der Nullzeiger ist, also zumindest prinzipiell Daten enthalten kann.
Hinweis:
Ein Array als Argument ist praktisch nur ein Zeiger auf das erste Element.
Der Indexoperator feld[i] ist dabei eine Kurzschreibweise für *(feld+i)
Lies *(feld+i) als "Addiere i zum Zeiger feld und dereferenziere den dortigen Wert".
Auf die Programmlogik ist pkztupel bereits eingegangen.
[Die Antwort wurde nach Beitrag No.1 begonnen.]
|
Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Notiz Profil
Quote
Link |
viertel
Senior  Dabei seit: 04.03.2003 Mitteilungen: 27690
Herkunft: Hessen
 |     Beitrag No.4, eingetragen 2020-11-14
|
Und der Kuckuck-Spaßvogel hat hier kräftig mit den Einrückkonventionen geschlampt😖
Das zweite if gehört z.B. genau unter das erste.
Die bereits in deinem anderen Thread besprochenen fehlenden Klammern sind ebenfalls schlampig (wenn auch hier sysntaktisch nicht nötig).
Gruß vom ¼
|
Für viertel bei den Matheplanet-Awards stimmen
Notiz Profil
Quote
Link |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|