Zahlen richtig wiedergeben
-
Ich habe dir mal eine kleine Einführung verfasst,
hoffe sie hilft dir weiter#include <iostream> using namespace std; int main() { /* int --> Für 1 Ganzzahl */ int i = 7; /* int[] --> int-Array --> Für mehrere Ganzzahlen */ int i_array[4] = {15,7,65,-10}; /* char --> Für 1 Zeichen Zeichen werden in einzelnen Hochkommas eingeschlossen. Ein Zeichen wird eindeutig durch einen sog. ASCII-Wert beschrieben. Welches Zeichen welchen ASCII-Wert hat, kannst du aus einer ASCII-Tabelle entnehmen. Ein ASCII-Wert ist wiederum 1 Ganzzahl. */ char c = 'z'; // Du kannst bei char entweder ein Zeichen angeben, ... c = 122; // ... oder explizit den ASCII-Wert. ( 122 = 'z' ) /* char[] --> char-Array --> Für mehrere Zeichen bzw. 1 Zeichenkette. Stehen mehrere Zeichen hintereinander, spricht man von einer sogenannten Zeichenkette. Zeichenketten werden in doppelte Hochkommas eingeschlossen. Willst du das Array als Zeichenkette ansprechen, musst du am Schluss der Zeichenkette ein Terminierungszeichen '\0' angeben, welches die Zeichenkette beendet. Hantierst du ausschließlich mit den einzelnen Zeichen im Array, brauchst du das Terminierungszeichen nicht. */ char c_array_1[] = "C++"; // Initalisierung mit Zeichenkette. --> Terminierungszeichen ist automatisch mit dabei. char c_array_2[] = {'C','+','+','\0'}; char c_array_3[] = {'C','+','+'}; cout << c_array_2 << endl; // Darfst du, weil Terminierungszeichen angegeben. // cout << c_array_3 << endl; // Darfst du nicht, da kein Terminierungszeichen. cout << c_array_3[0] << c_array_3[1] << c_array_3[2] << endl; // Du musst nun Zeichen für Zeichen ausgeben. /* Das Zeichen '0' hat den ASCII-Wert 48. Willst du aus dem Zeichen '0' nun die Ganzzahl 0 machen, musst du von dem Zeichen '0' 48 subtrahieren: 0 = '0' - 48 oder 0 = '0' - '0' Das Zeichen '1' hat den ASCII-Wert 49, Willst du aus dem Zeichen '1' nun die Ganzzahl 1 machen, subtrahierst du wieder 48 bzw. '0': 1 = '1' - 48 oder 1 = '1' - '0' etc... */ cout << '0' - 48 << endl; cout << '0' - '0' << endl; cout << '1' - 48 << endl; cout << '1' - '0' << endl; /* Welches Zeichen welchen ASCII-Wert hat, kannst du ganz einfach herausfinden, indem du das Zeichen zu einem ganzzahligen Datentypen castest. */ cout << "ASCII-Wert von 'z' = " << static_cast<int>('z') << endl; /* Was du nun beachten musst: Bevor du anfängst du rechnen, musst du das Zeichen in eine Ganzzahl transformieren. */ string zahl; do { cin >> zahl; } while(zahl.length() != 4); // Nur 4-stellig zulassen. int ziffer[4] = {}; // Alle 4 Ganzzahlen-Elemente werden mit 0 initialisiert. ziffer[0] = zahl.at(0) - 48; ziffer[1] = zahl.at(1) - 48; ziffer[2] = zahl.at(2) - 48; ziffer[3] = zahl.at(3) - 48; int quersumme = ziffer[0] + ziffer[1] + ziffer[2] + ziffer[3]; cout << "Quersumme der Zahl " << zahl << " ist " << quersumme << "."; cin.sync(); cin.get(); return 0; }
mfg Dweb
-
ipsec schrieb:
Hab jetzt leider keinen Compiler, aber sowohl Einlesen einer Zahl, als auch Modulo und Division sind relativ teure Operationen im Vergleich zum simplen Subtrahieren und Addieren.
Ah, jettzt kommen Fachargumente. hihi.
Da geschieht keine Division durch 10, sondern eine Multiplikation, die hat 6-8 Takte, wenn man sich einen modernen Prozessor leisten kann. das new für den string hat Hunderte. Die bei nur vierstelliger Zahl aufzuholen dürfte nicht klappen.
Außerdem wollte der Prof doch sicherlich den Modulo-Operator vertiefen. Warum sich querstellen?
Es hat ja auch keiner das Hochschultypische EVA-Prinzip angezweifelt und while(isdigit(ch=cin.get())qs+=ch-'0'; oder sowas gevorschlagt.
-
Es waere doch auch eine Idee wenn die Zahl die der benutzer geschrieben hat in einer char variable gespeichert wird.
Diese wird dann wiederum Zeichen fuer Zeichen in eine zweite char variable addiert
wird.Waehrend diesem schritt wird von der dezimal Zahl jeder Zahl 48 abgezogen damit kaeme dann bei dem Zeichen '1' der dezimal wert '01' also das Zeichen 'SOH^A'
Bei der Ausgabe des addierten Buchstaben schreibt man aber 'static_cast<int>()' (die variable in der Klammer) und schon wird die quersumme der eingegebenen Zahl gezeigT
Beispeil:
[cpp]
#include <iostream>int main()
{
char zahl[5];std::cout << "Geben sie eine vierstellige Zahl ein: " << std::endl;
std::cin >> zahl;char quersumme;
quersumme = (static_cast<int>(zahl[0]) - 48) + (static_cast<int>(zahl[1]) - 48) + (static_cast<int>(zahl[2]) - 48) + (static_cast<int>(zahl[3]) -48);std::cout << "Ihre Zahl war: " << zahl << " Die Quersumme lautet: " << static_cast<int>(quersumme) << std::endl;
}
[cpp]