anfänger frage funktionen...



  • hi

    also es war ja einiges falsch 😉 habd as programm etz mal bissi geändert und nach meiner logik müsste es 100pro gehen:

    #include <iostream.h>
    #include <conio.h>
    
    int prim (int l)
    {
    	int k;
    	int m;
    	int n;
    	k = 2;
    	for (; k < l; k++)
    	{
    		m = l % k;
    		if (m == 0)
    		{
    			n = 1;
    		}
    	}
    	return n;
    }
    
    void main (void)
    {
    	int i;
    	int j;
    	for (i = 3; i <= 50; i++)
    	{
    		j = prim(i);
    		if (j != 1)
    		{
    			cout << i << " ist eine Primzahl\n";
    		}
    
    	}
    	cout << "Programm beendet";
    	getch();
    }
    

    das einzige problem istd as programm zeigt absolut gar nix an auch nicht das Programm beendet was könnte das sein?

    mfg

    chrisi01



  • camper schrieb:

    das ist ein kleines L und keine 1 😃

    ja eben 😃 *d'oh*

    Ich habs jetzt selbst nochmal gemacht:

    #include <iostream>
    
    using namespace std;
    
    bool isPrime(int number)
    {
    	for (int i = 2; i < number ; i++)
    	{
    		if (number % i == 0) // ist ohne Rest teilbar
    			return false; // Zahl ist keine Primzahl
    	}
    
    	// konnte nicht ohne Rest geteilt werden
    	return true; // Zahl ist eine Primzahl
    }
    
    int main()
    {
    	for (int i = 1; i < 100; i++)
    	{
    		if (isPrime(i))
    			cout << i << " ist eine Primzahl" << endl;
    
    	}
    
    	system("PAUSE"); // Taste drücken
    
    	return 0;
    }
    


  • hi

    ja mei wieso komm ich nie auf so einfache sachen grml wieso is das bei mir immer so umständlich aber habs auf deine idee mal selbst aufgesetzt und es klappt super 🙂 danke für die hilfe...

    mal gucken mit was ich jetzt weiter mach 🙂

    mfg

    chrisi01



  • chrisi01->wie wärs mal mit

    int main
    


  • und wieso net void main(void) ??

    was spricht dagegen? zumindest funzt es auch so...

    mfg

    chrisi01



  • chrisi01 schrieb:

    was spricht dagegen? zumindest funzt es auch so...

    Klar, man kann ja auch rückwärts auf der Autobahn fahren!

    An implementation shall not predefine the main function. This function shall not be overloaded. It shall
    have a return type of type int, but otherwise its type is implementation-defined. All implementations
    shall allow both of the following definitions of main:
    int main() { /* ... / }
    and
    int main(int argc, char
    argv[]) { /* ... */ }

    Gruß



  • Soweit ich weiß wegen dem Rückgabewert.

    return 0;
    

    signalisiert Windows glaube ich, dass alles in Ordnung lief.

    Bin mir aber nicht sicher.



  • Hab was gefunden:

    Rückgabewert ist der Fehlercode
    Auch der Rückgabewert der Funktion main ist von Bedeutung. Gibt sie 0 zurück, wird dies als fehlerfreier Ablauf gewertet. Alle anderen Werte sin Hinweis auf einen Fehler bei der Ausführung. Gerade wenn Fehler entstehen, ist es oft sehr umständlich, wieder zur Funktion main zurückzukehren. Hier hilft die Funktion exit. Sie beendet das Programm und der Übergabeparameter wird als Rückgabewert an den Aufrufer des Programms weitergereicht.
    *

    exit(0);
    


  • nee

    return 0;
    

    muss man nicht schreiben, aber das muss man:

    int main(){/*....*/}
    

    @chrisi01
    außerdem benutzt du veraltete header, benutz mal

    #include <iostream>
    

    statt *.h.
    welcher compiler lässt das denn noch durchgehen 😕



  • hi

    also ich verwende bisher void main (void) werd dann aber doch wenn ihr es sagt auf int main() umsteigen und ein return 0;

    iostream.h lässt visual studio 6 durchgehen und auch borland 5 in der beruffschule ließ es durchgehen werd das h aber weglassen 😉 soll ich das dann bei allen header files weglassen oder dreht es sich hier nur um die?!

    mfg

    chrisi01



  • iostream.h und iostream sind zwei unterschiedliche Dateien.
    iostream ist neuer.

    MfG


  • Mod

    edit: wieder mal zu langsam beim korrigieren...
    stimmt, nur die C-header und <strstream> sind standard



  • camper schrieb:

    icepacker schrieb:

    welcher compiler lässt das denn noch durchgehen 😕

    jeder standard-konforme würde ich sagen... 😉

    Die alten Header gibts nicht mehr nach dem Standard!

    Gruß



  • Nochmal zum Thema Primzahlen.

    Du kannst den Code folgendermaßen optimieren:

    Nur die Teiler bis sqrt(Zahl) testen und auch nur die 2 und sonst ungerade Teiler.



  • so

    woltle etz mal die zeit messen wie lang die berechnung braucht:

    #include <iostream.h>
    #include <conio.h>
    #include <time.h>
    
    bool prim (int l)
    {
    	int j;
    	for (j = 2; j < l; j++)
    	{
    		if (l % j == 0)
    		{
    			return false;
    		}
    	}
    	return true;  
    }
    
    int main ()
    {
    	int z;
    	time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
    	int i;
    	int j;
    	for (i = 1; i <= 5; i++)
    	{
    		if (prim(i))
    		{
    			cout << i << " ist eine Primzahl" << endl;
    		}
    	}
    	time_t Zeitstempel2;
        tm *nun1;
        Zeitstempel2 = time(0);
    	z = Zeitstempel2 - Zeitstempel;
    	cout << "Programmlaufzeit: " << z << " Sekunden";
    	getch();
    	return 0;
    }
    

    Zeitstempel hat einen wert aber Zeitstempel2 ist leer WARUM?! versteh das mal wieder nicht

    und noch etwas was ich mir nicht erklären kann:

    int main ()
    {
    	int z;
    	int y;
    	int x;
    	int i;
    	int j;
    	time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
    	x = Zeitstempel;
    
    	cout << x;
    
    	for (i = 1; i <= 5; i++)
    	{
    		if (prim(i))
    		{
    			cout << i << " ist eine Primzahl" << endl;
    		}
    	}
    
    	cout << x;
    
    	time_t Zeitstempel2;
        tm *nun1;
        Zeitstempel2 = time(0);
    	cout << Zeitstempel2;
    
    	z = Zeitstempel2 - Zeitstempel;
    ....
    

    wenn ichd as nun so schreib wird das erste x ausgegeben das zweite x wird aber nicht mehr angezeigt ich versteh etz echt nur noch bahnhof warum das so ist?!?

    mfg

    chrisi01



  • #include <time.h>
    
    clock_t timestart = clock();
    
    /* rechnen */
    
    clock_t timestop = clock();
    
    clock_t clocks = timestop-timestart;
    

    Mit der Konstanten CLOCKS_PER_SEC kannst du in Sekunden umrechnen.

    ------------

    chrisi01 schrieb:

    bool prim (int l)
    {
    	int j;
    	for (j = 2; j < l; j++)
    	{
    		if (l % j == 0)
    		{
    			return false;
    		}
    	}
    	return true;  
    }
    

    Warum musst du den Parameter unbedingt l nennen? Das macht es unübersichtlicher.

    Und warum schreibst du nicht "for (int j = 2; j < l; j++)" ? Finde ich auch schöner



  • hi

    das mit den konstanten hab ich noch net ganz gepielt muss ich mal guckene rst 😉

    Warum musst du den Parameter unbedingt l nennen? Das macht es unübersichtlicher.

    i
    j
    k
    l
    habs halt alphapetisch gemacht ^^ ach jeder meckert über meine variablen war bei php net anders bins also gewohnt ^^

    Und warum schreibst du nicht "for (int j = 2; j < l; j++)" ? Finde ich auch schöner

    hmm keine ahnung ich find das andere schöner.... denk jedem dem seinen oder?

    mfg

    chrisi01



  • Variablen immer so lokal wie möglich deklarieren.
    Also:

    for (int j = 2; j < l; j++)
    

    Wobei das mit dem VC++ 6 das gleiche wie

    int j;
    for (j = 2; j < l; j++)
    

    ist.
    MfG



  • hi

    es ist zwar schönd as ihr mir alle euren code liefert aber ich möchte auch gern mal meinen laufen sehen 😉

    #include <iostream.h>
    #include <conio.h>
    #include <time.h>
    
    bool prim (int l)
    {
    	int j;
    	for (j = 2; j < l; j++)
    	{
    		if (l % j == 0)
    		{
    			return false;
    		}
    	}
    	return true;  
    }
    
    int main ()
    {
    	int z;
        int y;
        int x;
    	int i;
    	int j;
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        x = Zeitstempel;
    
        cout << x;
    
        for (i = 1; i <= 5; i++)
        {
            if (prim(i))
            {
                cout << i << " ist eine Primzahl" << endl;
            }
        }
    
        cout << x;
    
        time_t Zeitstempel2;
        tm *nun1;
        Zeitstempel2 = time(0);
        cout << Zeitstempel2;
    
        z = Zeitstempel2 - Zeitstempel;
    	//cout << "Programmlaufzeit: " << clock_t clocks << " Sekunden";
    	getch();
    	return 0;
    }
    

    wieso zur hölle zeigt er das erste x an und danach nicht mehr? ich versteh das einfach nicht (vllt. häng ich noch zu sehr an php? weil da würde sich x net ändern ;))

    mfg

    chrisi01



  • kann mir keiner helfen?

    würde echt gern wissen wieso das erste x angezeigt wird das zweite aber nicht mehr?!?

    edit: lol wenn ich an die 2 cout x ein endl häng gehts wieso das? wieso schreibt er das net in der gleichen zeile weiter sondern muss die zeile beenden? versteh ich net?!

    edit2: so ich glaub ich versteh das prinzip irgendwie muss man manche zeilen beenden mit endl sonst gibt er nix mehr danach aus kann mir mal wer da nen grund dafür geben wieso das so ist?

    mfg

    chrisi01


Anmelden zum Antworten