Dalo by sa to spraviť aj jednoduchšie? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dalo by sa to spraviť aj jednoduchšie? – C / C++ – Fórum – Programujte.comDalo by sa to spraviť aj jednoduchšie? – C / C++ – Fórum – Programujte.com

 

NosMan770
Duch
20. 8. 2016   #1
-
0
-

Dneska som sa nudil tak som pomocou svojich chabých znalostí c++ spravil tento primitívny program :) A mám otázku dalo by sa to spraviť jednoduchšie? :) Pretože toto mi príde ako mohutný kód na niečo také banálne ako prevod :) Ps... Viem že nepoužívam std:: a že by som sa za to mal smažiť v pekle :) 

#include <iostream>
using namespace std; // prepáčte


int main()
{
    setlocale(LC_ALL, ""); 
    int moznost;
    int cislo; 
    cout << "Stlačte 1 ak chcete prepočítať číslo z 10tkovej do 2kovej sústavy" << endl;
    cout << "Zadajte 2 ak chcte číslo prepočítať z 2kovej do 10tkovej sústavy " << endl;
    cin >> moznost;
    switch (moznost)
    {
    case 1:
        cout << "Zadajte číslo ktoré chcete prepočítať do 2kovej súsravy" << endl;
        cin >> cislo;
        if (cislo > 255)
        { 
            cout << "Zadali ste nesprávne číslo" << endl;
        }
        else
        {
            if (cislo < 128)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 128; cout << "1 ";
            }
            if (cislo < 64)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 64; cout << "1 ";
            }
            if (cislo < 32)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 32; cout << "1 ";
            }
            if (cislo < 16)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 16; cout << "1 ";
            }
            if (cislo < 8)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 8; cout << "1 ";
            }
            if (cislo < 4)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 4; cout << "1 ";
            }
            if (cislo < 2)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 2; cout << "1 ";
            }
            if (cislo < 1)
            {
                cout << "0 ";
            }
            else
            {
                cislo = cislo - 1; cout << "1 ";
            }
        }
        break;
    case 2:
        int a, b, c, d, e, f, g, h, vysledok = 0;
        cout << "Zadajte číslo ktoré chcete prepočítať z 2tkovej sústavy do 10tkovej" << endl;
        cin >> a >> b >> c >> d >> e >> f >> g >> h;
        if (a == 1)
        {
            vysledok = vysledok + 128;
        }
        else if(a == 0)
        {
            vysledok = vysledok + 0;
        }
        if (b == 1)
        {
            vysledok = vysledok + 64;
        }
        else if(b == 0)
        {
            vysledok = vysledok + 0;
        }
        if (c == 1)
        {
            vysledok = vysledok + 32;
        }
        else if(c == 0)
        {
            vysledok = vysledok + 0;
        }
        if (d == 1)
        {
            vysledok = vysledok + 16;
        }
        else if(d == 0)
        {
            vysledok = vysledok + 0;
        }
        if (e == 1)
        {
            vysledok = vysledok + 8;
        }
        else if (e==0)
        {
            vysledok = vysledok + 0;
        }
        if (f == 1)
        {
            vysledok = vysledok + 4;
        }
        else if(f == 0)
        {
            vysledok = vysledok + 0;
        }
        if (g == 1)
        {
            vysledok = vysledok + 2;
        }
        else if(g == 0)
        {
            vysledok = vysledok + 0;
        }
        if (h == 1)
        {
            vysledok = vysledok + 1;
        }
        else if (h == 0)
        {
            vysledok = vysledok + 0;
        }
        cout << a << b << c << d << e << f << g << h << " = " << vysledok << endl;
    }
    return 0;
}

Nahlásit jako SPAM
IP: 78.98.148.–
Kit+15
Guru
20. 8. 2016   #2
-
0
-

#1 NosMan77
Zkus místo těch nudlí použít cykly.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
20. 8. 2016   #3
-
0
-

Trosicku slozitejsi varianta zjednoduseni:

#include <iostream>
#include <string>
#include <numeric>

unsigned int accumulate_fn(unsigned int sum, char digit) {
    return (sum<<1) + digit-'0'; // bez hlidani, jestli to je opravdu 0/1!!!!
}

int main() {
    unsigned int cislo;
    std::cin >> cislo;
    for (unsigned int maska = 0x80000000U; maska>0; maska >>= 1) {
        if (maska <= cislo)
        {
            std::cout << (maska&cislo ? '1' : '0');
        }
    }
    std::cout << "\n";


    std::string binarne;
    std::cin >> binarne;
    unsigned int vysledek = std::accumulate(binarne.begin(), binarne.end(), 0U, &accumulate_fn);
    std::cout << vysledek << "\n";

}
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub+1
Stálý člen
20. 8. 2016   #4
-
0
-

Nebo třeba takto:

template<typename T>
std::string to_bin(T value)
{
    return std::bitset<sizeof(value) * CHAR_BIT>(value).to_string();
}

unsigned long bin_to_ulong(const std::string& s)
{
    return std::bitset<sizeof(unsigned long) * CHAR_BIT>(s).to_ulong();
}
Nahlásit jako SPAM
IP: 212.96.189.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý