Pozicia jednotiek – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pozicia jednotiek – C / C++ – Fórum – Programujte.comPozicia jednotiek – C / C++ – Fórum – Programujte.com

 

bonessko0
Duch
7. 11. 2008   #1
-
0
-

cauko,
mam premennu typu float napr 21.45, potreboval by som nejako zistit alebo vypisat hodnotu na pozicii jednotiek teda 1 (napr pri cisle 35.61, by to bola 5). Ako to spravim? (bez delenia)... a este pls by som potreboval zistit ci je cislo parne alebo neparne (tiez bez delenia), existuje na to nejaka funkcia?
dakujem

Nahlásit jako SPAM
IP: 92.52.11.–
czbero0
Stálý člen
7. 11. 2008   #2
-
0
-

To by mě zajímalo, proč to nechceš dělat dělením, resp. pomocí operátoru modulo. Samozřejmě musíš float explicitně převést na int.

int jednotky = (int)cislo % 10;

bool parne = (int)cislo % 2;
Řekl bych, že se to ani nijak jinak zjistit nedá a pokud na to existuje nějaká funkce, tak dělá to co jsem tady teď napsal.

Nahlásit jako SPAM
IP: 62.240.178.–
http://moddb.com/mods/police-brutality/
o-lox0
Super člen
8. 11. 2008   #3
-
0
-

Ta parnost se da snad zjistit prece jenom bez deleni (operatorem binarniho soucinu).

float x=122.67;

int cislo=(int)x;
bool parne = !(cislo & 1);
Ta jednotka asi nepujde bez deleni. Resp. me napada cachrovani s aritmetickymi posuvy a odcitanim, ale zkouset to nebudu :)

Nahlásit jako SPAM
IP: 85.71.152.–
MaS0
Návštěvník
8. 11. 2008   #4
-
0
-

na ty jednotky (pokud to má být bez dělení) by se to dalo převést tak, že by se to číslo převedlo na řetězec (popřípadě by se rovnou načítalo do řetězce) a pomocí operátoru [ ] by se našel znak před tečkou.....

Nahlásit jako SPAM
IP: 195.146.114.–
o-lox0
Super člen
8. 11. 2008   #5
-
0
-

To MaS : velmi fikané, smekám :)

Nahlásit jako SPAM
IP: 85.71.152.–
KIIV
~ Moderátor
+43
God of flame
8. 11. 2008   #6
-
0
-

akorat prevod na text se stejne vetsinou musi tak jak tak udelat delenim a zbytkem... ikdyz je pravda ze po desetinne carce se uz nasobi :)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
czbero0
Stálý člen
8. 11. 2008   #7
-
0
-

To MaS : A jak se převádí číslo na řetězec? Přece dělením. V C je sice funkce sprintf() a snprintf(), ale myslím, že se v nich také dělí. A přímé načítání do řetězce neodpovídá zadání.

Nahlásit jako SPAM
IP: 62.240.178.–
http://moddb.com/mods/police-brutality/
KIIV
~ Moderátor
+43
God of flame
8. 11. 2008   #8
-
0
-

To czbero : no muze odcitat zaklad dokud nebude zbytek vetsi nez ten zaklad.. zaroven si pocitat kolikrat odecetl... formalne je to odcitani.. co na tom ze to vlastne vydeli :smile5:

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
MaS0
Návštěvník
8. 11. 2008   #9
-
0
-

To czbero : já bych řek, že bonesskoj je jedno jestli to ta funkce dělí, nebo co s tim dělá, ale řekl bych, že mu jde o to, aby to nemusel dělit on.......

nicméně jsem o tom přemýšlel, a vymyslel jsem toto....

#include <iostream>

#include <cmath>

using namespace std;
int jednotka(int);

int main()
{
float a;
cout << "Zadejte cislo: "; cin >> a;
int vysledek=(int) a;
int vys =0;
while (vysledek > 9) {
vysledek=jednotka(vysledek);
if (vys!=vysledek) vys=vysledek;
else break;
}
if (vysledek>9 and vysledek < 16) vysledek-=10;
cout << "Cislo obsahuje " << vysledek << " jednotek.";
cin.get();
cin.get();
return 0;
}

int jednotka(int cislo) {
int velikost=sizeof(cislo)*8-1, vysledek, a;
int pole[4]={2, 4, 6, 8};
vysledek=cislo & 1;
for (int i=1; i<=velikost; i++)
if (cislo & (unsigned int)pow(2.0, (double)i)) {
if ((i & 3)==3) a=3;
else if ((i & 2)==2) a=1;
else if ((i & 1)==1) a=0;
else a=2;
vysledek+=pole[a];
};
return vysledek;
}

nevím o tom, že by tam byla použita nějaká funkce, co by dělila.......zatim to se všema číslama co jsem zkoušel fungovalo, ale možná se vyskytne pár čísel, který se budou muset ošetřit v if (jako 10-15).....

Nahlásit jako SPAM
IP: 195.146.114.–
czbero0
Stálý člen
9. 11. 2008   #10
-
0
-

#include <iostream> 


int main() //Další možnost
{
float cislo = 0;
cout << "Zadej cislo:"
cin >> cislo;
cislo = (int)cislo; //Odstranění desetinných míst.
cislo *= 0.1f; //Posunutí čísel o jedno místo doprava,
// tím posuneme jednotky na 1. desetinné místo
cislo -= (int)cislo; //Odečte čísla před desetinnou čárkou
cislo *= 10; //Posuneme jednotky zpět
cout << cislo; //A máme výsledek.
return 0; //Jak jednoduché
}


Včera mi to moc nemyslelo... kocovina...

Nahlásit jako SPAM
IP: 62.240.178.–
http://moddb.com/mods/police-brutality/
o-lox0
Super člen
9. 11. 2008   #11
-
0
-

To KIIV : Necykli to tu pořád dokola :D , už jsem to dávno psal (jako 3. příspěvek) ....

Nahlásit jako SPAM
IP: 85.71.152.–
MaS0
Návštěvník
9. 11. 2008   #12
-
0
-

To czbero : nadělá počítač při násobení 0.1 to samé jako při dělení 10........já vím, dotazu to vyhovuje, ale není to jen kosmetická změna ???

Nahlásit jako SPAM
IP: 195.146.114.–
czbero0
Stálý člen
9. 11. 2008   #13
-
0
-

To MaS : No v neoptimalizovaném kódu je použita instrukce fmul, takže se tam opravdu násobí. V optimalizovaném je sse instrukce, takže nevím co se s tím číslem dělá.

Nahlásit jako SPAM
IP: 62.240.178.–
http://moddb.com/mods/police-brutality/
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, 40 hostů

Podobná vlákna

C# pozícia v richtextboxe — založil supervisor

Pozícia obrázka — založil Majak

Moderátoři diskuze

 

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