IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
RM
Neregistrovaný
Avatar
RM:5.11.2013 11:39

Zdravím,
psal jsem teď nedávno program pro sčítání bin. čísel. Př:

Vstup:
10101 101001
Soucet: 111110

Potřeboval bych poradit, jak nejlépe ověřit vstup, aby program vypisoval, např:

Vstup:
10020 1001a0
Nespravny vstup.

Pokud je písmeno na začátku, tak to funguje v pořádku, ale pokud je někde u konce tak to prostě sečte a neřeší podmínku. Díky za radu, můj kód:

#include <cstdlib>
#include <iostream>
#include <stdio.h>

using namespace std;

bool podminka_sprav­nosti(int long number)
{
return ((number % 10 !=0) && (number % 10) !=1);
}

int main() {
long int decimal1, decimal2;
int i=0, zbytek=0, sum[20];

cout << "Zadejte dve binarni cisla:" << endl;
cin >> decimal1 >> decimal2;

if(podminka_sprav­nosti(decimal1) || podminka_sprav­nosti(decimal2)) {
cout << "Nespravny vstup." << endl;
return 0;
}

if(cin.fail()) {
cout << "Nespravny vstup." << endl;
return 0;
}

while ((decimal1 != 0) || (decimal2 != 0)) {
sum[i++] = ((decimal1 % 10) + (decimal2 % 10) + zbytek) % 2;
zbytek = ((decimal1 % 10) + (decimal2 % 10) + zbytek) / 2;
decimal1 = decimal1/10;
decimal2 = decimal2/10;
}

if (zbytek != 0) sum[i++] = zbytek;
--i;

cout << "Soucet: ";
while (i>=0) {
cout << sum[i--];
}
cout << endl;

return 0;
}

 
Odpovědět
5.11.2013 11:39
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:5.11.2013 20:41

V tom nenaformátovaném kódu se nevyznám, ale proč prostě neprojedeš for cyklem pole a nekontroluješ to znak po znaku?

Nahoru Odpovědět
5.11.2013 20:41
New kid back on the block with a R.I.P
Avatar
Martin Dráb
Tvůrce
Avatar
Martin Dráb:6.11.2013 22:02

Asi by bylo lepší ta čísla načítat jako řetězce, takhle si příliš nezasčítáš (nevezme to velká čísla). Ta podmínka mi přijde, že kontroluje jen předposlední cifru.

Nahoru Odpovědět
6.11.2013 22:02
2 + 2 = 5 for extremely large values of 2
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 3 zpráv z 3.