Zdravím zkouším si naprogramovat program na sčítání čísel v binární soustavě. Jenže nevím jak ošetřit podmínku, aby když uživatel zadá číslo, kde se budou obsahovat jiná čísla než 0 nebo 1... Například, aby když uživatel zadá číslo 00120.. Mu to napsalo Chyba, nebo tak něco.. Díky za radu.
Fórum › C / C++
Soucet cisel v binarni soustave - podminky
#1 pazdy
To snad nebude takový problém, projdi si to co uživatel zadal znak po znaku a kontroluj, jestli tam má jen povolené znaky "0" a "1". Takže tu "podmínku" "ošetři" cyklem, který může skončit i dřív, když narazíš na nepovolený znak...
Ještě bych měl dotaz.. Potřeboval bych, aby to ten cout napsalo na jeden řádek a ne pod sebe.. Nemůžu tu chybu najít.. Poradíte prosím vás?
#include <iostream>
using namespace std;
int main()
{
long int a;
long int b;
int i = 0, zbytek = 0, sum[20];
cout<<"Zadejte dve binarni cisla: "<< endl;
cin>>a;
cin>>b;
if ( !cin.good() )
{
cout<<"Nespravny vstup."<<endl;
return 0;
}
while ((a != 0) || (b != 0))
{
sum[i++] = ((a % 10) + (b % 10) + zbytek) % 2;
zbytek = ((a % 10) + (b % 10) + zbytek) / 2;
a = a/10;
b = b/10;
}
if (zbytek != 0) sum[i++] = zbytek;
--i;
while (i >= 0)
{
cout<<"Soucet: "<<sum[i--]<<endl;
}
return 0;
}
Tak neviem či mám pravdu, ale mne sa zdá, že by bolo oveľa ľahšie (a neviem nakoľko lepšie) čítať čísla ako string nie int
#11 pazdy
Pokud načítáš číslo jako int, tak nejlepší na ověření vstupu je rozklad na jednotlivé číslice a ty ověřovat...tj. kombinace dělení 10 a zbytek po dělení 10, něco jako
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
while(a)
{
if(a%10!=0 && a%10!=1)
{
cout<<"Spatny vstup";
exit(1);
}
a/=10;
}
cout<<"OK";
return 0;
}
Zde je ten kod
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
long int a, b;
int i = 0, zbytek = 0, sum[20];
cout <<"Zadejte dve binarni cisla: "<<endl;
cin >> a;
cin >> b;
if ( !cin.good() )
{
cout<<"Nespravny vstup."<<endl;
return 0;
}
while ((a != 0) || (b != 0))
{
sum[i++] = ((a % 10) + (b % 10) + zbytek) % 2;
zbytek = ((a % 10) + (b % 10) + zbytek) / 2;
a = a/10;
b = b/10;
}
if (zbytek != 0) sum[i++] = zbytek;
--i;
cout<<"Soucet: ";
while (i >= 0)
{
cout<<sum[i--];
}
return 0;
}
#13 Petr
Jsi tam tu kontrolu neměl, zkus to tak jak jsem doplnil, mělo by to fungovat
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
long int a, b;
int i = 0, zbytek = 0, sum[20];
cout <<"Zadejte dve binarni cisla: "<<endl;
cin >> a;
cin >> b;
if ( !cin.good() )
{
cout<<"Nespravny vstup."<<endl;
return 0;
}
while ((a != 0) || (b != 0))
{
if((a%10!=0 && a%10!=1) || (b%10!=0 && b%10!=1)) //kontrola
{
cout<<"Spatny vstup";
exit(1);
}
sum[i++] = ((a % 10) + (b % 10) + zbytek) % 2;
zbytek = ((a % 10) + (b % 10) + zbytek) / 2;
a = a/10;
b = b/10;
}
if (zbytek != 0) sum[i++] = zbytek;
--i;
cout<<"Soucet: ";
while (i >= 0)
{
cout<<sum[i--];
}
return 0;
}
#19 DB
I to se dá vyřešit, např. takto
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
long int a, b;
int i = 0, zbytek = 0, sum[20];
cout <<"Zadejte dve binarni cisla: "<<endl;
cin>>a;
if ( !cin.good() ||cin.get()!='\n' )
{
cout<<"Nespravny vstup."<<endl;
return 0;
}
cin>>b;
if ( !cin.good() ||cin.get()!='\n' )
{
cout<<"Nespravny vstup."<<endl;
return 0;
}
while ((a != 0) || (b != 0))
{
if((a%10!=0 && a%10!=1) || (b%10!=0 && b%10!=1)) //kontrola
{
cout<<"Spatny vstup";
exit(1);
}
sum[i++] = ((a % 10) + (b % 10) + zbytek) % 2;
zbytek = ((a % 10) + (b % 10) + zbytek) / 2;
a = a/10;
b = b/10;
}
if (zbytek != 0) sum[i++] = zbytek;
--i;
cout<<"Soucet: ";
while (i >= 0)
{
cout<<sum[i--];
}
return 0;
}
#21 pazdy
Toto
#include <iostream>
using namespace std;
void kontrola(int a)
{
if ( !cin.good() ||cin.get()!='\n' )
{
cout<<"Nespravny vstup."<<endl;
exit(1);
}
while(a)
{
if(a%10!=0 && a%10!=1)
{
cout<<"Nespravny vstup";
exit(1);
}
a/=10;
}
}
int main()
{
long int a, b;
int i = 0, zbytek = 0, sum[20];
cout <<"Zadejte dve binarni cisla: "<<endl;
cin>>a;
kontrola(a);
cin>>b;
kontrola(b);
while ((a != 0) || (b != 0))
{
sum[i++] = ((a % 10) + (b % 10) + zbytek) % 2;
zbytek = ((a % 10) + (b % 10) + zbytek) / 2;
a = a/10;
b = b/10;
}
if (zbytek != 0) sum[i++] = zbytek;
--i;
cout<<"Soucet: ";
while (i >= 0)
{
cout<<sum[i--];
}
return 0;
}
funguje
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Převod z binární soustavy do char v desítkové soustavě — založil oxidián
Výpis kombinací čísel za podmínky... — založil PetrP
Součet binárních čísel — založil Divisor
Součet čísel ze souboru — založil Axik
Součet čísel ze souboru — založil ats
Moderátoři diskuze