silent_max

20.04.2012, 14:52 (editiert von silent_max am 20.04.2012 um 15:58) |
Funktionen in C++ (Elektronik) |
Hallo liebe Gemeinde.
Seit ca. drei Wochen beschäftige ich mich nun mit Funktionen.
Ich verstehe im Moment nicht, wann man im Funktionskopf Variablen als Parameter übergibt und wann nicht.
Dazu ein Beispiel:
Wenn ich folgenden Quellcode
#include <iostream>
using namespace std;
void Elvis ()
{
cout << endl;
cout << "Wie alt ist Elvis, unser Hund?" << endl;
cout << "Elvis ist 19 Monate alt!" << endl;
cout << endl;
}
double Division(double , double )
{
cout << "Funktion Division" << endl;
double z = x / y;
return z;
}
int main()
{
cout << endl;
cout << "Verwendung von Funktionen!" << endl;
cout << endl;
Elvis(); //Aufruf der Funktion Elvis
cout << "Zwei Zahlen bitte!" << endl;
double x, y, z;
cin >> x >> y;
z=Division(x,y); //Aufruf der Funktion Division
cout << "z nach Division: " << z << endl;
return 0;
}
debugge, kommt folgende Fehlermeldung:

Wenn ich die beiden Variablen x und y in der Funktion Division deklarire und initialisier, bekomme ich folgende Fehlermeldung:

Erst wenn ich die beiden Variablen im Funktionskopf deklariere wie folgt:
double Division(double x, double y)
{
cout << "Funktion Division" << endl;
double z = x / y;
return z;
}
kommt folgende Ausgabe:

Warum ist das so???? Ich komme einfach nicht drauf.
Vielen Dank für die Antworten im Voraus.
Gruß
Max
P.S.: Hier ist ein Link, bei dem man den Code besser lesen kann:
http://www.c-plusplus.de/forum/p2203987#2203987 -- Where is the madness ... |
hws

59425 Unna, 20.04.2012, 17:57
@ silent_max
|
Funktionen in C++ |
» double Division(double , double )
Schön, du übergibst 2 Double Werte. Und an welche Variable bitte?
» double z = x / y;
» return z;
Also an x und y. ICH kann mir denken, dass du das wolltest. Aber der Computer denkt nicht, du musst ihm das schon sagen. (Aber das Problem hatten wir ja schon)
Anmerkung: In der Fehlerliste wird Bezug genommen auf Zeile 13 Spalten 1, 13 und 17.
Wenn ich weiß, welche Stelle das in deinem Quelltext ist, ist die Fehlersuche einfacher. (ich habs andersrum gemacht: Erst den Fehler lokalisiert und dann darauf geschlossen, welches Zeile 13 sein müsste )
hws |
hws

59425 Unna, 20.04.2012, 21:29
@ silent_max
|
noch ne Erklärung.. |
» void Elvis ()
Das void heisst, es wird kein Wert zurückgegeben (z.B. mit "return irgendwas"
und die leere Klammer heisst, es werden keine Parameter übergeben.
Was auch, da Elvis keine Eingabe benötigt und auch nix zurückgibt. Es wird irgendwas ausgegeben, das von nix abhängt und auch kein Wert an das aufrufende Programm zurückgegeben.
» double Division(double , double )
...
» return z;
Hier sollen offnsichtlich x und y eingegeben werden (werden aber leider nicht angegeben) und das ausgerechnetete z zurückgegeben werden.
Das grundlegende Verständnis für Funktionen und Subroutinen fehlt. Oder gar das grundlegende Verständnis für Programmiersprachen.
Wäre nicht wandern oder Gärtnern auch ne schöne Freizeitbeschäftigung?
hws |
79616363

Leinfelden-Echterdingen, 21.04.2012, 06:27 (editiert von 79616363 am 21.04.2012 um 06:39)
@ hws
|
noch ne Erklärung.. |
» Wäre nicht wandern oder Gärtnern auch ne schöne Freizeitbeschäftigung?
»
» hws
Nee neee, jetzt kommt bald der Sommer und da ist das Wetter zu schön zum Gärnern oder Wandern.
Deshalb erklären wir ihm jetzt die geheimnisvollen Schlüsselwörter volatile, inline, const, und static - Daran sind schon mehr Leute verzweifelt - Speziell in deren Kombination. Was möglich ist und was net und wie rum das der Compiler auflöst.
Ähm hups, hab ich grad beim Löschen überflüssiger Textzeilen kurz void main() lesen müssen???? - Ich brauch dringend nen Termin bei meinem Psychiater ...
Nachtrag: Puh, Schwein gehabt, es ist wenigstens ein int main und das beruhigt mich etwas - UN*X rulez!
Viele Grüße,
Uli und die Mausen -- „Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti) |
hws

59425 Unna, 21.04.2012, 13:42
@ 79616363
|
noch ne Erklärung.. |
» Ähm hups, hab ich grad beim Löschen überflüssiger Textzeilen kurz void
» main() lesen müssen???? - Ich brauch dringend nen Termin bei meinem
» Psychiater ...
Lass man, das meckdert inzwischen kein compiler mehr an.
hws |
schaerer

Kanton Zürich (Schweiz), 21.04.2012, 18:04
@ 79616363
|
noch ne Erklärung und ab zum Pissiater... |
» Ähm hups, hab ich grad beim Löschen überflüssiger Textzeilen kurz void
» main() lesen müssen???? - Ich brauch dringend nen Termin bei meinem
» Psychiater ...
Aha, Du hast also schon einen Pissiater und warst bei ihm schon mal in Behandlung. War das, als Du Dich noch mit Basic herumgeschlagen hast?  -- Gruss
Thomas
Buch von Patrick Schnabel und mir zum Timer-IC NE555 und LMC555:
https://tinyurl.com/zjshz4h9
Mein Buch zum Operations- u. Instrumentationsverstärker:
https://tinyurl.com/fumtu5z9 |
79616363

Leinfelden-Echterdingen, 21.04.2012, 19:29
@ hws
|
noch ne Erklärung.. |
» Lass man, das meckdert inzwischen kein compiler mehr an.
»
» hws
Genau das ist ja das Schlimme und ich seh darin eher einen Rück- statt Fortschritt. Ein Programm hat gefälligst einen sinnvollen Return-Code zu liefern.
Viele Grüße,
Uli -- „Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti) |
79616363

Leinfelden-Echterdingen, 21.04.2012, 22:15 (editiert von 79616363 am 21.04.2012 um 22:16)
@ schaerer
|
noch ne Erklärung und ab zum Pissiater... |
» Aha, Du hast also schon einen Pissiater und warst bei ihm schon mal in
» Behandlung. War das, als Du Dich noch mit Basic herumgeschlagen hast?
» 
Jau, so hat's mal angefangen - Aber BASIC war das erste was ich abgeschafft hab.
 -- „Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti) |
schaerer

Kanton Zürich (Schweiz), 21.04.2012, 22:34
@ 79616363
|
Ohhhh welch ein schreckliches Basic... |
» » Aha, Du hast also schon einen Pissiater und warst bei ihm schon mal in
» » Behandlung. War das, als Du Dich noch mit Basic herumgeschlagen hast?
» » 
»
» Jau, so hat's mal angefangen - Aber BASIC war das erste was ich
» abgeschafft hab.
»
» 
Ohhhh welch ein schreckliches Basic. War das der Kollege des ätzend langsamen ST-BASIC von ATARI? Das habe ich nur ganz wenig gebraucht und dann nie wieder. Mein Steckenpferd wurde das GFA-BASIC, das dann auch auf die PC-Welt portiert wurde.
Mit C habe ich vor langer Zeit auch programmiert. Erst war's LATTICE-C und dann TURBO-C. Mit C++ hatte ich nie was am Hut. war für meinen Bedarf damals auch nicht nötig.
Für den Übergang von BASIC zu C half mir ein gleichnamiges Buch von Olaf Hartwig (DATA BECKER). -- Gruss
Thomas
Buch von Patrick Schnabel und mir zum Timer-IC NE555 und LMC555:
https://tinyurl.com/zjshz4h9
Mein Buch zum Operations- u. Instrumentationsverstärker:
https://tinyurl.com/fumtu5z9 |
79616363

