Program do školy c++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Program do školy c++ – C / C++ – Fórum – Programujte.comProgram do školy c++ – C / C++ – Fórum – Programujte.com

 

26. 11. 2020   #1
-
0
-

Potreboval by som pomoc s programom do školy. Tu je zadanie: N je celé číslo v desiatkovej sústave. Program má urobiť prevod desiatkového čísla do dvojkovej sústavy ako kombináciu núl a jednotiek.

N som si zadal ako 109. Prevod na dvojkový kod mi nedá správny.Skúšal som rôzne kombinácie ale nefunguje to.Budem rád za pomoc.Tu je kod: 


#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
int main(){
int cislo,p1,p2,p3,p4,p5,p6,p7,v1,v2,v3,v4,v5,v6,v7,vv1,vv2,vv3,vv4,vv5,vv6,vv7;
cislo=109;
cout<<"Prevod do dvojkovej sustavy.\n";
cout<<"Mame cislo 109\n";
cout<<"Pri prevode delime cislom 2 a zapisujeme v 1 a 0\n";
p1=cislo/2;
if(p1%2==0){v1=0;}if(p1%2!=0){v1=1;}
p2=p1/2;
if(p2%2==0){v2=0;}if(p2%2!=0){v2=1;}
p3=p2/2;
if(p3%2==0){v3=0;}if(p3%2!=0){v3=1;}
p4=p3/2;
if(p4%2==0){v4=0;}if(p4%2!=0){v4=1;}
p5=p4/2;
if(p5%2==0){v5=0;}if(p5%2!=0){v5=1;}
p6=p5/2;
if(p6%2==0){v6=0;}if(p6%2!=0){v6=1;}
p7=p6/2;
if(p7%2==0){v7=0;}if(p7%2!=0){v7=1;}
cout<<"Prevod cisla 109="<<v1<<v2<<v3<<v4<<v5<<v6<<v7<<endl;
}
 

Nahlásit jako SPAM
IP: 78.98.74.–
Programator
KIIV
~ Moderátor
+43
God of flame
26. 11. 2020   #2
-
+1
-
Zajímavé

Zaprve ses pri nastavovani p1 zbavil jednoho bitu, zadruhe je pak vypisujes v opacnem poradi.

Krom toho existuje i varianta   if (podminka) { pak(); } else { jinak(); } - ale ten zbytek po deleni uz tak vraci 0 nebo 1, takze se da primo narvat do tech vystupnich promennych

Pak se taky da vyuzit pole a cyklus (jen si musis pamatovat, ze tim zbytkem po deleni a delenim ziskavas postupne cislo odzadu)

Nahlásit jako SPAM
IP: 37.48.0.–
Program vždy dělá to co naprogramujete, ne to co chcete...
30. 11. 2020   #3
-
0
-

#2 KIIV
Ďakujem za odpoved. Ako by som mohol získať t prvý bit naspat ?

Nahlásit jako SPAM
IP: 78.98.74.–
Programator
gna
~ Anonymní uživatel
1419 příspěvků
30. 11. 2020   #4
-
0
-

#3 ZeVrajProgramator
p1 je číslo po vydělení dvěma, tím ti ten jeden bit jako uteče. Testuj ten bit ještě před dělením.

bit1 = cislo % 2;
cislo /= 2;

bit2 = cislo % 2;
cislo /= 2;

...
Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Expert
30. 11. 2020   #5
-
0
-

#1 ZeVrajProgramator
máš tam 2 zásadní chyby

1) nejdřív zjistit zbytek a až náskledně dělit - na nastavení bitu není třeba podmínka lze použít přímé přiřazení Vx=Px % 2  zbytek modulo 2 může být jen a pouze 0 nebo 1 a odpovídá to přímo nejnižšímu aktuálnímu bitu

2) ve výsledku máš ty bity v opačném pořadí

Též na číslo po dělení nepotřebuješ novou proměnnou lze použít jednu pracovní

Pokud je známo kolika bitová reprezentace čísla je požadována, lze jít i dopředně přes
dělitel = pow(2, počet bitů), jen je pak potřeba ošetřit rozsah čísla zda není číslo větší než se vejde do dané bitové reprezentace.
 

Nahlásit jako SPAM
IP: 185.112.167.–
Z_code
~ Anonymní uživatel
4 příspěvky
5. 12. 2020   #6
-
0
-

Předpokládám, že ZeVrajProgramat již úlohu vyřešil. Zde je moje řešení

Nahlásit jako SPAM
IP: 85.163.10.–
Z_code
~ Anonymní uživatel
4 příspěvky
5. 12. 2020   #7
-
0
-

Předpokládám, že ZeVrajProgramat již úlohu vyřešil. Zde je moje řešení

#include <iostream>

using namespace std;

/*
N je celé číslo v desiatkovej sústave. Program má urobiť prevod desiatkového čísla do dvojkovej sústavy
ako kombináciu núl a jednotiek.
*/
int size(int n); //velikost pole pro uložení čísla ve dvojkové soustavě

int main()
{
	int n, s;
	cout << "Zadej cislo k prevodu: ";
	cin >> n;
	s = size(n);
	int* pole = new int[s]; //dynamická alokace paměti
	for (int i = 0; n > 0; i++)
	{
		if (n % 2 == 0) //dostanu zbytek po dělení buď 0 nebo 1
			pole[i] = 0;
		else
			pole[i] = 1;
		n = n / 2;
	}
	for (int i = s-1; i >= 0; i--)
		cout << pole[i];
	delete []pole;
	return 0;
}

int size(int n) //velikost potřebného pole
{
	int i = 0;
	while (n > 0)
	{
		n = n / 2;
		i++;
	}
	return i;
}
Nahlásit jako SPAM
IP: 85.163.10.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 17 hostů

Podobná vlákna

Program do školy — založil Pepi

Program do školy — založil Sue

Program do školy... — založil Mokky

Program do školy c++ — založil Adam

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý