Algoritmus

C,C++,C#

Moderátori: psichac, Moderátori

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Algoritmus

Príspevok od používateľa Branek » 20 Nov 2013, 22:10

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
0

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: Algoritmus

Príspevok od používateľa petersno » 20 Nov 2013, 22:20

nestaci zapisovat odzadu dopredu pole [ 15 - i ] = x ?
0

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Re: Algoritmus

Príspevok od používateľa Branek » 20 Nov 2013, 22:37

neviem s tou poslednou časťou mám problém
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 20 Nov 2013, 22:40

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í.

pin
Power user
Power user
Príspevky: 2370
Dátum registrácie: 09 Máj 2009, 00:00

Re: Algoritmus

Príspevok od používateľa pin » 20 Nov 2013, 22:42

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í. :wink:
0

Používateľov profilový obrázok
boban
Stály člen
Stály člen
Príspevky: 137
Dátum registrácie: 03 Jún 2010, 00:00
Bydlisko: po

Re: Algoritmus

Príspevok od používateľa boban » 20 Nov 2013, 22:44

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

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: Algoritmus

Príspevok od používateľa petersno » 20 Nov 2013, 22:48

ako pisu kolegovia bude najjednoduchsie, tu je to celkom pekne popisane : http://mathforum.org/library/drmath/view/62037.html
0

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Re: Algoritmus

Príspevok od používateľa Branek » 20 Nov 2013, 22:52

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

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 20 Nov 2013, 23:01

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í.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Re: Algoritmus

Príspevok od používateľa Branek » 20 Nov 2013, 23:05

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 Obrázok
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 20 Nov 2013, 23:18

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
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í.

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Re: Algoritmus

Príspevok od používateľa Branek » 20 Nov 2013, 23:37

dávam kus lepšiu foto Obrázok čiže stačí ak prepíšem i++ na krokovanie 3 alebo to ešte není správny diagram??

Ďakujem
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 20 Nov 2013, 23:47

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.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Re: Algoritmus

Príspevok od používateľa Branek » 20 Nov 2013, 23:54

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

Používateľov profilový obrázok
zen
Stály člen
Stály člen
Príspevky: 483
Dátum registrácie: 22 Nov 2013, 14:33
Bydlisko: Cadca

Re: Algoritmus

Príspevok od používateľa zen » 22 Nov 2013, 18:50

Tak narychlo...

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;}
Pekne mi to natisklo:

Kód: Vybrať všetko

  0101010101111111
  0  5  2  5  7  7
Moc jsem netestoval...
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)

Branek
Okoloidúci
Okoloidúci
Príspevky: 19
Dátum registrácie: 23 Máj 2010, 00:00
Vek: 30
Kontaktovať používateľa:

Re: Algoritmus

Príspevok od používateľa Branek » 25 Nov 2013, 21:20

Vďaka za pomoc :D
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok