Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » C++: Zahlenkette, Programm int max(int feld[], int size)
Druckversion
Druckversion
Autor
Universität/Hochschule J C++: Zahlenkette, Programm int max(int feld[], int size)
Kajam
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-11-14








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



Wahlurne Für Kajam bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
pzktupel
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 02.09.2017
Mitteilungen: 1746
Herkunft: Thüringen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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



Wahlurne Für pzktupel bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3202
Herkunft: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.



Wahlurne Für ligning bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2606
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.]



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 27690
Herkunft: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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 ¼



Wahlurne Für viertel bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam hat die Antworten auf ihre/seine Frage gesehen.
Kajam hat selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
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]