5 svar
115 visningar
osmin_oz behöver inte mer hjälp
osmin_oz 47
Postad: 23 dec 2020 19:09

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å. :)

Laguna Online 30499
Postad: 23 dec 2020 19:57

Du får sätta Heltal till Heltal/2 sist i loopen. 

osmin_oz 47
Postad: 23 dec 2020 23:50

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.

Laguna Online 30499
Postad: 24 dec 2020 00:06

Om du delar med två ett antal gånger blir talet noll och loopen avslutas. Få se hur koden ser ut nu.

osmin_oz 47
Postad: 24 dec 2020 09:42

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!

osmin_oz 47
Postad: 24 dec 2020 12:30

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();

Svara
Close