NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.
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.