Autor Beitrag
PeterS
Hält's aus hier
Beiträge: 4

MacOS 10.6 / Windows 7
C#
BeitragVerfasst: Fr 10.09.10 12:39 
Hallo ich bin der Peter!
Ich hab C# für die umsetzung meiner Ideen entdeckt, mir gleich ein gutes Lehrbuch besorgt und losgelegt.
Habe noch keine vorhergehenden Programmierkenntnisse gehabt. Jetzt bin ich da auf eine Schleife in dem Lehrbuch gestoßen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int p = 2;

            for (int q = 2; q < 32; q = q * 2)
            {
                while (p < q)
                {
                    p = p * 2;
                }
                q = p - q;
            }


Habe das ganze im Debugger mehr mal durchlaufen und dabei festgestellt, dass dieser wenn q einen wert von -8 (minus acht) hat und die Anweisung in der for-schleife q * 2 nimmt plötzlich +8 (plus acht) rauskommt.

Kann mir das jemand kurz erklären? ... :)

Moderiert von user profile iconKha: C#-Tags hinzugefügt
PeterS Threadstarter
Hält's aus hier
Beiträge: 4

MacOS 10.6 / Windows 7
C#
BeitragVerfasst: Fr 10.09.10 13:27 
Hab mal gelernt, dass -8 * 2 = -16 ist und erst bei -8 * -2 = +16 ergibt. Vielleicht stellt das meine Problematik damit etwas klarer :)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 10.09.10 13:30 
Hallo und :welcome: user profile iconPeterS!

user profile iconPeterS hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
            int p = 2;

            for (int q = 2; q < 32; q = q * 2)
            {
                while (p < q)
                {
                    p = p * 2;
                }
                q = p - q;
            }

Ach du meine Güte, was ist das denn? :o

Das schlimmste an der Schleife ist, dass die Schleifenvariable q innerhalb der Schleife verändert wird. Normalerweise sind for-Schleifen einfach dazu da, zu zählen. Hoch, runter, linear, quadratisch - aber eben immer in eine Richtung. Dein Code soll offensichtlich einfach nur verwirren :eyecrazy:

user profile iconPeterS hat folgendes geschrieben Zum zitierten Posting springen:
Habe das ganze im Debugger mehr mal durchlaufen und dabei festgestellt, dass dieser wenn q einen wert von -8 (minus acht) hat und die Anweisung in der for-schleife q * 2 nimmt plötzlich +8 (plus acht) rauskommt.

Und wann genau ist q bei dir negativ? Wenn ich die Schleife im Debugger laufen lasse, zählt er wie folgt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
p=2, q=0
p=2, q=2
p=4, q=0
p=4, q=4
p=8, q=0
p=8, q=8
p=16, q=0
p=16, q=16


user profile iconPeterS hat folgendes geschrieben Zum zitierten Posting springen:
mir gleich ein gutes Lehrbuch besorgt und losgelegt.

Bist du dir sicher, dass das Lehrbuch gut ist? Wenn solche Codebeispiele darin vorkommen, und die nicht einmal erklärt sind...


Zuletzt bearbeitet von Yogu am Fr 10.09.10 15:41, insgesamt 1-mal bearbeitet
PeterS Threadstarter
Hält's aus hier
Beiträge: 4

MacOS 10.6 / Windows 7
C#
BeitragVerfasst: Fr 10.09.10 13:44 
Nuja .. das Buch hab ich bisher ganz gut verstanden :) denke eher es liegt an meiner innerlichen Interpretation der dinge :)

Nach dem ersten durchlaufen der Schleife ist q = 0 ... zumindest bei mir xD und p = 2

Beim zweiten Durchlauf greift die While-Schleife ja nicht, und dann soll der Computer von q den Wert von p abziehen. Das ergibt bei mir -2 (minus zwei) beim Debugger allerdings 2

Da fängts ja schon mit meinem unverständnis an :)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 10.09.10 13:48 
user profile iconPeterS hat folgendes geschrieben Zum zitierten Posting springen:
und dann soll der Computer von q den Wert von p abziehen.
Nein, schau es dir noch einmal an. q wird p - q = 2 - 0 = 2 zugewiesen.

_________________
>λ=
PeterS Threadstarter
Hält's aus hier
Beiträge: 4

MacOS 10.6 / Windows 7
C#
BeitragVerfasst: Fr 10.09.10 13:57 
Och neee *koppklatsch* :idea: jetz ist klar.

Da hab ich mich ja von irgendwas ganz bös verwirren lassen

:oops:

Danke für die Hilfe :D
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 10.09.10 14:07 
:D

Lernen solltest du aus der Geschichte, dass q und p sehr sehr schlechte Variablennamen sind. Sie sollten immer sprechend sein, damit man besser nachvollziehen kann was passiert. Auch Kommentare helfen an dieser Stelle.

Viel Spaß mit C#

Gruß