Algoritmus
Moderátori: psichac, Moderátori
-
- Okoloidúci
- Príspevky: 19
- Dátum registrácie: 23 Máj 2010, 00:00
- Vek: 30
- Kontaktovať používateľa:
Algoritmus
Zdravím,
chcel by som vás poprosiť o návrh algoritmu: Návrh prevodu císla z dvojkovej do osmickovej sústavy. Chcel by som to urobiť priamo čiže, napríklad zadám ľubovoľné číslo na 16 bitoch napr. (0101010101111111) a toto číslo prevediem hneď do osmičkovej sústavy a to tak že budem deliť 1000 preto aby som dostal zvyšok troj miestne číslo v mojom prípade to bude 0101010101111111 : 1000 = 0101010101111 a 111 je zvysok to je vlastne cislo 4+2+1 = 7 čiže posledná cifra v osmičkovej sústave bude 7, pokračujem takto ďalej a dostanem ďalšiu trojicu čísel 111 = 7, 101 = 5, 010 = 2, 101 = 5 takže čísla napíšem od zadu a dostanem číslo 52577 to je číslo v 8sustave.
Riešim nato algoritmus na začiatku číslo porovnám či nieje 0 ak nie je tak číslo ďalej putuje a vydelím ho 1000 ďalej mám napísané aké zvyšky môžu nastať a potom cez cyklus for mám napísané že i=0,15 i++ potom nech to načíta do poľa[pole i] potom nech číslo ktoré ostalo po delení 1000 ide naspäť do cyklu kde sa porovnáva či sa nerovná nule a zase sa to celé opakuje. A mám problém že mi to načítava do poľa ale od zadu a ja to potrebujem napísať z predu čiže tam mám použiť niečo také i=15,0 i-- ??
Vedel by mi niekto pomôcť ako mám urobiť ten algoritmus??
Ďakujem
chcel by som vás poprosiť o návrh algoritmu: Návrh prevodu císla z dvojkovej do osmickovej sústavy. Chcel by som to urobiť priamo čiže, napríklad zadám ľubovoľné číslo na 16 bitoch napr. (0101010101111111) a toto číslo prevediem hneď do osmičkovej sústavy a to tak že budem deliť 1000 preto aby som dostal zvyšok troj miestne číslo v mojom prípade to bude 0101010101111111 : 1000 = 0101010101111 a 111 je zvysok to je vlastne cislo 4+2+1 = 7 čiže posledná cifra v osmičkovej sústave bude 7, pokračujem takto ďalej a dostanem ďalšiu trojicu čísel 111 = 7, 101 = 5, 010 = 2, 101 = 5 takže čísla napíšem od zadu a dostanem číslo 52577 to je číslo v 8sustave.
Riešim nato algoritmus na začiatku číslo porovnám či nieje 0 ak nie je tak číslo ďalej putuje a vydelím ho 1000 ďalej mám napísané aké zvyšky môžu nastať a potom cez cyklus for mám napísané že i=0,15 i++ potom nech to načíta do poľa[pole i] potom nech číslo ktoré ostalo po delení 1000 ide naspäť do cyklu kde sa porovnáva či sa nerovná nule a zase sa to celé opakuje. A mám problém že mi to načítava do poľa ale od zadu a ja to potrebujem napísať z predu čiže tam mám použiť niečo také i=15,0 i-- ??
Vedel by mi niekto pomôcť ako mám urobiť ten algoritmus??
Ďakujem
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Algoritmus
Načo delenie. Ideš od konca vezmeš 3 znaky prevedieš na číslicu, ďalšie 3 znaky zase prevedieš a tak dokola pokiaľ si neprešiel všetko.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Algoritmus
Tri binárne číslice tvoria jednu osmičkovú číslicu, postupuješ zprava:
0101010101111111 b = 0_101_010_101_111_111 b = 052577 o.
Edit: aj peterple tak hovorí.
0101010101111111 b = 0_101_010_101_111_111 b = 052577 o.
Edit: aj peterple tak hovorí.
0
Re: Algoritmus
sice som nepochopil preco i ide od 0 po 15 ked beries naraz 3 bity (mozno iterujes +3?), keby si to otocil od 15-0 musel by si osetrit ze na konci nemas 3 bity ale iba 1, a aj hodnoty by boli najskor opacne (011 by bola 110 pod.). Vstup mas tvoreny retazcom alebo intom, je dany na pevnych 16bit?
0
Re: Algoritmus
ako pisu kolegovia bude najjednoduchsie, tu je to celkom pekne popisane : http://mathforum.org/library/drmath/view/62037.html
0
-
- Okoloidúci
- Príspevky: 19
- Dátum registrácie: 23 Máj 2010, 00:00
- Vek: 30
- Kontaktovať používateľa:
Re: Algoritmus
aha čiže mám tam dať krokovanie nie jedna ale 3?? chcel by som to urobiť tak že začne od 0 a skončí na 15 bite, vstup je dvojkove číslo na 16bitoch
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Algoritmus
ja by som šiel od 0 do 15 s krokom 1. Pritom by som si počítal mocninu pomocou rotácie (teda 1, 2, 4) pomocou tejto mocniny by som spočítaval výslednú číslicu podľa bitov čísla. Ak by bola mocnina 4 tak by som uložil osmičkovú cifru (spočítanú hodnotu), vynuloval spočítanú hodnotu a mocninu nastavil zase na 1. Takto to bude univerzálne pre akýkoľvek počet znakov.
Edit: vlastne od 15 do 0 pretože ak to bude pole znakov tak najvyšší bit bude mať index 0 a najnišší bude mať index 15. Samozrejme aj osmičkové cifry budú v opačnom poradí.
Edit: vlastne od 15 do 0 pretože ak to bude pole znakov tak najvyšší bit bude mať index 0 a najnišší bude mať index 15. Samozrejme aj osmičkové cifry budú v opačnom poradí.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Okoloidúci
- Príspevky: 19
- Dátum registrácie: 23 Máj 2010, 00:00
- Vek: 30
- Kontaktovať používateľa:
Re: Algoritmus
princíp ako to vypočítať by som vedel len problém mi robí vývojový diagram dávam prílohu ako ho mám mohli by ste sa nato pozrieť??
Ďakujem
Ďakujem
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Algoritmus
tak teraz som pochopil že čislo čo chceš previesť je short int a nie char [15]. V takom prípade je to ešte jednoduchšie. a to asi takto:
Zase sa budú cifry počítať od konca.
1. cifru vyrátam ako číslo x & 7 (ten divný znak je and)
2. číslo rotujem 3 krát doľava x>>=3 (to je to tvoje delenie ôsmimi)
3. ak čislo nie je nula počítam ďalšiu cifru krokom 1
Zase sa budú cifry počítať od konca.
1. cifru vyrátam ako číslo x & 7 (ten divný znak je and)
2. číslo rotujem 3 krát doľava x>>=3 (to je to tvoje delenie ôsmimi)
3. ak čislo nie je nula počítam ďalšiu cifru krokom 1
0
Naposledy upravil/-a peterple v 20 Nov 2013, 23:41, upravené celkom 1 krát.
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Okoloidúci
- Príspevky: 19
- Dátum registrácie: 23 Máj 2010, 00:00
- Vek: 30
- Kontaktovať používateľa:
Re: Algoritmus
dávam kus lepšiu foto čiže stačí ak prepíšem i++ na krokovanie 3 alebo to ešte není správny diagram??
Ďakujem
Ďakujem
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Algoritmus
napíš to do C. Tomu čo tam máš pokreslené moc nerozumiem. Že tlač a číslica, to má vytlačiť tú číslicu na obrazovku?. Ten cyklus vo vnútri tej slučky tiež neviem čo má robiť. A načítaj do poľa pole i tiež nechápem.
Urob program a ten si vyskúšaj. Ak nebudeš vedieť ako ďalej daj ho sem a spýtaj sa. Keď to bude funkčné tak si to môžeš aj prekresliť do vývojáka ak to nejaký učiteľ nutne potrebuje.
Urob program a ten si vyskúšaj. Ak nebudeš vedieť ako ďalej daj ho sem a spýtaj sa. Keď to bude funkčné tak si to môžeš aj prekresliť do vývojáka ak to nejaký učiteľ nutne potrebuje.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Okoloidúci
- Príspevky: 19
- Dátum registrácie: 23 Máj 2010, 00:00
- Vek: 30
- Kontaktovať používateľa:
Re: Algoritmus
ja tím vývojakom tiež veľmi nechápem, princípu ako dostanem číslo z dvojkovej do osmickovej sustavy chápem len to neviem dostať správne do toho diagramu tak v cecku len zaciname tak v tom to zatial neviem urobit
0
Re: Algoritmus
Tak narychlo...
Pekne mi to natisklo:
Moc jsem netestoval...
Kód: Vybrať všetko
#include <stdio.h>
#include <math.h>
void sub(char s[]) {
int i,d=0;
for(i=1;i<=3;++i) {
if(strlen(s)>0) {
d+=(s[strlen(s)-1]=='1')*pow(2,i-1);
s[strlen(s)-1]='\0';
}
}
if(strlen(s)>0) sub(s);
printf("%3d",d);
return;}
main(){
char s[]="0101010101111111";
printf(" %s\n",s);
sub(s);
return;}
Kód: Vybrať všetko
0101010101111111
0 5 2 5 7 7
0
Samozřejmě, že dědeček nemá kapesní hodinky poháněné elektřinou. Takový nesmysl si může vymyslit jen Saturnin. (Zdenek Jirotka, 1942)
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 3 Odpovedí
- 1609 Zobrazení
-
Posledný príspevok od používateľa miso156