NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Stanley
Člen
Avatar
Stanley:21.10.2016 19:43

Dobrý den, lze v tomto programu:

#include <iostream>
#include <math.h>
using namespace std;
int bc;
int bin_des(int bc) {

    int des=0, m=0, zbyt_del;
    while (bc!=0)
    {
        zbyt_del= bc%10;
        bc=bc/10;
        des = des + zbyt_del*pow(2,m);
        ++m;
    }
    return des;
}
int main()
{
    cout << "Zadej cislo ve dvojkove soustave:" << endl;
    cin >> bc;
    cout << "Desitkove cislo je: " << bin_des(bc) << endl;
    return 0;
}

ošetřit aby bylo možné pouze zadávat 1 a 0? Nebo se na to vykašlat a ukládat hodnotu

int bc;

do stringu? :)
Programování je takový můj nový koníček, takže sem na úrovni zelenáče.
Za každou radu nebo připomínku budu rád.

 
Odpovědět
21.10.2016 19:43
Avatar
Jakub Šilhavý:22.10.2016 18:50

Já bych si zadávané číslo uložil jako stringu, ten bych prošel a otestoval jestli je i-tý znak 0 nebo 1, pokud NE, opět bych zadával hodnotu. :)

#include <iostream>
#include <math.h>
#include <string>

int main() {
        int wrong = 0;
        int dec = 0;
        std::string bc;
        do {
                wrong = 0;
                std::cout << "Zadej cislo ve dvojkove soustave: ";
                getline(std::cin, bc);
                for (int i = 0; i < bc.size(); i++)
                        if (bc[i] != '0' && bc[i] != '1')
                                wrong = 1;
        } while (wrong);
        for (int i = bc.size() - 1; i >= 0; i--)
                dec += ((int)bc[i] - 48) * pow(2, bc.size() - i - 1);
        std::cout << "Desitkove cislo je: " << dec << std::endl;
        return 0;
}

Určitě to jde udělat více způsoby, tohle mě napadlo jako první.

Nahoru Odpovědět
22.10.2016 18:50
Život je pes, a proto žít je psina.
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Stanley
ostrozan:22.10.2016 20:46

nebo - trochu jsem to učesal

// ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

bool isBinary(string str);
int toDec(string str);



int main()
{
        string str;

        while (1)
        {
        cout <<" zadej binarni cislo\n";
                getline(cin, str);
                if (isBinary(str))
                {
                        cout << "Desitkove cislo je: " << toDec(str) << endl;
                }

                else cout << "chyba\n";

        }

    return 0;
}

bool isBinary(string str)
{
                for each (char ch in str)
                {
                        if (ch != '0' && ch != '1') return false;
                }
                return true;
}

int toDec(string str)
{
        int cislo = 0;
        for each (char ch in str)
        {
                if (ch == '1')cislo |= 0x1;
                cislo<<=1;
        }
        return cislo>>1;
}
 
Nahoru Odpovědět
22.10.2016 20:46
Avatar
Stanley
Člen
Avatar
Odpovídá na Jakub Šilhavý
Stanley:23.10.2016 16:02

Díky za pomoc, můžeš mi akorát vysvětlit proč se v tom druhém FOR odečítá 48??

dec += ((int)bc[i] - 48)
 
Nahoru Odpovědět
23.10.2016 16:02
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:23.10.2016 17:30

dekadicky 48 je v hexa 0x30, což je hodnota ascii znaku "0"

"1" je tedy 0x31 (49 dec)
což ve výsledku znamená, že k proměnné dec přičítá 0,nebo 1

takže klidně mohl napsat

dec += ((int)bc[i] - '0');

je to nejjednodušší převod ascii znakku číslice na hodnotu

Editováno 23.10.2016 17:31
 
Nahoru Odpovědět
23.10.2016 17:30
Avatar
Stanley
Člen
Avatar
Stanley:23.10.2016 21:56

Aha... to mi vůbec nedošlo... :) Tak ještě jednou děkuji za pomoc. :)

 
Nahoru Odpovědět
23.10.2016 21:56
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 6 zpráv z 6.