Kezdőoldal » Számítástechnika » Programozás » Hogyan írjak meg egy mértékegy...

Hogyan írjak meg egy mértékegység átváltó programot c#-ban?

Figyelt kérdés

Egy konvertáló programot szeretnék csinálni c#-ban pl méterről centiméterre. Az alapötlet hogy megadom textboxban vagy numericupdown-ban egy értéket, 2 combobox segítségével meghatározom hogy mit mire szeretnék átváltani és végül egy labelben kiíratni.

Eddig jutottam ha akár egy példát tudnátok adni nagyon sokat segítene.



2016. jan. 6. 21:47
 1/10 anonim ***** válasza:
Rohadt sok if kell hozzá. Ha egyik mértékegység ez másik az akkor ez történjen. Minden kompatibilis mértékegységre kell egy ilyen, majd a végére az else megy a nem lehetséges kiírás
2016. jan. 6. 21:54
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
2016. jan. 6. 21:56
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:
Esetleg talán kezd el.
2016. jan. 6. 22:33
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

:D "rohadt sok if" aha, ja, máshogy nem is lehet. Sőt, gondold csak el mennyi if lehet egy windowsban? Erről az jut eszembe, mikor c-ben az volt a feladat, hogy írja ki 1-től 10-ig a számokat, erre a gyík ezt írta:


printf("%d\n", 1);

printf("%d\n", 2);

printf("%d\n", 3);

printf("%d\n", 4);

printf("%d\n", 5);

printf("%d\n", 6);

printf("%d\n", 7);

printf("%d\n", 8);

printf("%d\n", 9);

printf("%d\n", 10);


:DD


De nem dumálok bele, csináld csak "rohadt sok if el"...

2016. jan. 6. 22:45
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
Amugy szerintem meterrol centimeterre valtashoz nem kell if, csak szorzas/osztas izles szerint.
2016. jan. 6. 22:47
Hasznos számodra ez a válasz?
 6/10 anonim válasza:

Hello! A váltószámokra kell figyelni: pl ha centiméterről váltasz méterre, ott 1cm = 0,01 m, ha viszont fordítva, akkor 1m = 100cm itt mindkét esetben 100 a váltószám, de nem mindegy, hogy osztod vagy szorzod. Úgy lehetne megoldani, hogy megnézed a 2 mértékegység közötti kapcsolatot(váltószám), és utána megnézed melyikből akarod melyiket váltani pl kapcsolóval (isFirst vagy ilyesmi). A kapcsolatok tárolásához valami adatbázistvagy adattárolást lehetne használni.


Combobox helyett inkább a Listbox-ot ajánlom(Combobox sajátossága hogy oda be lehet írni bármit)

2016. jan. 7. 00:54
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
@4 miért te hogy oldanád meg? Őszintén kiváncsi vagyok hogy mivel tudnád kiváltani az if-eket(nem a switch case-re gonsolom)
2016. jan. 7. 07:43
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:

Milyen ifeket te nagyon agyas?

Nyilván (szinte) minden programban van elágazás, de ebbe pont nem kell rengeteg.

A mértékegységekből osztályt csinálsz, a prefixekhez pedig eltárolod a jelentését, pl milli = 0,001.

Aztán először az átváltandó értéket átváltod az alapegységbe, majd onnan a kívánt mértékegységbe, úgy, hogy szorzol az eltárolt értékekkel kétszer.

Ez működik mindenre és nulla if van benne.

2016. jan. 7. 09:09
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:

C++ -ban is a #8 valaszolo altal irt elven mukodik a chrononal az idoatvaltas, amit ott konnyen atlehet alakitani akarmilyen atvaltasra.


namespace length

{

template<typename _Rep, typename _Period = std::ratio<1, 1>>

using Length = std::chrono::duration<_Rep, _Period>;


template<typename _To, typename _Rep, typename _Period>

constexpr auto length_cast(const Length<_Rep, _Period>& l)

{

return std::chrono::duration_cast<_To>(l);

}


using centimeters = Length<double>;

using meters = Length<double, std::ratio<100>>;

using kilometers = Length<double, std::ratio<100000>>;

}


int main()

{

constexpr auto c = length::centimeters{550};

constexpr auto m = length::meters{4.3};


constexpr auto converted_c_to_m = length::length_cast<length::meters>(c); // = 5.5

constexpr auto converted_m_to_c = length::length_cast<length::centimeters>(m); // = 430.0


constexpr auto x = length::length_cast<length::kilometers>(length::meters{1500}); // = 1.5

}


Lenyegeben az egesz atvaltast ez intezi (VC++ implementacio):


// duration_cast

template<class _To,

class _Rep,

class _Period> inline

_CONST_FUN typename enable_if<_Is_duration<_To>::value,

_To>::type

duration_cast(const duration<_Rep, _Period>& _Dur)

{ // convert duration to another duration

typedef ratio_divide<_Period, typename _To::period> _CF;


typedef typename _To::rep _ToRep;

typedef typename common_type<_ToRep, _Rep, intmax_t>::type _CR;

return (_CF::num == 1 && _CF::den == 1

? _To(static_cast<_ToRep>(_Dur.count()))

: _CF::num != 1 && _CF::den == 1

? _To(static_cast<_ToRep>(

static_cast<_CR>(

_Dur.count()) * static_cast<_CR>(_CF::num)))

: _CF::num == 1 && _CF::den != 1

? _To(static_cast<_ToRep>(

static_cast<_CR>(_Dur.count())

/ static_cast<_CR>(_CF::den)))

: _To(static_cast<_ToRep>(

static_cast<_CR>(_Dur.count()) * static_cast<_CR>(_CF::num)

/ static_cast<_CR>(_CF::den))));

}

2016. jan. 7. 11:10
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

Tessék, itt a cérács:


[link]

2016. jan. 7. 12:10
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!