Diskuze: Převod z dvojkové do desítkové
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Mysím si že C# nezná ++n (vím že to zná C, ale C# nevím).
Každopádně jestli se snažíš inkrementovat n o jedna, tak to má být n++
// A ten algoritmus podle mě nebude fungovat
Ja myslím, že zná. Mělo by to fungovat stejně jako v C.
C# to zná, ale ono to přičte jedničku okamžitě, takže by se ten string začal "lámat" od 2. znaku
Čau,
pokud převádíš čísla z dvojkové do desítkové, tak se ty mocniny
násobí opačně. Poslední číslo se vynásobí 1 (20), další
předposlední 2 (21), předpředposlední 4 (22), ty to
děláš opačně.
no ale já tam mám nulu, takže by tam měla naskočit jednička když je to
++n ne? a přihazuju screen,
co mi to píše, když to spadne.
A jestli C# zná ++x, tak se omlouvám, moje neznalost
Pro získání číselné hodnoty z řetězce musíš použít metodu Parse().
int.Parse("5")
Convert se používá na číselné operace.
V C# k řezězci můžes přistupovat jako k poli znaků, takže
j[i].ToString()
a opdadne ti ten Substring().
Pak už by to mělo fungovat.
Už jsem to tu psal, každopádně, gcx11 to tu už psal, musíš
ten string převrátit. Doporučuji použít ToCharArray(), následně
Array.Reverse
Projeď to cyklem foreach a pokud na daném místě je jednička, tak přičti k
hodnotě nějakou další hodnotu.
Console.WriteLine("Program na převádění čísel z dvojkové do desítkové soustavy");
Console.WriteLine("Napište číslo ve dvojkové soustavě");
string j = Console.ReadLine(); //zadaný řetězec od uživatele př. 1100010
char[] c = j.ToCharArray(); // převedeme na char
Array.Reverse(c); // obrátíme řetězec
int i = 0; // pro zjištění aktuální pozice
double result = 0; // výsledek
foreach(char s in c)
{
if (s == '1') // pokud se na daném místě nacházi jednička
result += Math.Pow(2, i); // tak k výsledku přidáme hodnotu
i++;
}
Console.WriteLine(result);
Console.ReadKey();
1.) vymýšlíš kolo
Convert.ToInt32(j, 2).ToString(); // vrátí výsledek
2.) pokud se chceš striktně držet algoritmického postupu, tak bych to řešil, tak že ten cykl obrátím. Půjdu od počet znaků mínis 1 k 0 a v každém kroku vynásobím číslo na daném indexu s druhou mocninou 2,ta k aby pro posledí číslici bylo 2 na 0.
string zadaneCislo = "1010";
int mezivysledek = 0;
for (int i = zadaneCislo.Length - 1; i >= 0; i--)
{
string s = zadaneCislo[i].ToString();
mezivysledek += int.Parse(s) * ((int)Math.Pow(2, zadaneCislo.Length - 1 - i));
}
Console.WriteLine(mezivysledek);
Console.ReadKey();
3.) pokud ten cykl potřebuješ mít striktně klasický:
for (int i = 0; i < zadaneCislo.Length; i++)
{
int mocnina = (int)Math.Pow(2, zadaneCislo.Length - 1 - i);
int cislice = int.Parse(zadaneCislo[i].ToString());
mezivysledek += mocnina * cislice;
}
Note: místo toho šíleného convertu používej int.Parse a C# zná ++n.
Super, ano měl jsem to obráceně, díky vám kluci moc! Ještě jsem to udělal takto:
Console.WriteLine("Program na převádění čísel z dvojkové do desítkové soustavy");
Console.WriteLine("Napište číslo ve dvojkové soustavě");
string j = Console.ReadLine(); //zadaný řetězec od uživatele př. 1100010
int l = j.Length; //délka znaků př. 7
double výsledek = 0; //pomocná proměnná
int c = 1; //pomocná proměnná
Console.WriteLine("Počet znaků je: {0}", l);
for (int i = 0; i < l; i++) //cyklus by se měl opakovat 7x - když je délka znaků 7
{
int n = l - c++;
int b = Convert.ToInt32(j.Substring(n, 1)); //b by měl být poslední znak v zadaným řetezci př. 110001(0), po proběhnutí cyklu 11000(1)0 atd.
výsledek = b * Math.Pow(2, i) + výsledek; //výsledek = 1. znak * 2 na i (i=0), potom se bude zvětšovat (viz. hlavní cyklus) + výsledek (pomocná proměnna zatím 0)
}
Console.WriteLine("Výsledek je {0}", výsledek); //po proběhnutí cyklu 7x by to mělo vypsat výsledek
Console.ReadKey();
Moje řešení:
using System;
namespace _2_do_10
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Zadej číslo v binarní soustavě:");
string cislo = Console.ReadLine();
double pomocna = 0;
int n = cislo.Length - 1;
for(int i=0; i <= cislo.Length-1; i++){
pomocna += (cislo[i] - '0') * (Math.Pow(2, n));
n--;
}
Console.WriteLine("{0}", pomocna);
}
}
}
Zobrazeno 12 zpráv z 12.