Erledigt Danke Vorgehensweise? zwei Zahlen m,n einlesen n-te Stelle von m ausgeben!



  • Einfach nur base.
    Die String-Methode ist mit sicherheit performanter :p



  • 314159265358979 schrieb:

    Die String-Methode ist mit sicherheit performanter :p

    Meine Methode passt sich der Zahlenbasis an. Und wenn du jedoch noch prüfen willst, ob die Eingabe numeretisch ist, verlierst du auch Zeit. Und meine Version ist speicherschonender 😃 .



  • EOutOfResources schrieb:

    Meine Methode passt sich der Zahlenbasis an.

    Overhead, der nicht gefordert war :p

    EOutOfResources schrieb:

    Und wenn du jedoch noch prüfen willst, ob die Eingabe numeretisch ist, verlierst du auch Zeit.

    Du auch :p

    EOutOfResources schrieb:

    Und meine Version ist speicherschonender 😃 .

    Nicht wesentlich :p



  • Ich vermute, der Lehrer erwartet sowas:

    #include <iostream>
    
    int main()
    {
            int number;
            std::cin >> number;
    
            int index;
            std::cin >> index;
    
            for(int i=0;i<index;++i)
                 number/=10;
    
            std::cout<<number%10<<'\n';
    }
    


  • /*Aufgabe 2.1
    Schreiben Sie ein Programm, das zwei Zahlen m und n einliest
    und die n-te Ziffer der Zahl m ausgibt
    z.B. m=1358 n=2 Ausgabe: 5
    */

    #include <iostream>

    using namespace std;

    int main()
    {

    int m,n;

    cout<<"Zahl eingeben";
    cin>>m;
    cout<<"Auszugebende Ziffer eingeben";
    cin>>n;

    for(int i=0;i<n;++i)
    {
    m=m/10;
    }

    cout<<"Die "<<n<<" Stelle von " <<

    ::m <<" ist gleich " << m%10 <<endl;
    }

    Bei ::m schreit der Compiler, wie kann ich das eingelesene m ausgeben,
    lg
    markus


  • Mod

    markuswenczel schrieb:

    Bei ::m schreit der Compiler, wie kann ich das eingelesene m ausgeben,

    ⚠ Erklär lieber erst einmal, was du dir von ::m erhoffst und wo du diese Idee her hast.

    Und danach die eigentliche Lösung: Nimm eben eine dritte Variable, um dir das Ergebnis zu merken.



  • Indem Du statt ::m lieber (0+m+0) schreibst.
    Aber m wurde schon kleingemacht, das wird so eh nichts.



  • 314159265358979 schrieb:

    #include <iostream>
     
    int main()
    {
            std::string number;
            std::cin >> number;
     
            int index;
            std::cin >> index;
     
            std::cout << number[index] << std::endl;
    }
    

    Der Lehrer zählt die Ziffern höchstwahrscheinlich ab 1 und rückwärts, weil es sich hier um "normale" Sprache handelt.

    volkard schrieb:

    Ich vermute, der Lehrer erwartet sowas:

    #include <iostream>
     
    int main()
    {
            int number;
            std::cin >> number;
     
            int index;
            std::cin >> index;
     
            for(int i=0;i<index;++i)
                 number/=10;
     
            std::cout<<number%10<<'\n';
    }
    

    Die Initialisierung von i ist fehlerhaft. Bei der Eingabe 1358, 2 kommt "3" als Ergebnis.

    EOutOfResources schrieb:

    Ich würde es eher wiefolgt machen:

    int Value;
    unsigned int DigitIndex;
    unsigned int Numberbase = 10; //Gibt's dafür ein spezielles Wort auf Englisch?
    //Alle drei befüllen
    unsigned int Digit = std::floor(static_cast<double>(Value) / std::pow(Numberbase, DigitIndex)) + Numberbase;
    while((Digit -= Numberbase) >= Numberbase);
    

    Das ist hoffentlich nur ein Witz. Unleserlich, unnötig kompliziert und man muss viel mehr überlegen, ob wieder mal wegen irgendwelcher Fließkommaeigenschaften nicht doch was schiefgehen könnte.



  • markuswenczel schrieb:

    /*Aufgabe 2.1
    Schreiben Sie ein Programm, das zwei Zahlen m und n einliest
    und die n-te Ziffer der Zahl m ausgibt
    z.B. m=1358 n=2 Ausgabe: 5
    ...

    Mein Vorschlag wäre:

    int func(int m, int n)
    {
        int temp = 1;
        for (int i = 0; i < n; i++)
           temp *= 10;
        return (m%temp)/(temp/10);
    }
    

    😉



  • SeppJ schrieb:

    markuswenczel schrieb:

    Bei ::m schreit der Compiler, wie kann ich das eingelesene m ausgeben,

    ⚠ Erklär lieber erst einmal, was du dir von ::m erhoffst und wo du diese Idee her hast.

    Aus einme Buch Bereichsoperator für globale Variable ist aber nix

    Und danach die eigentliche Lösung: Nimm eben eine dritte Variable, um dir das Ergebnis zu merken.

    habe ich gemacht danke

    Die Ausgabe stimmt leider nicht

    es sollte 5 ausgeben gibt aber 3 aus
    wird falsch durchlaufen die schleife schätze ich

    /*Aufgabe 2.1
    Schreiben Sie ein Programm, das zwei Zahlen m und n einliest
    und die n-te Ziffer der Zahl m ausgibt
    z.B. m=1358 n=2 Ausgabe: 5
    */

    #include <iostream>

    using namespace std;

    int main()
    {

    int m,n,help;

    cout<<"Zahl eingeben=== ";
    cin>>m;
    help=m;
    cout<<"Auszugebende Ziffer eingeben=== ";
    cin>>n;

    for(int i=0;i<n;i++)

    m/=10;

    cout<<"Die "<<n<<" Stelle von " <<help <<" ist gleich " << m%10 <<endl;
    cin>>m;
    }

    eingabe 1358 + 2 Ausgabe 3 statt 5
    hmmmmmmmmm



  • Darf keine Methoden verwenden sind noch nicht gegenstand der aufgaben
    aber danke sieht gut aus,
    lg
    markus

    oldprogger schrieb:

    markuswenczel schrieb:

    /*Aufgabe 2.1
    Schreiben Sie ein Programm, das zwei Zahlen m und n einliest
    und die n-te Ziffer der Zahl m ausgibt
    z.B. m=1358 n=2 Ausgabe: 5
    ...

    Mein Vorschlag wäre:

    int func(int m, int n)
    {
        int temp = 1;
        for (int i = 0; i < n; i++)
           temp *= 10;
        return (m%temp)/(temp/10);
    }
    

    😉


Anmelden zum Antworten