Binärzaehler



  • @Th69

    for(int i=0; i<bits_int;i++)
    	{
    		cout<<feld[i];
    
    	
    	if (feld[i]== 1)
    	{
    		++einsen;
    		cout<<"  anzahl der einsen"<< einsen;
    	}
    }
        return 0;
    
    }
    
    

    Die Schleife habe ich geändert, hat nichts gebracht



  • Inwiefern hat das nichts gebracht?

    Möchtest du denn jedesmal (in der Schleife) die Ausgabe haben oder nur einmalig danach?



  • @Th69 sagte in Binärzaehler:

    Inwiefern hat das nichts gebracht?

    Möchtest du denn jedesmal (in der Schleife) die Ausgabe haben oder nur einmalig danach?

    Er gibt nicht aus, was ich möchte
    Er soll die Dezimalzahl lesen und die in Binärzahl umrechnen und dann die einsen im Binärcode rechnen.
    Das wird am Bildschirm angezeigt
    Geben Sie eine Zahl ein
    4
    00.............01 anzahl der einsen100



  • @dooni Das passt zu dem, was du programmiert hast.

    Gib doch mal eine Zahl ein, die mehr als eine 1 in Binätdarstellung hat. Z.B. 15



  • @DirkB
    so zeit er es an
    000...........01 anzahl der einsen11 anzahl der einsen21 anzahl der einsen31 anzahl der einsen ist 4 und ist auch richtig, aber was er vor und dazwischen angezeigt wurde verstehe ich net.



  • Wieder mal mehrere Stunden Zeitverschwendung der Studenten für eine Aufgabe, die man korrekt in 30 Sekunden und 3 Zeilen lösen kann...



  • @dooni da jedesmal wenn eine 1 gefunden wird, die Ausgabe „anzahl der einsen“ kommt, ist diese Ausgabe wohl an der falschen Stelle.

    Die darf nicht kommen wenn du eine 1 gefunden hast, sondern erst dann, wenn du alle gezählt hast.



  • @out is ja gut....ich bin halt anfänger und etwas langsam...



  • Das war nicht an dich gerichtet, sondern an deinen Lehrer. Du kannst ja nichts dafür, dass er euch nur Misst beibringt.



  • @out sagte in Binärzaehler:

    Das war nicht an dich gerichtet, sondern an deinen Lehrer. Du kannst ja nichts dafür, dass er euch nur Misst beibringt.

    Warum Mist? (Wer viel miSSt, miSSt MiSt!)

    1. Das dauert mehr als 30 Sekunden, auch wenn du std::bitset meinst. Das müsste man nämlich auch erst einmal erklären bzw. die Referenz dazu durcharbeiten.
    2. Ich finde, dass es gar keine schlechte Aufgabe ist, zumal sie zeigt, wie man sowas selbst berechnen kann. Und die for-Loop wird ebenfalls gleich mitgeübt.

    Nur weil es irgendwo was fertiges gibt, ist es trotzdem gut, auch einmal selbst Dinge zu tun.



  • @wob sagte in Binärzaehler:

    @out sagte in Binärzaehler:

    Das war nicht an dich gerichtet, sondern an deinen Lehrer. Du kannst ja nichts dafür, dass er euch nur Misst beibringt.

    Warum Mist? (Wer viel miSSt, miSSt MiSt!)

    Danke 😉

    @wob sagte in Binärzaehler:

    Nur weil es irgendwo was fertiges gibt, ist es trotzdem gut, auch einmal selbst Dinge zu tun.

    An sich finde ich es auch gut, mal etwas selbst nachzubauen. Das Problem ist nur, dass den Studenten der richtige C++ Weg gar nie gezeigt wird und sie dann denken, dass das Nachbauen der C++ Weg ist. Ich hätte kein Problem mit solchen Aufgaben, wenn der Lehrer auf beide Wege einginge.



  • Endlich funktioniert das Programm
    Durch Üben kann man viel lernen
    So sieht das Programm aus

    #include<iostream>
    
    #include<cmath>
    #include <limits.h>
    
    using namespace std;
    
    int main()
    {
    	int einsen=0;
    	unsigned int Eingabe=0;
    
        const int bits_int = sizeof(int)*CHAR_BIT ;
        int feld[bits_int];
        cout<<"Geben Sie eine Zahl ein: ";
        cin>>Eingabe;
        cout<<Eingabe<<":";
        for (int i=bits_int-1; i >= 0; i--)
        {
        	feld[i]=Eingabe%2;
        	Eingabe/=2;
        }
    	for(int i=0; i<bits_int;i++)
    	{
    	    cout<<feld[i] ;
    	    if (feld[i]== 1){
    
    		++einsen;}}
    		cout<<"  anzahl der einsen"<< einsen;
    
        return 0;}
    
    
    

    Ich möchte nun die Zeilen von feldi[i] und anzahl der einsen trennen
    wenn ich jetzt

     cout<<feld[i] <<endl;
    
    

    Dann zeit er das so
    0
    0
    0
    0
    .
    .
    1
    0
    0
    0
    anzahl der einsen 1



  • @dooni Dann überleg mal, warum das so ist.
    Was macht bloß das endl



  • @DirkB sagte in Binärzaehler:

    @dooni Dann überleg mal, warum das so ist.
    Was macht bloß das endl

    endl ist doch dafür, dass er eine neue Zeile anfängt



  • @dooni sagte in Binärzaehler:

    @DirkB sagte in Binärzaehler:

    @dooni Dann überleg mal, warum das so ist.
    Was macht bloß das endl

    endl ist doch dafür, dass er eine neue Zeile anfängt

    Was kannst du also machen, dass die 0 und 1 in einer Reihe kommen und dann eine neue Zeile anfängt?

    endl macht noch mehr, es gibt den Ausgabepuffer aus.
    Für eine neue Zeile reicht '\n'



  • @DirkB ok

     cout<<feld[i]<<'\n';
    
    

    das habe ich verwendet, tut daselbe



  • @dooni habs heraus bekommen



  • @dooni sagte in Binärzaehler:

    @DirkB ok

     cout<<feld[i]<<'\n';
    
    

    das habe ich verwendet, tut daselbe

    Nein, nicht dasselbe. den Unterschied bemerkst du nur nicht


  • Gesperrt

    Voll krass, Jungs. Die Aufgabenstellung "Binärzähler" ist weitaus weniger trivial, als um was es hier inzwischen geht, nämlich wie man C++ in den Griff kriegt. Made my day. 😀



  • Die Aufgabe soll jetzt erweitert werden und zwar die Bits einsetzen
    Ich habe die beiden Varianten verwendet
    val |= (1 >>n); // Setzt das n-te Bit auf 1
    val &= ~(1 >> n); //Setzt das n-te Bit auf 0 (AND NOT)
    Ich habs versucht umzusetzen, aber klappt nicht

    #include<iostream>
    #include<cmath>
    #include <limits.h>
    
    using namespace std;
    
    int main()
    {
        int einsen=0;
        unsigned int Eingabe=0;
    
        const int bits_int = sizeof(int)*CHAR_BIT ;
        int feld[bits_int];
        cout<<"Geben Sie eine Zahl ein: ";
        cin>>Eingabe;
        cout<<Eingabe<<":";
        for (int i=bits_int-1; i >= 0; i--)
        {
            feld[i]=Eingabe%2;
            Eingabe/=2;
        }
        for(int i=0; i<bits_int;i++)
        {
            cout<<feld[i];
            if (feld[i]== 1){
    
            ++einsen;
            }
            }
    
            cout<<'\n'<<"Das Bitmuster hat "<< einsen<<" Einsen.";
         int n;
          unsigned int val;
    
        if(n>=0 || n <=31){
             cout<<'\n'<<"Welches Bit(0-31 von rechts beginnend)soll geandert werden? ";
            cin>>n;
            if (n==0){
    val |= (1 >>n); // Setzt das n-te Bit auf 1
    
    if (n==1){
    val &= ~(1 >> n); //Setzt das n-te Bit auf 0 (AND NOT)
    
    }
    }
            cout<<"Auf welchen Wert(0 oder 1)soll das Bit gesetzt werden "<<val;
    
            
    
        }
    
    
        return 0;}
    
    

Anmelden zum Antworten