Zum Inhalt springen

Hauptprogramm vor Funktionen?


Jonsc1

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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();

}

//--------------------------------------------------------------------------------------------------


Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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();

}

//--------------------------------------------------------------------------------------------------


Link zu diesem Kommentar
Auf anderen Seiten teilen

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 +=.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Anregungen...

Schreib ich eben NOCH ne neue... :)

Und ja, Basic Umsteiger trifft die Sache genau.. :rolleyes:

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...