Lagra ny värde efter division
Tjena! En uppgift från Programmering 1 lyder följande: Skapa ett program som konverterar ett heltal till binärtal. Användaren ska kunna mata in ett heltal som sedan konverteras till ett binärtal. Exempel på tal, 192.
Steg 1: Dela talet 192 med 2 tills kvoten blir 0:
192/2 = 96, resten är 0
96/2 = 48, resten är 0
48/2 = 24, resten är 0
24/2 = 12, resten är 0
12/2 = 6, resten är 0
6/2 = 3, resten är 0
3/2 = 1, resten är 1
1/2 = 0, resten är 1
Steg 2: Läs från botten till toppen som 11000000.
Än så länge har jag enbart jobbat med Variabler, Iteration, Selektion och Datorstrukturer (ej arrays). Min syntax ser ut på följande sätt,
List<int> BinäraTal = new List<int>();
Console.Write("Ange ett heltal som ska konverteras till binärt: ");
int Heltal = int.Parse(Console.ReadLine());
int NyVärde = Heltal / 2;
int x = 0;
while (Heltal > 0)
{
if (Heltal % 2 == x)
{
Console.WriteLine(Heltal + "/2 = " + NyVärde + ", resten är 0");
BinäraTal.Add(0);
}
else if (Heltal % 2 != x)
{
Console.WriteLine(Heltal + "/2 = " + NyVärde + ", resten är 1");
BinäraTal.Add(1);
}
break;
}
BinäraTal.Reverse();
for (int i = 0; i < BinäraTal.Count; i++)
{
Console.WriteLine(BinäraTal[i]);
}
Mitt enda problem är att jag inte vet hur jag ska lagra divisionens nya värde och iterera den tills kvoten blir noll. Om det finns ett litet problem eller om det är svårt att läsa den tar jag emot den feedbacken också. :)
Du får sätta Heltal till Heltal/2 sist i loopen.
Varje gång jag sätter Heltal = Heltal / 2; i slutet av loopen itereras koden i oändligheter, och sätter jag break; efter "ekvationen" visar bara kompilatorn första svaret men inte de resterande. Laguna, eller någon annan frivillig, måste förklara tydligare.
Om du delar med två ett antal gånger blir talet noll och loopen avslutas. Få se hur koden ser ut nu.
Jag ser nu att jag hade gjort ett slarvfel. Jag hade byt påstående i while-loopen till while (NyVärde > 0) istället för det jag hade skrivit tidigare. Jag tackar ändå för att du hjälpte mig med att man ska skriva Heltal = Heltal / 2; i slutet av loopen. Tack för hjälpen!
Min kod ser ut så här iaf,
List<int> BinäraTal = new List<int>();
Console.Write("Ange ett heltal som ska konverteras till binärt: ");
int Heltal = int.Parse(Console.ReadLine());
int x = 0;
while (Heltal > 0)
{
if (Heltal % 2 == x)
{
Console.WriteLine(Heltal + "/2 = " + Heltal/2 + ", resten är 0");
BinäraTal.Add(0);
}
else if (Heltal % 2 != x)
{
Console.WriteLine(Heltal + "/2 = " + Heltal/2 + ", resten är 1");
BinäraTal.Add(1);
}
Heltal = Heltal / 2;
}
Console.Write("Binärt: ");
BinäraTal.Reverse();
for (int i = 0; i < BinäraTal.Count; i++)
{
Console.Write(BinäraTal[i]);
}
Console.WriteLine();