Jonsc1 Geschrieben 21. September 2005 Teilen Geschrieben 21. September 2005 Moin Moin... Hab erst vor kurzer Zeit mit c++ angefangen und tappe noch mehr oder weniger im dunklen. Hab ein Programm geschrieben das prüft ob ein eingegebenes Jahr ein Schaltjahr ist. Mein aktueller Code schaut so aus: #include <iostream> using namespace std; //---------------- FUNKTIONEN ----------------------------------------------------------- bool istSchaltjahr(int Jahr) // Funktion prüft ob das übergebene Jahr ein Schaltjahr ist { bool schaltjahr = false; if (Jahr%4 == 0) // Wenn das Jahr sich durch 4 teilen lässt ist es ein Schaltjahr schaltjahr = true; if (Jahr%100==0) //Wenn das Jahr sich durch 100 teilen lässt ist es kein Schaltjahr schaltjahr = false; if (Jahr%400==0) //Es sei denn es ist durch 400 teilbar, dann ist es ein Schaltjahr schaltjahr = true; return schaltjahr; }; //------------------ HAUPTPROGRAMM ------------------------------------------------------- int main() { int Jahr; cout<<"Geben sie bitte das Jahr ein: "; cin>>Jahr; bool schaltjahr; schaltjahr=istSchaltjahr(Jahr); if (schaltjahr==true) cout<<"Das Jahr ist ein Schaltjahr!"<<endl; if (schaltjahr==false) cout<<"Das Jahr ist kein Schaltjahr!"<<endl; cout<<"Programm durchgelaufen, oder Programmfehler!"<<endl; cin.get(); cin.get(); }; //------------------------------------------------------------------------------------------------ Wenn ich jetzt aber die Funtion unter das Hauptprogramm setze bekomme ich vom Compiler (IDE = DevC++) die Meldung das die Funktion nicht bekannt ist... Gibt es eine Möglichkeit Funktionen nach dem Hauptprogramm zu schreiben? mfg Jonsc1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 21. September 2005 Teilen Geschrieben 21. September 2005 Gibt es eine Möglichkeit Funktionen nach dem Hauptprogramm zu schreiben?Ja, indem du den Funktionskopf vor deinem Hauptprogramm definierst, also sowas in der Art: int doStuff(int); int main() { ... int result = doStuff(42); ... } int doStuff(int p) { return p * 2; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 21. September 2005 Teilen Geschrieben 21. September 2005 Hallo, Ja, indem du den Funktionskopf vor deinem Hauptprogramm definierst, also sowas in der Art: deklarierst, denn definieren tut er es ja dann unten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 21. September 2005 Teilen Geschrieben 21. September 2005 deklarierst, denn definieren tut er es ja dann unten.Mein ich ja Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 21. September 2005 Autor Teilen Geschrieben 21. September 2005 Danke euch beiden für die Antworten... Ich hänge gleich noch ne Frage hintendran weil ich absolut am verzweifeln bin... Dieses Programm hier soll die Primzahlen von 1-100 ausgeben (wenn ihr nähere Erklärungen braucht, einfach sagen) Es gibt aber bei Programmstart einfach alle Zahlen von 1-100 aus. Ich hock seit 2 Stunden dran und finde den Fehler nicht, langsam geht mir die Lust aus... hab schon die bool Funktion durch eine int Funktion erstetzt, klappt immer noch nicht... Naja, hier der Code: EDIT: HAB DEN FEHLER GEFUNDEN! in der if schleife hab ich statt dem Vergleich "==" die Zuweisung "=" verwendet... hab jetzt auch die int Funktion wieder durch ne bool Funktion erstetzt und das Programm läuft... Lasse den Fehlerhaften Code trotzdem mal hier drin stehen, damit jeder sieht was mein Problem war. #include <iostream> using namespace std; //---------------------- FUNKTIONEN ----------------------------------------------------------- int istprim(int kandidat) { for(int teiler=2;teiler<kandidat-1;teiler=teiler+1) { if(kandidat%teiler == 0) return 1; else return 2; } } //--------------------------------------------------------------------------------------------- //------------------------ HAUPTPPROGRAMM ------------------------------------------------------- int main() { int zahl = 1; do { int prim = istprim(zahl); if (prim = 2); cout<<zahl<<endl; zahl=zahl+1; }while (zahl<=100); cin.get(); cin.get(); } //-------------------------------------------------------------------------------------------------- Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. September 2005 Teilen Geschrieben 21. September 2005 hab jetzt auch die int Funktion wieder durch ne bool Funktion erstetzt und das Programm läuft..."Laufen" würde ich das nicht nennen. 9 und 15 sind jedenfalls keine Primzahlen. Dein Programm gibt alle ungeraden Zahlen aus. Das liegt daran, dass du eigentlich nur die Teilbarkeit durch zwei prüfst. Danach beendest du deine Teilersuchschleife in jedem Fall mit einer return-Anweisung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 21. September 2005 Autor Teilen Geschrieben 21. September 2005 Stimmt... Hab die Funktion nochmals komplett neu geschrieben... Jetzt läuft sie aber wirklich... Wer einen Fehler findet bitte bescheid sagen! #include <iostream> using namespace std; //---------------------- FUNKTIONEN ----------------------------------------------------------- bool istprim(int kandidat) // Funktion die überprüft ob der übergebene Wert "Kandidat" eine Primzahl ist { int aktuellezahl = 1; int letzezahl = kandidat; int teiler = 0; if(kandidat == 1) //Fängt die 1 ab, die genau genommen keine Primzahl ist return false; // while(aktuellezahl<=letzezahl) { if(kandidat%aktuellezahl == 0) teiler = teiler + 1; aktuellezahl = aktuellezahl + 1; } if(teiler>2) //wenn die Zahl mehr als 2 Teiler hat (1 und sich selbst) ist sie keine Primzahl return false; else //Ansonsten ist sie eine return true; } //--------------------------------------------------------------------------------------------- //------------------------ HAUPTPPROGRAMM ------------------------------------------------------- int main() { cout<<"Geben sie die Zahl ein, bis zu der alle Primzahlen aufgelistet werden sollen: "<<endl; int maximum; cin>>maximum; cout<<endl; int zahl = 1; bool prim; do { prim = istprim(zahl); if(prim == true) { cout<<zahl<<endl; }; zahl=zahl+1; }while (zahl<=maximum); cin.get(); cin.get(); } //-------------------------------------------------------------------------------------------------- Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. September 2005 Teilen Geschrieben 22. September 2005 Fehler sehe ich nicht mehr. Allerdings hätte ich noch ein paar Anmerkungen: Deine Einrückung ist gewöhnungsbedürftig. IMHO tust du dir selbst einen Gefallen, wenn du dir schnell angewöhnst, etwas sorgfältiger zu arbeiten, bevor du bei größeren Programmen den Überblick verlierst. Deine Funktion istprim ist noch unnötig kompliziert. Du musst die Teiler nicht zählen, um über eine Zahl sagen zu können, ob sie eine Primzahl ist. Wenn du zwischen 2 und kandidat-1 einen Teiler findest, kannst du gleich mit return false; abbrechen. Wenn die Schleife durchläuft, machst du einfach return true;. Code wie dieser hier: teiler = teiler + 1;erweckt bei mir immer den Eindruck eines Basic-Umsteigers. In C und C++ kann man das kürzer als ++teiler schreiben. Wenn es um mehr als 1 geht, nimmt man +=. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 22. September 2005 Autor Teilen Geschrieben 22. September 2005 Danke für die Anregungen... Schreib ich eben NOCH ne neue... Und ja, Basic Umsteiger trifft die Sache genau.. P.s.: Die Sache mit der Einrückung scheint ein Problem von DevC++ zu sein... Wenn du dir die Arbeit machen willst kannst du es ja mal so posten wie es deiner Meinung nach Übersichtlicher wäre... bin halt Anfänger... :floet: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.