anfänger frage funktionen...



  • 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



  • chrisi01 schrieb:

    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?

    cout ist gepuffert.

    cout.flush();
    

    gibt den Pufferinhalt auch aus.
    Kurt



  • aha danke und jetzt auf deutsch 😃

    ich versteh das net kannste mir das evtl. nochmal irgendwie bildlich erklären oder so weil interesieren würds mich eben schon aber so mit einem satz blick ichs leider nicht 😞

    mfg

    chrisi01



  • cout packt die Daten erstmal in einen Puffer und schreibt sie erst bei Bedarf auf den Bildschirm (Puffer voll oder expliziter Befehl zum Puffer-leeren (das passiert z.B. bei cout.flush() oder cout<<endl;) - wenn das Programm sich vorher verabschiedet hat, kommt er nicht mehr dazu.



  • Halli hallo,

    Ich soll für die berufsschule ein Programm schreiben und ich will jetzt meinen Lehrer ein bissl ärgern indem ich einen shutdown-Befehl einprogrammiert habe und nun will ich wissen wi ich es schaffe, dass mein programm erkennt welches Betriebssystem auf dem PC läuft und den ensprechenden Befehl ausführt.

    Und weiß jemand wie der shutdown-Befehl für Windows2000 NT lautet?

    So sieht mein Progamm bereits aus. Es Funktioniert auch aber zurzeit geht bloß der shutdown-Befehl für Windows XP.

    #include <iostream.h>

    int main()
    {
    int h, f=1;
    char* a;
    int zaehler=0;
    cout<<"Hallo hier koennen Sie eine Zensur eingeben die es Ihnen in einem Wort wieder ausgibt. Also auf gehts aber ärgern Sie mein Programm nicht es wird sehr schnell sauer. Danke.\n";
    while (zaehler<3)
    {
    cin>>h;
    if (h>0 && h<7)
    {
    switch (h)
    {
    case 1: a = "sehr gut";
    break;
    case 2: a = "gut";
    break;
    case 3: a = "befriedigend";
    break;
    case 4: a = "ausreichend";
    break;
    case 5: a = "ungenuegend";
    break;
    case 6: a = "mangelhaft";
    break;
    }
    zaehler++;
    cout<<"Die Note ";
    cout<<h;
    cout<<" entspricht ";
    cout<<a<<endl;
    }
    else
    {
    switch (f)
    {
    case 1: cout<<"Sie haben eine inkoreckte Zensur eingegeben. Bitte geben Sie eine Note zwischen 0 und 7 ein!\n";
    break;
    case 2: cout<<"Sie haben schon wieder eine falsche Zensur eingegeben. Sie haben noch einen letzten Versuch offen. Ich warne Sie es passiert sonst was.\n";
    break;
    case 3: cout<<"Zum dritten Mal. Jetzt reichts mir. Sie haben es nicht anders gewollt. Bye. Bye. Wuensche noch einen schoenen Tag.\n";
    cin>>f;
    system("shutdown -s");
    return 0;
    break;

    }

    f++;

    }
    }
    cin>>h;
    }

    Wäre echt hilfreich, wenn es jemand wüsste ich bin noch nicht lange dabei.

    MFG
    Danke Black



  • Glaubst du echt, dass dein Lehrer das so lustig findet ?

    Ich geb dir jetzt einen guten Rat: *lass es*


Anmelden zum Antworten