C++ - bestimmte Ziffer einer Zahl ausgeben

Sick-Angel

Grünschnabel
Hi,

ich bin C++ und überhaupt Programmier-Anfänger, und hab übers WE einige Beispiele zu lösen, ohne dass wir vorher die bestimmten Funktionen besprochen haben.

Jetzt häng ich schon bei dem ersten Beispiel, wobei ich von dem aus die anderen wohl ableiten kann. Und zwar sollen wir die Funktion mod bzw. % anwenden, ohne dass uns die vorher erklärt wurde (also weiß ECHT nicht, wie was warum funktionieren sollte).

- 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

---
Soweit klar, hab in einem anderen Forum den Ansatz bekommen:
int a = 10, b = 3;
// die ganzzahlige Division von a durch b liefert als Ergebnis 3 Rest 1
int c = a / b; // c hat nun den Wert 3
int d = a % b; // d hat nun den Wert 1
Wo ich nicht genau durchblick, wie ich dadurch auf die gewünschte Ziffer kommen soll. Ich steh da echt sowas von auf der Leitung und komm einfach nicht runter. :(

Bitte nicht falsch verstehen: ich möchte keine fertigen Codes, die ich dann brav abgeben kann und nix check. Immerhin muß ich dann vor Ort ein ähnliches Beispiel programmieren und außerdem bin ich dort, WEIL ich C++ lernen und dann auch können will!

Und mod scheint ja noch eins der Simpleren zu sein, wenn mir da endlich mal der Knoten aufgeht.

Vielen Dank schon im Voraus!

verzweifelte Grüße
Angie

PS: hab natürlich auch die Suchfunktion gequält ;) - das, was meinem Beispiel am Nächsten kommt wär folgender Thread:
http://www.tutorials.de/forum/showthread.php?t=134197&highlight=modulo

Allerdings nicht immer für die 3. Stelle z.b., sondern je nachdem, was die 2. Eingabe bewirkt.
Wir haben nicht sonderlich viele Funktionen angesprochen. Angewandt hatten wir nur Grundrechnungsarten, und kurz erwähnt, dass es sowas wie If- und While gibt. Sollte es damit zu lösen sein können.
 
Zuletzt bearbeitet:
Die Funktion von Modulu:

Der Wert den eine Modulu Operation zurückgibt,ist der Rest der Division.

Z.B.

i=8%4= 2 Rest 0 , folglich enthält i nun den Wert null.
i=9%4=2 Rest 1, i enthält nun den Wert 1

hoffe ich konnte weiterhelfen
 
Hi,

danke für die rasche Antwort!

Dass Modulo den Rest zurückgibt, weiß ich durch googlen. Hab damit auch folgendes Beispiel gelöst, um rauszufinden, ob die eingegebene Zahl glatt durch 3 teilbar ist:

#include <iostream.h>
int main()
{
int a,b;
cout << "Bitte geben Sie eine Zahl ein.";
cin >> a;
b = a%3;
if (b==0)
{
cout << "Diese Zahl ist durch 3 teilbar.";
}
else
{
cout << "Diese Zahl ist nicht durch 3 teilbar.";
}

return 0;
}
Das war aber auch schon das Maximum, was ich daraus ziehen konnte. Wie ich das auf die Stellenbestimmung und Ziffernausgabe umlenken soll, ist schon/noch Ende.

lg
Angie
 
Ich habe einen Lösungsansatz, weiß aber nicht ganz wo der Fehler liegt :-( .
Naja poste ihn trotzdem, vieleicht findet ein anderer den Fehler

PHP:
#include <iostream>

using namespace std;
//Beispiel 789 zweite ziffer von rechts
int main()
{
  int zahl;
  int zifferrechts;
  cout<<"geben sie die zahl ein"<<'\n';//789
  cin>>zahl;
  cout<<"geben sie an, an welcher stelle die gesuchte ziffer   von   rechts steht"<<'\n';//2
  cin>>zifferrechts;
int loesung;
loesung=zahl%(10^zifferrechts);//89
loesung=loesung-(loesung%(10^(zifferrechts-1)));//80
loesung=loesung/(10^(zifferrechts-1));//8
cout<<loesung<<'\n';
}
 
Hier ne Lösung: (Das sieht wegen der ganzen casts so unübersichtlich aus)
PHP:
#include <iostream>
#include <cmath>
using namespace std;
//Beispiel 789 zweite ziffer von rechts
int main()
{
  int zahl;
  int zifferrechts;
  cout<<"geben sie die zahl ein"<<'\n';//789
  cin>>zahl;
  cout<<"geben sie an, an welcher stelle die gesuchte ziffer   von   rechts steht"<<'\n';//2
  cin>>zifferrechts;
int loesung;
loesung=zahl%( static_cast<int> (pow(10.0, static_cast<double>(  zifferrechts))));//89
loesung=loesung-(loesung%( static_cast<int> (pow(10,(static_cast<double> ( zifferrechts) -1.0)))));//80
loesung=loesung/static_cast<int>( pow(10,static_cast<double>( zifferrechts)-1.0));//8
cout<<loesung<<'\n';
}

Die Formel für meinen Rechenweg ist eigentlich nur
(zahl%(10^gesuchteziffervonrechts))-(zahl%(10^gesuchteziffervonrechts-1))/(10^(gesuchteziffervonrechts-1))
Warum das so ist überlass ich dir.(Musst ja auch was zu tun haben)
 
Zuletzt bearbeitet:
Hallo!

Habs mal kurz portiert:

Code:
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

int getZahlAnStelle(const int zahl, const int stelle){
      return int(zahl/pow(10.0,int(log10(double(zahl))-stelle))) % 10;
}    

int main(int argc, char *argv[])
{
  int zahl=1358;
  int stelle = 2;
  /*
  cout << "Geben sie eine Zahl ein: ";
  cin >> zahl;
  cout << "Welche Stelle wollen sie sehen? ";
  cin >> stelle;
  */
  cout << zahl << " " << stelle <<endl << getZahlAnStelle(zahl,stelle)<< endl;
  
  system("PAUSE");	
  return 0;
}

Gruß Tom
 
Hallo zusammen,

erstmal VIEEEEEEELEN dank für die zahlreichen Antworten! Ihr habt mir echt enorm weitergeholfen. Denke, so langsam sickert das Mod-Zeugs auch bei mir durch, werd aber wohl noch n bisschen damit rumspielen müssen.

Den Code von Java/CppProgrammer hab ich genauer unter die Lupe genommen, und es erscheint mir recht einleuchtend.
Hab nur noch 2 Fragen dazu:
- Gibts einen Unterschied zwischen #include <cmath> und #include <math.h> ? Wir hatten nur letzteres im Unterricht durchgenommen.
- Was macht "pow" genau?

lg,
Angie
 
Zurück