Avatar
Preedy
Člen
Avatar
Preedy:

Ahoj, chci si udělat program na převod mezi těmahle dvouma soustavama. Převáděcí metodu znám, ale nevím jak ošětřit, aby se mohla zadávat jenom příslušné hodnoty(kód).

har[] hexa = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
           char[] bin= { '0', '1'};

. A ještě nevím jak nastavit, že maximum může být FFFFFFFF nebo 11111111.Díky moc

 
Odpovědět 14.6.2012 16:51
Avatar
matesax
Redaktor
Avatar
matesax:

Koukni se na můj program - převod mezi všemi soustavami:
http://www.itnetwork.cz/index.php?…

 
Nahoru Odpovědět 14.6.2012 16:54
Avatar
Preedy
Člen
Avatar
Preedy:

díky :), nevšiml jsem si :(

 
Nahoru Odpovědět 14.6.2012 16:56
Avatar
Odpovídá na Preedy
David Jančík [sczdavos]:

Můžeš použít fce C#.
Převede číslo z 16kové na dekadickou.

Convert.ToInt32(hexvalue, 16);

A pak jej převedeš na binární:

Convert.ToString(Convert.ToInt32(hexvalue, 16), 2);

Maximum nastav obdobně. Převedeš si číslo na dekadické a zjistíš jeho velikost, poté jen podmínka.

Můžeš se také inspirovat programem od matesaxe: http://www.itnetwork.cz/index.php?…

Nahoru Odpovědět 14.6.2012 16:59
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:

Co by pak z toho měl, kdyby si to neudělal sám? :)

 
Nahoru Odpovědět 14.6.2012 17:00
Avatar
Preedy
Člen
Avatar
Preedy:

Na jiný program koukat nechci, zatím. Ale jak to oštřit, to totiž ta metoda vyhodí vyjímku.

 
Nahoru Odpovědět 14.6.2012 17:15
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Dáš to do try bloku - který pak musí obsahovat buď cath, nebo finally, nebo obojí

 try
{
\\kód podezdřelý z vyvolání vyjímky
}
catch
{
\\ kód který se provede, když kód hoře selže
}
 
Nahoru Odpovědět 14.6.2012 17:21
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Pokud chceš vyvolat hlášku dej do catch Exception:

 catch (Exception e)
MessageBox.Show(e.Message, "Error - Chyba");

Tím vyvoláš hlášku o zprávě,...

 
Nahoru Odpovědět 14.6.2012 17:24
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Pardon:

 catch (Exception e)
{
MessageBox.Show(e.Message, "Error - Chyba");
}
 
Nahoru Odpovědět 14.6.2012 17:25
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

A kdyby jsis chtěl hlášku zkopírovat, tak to dej do stringu - e.ToString() v tomto případě a string pak vlož někam, odkud můžeš kopírovat - TextBox,...

 
Nahoru Odpovědět 14.6.2012 17:28
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

mardon není to e.ToString() ale e.Message - to je string,...

 
Nahoru Odpovědět 14.6.2012 17:30
Avatar
Preedy
Člen
Avatar
Preedy:

jo jo už vím, výjimky vidim poprvý, ale mám to tam. Jenom ale nevím jak do try hodit že nehci mít číslo větší než FFFFFFFF nebo 11111111

 
Nahoru Odpovědět 14.6.2012 17:38
Avatar
Preedy
Člen
Avatar
Preedy:

nějak Cislo10 !>= 4294967295 - tajhle nějak to myslim, ale vim že tehle zápis nefunguje

 
Nahoru Odpovědět 14.6.2012 17:41
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Preedy
David Čápka:

Negace >= obvykle bývá <.

Nahoru Odpovědět 14.6.2012 18:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

No jak máš udělán vstup uživatele? TextBoxem? Musíš vzít prvek pro vstup uživatele a jeho obsah převést do čísla - třeba pokud máš vstup zachycen do textboxu se jménem tb:

int g;
if(int.TryParse(tb.Text, g))
//povedlo se - g obsahuje int z textu
else
//nepovedlo se - nyní musíš ošetřit písmena, která nahrazují číslice,...

no a pak bude podmínka:

if(g < 10000)
 
Nahoru Odpovědět 14.6.2012 18:22
Avatar
Preedy
Člen
Avatar
Preedy:

ano, bude to textbox, ale ted to dělám v konzoli

 
Nahoru Odpovědět 14.6.2012 18:40
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Aha. No tak to snad již umíš - místo vstupu z textboxu tam bude vstup z konzole,...

 
Nahoru Odpovědět 14.6.2012 19:00
Avatar
Preedy
Člen
Avatar
Preedy:

ano, vím, ale mám problém s tou vyjímkou funguje to takhle

int dekaCislo;
           string hexaCislo;
           string binCislo;
           Console.Write("Zadej číslo v hexa soustavě: ");
           hexaCislo = Console.ReadLine();

           try
           {
               binCislo = Convert.ToString(Convert.ToInt32(hexaCislo, 16), 2);
               dekaCislo = Convert.ToInt32(hexaCislo, 16);
               if (!(dekaCislo < 256))
               {
                   Console.WriteLine("chyba");
               }
               else
               {
                   Console.WriteLine(binCislo);
               }
           }
           catch (Exception e)
           {
               Console.WriteLine("Chyba");
           }

a když

Console.WriteLine(binCislo);

vložim až za catch, tak to překladač nepřeloží.

 
Nahoru Odpovědět 14.6.2012 19:06
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

První věc - použij to tryParse

 float vysledek = 0;

if (float.TryParse(Console.ReadLine(), vysledek) && vysledek.Length < 10000)
Console.WriteLine("Výsledek je : " + Convert.ToString(Convert.ToInt32(vysledek, 16), 2));
else
Console.WriteLine("Chyba");
 
Nahoru Odpovědět 14.6.2012 19:30
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Pokud nechceš hlášku o chybě, či cokoliv jiného z Exception, tak ji nemusíš dávat - naopak je to nežádoucí - v takovém případě použij jenom catch,...

 
Nahoru Odpovědět 14.6.2012 19:36
Avatar
matesax
Redaktor
Avatar
matesax:

Nejsem si jistý posloupností kódu, tak dej vědět, jak jsi dopadl,...

 
Nahoru Odpovědět 14.6.2012 19:56
Avatar
Preedy
Člen
Avatar
Preedy:

no, není mi jasný

float = 0;//proč nula?
 
Nahoru Odpovědět 14.6.2012 20:03
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Jen jsem si nebyl jistý, jestli to nebude vadit podmínce - když nechám prázdný konstruktor - ale nemělo by - takže tam dej jenom

float vysledek;

Jinak na tom čísle nezáleží - floatTryParse jej přepisuje. Jedná se o inizćializaci - ne všude můžeš mít prázdný konstruktor - nekdy mu musíš přiřadit hodnotu - ikdyž defaultní nějaká je vždy,...

 
Nahoru Odpovědět 14.6.2012 20:25
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

inicializaci

funguje ti to?

 
Nahoru Odpovědět 14.6.2012 20:26
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Jinak jak jsis všiml, vyvaruj se zbytečným mezi krokům - jinak ti zbytečně kyne kód. :)

 
Nahoru Odpovědět 14.6.2012 20:30
Avatar
Preedy
Člen
Avatar
Preedy:

no, nefunguje, ale nakonec to mám přes try

 
Nahoru Odpovědět 14.6.2012 20:52
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Jak nefunguje? Přes try je to zbytečné,...

 
Nahoru Odpovědět 14.6.2012 20:57
Avatar
Preedy
Člen
Avatar
Preedy:

nevím, ale mám ho tam správně určitě a s tím try, nevím, zatim mě to neklame

 
Nahoru Odpovědět 14.6.2012 21:16
Avatar
matesax
Redaktor
Avatar
Odpovídá na Preedy
matesax:

Jenom říkám, že try blok je na tohle zbytečný,...

 
Nahoru Odpovědět 14.6.2012 21:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 29 zpráv z 29.