Leinfelden-Echterdingen, 21.04.2012, 22:48 (editiert von 79616363 am 21.04.2012 um 22:54)
@ schaerer
|
Ohhhh welch ein schreckliches Basic... |
Nu ja, damit musste man sich halt zwangsläufig erst mal rumschlagen - Es gab ja wirklich noch nix anderes.
Aber immerhin war der 6502 ein lustiges Prozessorchen und bei dem überschaubaren Befehssatz konnte man direkt Maschinencode irgenwo reinschreiben und brauchte noch net mal nen Assembler.
Den hab ich mir aber dann trotzdem erst mal gebastelt, damit das Klump wartbar wurde. War ganz nett, was man damals mit dem langsamen Kerlchen trotzdem anstellen konnte. Nach nem kurzen Irrweg über Fortran77 an der UNI ging's dann aber gleich auf C - Allerdings waren das natürlich auch andere Maschinchen
C blieb bis heute mein Haupttümpelchen, wobei man sich auch mit ADA anfreunden kann.
C++ hab ich komischerweise nie wirklich geliebt und wenn's ging, dann hab ich halt doch lieber pures C genommen - Man kann einfach mehr Schweinereien machen und wird vom Compiler net so bevormundet
Und immer schon auf Maschinchen, die wenigstens ein wenig nach UN*X aussahen.
Mit Windoze Kisten musst ich mich dann (gegen meinen ausdrücklichen Protest) erst so ab Win 3.11 rumschlagen Man kommt halt nicht drum rum
Puuuh,war das grausam.
Viele Grüße,
Uli -- „Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti) |
hws

59425 Unna, 21.04.2012, 23:20
@ 79616363
|
Ohhhh welch ein schreckliches Basic... |
» Nu ja, damit musste man sich halt zwangsläufig erst mal rumschlagen - Es
» gab ja wirklich noch nix anderes.
Z80 Assembler. CP/M und Tandy TRS80. Komplette Anwendungsprogramme, Jeweils mehrere Kilobyte maschinencode.
Und vorher Siemens TR440 Großrechner in der Uni. Arbeiten an der Konsole und jede Stunde einmal gab das Rechenzentrum die Ausdrucke raus.
hws |
79616363

Leinfelden-Echterdingen, 21.04.2012, 23:44
@ hws
|
Ohhhh welch ein schreckliches Basic... |
» Z80 Assembler. CP/M und Tandy TRS80. Komplette Anwendungsprogramme,
» Jeweils mehrere Kilobyte maschinencode.
»
» Und vorher Siemens TR440 Großrechner in der Uni. Arbeiten an der Konsole
» und jede Stunde einmal gab das Rechenzentrum die Ausdrucke raus.
»
» hws
Gell, irgendwie hat die Zeit sogar Spaß gemacht 
Viele Grüße,
Uli -- „Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti) |
geralds

Wien, AT, 22.04.2012, 00:25 (editiert von geralds am 22.04.2012 um 00:26)
@ 79616363
|
Ohhhh welch ein schreckliches Basic... |
» » Z80 Assembler. CP/M und Tandy TRS80. Komplette Anwendungsprogramme,
» » Jeweils mehrere Kilobyte maschinencode.
» »
» » Und vorher Siemens TR440 Großrechner in der Uni. Arbeiten an der
» Konsole
» » und jede Stunde einmal gab das Rechenzentrum die Ausdrucke raus.
» »
» » hws
»
» Gell, irgendwie hat die Zeit sogar Spaß gemacht 
»
» Viele Grüße,
»
» Uli
---
Stimmt!,".!.ja so war'n die alten Rittersleit'..!"
auch mit 8080, 8085, SCMP (ja wer war das nun hä ), 2650, 6502, 65816, 6809, 68000,....
mit denen ich u.A. damals spielte.
Grüße
Gerald
--- -- ...und täglich grüßt der PC:
"Drück' ENTER! Feigling!" |
schaerer

Kanton Zürich (Schweiz), 22.04.2012, 21:44
@ geralds
|
Ohhhh welch ein schreckliches Basic... |
» » » Z80 Assembler. CP/M und Tandy TRS80. Komplette Anwendungsprogramme,
» » » Jeweils mehrere Kilobyte maschinencode.
» » »
» » » Und vorher Siemens TR440 Großrechner in der Uni. Arbeiten an der
» » Konsole
» » » und jede Stunde einmal gab das Rechenzentrum die Ausdrucke raus.
» » »
» » » hws
» »
» » Gell, irgendwie hat die Zeit sogar Spaß gemacht 
» »
» » Viele Grüße,
» »
» » Uli
»
» ---
» Stimmt!,".!.ja so war'n die alten Rittersleit'..!"
Jo, die hab'n gräuspert g'schneuzt und g'kotzt.
» auch mit 8080, 8085, SCMP (ja wer war das nun hä ), 2650, 6502, 65816,
» 6809, 68000,....
» mit denen ich u.A. damals spielte.
Und was ist mit dem Z80 und dem Mikro-Professor?  -- Gruss
Thomas
Buch von Patrick Schnabel und mir zum Timer-IC NE555 und LMC555:
https://tinyurl.com/zjshz4h9
Mein Buch zum Operations- u. Instrumentationsverstärker:
https://tinyurl.com/fumtu5z9 |
silent_max

23.04.2012, 18:15 (editiert von silent_max am 23.04.2012 um 19:20)
@ geralds
|
Ohhhh welch ein schreckliches Basic... |
» » » Z80 Assembler. CP/M und Tandy TRS80. Komplette Anwendungsprogramme,
» » » Jeweils mehrere Kilobyte maschinencode.
» » »
» » » Und vorher Siemens TR440 Großrechner in der Uni. Arbeiten an der
» » Konsole
» » » und jede Stunde einmal gab das Rechenzentrum die Ausdrucke raus.
» » »
» » » hws
» »
» » Gell, irgendwie hat die Zeit sogar Spaß gemacht 
» »
» » Viele Grüße,
» »
» » Uli
»
» ---
» Stimmt!,".!.ja so war'n die alten Rittersleit'..!"
»
» auch mit 8080, 8085, SCMP (ja wer war das nun hä ), 2650, 6502, 65816,
» 6809, 68000,....
» mit denen ich u.A. damals spielte.
»
» Grüße
» Gerald
» ---
Am liebsten würde ich mit Dir Gerald mal den 8080er oder von Atmel den ATmega8 durchgehen. Da passiert wenigstens etwas.
Andererseits muss jeder Programmierer durch die Basics.
"Die Straße des geringsten Widerstandes ist nur am Anfang asphaltiert" heißt es doch so schön?
Gruß
Max -- Where is the madness ... |
79616363

Leinfelden-Echterdingen, 26.04.2012, 07:07 (editiert von 79616363 am 26.04.2012 um 07:12)
@ silent_max
|
Ohhhh welch ein schreckliches Basic... |
Hallo Max,
trotzdem war der 68000 der erste Prozessor, den ich ernst nehmen konnte. Den 6502 mochte ich zwar auch (der war so schön einfach), aber der 68000 hatte endlich mal nen richtigen Stack, nen gscheiten Adressbus und genug Register.
Auf der Möhre hab ich dann (im Rahmen einer Studienarbeit) meinen ersten Freeware (da Wort war damals noch nicht im Gebrauch) C-Compiler gebastelt und der tat sogar 
Dort entstand auch meine erste Anlehnung an yacc (alias bison) und die war schön schnell.
Den Z80 mochte ich nie so gern. War der net auch im CBM C128 als zweiter Prozessor drin?
Na ja, die 8-Biter halt. Die 4-Bit Zeiten hab ich allerdings nicht miterlebt. -- „Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti) |