Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 40
  1. #21
    CIH-Virus Avatar von Perishand
    Registriert seit
    11.08.2007
    Beiträge
    437

    Standard

    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.

  2. #22
    W32.Lovgate Avatar von s1ckST4R
    Registriert seit
    06.02.2010
    Beiträge
    324

    Standard

    Perishand
    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?

  3. #23
    Chloë Grace Moretz Avatar von ocz
    Registriert seit
    29.05.2010
    Beiträge
    384

    Standard

    Zitat Zitat von s1ckST4R Beitrag anzeigen
    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

    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)

  4. #24
    W32.Lovgate Avatar von s1ckST4R
    Registriert seit
    06.02.2010
    Beiträge
    324

    Standard

    Zitat Zitat von OpCodez Beitrag anzeigen
    char array zu klein deklariert.
    Du kannst jetzt noch die Variante von Perishand so anpassen, dass dich dein Lehrer dafür nicht totschlägt
    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 =/

  5. #25
    Chloë Grace Moretz Avatar von ocz
    Registriert seit
    29.05.2010
    Beiträge
    384

    Standard

    Zitat Zitat von s1ckST4R Beitrag anzeigen
    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.

  6. #26
    CIH-Virus Avatar von Perishand
    Registriert seit
    11.08.2007
    Beiträge
    437

    Standard

    Und ein kleiner Tipp an dich s1ckST4R 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.

  7. #27
    W32.Lovgate Avatar von s1ckST4R
    Registriert seit
    06.02.2010
    Beiträge
    324

    Standard

    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 =/
    Geändert von s1ckST4R (30.06.2010 um 15:16 Uhr)

  8. #28
    Chloë Grace Moretz Avatar von ocz
    Registriert seit
    29.05.2010
    Beiträge
    384

    Standard

    Zitat Zitat von s1ckST4R Beitrag anzeigen
    /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:

    Code:
    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:

    Code:
    /.../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.

    Derselbe Speicher wie oben sieht also zahlentechnisch gesehen so aus:

    Code:
    /.../speicherblabla|a|b|c|d|*NUL*|speicherblabla/.../
    =
    /.../speicherblabla|97|98|99|100|0|speicherblabla/.../
    =
    /.../speicherblabla|0x61|0x62|0x63|0x64|0x0|speicherblabla/.../
    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.

    Code:
     /.../speicherblabla|1|2|3|4|*NUL*|speicherblabla/.../
    =
    /.../speicherblabla|49|50|51|52|0|speicherblabla/.../
    =
    /.../speicherblabla|0x31|0x32|0x33|0x34|0x0|speicherblabla/.../
    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.
    Geändert von ocz (30.06.2010 um 15:54 Uhr)

  9. #29
    W32.Lovgate Avatar von s1ckST4R
    Registriert seit
    06.02.2010
    Beiträge
    324

    Standard

    Also Perishand hat ja geschrieben:
    Code:
    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
    Das 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 du meinst dan das %00 quasie nur ne Behinderung im Code is oder wie?

  10. #30
    Chloë Grace Moretz Avatar von ocz
    Registriert seit
    29.05.2010
    Beiträge
    384

    Standard

    Zitat Zitat von s1ckST4R Beitrag anzeigen
    48 * 4 = 48 - 4 = 44
    Wait.... WAT?

    Subtraktion und Multiplikation unterscheiden sich leicht.

    und OpCodez 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.

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. [VB.NET] Sofort ausrechnen
    Von fLuX!? im Forum .NET Sprachen - Techniken
    Antworten: 2
    Letzter Beitrag: 11.12.2008, 14:22

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •