C# Erklärung Do-While / for-Schleife / Modulo(%)

Xsp

Lt. Commander
Registriert
Jan. 2010
Beiträge
1.711
Hallo Liebe Bit-Verschieber, :p
ich habe in der Schule seit einem halben Jahr Programmieren als Unterrichtsfach.
Zur Zeit stehe ich 5 und das will ich Radikal ändern.

Mein Problem besteht nicht darin, dass ich nicht weis wie die Sachen gehen z.B if-else, switch-case usw. Ich habe das Probelm das ich das Logische denken nicht hinbekommen wie ich anfangen soll zu Programmieren.

Bei 3 Sachen wie der Threadtitel schon sagt weis ich nicht ganz genau wie diese Funktionieren.
Bei msdn von Mircosoft habe ich auch schon nachgeschaut und bei Openbook von Gallileo habe ich auch schon nachgelesen, aber es bringt nichts. Ich bekomme es einfach nicht in mein Kopf wie diese 3 Sachen funktionieren sollen. Zu kompliziert beschrieben wie diese Funktionieren.
Darum hoffe ich hier auf eine vernünftige Definition und Antworten. = /

Was ich weis, das Modulo irgendwas mit Restwertrechnen aufsich hat.
Die For-Schleife funtionier ja so:
Beispiel:for( int i = 0; i>0; i++);
Also for(int Startwert; Abbruchbedingung; Multiplikator des Startwertes);
Bei der For-Schleife weis ich nicht was ich dort immer reinschreiben muss, also ich verstehe nicht wie die genau Arbeitet und die Schleife durchläuft.

Bei der Do-While haben wir nur Programmiert, dass wir nach einem ausgeführten Program gefragt haben ob wir dieses Program nicht nocheinmal durchlaufen lassen wollen. z.B bei einem Taschenrechner. Wenn wir das Ergebnis haben, ob wir nochmal Rechnen wollen.

Nun sollen wir ein Program schrieben, dass das Horner Schema ausgibt, also das Binärsystem.
z.B.
180:2 =0
90:2 =0
45:2 =1
22:2 =0
11:2 =1
5:2 =1
2:2 =0
1:2 =1


Ausgabe: 10110100 = 180

Mein Proggen Lehrer hat gesagt, das wir das Program mit Do-While und mit Modulo Programmieren sollen, das es das einfachste ist.
Nun, das sind meine 2 der 3 Probleme. Ich weis nicht wie diese Funktionieren. :(

Bis jetzt habe ich:
using System;

namespace Horner_Schema
{

class Class1
{

[STAThread]
static void Main(string[] args)
{
int intZahl, intErgebnis;

Console.WriteLine("Eingabe einer Zahl");
intZahl = Convert.ToInt32(Console.ReadLine());

do
{
intErgebnis = intZahl%2;
Console.WriteLine("{0}", intErgebnis);

}while()
}
}


Weiter weis ich aber auch nicht. Bin am verzweifeln.
Das OpenBook von Gallileo Kapitel 2 (Grundlagen von C#, was wir auch lesen sollten) habe ich mir schon 2 mal durchgelsesen. = / Nichts.

Bitte um kleine Hilfestellung

greeetz
Xsp
 
Hi,

also damit wirst du dich auseinandersetzen müssen, das kommt immer wieder! Gerade die for-Schleife kommt regelmäßig.

Die im Rumpf der for Schleife enthaltenen Anweisungen werden solange ausgeführt, bis die Auswertung des Schleifenkopfs false ergibt. Im Kopf der for Schleife wird zuerst eine Laufvariable mit einen Startvalue initialisiert. Als nächstes wird von C# eine Bedingung für den Durchlauf der Schleife erwartet. Im letzten Teil des Kopfes muss noch die Erhöhung bzw. die Verkleinerung der Laufvariablen definiert werden. Im nachfolgenden Beispiel ist i die Laufvariable, i<10 ist die Bedingung für den Durchlauf und i++ steht für die Erhöhung der Laufvariablen. Beachten Sie das die Erhöhung bzw. Verkleinerung der Startvariablen in endlich vielen Schritten die Schranke der Laufbedingung durchbrechen muss, da es sich ansonsten um eine Endlosschleife handelt.

for (int i = 1; i < 10; i++)
{
Console.WriteLine(i);
}

Modulo liefert den Rest – so ist z.B. 15/2 = 7 Rest 1. Bei der Modulo-Operation wird allerdings nur der Rest zurückgeliefert.

Das kannst du aber alles auch mit Google finden - was ich dir empfehlen würde. Viel lesen, viel selber probieren. Einfach "erklären" lassen geht beim Programmieren nicht.

VG,
Mad
 
Sorry aber Deine Gedanken sind absolut unstrukturiert und nicht so ganz klar:

Also Module = Restwertergebnis der Ganzzahldivision.

Merk Dir erstmal die While Schleife:
int i = 0;
while (i<100)
{
i = i+1; //oder direkt: i++;
cout << i: //Ausgabe auf der Console in C++, bei Dir cosole.writeline
}
wird zur Forschleife:
for(int i=0;i<100;i=i+1)
{
cout << i;
}

die Schleifen sind identisch

zu Deinem Problem:

int intZahl;
//Zahl einlesen
while (intZahl > 0)
{

cout << intZahl%2;
intZahl = intZahl/2;

}

die Befehle zur Ein- und Ausgabe sind anders, der Rest ist identisch zw. C++ und C#

edit: Ergänzung: Der Unterschied zw. einer Do While und einer While Schleife ist, dass die do While Schleife mindestens einmal durchlaufen wird.

Das ist hier wohl sinnvoll, um bei der Zahl 0 die Ausgabe "0" zu erzwingen. Ansonsten machts keinen Unterschied.
 
Zuletzt bearbeitet:
Wie meine beiden Vorredner schon gesagt haben solltest du Dich in das Thema einlesen.

Hab hier einen Link der dein Problem beschreibt.
Soll aber nur als Denkanstoß dienen. Nicht kopieren. Das fällt auf. :D
 
Merk Dir erstmal die While Schleife:
int i = 0;
while (i<100)
{
i = i+1; //oder direkt: i++;
cout << i: //Ausgabe auf der Console in C++, bei Dir cosole.writeline
}
wird zur Forschleife:
for(int i=0;i<100;i=i+1)
{
cout << i;
}
Also eine While-Schleife hatten wa noch nicht und was ist cout?

Was soll das bedeuten? ich kenne nur > oder <.

Danke, besser erklärt als bei msdn. ;)
 
Es muss doch ne While Schleife in C# geben, kann doch net sein.
While Schleife ist DIE Grundschleife, alle anderen Schleifen werden vom Compiler AFAIK zu dieser zurückgebaut.

vergiss das cout << und schreib statt dessen Dein console.writeline hin. cout ist C++ spezifisch.

Und wie kann nen Lehrer zuerst die For und dann die While Schleife erklären?
 
Wenn du so grundlegende Probleme hast solltest du UNBEDINGT mit einfacheren Aufgaben anfangen!
1. Schreib mal ne for-Schleife, die die Zahlen 1, 2, 3 ... ausgibt
2. Die Zahlen: 2, 4, 6, 8, ...
3. Jede Zahl, die nicht durch 5 teilbar ist (kann man einmal mit und einmal ohne modulo lösen)
4. Jede Zahl, die modulo 4 nicht 0 ist.
...

Es hilft nur: Üben, üben, üben! 100x selbstgeschriebene for-Schleifen für verschiedene Anwendungen solltest du mindestens gemacht haben.
 
Klar gibt es eine while Schleife...
Also eine While-Schleife hatten wa noch nicht und was ist cout?
Statt while{}
do{}

Kannst du einfach
while(deine bedingung)
{
dein DO abschnitt
}
schreiben

Was soll das bedeuten? ich kenne nur > oder <.
das cout << ist quasi das Console.WriteLine() Äquivalent in C++


Das hat pizza4ever aber schon in die Kommentare geschrieben...
 
Ich würde dir "leichte" Literatur empfehlen:
z.B. c# vom kopf bis fuß oder c# für dummys

such mal bei youtube nach c# tutorials findest du 100000 videos zu dem thema.

die aufgabe ist sehr einfach
mit modulo kontrollierst du ob du bei division durch 2 einen restbetrag bekommst oder nicht.
z.B.
180%2 also 180 / 2 => Restbetrag 0
90%2 also 180 / 2 => Restbetrag 0
45:2 also 45 / 2 = 22,5 ungerade Zahl d.h Restbetrag
usw.

du baust in die for schleife einfach eine if / else - Anweisung ein wenn wert % 2 = 0 dann Write("0") else Write("1")

also so in etwa

for (int i = 180; i > 0; i = i / 2)
{
if (i % 2 == 0)
Console.Write("0");
else
Console.Write("1");
}

erklärung:
if()
beginne schleife mit i = 180
bearbeite die schleife solange i > 0
nach einem schleifendurchlauf wird der wert von i halbiert

modulo:
dividiere den neuen i wert mit 2 und schau ob ein rest vorhanden ist oder nicht
wenn rest = 0 gebe 0 aus sonst 1

PS:
anstelle i einen festen wert zuzuweisen schreibst du die eingelesene variable rein
 
Zuletzt bearbeitet:
Statt

"if (i % 2 == 0)
Console.Write("0");
else
Console.Write("1");"

einfach nur

Console.Write(i%2);

Ist eleganter und schneller
 
Du hast auch gut angefangen nur ändert sich bei dir der Wert der Zahl niemals, du musst praktisch nach jeder berechnung den WErt der Zahl halbieren. Eine while-Schleife braucht eine Abbruchbedingung sonst läuft sie ewig (in diesem Fall soll die Schleife so lange wiederholt werden bis der WErt der Zahl <= 0 ist)

do
{

intErgebnis = intZahl%2;

Console.WriteLine("{0}", intErgebnis);

// Halbieren der Zahl
intZahl = intZahl / 2;

}while(intZahl > 0)
 
kurze "offtopic" frage: wie stellt man in einem binärsystem eigentlich kommazahlen dar? :S
 
Sorry, aber sowas kann man ruckzock googlen..

Du multiplizierst dein Teil nach dem Komma mit *2 und schneidest den Teil vor dem Komma dann ab (grob gesagt)
 
Ersteinmal danke für die Links, Antworten und Hilfestellungen zu meinem Thema.
Ist mir schon klarer was das ganze angeht.

Grade hatte ich ein wenig Zeit zwischen dem Lernen. Um ein paar For-Schleifen zu machen:



Jede Zahl +4 ausgeben lassen also wenn man eine 20 Eintippt dann: 0 4 8 12 16


Console.Write("\nEingabe einer Zahl bis\t");
intZahl = Convert.ToInt32(Console.ReadLine());

for (int i = 0; i < intZahl ; i+=4)
{
Console.WriteLine(i);
}


Jede Zahl bis zur eingegebenen Ausgeben lassen.
Console.Write("\nEingabe einer Zahl bis\t");
intZahl = Convert.ToInt32(Console.ReadLine());

for (int i = 0; i < intZahl ; i++)
{
Console.WriteLine(i);
}


Das sind die einfachen For-Schleifen? Die einfach nur ganz, ich sagen mal, "Stumpf" zahlen ausgibt, bis zu der Zahl die ich eingetippt habe.

Was mich noch Interessiert ist, wenn ich bei der 2 Schleife 1000 eingebe, dann kommen nur die Zahlen von 701-1000. Wieso ist das so? Ist die Console zu klein? Beim DOS Fenster geht das Fenster ja auch bis in das unendliche. :D

So nun muss ich aber weiter für Technische Informatik lernen, morgen Klausur. :freak:

greeetz
Xsp
 
Zuletzt bearbeitet:
Die Windows CMD hat auch nur eine endliche Scrollfunktion

Poste auch bitte nicht immer den ganzen Code, sondern nur die wichtigsten Zeilen oder ein Minimalbeispiel, solwas erhöht nich gerade die Lust deinen Quelltext durchzulesen
 
Achso ok, werde ich machen.
 
Zurück
Oben