PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tut Quersumme ausrechnen?



s1ckST4R
30.06.2010, 13:20
Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer vierstelligen Zahl auffordert. Das Programm soll daraufhin die Quersumme der vierstelligen Zahl errechnen und das Ergebnis auf den Bildschirm ausgeben.

Ich weiß nicht wie ich aus ner einzelnen eingabe 4 Variablen entnehmen soll =/
Ich hätt das so gemacht aber des geht net:


#include <iostream>
using namespace std;

int main() {
int a[4],b;
cout << "Eine 4 Stellige Zahl eingeben" << endl;
cin >> a[4];
a[4] = 0;
b = a[0] + a[1] + a[2] + a[3];
cout << b << endl;
system("PAUSE");
}

Aber wie gesagt das geht iwie net =/ Hat einer n Tipp ?
s1ckST4R

Perishand
30.06.2010, 13:25
Das geht nicht, beste Erklärung die es gibt.

Was geht denn nicht? Gibt er falsche Ergebnisse aus? Ein Error dürfte nicht kommen, aber vielleicht ja doch?

Was gibt er denn aus?

EDIT:

Wie wärs wenn du die Eingabe als Char machst der 4 stellen hat? Dann kannst du auf diese Weise mit dem Index des Chars arbeiten

nemo
30.06.2010, 13:29
Du kannst von der Standardeingabe natürlich nicht einfach in ein Array aus Ganzzahlen lesen. Überprüfe zuerst, ob die Eingabe numerisch ist, dann durchlaufe sie Zeichen für Zeichen und führe die notwendingen Berechnungen durch.

Shini
30.06.2010, 13:30
dump poste

s1ckST4R
30.06.2010, 13:32
Ja deswegen wollte ich ja Fragen, ob mir jemand ne Hilfestellung geben könnte, weil so wie ichs mir gedacht hab geht des wohl net hat einer n Code das ich´s verstehen kann iwie?
s1ckST4R

@ Shini (http://free-hack.com/member.php?u=46931)
so hätt ich das au hinbekommen xP ville net so schön aber...

In der Aufgabe steht :
Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer vierstelligen Zahl auffordert.
Eingabe EINER vierstelligen Zahl.

Perishand
30.06.2010, 13:34
Shini, tut mir leid aber dein Code macht keinen Sinn.

Er will die Quersumme, dein Code ist eine einfache Addition von 4 Zahlen, es soll jedoch nur 1 Zahl eingegeben werden.

ocz
30.06.2010, 13:41
string deklarieren (wir sind ja c++),
eingabe auffordern, cin >> str,
for(0 .. 3) durch den string iterieren (.c_str()[i]), einzelne werte auf ganzzahligkeit überprüfen (ASCII 0x30-0x39),
addieren und ausgeben.

s1ckST4R
30.06.2010, 13:47
WTF O_o ich lerns grad xD Hast du den code das ich au versteh was du schreibst? xD

Wenn ich bei dem was ich gecodet hab, z.b. 1111 eingeb kommt 858993456 raus... warum auch immer O_o xD

k0rxxx
30.06.2010, 13:49
#include <iostream>

using namespace std;

int main()
{
int a, b;
cout << "Zahl:";
cin >> a;

while (a > 0)
{
b += a % 10;
a /= 10;
}
cout << "Qsum:" << b;
return 0;
}

Saedelaere
30.06.2010, 13:50
WTF O_o ich lerns grad xD Hast du den code das ich au versteh was du schreibst? xD
Learning by doing. Trial and error Prinzip ist das Zauberwort. Aus einem fertigen Code lernst du nichts. OpCodez hat doch schon die Anleitung gegeben, wie es funktioniert ..


Wenn ich bei dem was ich gecodet hab, z.b. 1111 eingeb kommt 858993456 raus... warum auch immer O_o xD
Auch hierzu hat OpCodez schon die Erklärung abgeliefert.

Megagamer
30.06.2010, 13:51
Probiers mal mit der Modulo funktion, dann kannst du die Zahl als Integer einlesen und die einzelnen Zahlen addieren.

bayer
30.06.2010, 13:52
Ich geb dir mal nenkleinen Tip, wie du das auch mit Integer-Werten hinbekommen kannst ;)

