Primentus
Senior Dabei seit: 18.02.2016 Mitteilungen: 1222
Herkunft: Deutschland
Beitrag No.1, eingetragen 2020-11-10
Hallo Kajam,
falls Du das fehlerlose Kompilieren und die Ausführung Deiner Funktion sehen willst, musst Du folgendes tun:
1. Nach einer geschlossenen geschweiften Klammer, die eine Funktionsdefinition abschließt, kommt niemals ein Semikolon.
2. Du musst zusätzlich noch ein Hauptprogramm hinzufügen, die sogenannte main-Funktion, welche einen Integerwert als Status zurückgibt. Es empfiehlt sich die Rückgabe von 0 im Sinne des Status "erfolgreich". Zudem muss in dieser main-Funktion die Funktion add aufgerufen werden, etwa so:
Kajam
Aktiv Dabei seit: 18.02.2020 Mitteilungen: 316
Beitrag No.3, vom Themenstarter, eingetragen 2020-11-11
Hallo Leute,
1. In der Lösung steht ein Semikolon nach der geschlossenen geschweiften Klammer. Das finde ich auch sehr merkwürdig. Ist das ein Fehler in der Lösung?
Die Lösung:
2. Wieso steht bei dir "add(3,5)"? Woher kommt diese "3,5" in den Klammern?
Vielleicht gehört Aufgabe a) dazu. Soll ich erstmal das Programm in a) in Codeblocks implementieren?
Kajam
Aktiv Dabei seit: 18.02.2020 Mitteilungen: 316
Beitrag No.4, vom Themenstarter, eingetragen 2020-11-11
2020-11-11 10:07 - DerEinfaeltige in Beitrag No. 2 schreibt:
Hast du Codeblocks inklusive C/C++-Compiler korrekt installiert und das "Hello World"-Tutorial aus dem wiki durchgearbeitet?
Falls nein, würde ich das unbedingt empfehlen.
Ich weiß es nicht. Wie finde ich heraus, ob ich Codeblocks inklusive C/C++ Compiler korrekt installiert habe? Das "Hello World"-Programm habe ich schon implementiert.
falls Du das fehlerlose Kompilieren und die Ausführung Deiner Funktion sehen willst, musst Du folgendes tun:
1. Nach einer geschlossenen geschweiften Klammer, die eine Funktionsdefinition abschließt, kommt niemals ein Semikolon.
2. Du musst zusätzlich noch ein Hauptprogramm hinzufügen, die sogenannte main-Funktion, welche einen Integerwert als Status zurückgibt. Es empfiehlt sich die Rückgabe von 0 im Sinne des Status "erfolgreich". Zudem muss in dieser main-Funktion die Funktion add aufgerufen werden, etwa so:
1. In der Lösung steht ein Semikolon nach der geschlossenen geschweiften Klammer. Das finde ich auch sehr merkwürdig. Ist das ein Fehler in der Lösung?
Ob ein Fehler vorliegt, sollte sich doch leicht überprüfen lassen.
Was kommt dir denn merkwürdig vor?
Semikolons dürfen in C/C++ doch fast überall stehen, wo gerade Platz ist.
Beispielsweise zwischen Blöcken und Statements.
Primentus
Senior Dabei seit: 18.02.2016 Mitteilungen: 1222
Herkunft: Deutschland
Beitrag No.8, eingetragen 2020-11-11
Hallo Kajam,
die Funktionen add und main müssen hintereinander stehen, nicht ineinandergeschachtelt, wie schon gesagt wurde.
Und beim Aufruf der Funktion add in der Funktion main darfst Du nicht wieder a und b übergeben, denn da würde nichts sinnvolles passieren. Stattdessen übergibst Du eben einfach zwei (beliebige) ganzzahlige Werte, die addiert werden sollen.
Oder Du machst alternativ noch zwei Variablendefinitionen in der Funktion main
DerEinfaeltige
Senior Dabei seit: 11.02.2015 Mitteilungen: 2606
Beitrag No.11, eingetragen 2020-11-12
Wie und wo soll er denn 32 ausgeben?
Dein Code ergibt größtenteils auch wenig Sinn.
In der add-Funktion steht eine Anweisung hinter return.
Und die max-Funktion ist inhaltlich falsch implementiert.
Versuche außerdem wenn möglich, Quelltext in der Quelltextumgebung zu posten.
Hier wäre ein kurzes Beispiel, wie man add und max für int implementieren könnte. Dafür braucht man auch kein Profiwerkzeug wie Codeblocks. Ein einfacher Onlineeditor und Compiler reicht völlig aus.
C++
#include <iostream>usingnamespace std;int add(int,int);int max(int,int);int max(int a, int b){return(a>=b)?a:b;}int add(int a, int b){return a+b;}int main(){int x =10;int y =22;cout<<"max(x,y) = "<< max(x,y)<< endl;cout<<"add(x,y) = "<< add(x,y)<< endl;return0;}
----------------- Why waste time learning when ignorance is instantaneous?
- Bill Watterson -
Kajam
Aktiv Dabei seit: 18.02.2020 Mitteilungen: 316
Beitrag No.12, vom Themenstarter, eingetragen 2020-11-13
2020-11-12 17:04 - DerEinfaeltige in Beitrag No. 11 schreibt:
Wie und wo soll er denn 32 ausgeben?
Dein Code ergibt größtenteils auch wenig Sinn.
In der add-Funktion steht eine Anweisung hinter return.
Und die max-Funktion ist inhaltlich falsch implementiert.
Versuche außerdem wenn möglich, Quelltext in der Quelltextumgebung zu posten.
Hier wäre ein kurzes Beispiel, wie man add und max für int implementieren könnte. Dafür braucht man auch kein Profiwerkzeug wie Codeblocks. Ein einfacher Onlineeditor und Compiler reicht völlig aus.
C++
#include <iostream>usingnamespace std;int add(int,int);int max(int,int);int max(int a, int b){return(a>=b)?a:b;}int add(int a, int b){return a+b;}int main(){int x =10;int y =22;cout<<"max(x,y) = "<< max(x,y)<< endl;cout<<"add(x,y) = "<< add(x,y)<< endl;return0;}
Hinter return darf nie eine Anweisung stehen? Return steht also immer an letzter Stelle ganz unten, und davor können die Anweisungen stehen?
Die max-Funktion habe ich aus der Aufgabe a) übernommen. Wieso ist das falsch :(
die return-Anweisung beendet eine Funktion mit dem Rückgabewert, den man ihr als Parameter mitgibt. Anweisungen, die auf der gleichen Ebene dahinterstehen, sind mithin sinnlos, da sie niemals ausgeführt werden.
Deine max-Funktion prüft weder auf Gleichheit, noch berücksichtigt sie den Fall \(n<m\). In beiden Fällen
- gibt sie nichts aus
- liefert sie den Wert 0 zurück.
Gruß, Diophant
[Verschoben aus Forum 'Informatik' in Forum 'Programmieren' von Diophant]\(\endgroup\)
DerEinfaeltige
Senior Dabei seit: 11.02.2015 Mitteilungen: 2606
Beitrag No.14, eingetragen 2020-11-13
"return" bewirkt, dass die Funktion beendet und der Funktionswert (sofern es einen gibt) zurückgegeben wird.
Danach dürfen Anweisungen stehen, sie können jedoch nicht ausgeführt werden.
Dein Compiler sollte daher auch eine Warnung ausspucken, dass der dahinterstehende Code nicht erreicht/ausgeführt werden kann.
Was an deiner max-Funktion falsch ist, sollte ein einfacher "Bleistifttest" sofort zeigen:
max(2,1) gibt "2" an die Konsole aus und den Wert 2 zurück.
Was passiert bei max(1,2)?
Spiele es Schritt für Schritt bzw. Zeile für Zeile mit Papier und Bleistift durch.
PS.: Hast du tatsächlich das "Hello World"-Beispiel durchgearbeitet bis du eine schöne Meldung vom Compiler und eine Ausgabe an die Konsole erhalten hast?
die return-Anweisung beendet eine Funktion mit dem Rückgabewert, den man ihr als Parameter mitgibt. Anweisungen, die auf der gleichen Ebene dahinterstehen, sind mithin sinnlos, da sie niemals ausgeführt werden.
Deine max-Funktion prüft weder auf Gleichheit, noch berücksichtigt sie den Fall \(n<m\). In beiden Fällen
- gibt sie nichts aus
- liefert sie den Wert 0 zurück.
Gruß, Diophant
[Verschoben aus Forum 'Informatik' in Forum 'Programmieren' von Diophant]
Das stimmt. Diese Fälle interessieren mich auch nicht, denn in Aufgabe a) steht nur "n>m". Wenn ich das Programm ausführe, wird mir "n=20" im Terminal ausgegeben. Hier wird der Wert von "a=20" an "n" übergeben, sodass a=n=20 gilt.\(\endgroup\)
Kajam
Aktiv Dabei seit: 18.02.2020 Mitteilungen: 316
Beitrag No.16, vom Themenstarter, eingetragen 2020-11-13
2020-11-13 11:20 - DerEinfaeltige in Beitrag No. 14 schreibt:
"return" bewirkt, dass die Funktion beendet und der Funktionswert (sofern es einen gibt) zurückgegeben wird.
Danach dürfen Anweisungen stehen, sie können jedoch nicht ausgeführt werden.
Dein Compiler sollte daher auch eine Warnung ausspucken, dass der dahinterstehende Code nicht erreicht/ausgeführt werden kann.
Was an deiner max-Funktion falsch ist, sollte ein einfacher "Bleistifttest" sofort zeigen:
max(2,1) gibt "2" an die Konsole aus und den Wert 2 zurück.
Was passiert bei max(1,2)?
Spiele es Schritt für Schritt bzw. Zeile für Zeile mit Papier und Bleistift durch.
PS.: Hast du tatsächlich das "Hello World"-Beispiel durchgearbeitet bis du eine schöne Meldung vom Compiler und eine Ausgabe an die Konsole erhalten hast?
StrgAltEntf
Senior Dabei seit: 19.01.2013 Mitteilungen: 6550
Herkunft: Milchstraße
Beitrag No.24, eingetragen 2020-11-13
... außerdem finde ich es sehr hässlich, innerhalb der Definition der Funktion max eine Variable mit dem Namen max zu definieren. (Aber erlaubt ist das schon.)
2020-11-12 17:04 - DerEinfaeltige in Beitrag No. 11 schreibt:
Wie und wo soll er denn 32 ausgeben?
Dein Code ergibt größtenteils auch wenig Sinn.
In der add-Funktion steht eine Anweisung hinter return.
Und die max-Funktion ist inhaltlich falsch implementiert.
Versuche außerdem wenn möglich, Quelltext in der Quelltextumgebung zu posten.
Hier wäre ein kurzes Beispiel, wie man add und max für int implementieren könnte. Dafür braucht man auch kein Profiwerkzeug wie Codeblocks. Ein einfacher Onlineeditor und Compiler reicht völlig aus.
C++
#include <iostream>usingnamespace std;int add(int,int);int max(int,int);int max(int a, int b){return(a>=b)?a:b;}int add(int a, int b){return a+b;}int main(){int x =10;int y =22;cout<<"max(x,y) = "<< max(x,y)<< endl;cout<<"add(x,y) = "<< add(x,y)<< endl;return0;}
Hinter return darf nie eine Anweisung stehen? Return steht also immer an letzter Stelle ganz unten, und davor können die Anweisungen stehen?
Die max-Funktion habe ich aus der Aufgabe a) übernommen. Wieso ist das falsch :(
Ich soll etwas in die main-Funktion einfügen, richtig? Ich sehe aber nicht was ich einfügen könnte. Ich habe mich an dem obigen Beispiel/Bild orientiert. Ich habe doch ein Feld mit 5 Werten initialisiert
Kajam
Aktiv Dabei seit: 18.02.2020 Mitteilungen: 316
Beitrag No.28, vom Themenstarter, eingetragen 2020-11-13
2020-11-13 18:41 - DerEinfaeltige in Beitrag No. 27 schreibt:
Du musst das Feld und seine Größe der Funktion übergeben.
Also etwas der Form:
C++
int feld[5]={2, 7, 1, 8, 2};cout<< max(feld,5)<< endl;
Jetzt klappt es.
Kannst du mir aber noch Folgendes 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?