Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Program pro převod soustav C++

Program, který převede číslo z desítkové soustavy do binární.
Můj návrh:

#include <iostream>
using namespace std;
int main() {
	setlocale(LC_ALL, "");
	double zbytek;
	int zadane_cislo;
	
	cout << "*************************************************************" << endl;
	cout << "Program pro převod mezi soustavami." << endl;
	cout << "*************************************************************" << endl << endl;
	cout << "Zadej číslo:";
	cin >> zadane_cislo;
	cout << endl;

	for (int i = zadane_cislo; i != 0; zbytek)
		zbytek = i % 2;
	if (zbytek == 1)
		cout << "1" << endl;
	else 
		cout << "2" << endl;

	
	system("PAUSE");
	cout << endl;
	return 0;

}

Nefunguje.
Proč?

Předmět Autor Datum
Proč to nefunguje by bylo na delší příspěvek. Ono je to totiž úplně špatně. nový
Wikan 18.11.2015 15:30
Wikan
Jak by jste to tedy realizoval? nový
nechapu 18.11.2015 15:37
nechapu
Jde to napsat asi na ctyri radky. void prevod( unsigned int num ) { if(num>=2) prevod(num/2); cout… nový
MaSo 18.11.2015 15:38
MaSo
C++ nedělám, ale inspiraci najdeš třeba zde. Pokud to je domácí úkol, tak to nedoporučuji opisovat.… nový
MašinkaTomáš 18.11.2015 15:34
MašinkaTomáš
Ještě můžeš být rád, že nefunguje. Kdyby chodil příkaz for, podmínkou i != 0 bys měl zaděláno na nek… nový
hynajs 18.11.2015 15:46
hynajs
Skús prosím popísať svojimi slovami čo robí toto: if (zbytek == 1) cout << "1" << endl; else cout <… nový
pme 18.11.2015 16:17
pme
To je špatně, nemá tam být 2, ale 0. A zbytek je buď 1, nebo 0, tudíž chci, aby ho to vypsalo. Je to… nový
nechapu 18.11.2015 16:25
nechapu
To je špatně, nemá tam být 2, ale 0. Výborne! Ešte sa zamysli nad týmto: "Nebereme ale zbytky z vr… nový
pme 18.11.2015 16:31
pme
Hlavne to vsetci vypisujete naopak, t.j. blbo to mate vsetci :-) nový
MM.. 18.11.2015 16:47
MM..
Za prve chybaju ti zatvorky { } na oznacenie obsahu toho cyklu for. Tym padom tam cyklujes len to je… nový
MM.. 18.11.2015 17:00
MM..
Mám to kratší! :-) 67ps nový
MaSo 18.11.2015 17:10
MaSo
Jo, rekurzia. Ano to je lepsie (mna to nikdy nenapadne aj ked som to uz 5x takto videl tak to furt z… poslední
MM.. 18.11.2015 17:13
MM..

Za prve chybaju ti zatvorky { } na oznacenie obsahu toho cyklu for. Tym padom tam cyklujes len to jedno delenie. A az si tam tie zatvorky doplnis tak zistis ze vypisane cislo je naopak.
Ked to chces urobit bez ukladania cifier, tak si najprv zistis maximalnu mocninu dvoch, a zmenusjes to a odcitavas.

unsigned int i;

for(i=1; i<(UINT_MAX/2); i*=2)
  if(i>=zadane_cislo)
    break;

if(i>zadane_cislo && i!=1) i/=2;  // len na zrusenie zbytocnej nuly na zaciatku za urcitych okolnosti

while(i != 0)
{
  if(zadane_cislo >= i)
  {
    cout << "1";
    zadane_cislo -= i;
  }
  else 
    cout << "0";
  i/=2;
}

//edit: opravil som podmienku
//edit2: este som opravil tu podmienku vo while, snad to uz je ok :-)

Zpět do poradny Odpovědět na původní otázku Nahoru