Das Stichwort lautet: Modulo 10.

Weiterhin möchte ich dir keine Lösung hinklatschen, sondern will vielmehr, dass du dir selber Gedanken machst :)

edit:
Zu spät. Verdammt, das kommt davon, wenn man immer alle neuen Threads aufmacht und dann nich refreshed^^

s1ckST4R
30.06.2010, 13:52
Wenn ich dein Code Benutz k0rxxx (http://free-hack.com/member.php?u=35970)
kommt:
Run-Time Check Failure #3 - The variable 'b' is being used without being initialized.

ehm, ich lern grad noch das is Kapitel 3 bisher hab ich was von Arrays und ehm... ausgabe eingabe... mehr net also formulierts pls so das es jemand versteht, der GERADE das 3. Kapitel lernt... das ihr folgen könnt:
http://www.highscore.de/cpp/einfuehrung/index.html

noctem
30.06.2010, 13:55
Oder einfach eine Integer einlesen und so vorgehen:

while( eingabe > 0 )
{
quersumme += eingabe % 10;
eingabe /= 10;
}

Damit sparst du dir die Strings und bist nicht auf eine bestimme Länge der Zahl angewiesen. (Abgesehen vom Wertebereich deines Datentyps natürlich.)

~noctem

Edit://Ups, da war ich doch glatt zu spät. :(

Edit2://

Run-Time Check Failure #3 - The variable 'b' is being used without being initialized.Vielleicht solltest du zusätzlich zu C++ noch Englisch lernen. ;)
Die Meldung kommt, da er die Variable b nicht initialisiert (ihr einen "Anfangswert" zuweist). Somit addiert er die Quersumme auf einen Wert, der zufällig noch an der Adresse von b steht. Die Variable sollte also mit einer 0 initialisiert werden, um die Addition nicht zu verfälschen.

k0rxxx
30.06.2010, 13:59
s1ckst4r, dann initialisiere die variablen halt

s1ckST4R
30.06.2010, 14:00
Oder einfach eine Integer einlesen und so vorgehen:

while( eingabe > 0 )
{
quersumme += eingabe % 10;
eingabe /= 10;
}

Damit sparst du dir die Strings und bist nicht auf eine bestimme Länger der Zahl angewiesen. (Abgesehen vom Wertebereich deines Datentyps natürlich.)

~noctem

Edit://Ups, da war ich doch glatt zu spät. :(
ok das könnte stimmen glaub ich O_o aber wenn ich in Kapitel 3 die aufgabe bekomm sowas zu machen muss ichs ja normal schon gelernt haben, und des while also schleifen kommt ers in 4.4 oder so dran ... also muss iwie die Quersummer errechnet werden nur mit
cin,cout,swap,iwas_cast<variable>, und halt die low dinger...
Weil wenn es in Kapitel 4 am ende wär, würd ichs warschienlich mit der while schleife au können *ville* ^^

Perishand
30.06.2010, 14:08
Hier noch mit einer Char Variable, ist zwar nicht so "schön" aber was läuft, das läuft:



int b;
char a[4];

cout << "Eine 4 Stellige Zahl eingeben" << endl;
cin >> a;
b = a[0] + a[1] + a[2] + a[3] - 48*4;
cout << b << endl;
system("PAUSE");


Achja, kleine erkärung:

am Ende die "- 48*4" kommen daher, weil durch diese Art des Umwandelns (char zu int) nicht die Zahl ausgegeben wird, sondern die Ascii Position(Zahl an welcher Position dieses Zeichen ist) Um nun daraus die Zahlen zu bekommen, müssen wir nur in der Ascii Tabelle gucken, wo die Zahl 0 beginnt, bei 48.

Wenn wir jetzt die Zahl 1 suchen in einer Ascii Tabelle sehen wir, es hat die 49, die Zahl 2 hat die 50 usw.

Heißt wenn wir 48 jeweils von 4 Zahlen abziehen, bekommen wir das richtige Ergebnis

ocz
30.06.2010, 14:33
Hier noch mit einer Char Variable, ist zwar nicht so "schön" aber was läuft, das läuft:


Es ist sogar schöner, da man gleich auf ganzzahligkeit und Länge 4 prüfen kann.


sondern die Ascii Position(Zahl an welcher Position dieses Zeichen ist) Vielleicht ein wenig unglücklich formuliert... Es geht nicht um die Position im String, sondern um die kodierung des Zeichens (in dem Fall der Ziffer) in ASCIIl.



Heißt wenn wir 48 jeweils von 4 Zahlen abziehen, bekommen wir das richtige ErgebnisInteressante Idee, aber ob man erst die einzelnen ASCII werte addiert und dann 4x48 subtrahiert, oder das subtrahieren gleich macht, macht keinen Unterschied. Man sollte bei dem Code jedoch möglichst nah an der "menschlichen" vorgehensweise bleiben, vor allem wenn das Programm zu Lernzwecken dient.

Perishand
30.06.2010, 14:41
Solange man weiß, dass es den Ascii Wert nicht direkt ausgibt, sondern halt 48 "zu viel", kann man das ja auch in einem machen, anstatt - 48 - 48 - 48 - 48 zu schreiben

ocz
30.06.2010, 14:44
Solange man weiß, dass es den Ascii Wert nicht direkt ausgibt, sondern halt 48 "zu viel", kann man das ja auch in einem machen, anstatt - 48 - 48 - 48 - 48 zu schreiben

Ich rede davon in einer Schleife die Zeichen einzeln zu bearbeiten. Bei deiner Möglichkeit könnten da Buchstaben und alles mögliche drin sein...

Perishand
30.06.2010, 14:48
Das ist sehr wohl wahr, könnte man aber einfach mit dieser Art verbinden, da man nur testen muss, ob (a[i] - 48) < 0 || (a[i] - 48) > 57 ist, wenn es der Fall ist, ist es eine falsche Eingabe, dass meintest du damit oder?

Und ja, Schleifen sind natürlich übersichtlicher hast recht.

s1ckST4R
30.06.2010, 14:51
Perishand (http://free-hack.com/member.php?u=37514)
Thx deins war echt Hilfreich =D also im grunde hatte ichs ja fast richtig nur mit den ASCII Code hab ich was vergessen... ist dieses 48*4 dan n %00 oder wie?
Aso aber wenn ich des ausführ dan geht des mit der Quersumme aber wenn ichs beende kommt:
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
Ich weiß net was des is, des kommt voll oft hat da einer ne Ahnung?

ocz
30.06.2010, 14:54
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
Ich weiß net was des is, des kommt voll oft hat da einer ne Ahnung?

char array zu klein deklariert.
Du kannst jetzt noch die Variante von Perishand so anpassen, dass dich dein Lehrer dafür nicht totschlägt :D



ist dieses 48*4 dan n %00 oder wie?

Nein. @Perishand: Darum würde ich eine Schleife wählen... Es ist einfach verständlicher (und in dem Falle funktioneller)

s1ckST4R
30.06.2010, 14:58
char array zu klein deklariert.
Du kannst jetzt noch die Variante von Perishand so anpassen, dass dich dein Lehrer dafür nicht totschlägt :D
xP net mein Lehrer^^ ich lerns aus lw... array zu klein deklariert also muss ich 5 und dan nochn %00 ans ende oder wie?
Und ich bin froh das jemand mir das so Erklären konnte, weil die schleifen kommen wie gesagt ers im nächsten Kapitel und die Aufgabe hatte ja den sinn, zu testen ob ich verstanden hab was ich die 1-3Kapitel gelernt hab. Ville gibts sowas ähnliches nomma für Kapitel 4 dan mit Array.. möglich xP Aber aufjedenfall bin ich froh das ichs verstanden hab nur bis auf des mit dem ASCII net ganz =/

ocz
30.06.2010, 15:04
xP net mein Lehrer^^ ich lerns aus lw... array zu klein deklariert also muss ich 5 und dan nochn %00 ans ende oder wie?

Ich vermute mal (steinigt mich), dass cin die Eingabe nullterminiert, wenn du also 4 Zeichen eingibst, sind a[0]..a[3] die Eingabe und eben das Byte hinter a[3] == 0. Das führt dann zu Korruption ;D



Und ich bin froh das jemand mir das so Erklären konnte, weil die schleifen kommen wie gesagt ers im nächsten Kapitel und die Aufgabe hatte ja den sinn, zu testen ob ich verstanden hab was ich die 1-3Kapitel gelernt hab.

Stringoperationen beinhalten meistens Schleifen.

Perishand
30.06.2010, 15:10
Und ein kleiner Tipp an dich s1ckST4R (http://free-hack.com/member.php?u=63423) wenn du noch nie programmiert hast, also ein absoluter Neuling bist, wärst du mit anderen Sprachen anfangs besser dran. C++ ist eine sehr schöne Sprache, allerdings nicht optimal für Neulinge. VB6 ist zwar nicht besonders (es ist ausgelutscht) umfangreich aber dennoch zum Verstehen der Systematik sehr gut.

s1ckST4R
30.06.2010, 15:14
Also ich hab schon mit VB.net Angefangen, PHP , HTML und CSS Konnte bzw. Kann es und ehm Script spachen wie Python oder Perl hab ich au Angefangen, also ich kenn die grundkenntnisse schon, nebenher lern ich au grad noch VB.net weiter.
Ich hab ma in Kapitel 4 geguckt da is das gleiche nochmal mit schleife xP:

Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe einer vierstelligen Zahl auffordert. Das Programm soll daraufhin die Quersumme der Zahl mit Hilfe einer Schleife errechnen und das Ergebnis dann auf den Bildschirm ausgeben.

ma gucken ob wenn ich 4 durch hab das hinbekomm xD
Aber thx nomma @ all für die Hilfe!
s1ckST4R

/edit: bzw. was ich noch nicht ganz Versteh... wenn man den ASCII Code liest is 48 = 0 und wenn man 0; macht is das ja %00
aber du meintest das des 48*4 so wie 48-4 wirkt also sind wir auf "-" is dan im endeffekt 48*8 = - oder wie? Das is das einzige was ich noch nicht peil =/

ocz
30.06.2010, 15:47
/edit: bzw. was ich noch nicht ganz Versteh... wenn man den ASCII Code liest is 48 = 0 und wenn man 0; macht is das ja %00

Bitte drücke dich mal präziser aus, aber ich denke ich weiß was du meinst. Du musst dir die Daten im Speicher vorstellen:



char a[5];
/.../speicherblabla|[0]|[1]|[2]|[3]|[4]|speicherblabla/.../
so, wenn du jetzt cin >> a machst und sagen wir mal abcd eingibst, dann muss das in die Variable gespeichert werden. So würde das aussehen, wenn man die Zeichen als ASCII interpretiert:



/.../speicherblabla|a|b|c|d|*NUL*|speicherblabla/.../
Computer arbeiten mit Zahlen, Buchstaben bedeuten nichts für sie. ASCII ist eine Art, eine 2^8 Bit-Zahl als Buchstabe darzustellen.
http://www.stefan-lenz.ch/_pics/68/ascii.png
Derselbe Speicher wie oben sieht also zahlentechnisch gesehen so aus:



/.../speicherblabla|a|b|c|d|*NUL*|speicherblabla/.../
=
/.../speicherblabla|97|98|99|100|0|speicherblabla/.../
=
/.../speicherblabla|0x61|0x62|0x63|0x64|0x0|speicherbla bla/.../
Wichtig ist, dass diese drei Beispiele den identischen Speicher darstellen, das bedeutet der Inhalt ist der gleiche, wenn auch anders dargestellt, nämlich einmal als ASCII, einmal als Dezimalzahlen und einmal als Hexadezimalzahlen. Wie man sieht ist die nullterminierung übrigens einfach die Zahl 0. So, jetzt nehmen wir mal an, du gibst nicht abcd sondern 1234 ein.



/.../speicherblabla|1|2|3|4|*NUL*|speicherblabla/.../
=
/.../speicherblabla|49|50|51|52|0|speicherblabla/.../
=
/.../speicherblabla|0x31|0x32|0x33|0x34|0x0|speicherbla bla/.../
Du siehst schon, dass das verwirrend sein kann. Sind das jetzt "echte" Zahlen oder ASCII-kodierte Ziffern?

Die Quersumme von 1234 ist
1+2+3+4 = 10.
Wenn du jetzt
quersumme = a[0] + a[1] + a[2] + a[3];
machst, so werden die _Werte_ der einzelnen Felder addiert. Die Werte sind 49, 50, 51 und 52, da der Computer wie gesagt keinen Grund hat, die ASCII-Bedeutungen der einzelnen Felder zu addieren. Also würde er dir
49+50+51+52 = 202
ausgeben, und das ist ja nicht unsere Quersumme.

Wenn wir jetzt also wissen, wie der Computer die Ziffern behandelt, können wir Gegenmaßnahmen ergreifen. Wie man aus der obigen Zeichentabelle erkennen kann, entsprechen die ASCII Ziffern 0-9 den ZAHLENWERTEN 48-57. Wenn man jetzt vom Zahlenwert 48 subtrahiert, so erhält man die "ASCII-Bedeutung". Du könntest nun also
quersumme = a[0] - 48 + a[1] - 48 + a[2] - 48 + a[3] - 48;
rechnen (ohne schleife), und das würde die jeweiligen Zahlenwerte addieren.

Statt vier mal 48 zu subtrahieren kannst du natürlich auch
quersumme = a[0] + a[1] + a[2] + a[3] - 4*48; (Kommutativgesetz)
rechnen.



aber du meintest das des 48*4 so wie 48-4 wirkt also sind wir auf "-" is dan im endeffekt 48*8 = - oder wie? Das is das einzige was ich noch nicht peil =/Unverständlich formuliert.

s1ckST4R
30.06.2010, 16:06
Also Perishand hat ja geschrieben:

am Ende die "- 48*4" kommen daher, weil durch diese Art des Umwandelns (char zu int) nicht die Zahl ausgegeben wird, sondern die Ascii Position(Zahl an welcher Position dieses Zeichen ist) Um nun daraus die Zahlen zu bekommen, müssen wir nur in der Ascii Tabelle gucken, wo die Zahl 0 beginnt, bei 48.

Wenn wir jetzt die Zahl 1 suchen in einer Ascii Tabelle sehen wir, es hat die 49, die Zahl 2 hat die 50 usw.

Heißt wenn wir 48 jeweils von 4 Zahlen abziehen, bekommen wir das richtige ErgebnisDas hab ich nicht ganz Verstanden, ich hab das so verstanden das wenn ich in ASCII Tabelle nach 0 such auf die 48 komm, dan hab ichd ie 48 und die 4 sagt er is ja zum abziehen also 48*4 = 48-4=44 dan sind wir bei "," hmm ich hab vorher falsch geguckt aber jetzt bin ich noch verwirrtert O_o

und OpCodez (http://free-hack.com/member.php?u=67508) du meinst dan das %00 quasie nur ne Behinderung im Code is oder wie?

ocz
30.06.2010, 16:09
48 * 4 = 48 - 4 = 44
Wait.... WAT?

Subtraktion und Multiplikation unterscheiden sich leicht.



und OpCodez (http://free-hack.com/member.php?u=67508) du meinst dan das %00 quasie nur ne Behinderung im Code is oder wie?Drück dich gescheit aus, Junge, wir sind hier nicht in der Gosse.

s1ckST4R
30.06.2010, 16:17
zum 1. Ich hab Zittiert was Perishand geschrieben hat,
und zum 2. Ich versteh nicht was daran Gossen Sprache ist?
Ich hab gefragt ob %00 den Code dan unterbricht/Behindert..?

AlterHacker
30.06.2010, 16:27
#include <iostream>
using namespace std;

int main() {
int a[4],b;
cout << "Eine 4 Stellige Zahl eingeben" << endl;
cin >> a[4];
a[4] = 0;
b = a[0] + a[1] + a[2] + a[3];
cout << b << endl;
system("PAUSE");
}

Damit hast du übrigends einen 1-A-Buffer-Overflow-Vuln gecodet ;-)
1.) Sicher gehen, dass nur 4 Zeichen eingelesen werden,
2.) Das 0-Byte nicht vergessen!
3.) bei a[4] ist der höchste index a[3], also a[4] müsste dir einen Fehler rausschmeißen.

besser wäre es in etwa so:
(Am besten wäre natürlich die Integer-Variante die bereits gepostet wurde)
char zahl[5] = {0}; int b = 0;
for(int i = 0; i < 4; i++) {
scanf("%c", &zahl[i]); b+=zahl[i]-'0';
}

Damit wäre b die Quersumme.


MfG

ocz
30.06.2010, 16:29
zum 1. Ich hab Zittiert was Perishand geschrieben hat,
und zum 2. Ich versteh nicht was daran Gossen Sprache ist?
Ich hab gefragt ob %00 den Code dan unterbricht/Behindert..?

Perishand hat NIEMALS diese schreckliche (un)Gleichung aufgestellt (die ich sehr ungerne wiederholen würde). %00 ist Prozent Null Null, wenn du damit die Nullterminierung meinst, dann hat die rein garkeine Auswirkung auf den Code, sondern lediglich auf Strings. Wenn du zum Beispiel n String a = "abcd" hast:



/.../|a|b|c|d|speicherblablab/.../


nehmen wir mal an du machst jetzt cout << a; dann würde er dir abcdspeicherblabla.... ausgeben, da er anhand des speichers ja nicht weiß, wo der SPeicherbereich des Strings vorbei ist. Da die Zahl 0 für kein Zeichen steht, kann man es als terminator benutzen. Wenn man jetzt also als letztes "Zeichen" des Strings den Zahlenwert 0 verwendet, so weiß der Computer bei Stringoperationen wo er aufzuhören hat.

s1ckST4R
30.06.2010, 16:55
OpCodez (http://free-hack.com/member.php?u=67508) Ich hab ja nicht gesagt das ers so geschrieben hat, ich hab gesagt ich habs so verstanden... nur iwie peil ich jetzt garnicht mehr durch.
Der Code von Perishand war ja:

int b;
char a[4];
a[4] = 0;

cout << "Eine 4 Stellige Zahl eingeben" << endl;
cin >> a;
b = a[0] + a[1] + a[2] + a[3] - 48*4;
cout << b << endl;
system("PAUSE");Den ich ja versteh bis auf dieses 48*4... weil wenn ich 48*4 mach kommt 192 raus aber den wert gibts ja auf der ASCII Tabelle nicht mehr.
Und bei ihm ist auch die %00 gegeben... srry das ich solche Fragen stell aber wenn ich´s wüsste würd ich net Fragen.
s1ckST4R

P.S. VB.net is viel einfacher xD

/edit: Achso grad seh ich 192 gibts ja doch auf ASCII noch aber des is son Komisches zeichen das glaub nicht in den Code gehört.

semportei
30.06.2010, 16:59
b = a[0] + a[1] + a[2] + a[3] - 48*4;

was da addiert wird sind die ASCII werte
um dann von denen auf deine zahlen zu kommen musst du von jedem 48 abziehen
in diesem fall 4 mal weil du a[0]-a[3] addierst
daher die -48*4
und das ganze musst du deshalb machen weil die 0 in der ASCII tabelle den wert 48 hat

s1ckST4R
30.06.2010, 17:02
Ahhhhsooo na so einfach is das warum macht ihrs so Kompliziert xD Thx semportei (http://free-hack.com/member.php?u=45681)

/edit: jetzt das letzde was ich noch nicht versteh, warum wenn ich den Code dan ausführ kommt:
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.

ocz
30.06.2010, 17:04
OpCodez (http://free-hack.com/member.php?u=67508) Ich hab ja nicht gesagt das ers so geschrieben hat, ich hab gesagt ich habs so verstanden...

Du kannst nicht einfach eine Gleichung so umstellen, dass sie falsch wird und das ganze dann so "verstehen".



Den ich ja versteh bis auf dieses 48*4... weil wenn ich 48*4 mach kommt 192 raus aber den wert gibts ja auf der ASCII Tabelle nicht mehr.
Und bei ihm ist auch die %00 gegeben... srry das ich solche Fragen stell aber wenn ich´s wüsste würd ich net Fragen.
Hast du dir meinen Beitrag oben überhaupt durchgelesen? anstatt von jedem einzelnen Buchstaben 48 zu subtrahieren kannst du nach dem Kommutativgesetz auch von der Summe 4*48 subtrahieren.



P.S. VB.net is viel einfacher xD
Dass sich VB (.NET) Skripter nicht mit sowas auseinandersetzen müssen, ist übrigens der Grund für ihre extrem oberflächlichen Kenntnisse.



/edit: Achso grad seh ich 192 gibts ja doch auf ASCII noch aber des is son Komisches zeichen das glaub nicht in den Code gehört.Arbeite meinen obigen Beitrag durch, vllt it einem Blatt papier, ich habe keine Ahnung wie man es noch simpler erklären kann.



/edit: jetzt das letzde was ich noch nicht versteh, warum wenn ich den Code dan ausführ kommt:
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.


[...]cin die Eingabe nullterminiert, wenn du also 4 Zeichen eingibst, sind a[0]..a[3] die Eingabe und eben das Byte hinter a[3] == 0. Das führt dann zu Korruption ;D
lesen pls :(

Starflow
30.06.2010, 17:15
OpCodez (http://free-hack.com/member.php?u=67508) ...Den ich ja versteh bis auf dieses 48*4... weil wenn ich 48*4 mach kommt 192 raus aber den wert gibts ja auf der ASCII Tabelle nicht mehr.

Gehen wir mal weiter davon aus die eingegebene Zahl ist 1,2,3,4 (ASCII) was in Dezimal 49,50,51,52 wäre also rechnet der PC
49+50+51+52 = 202
und um wieder auf den Normalen Wert zu kommen muss man nun die besagten 48 bei jedem dezimalwert abziehen...entweder einzeln während der Rechnung:
(49-48)+(50-48)+(51-48)+(52-48)= 10

Oder (Und hier komtm der Teil den du scheinbar noch nicht verstanden hasst) aber man zieht am Ende 4*48 ab was Rechnerisch das selbe ist...es ist halt nur kürzer
49+50+51+52-48*4= 202-48*4= 202 - 192 = 10

s1ckST4R
30.06.2010, 17:46
thX Starflow (http://free-hack.com/member.php?u=46818)
Das war nochn bischen besser Erklärt also jetzt hab ichs Komplett gepeilt...

und OpCodez (http://free-hack.com/member.php?u=67508)
Ich versteh das du ville n bischen genervt bist weil ich gefragt hab, aber 1. Jeder hats ma gelernt und wenn er nicht hier Probleme hat, dan ville irgendwo anders.
und 2. Du hast glaub ab un an auch nicht ganz verstanden was ich gemeint hab deswegen hast du so komplex es ging drum rum geredet.
Naja aber wenn die aw von Starflow (http://free-hack.com/member.php?u=46818) gleich nach dem code von Perishand gekommen wär, wär das Theard nur um die hälfte so lang xP.
Aso und ja natürlich is VB.net viel leichter aber oberflächlich find ich n bischen übertrieben weil man merkt beim Codieren ja doch was Variablen bringen, Schleifen usw. nur in jeder Programmiersprache ists halt anders un daran gehts sich ein zu arbeiten.
s1ckST4R

blackberry
30.06.2010, 18:03
37 Posts über so eine einfache Frage?
Ich mach jetzt hier mal zu, da das völlig ausartet.
/closed