IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomulino
Neregistrovaný
Avatar
Tomulino:25.11.2012 13:59

Ludia potrebujem poradiť .... mám program ktorý mi má z poľa vypísať čísla pod eseba.... sú typu float a majú byť zarované pod seba podľa desatinnej bodky .... teda aj číslo 1.1 aj 111.111 majú mať pod sebou desatinnú bodku a pred číslo nemožem dať 0 ale ma tab byť normálna medzera .... hepl me pls :D

 
Odpovědět
25.11.2012 13:59
Avatar
matesax
Tvůrce
Avatar
Odpovídá na
matesax:25.11.2012 14:53

Regex, nebo odečti celočíselnou hodnotu - tak jako tak se dozvíš desetinnou část a tu pak použiješ v cyklu...

 
Nahoru Odpovědět
25.11.2012 14:53
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:26.11.2012 13:49

Můžeš si nastudovat formátování floatu do stringu pomocí metody ToString() - http://msdn.microsoft.com/…=vs.80).aspx nebo s čísly jednoduše pracovat jako s řetězcem, když je vypisuješ. Stačí si zjistit délku celé části a potom před něj vložíš mezery, kolik jich tam chybí.

Editováno 26.11.2012 13:49
Nahoru Odpovědět
26.11.2012 13:49
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:26.11.2012 15:19

Pokud nedělá v .NETu tak mu funkce ToString() nebude moc platná :D

 
Nahoru Odpovědět
26.11.2012 15:19
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na
Lukáš Hruda:26.11.2012 16:12

Nenapsal si tu jestli to potřebuješ v C nebo v C++, tak sem si to vyzkoušel v C a de to snadno přes konverzi na int. Stačí to číslo převést na int a pořád dělit deseti dokud je větší než 0, tim zjistíš kolik cifer má celočíselná část. Největší hodnotu uložíš do nějaký proměnný (třeba max). Pak jenom před každý číslo vypíšeš max - cifry mezer (cifry je počet cifer celočíselný části danýho čísla). Samozřejmě pokud je číslo záporný tak musíš tu int hodnotu vynásobit -1 a počet cifer zvětšit o 1.

 
Nahoru Odpovědět
26.11.2012 16:12
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:26.11.2012 16:39

Jaj, přehlédl jsem jazyk, moje chyba :)

Nahoru Odpovědět
26.11.2012 16:39
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
 
Nahoru Odpovědět
26.11.2012 16:41
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
matesax:26.11.2012 17:08

To je jednodušší:

"Regex, nebo odečti celočíselnou hodnotu - tak jako tak se dozvíš desetinnou část a tu pak použiješ v cyklu..."

Regex ti dá počet míst, a odečtení celočíselné části přesnou hodnotu desetinné části...

 
Nahoru Odpovědět
26.11.2012 17:08
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na matesax
Lukáš Hruda:26.11.2012 17:22

Desetinnou část přece vůbec nepotřebuješ. Potřebuješ jenom celočíselnou část, abys věděl o kolik mezer to máš posunout od kraje. Když máš třeba 107.27, 20.5 a 20.0005 tak to bude vypadat:

107.27
_20.5
_20.0005

Z desetinnou částí vůbec nehejbáš. K 20.5 i 20.0005 přidáváš pokaždý jednu mezeru, aby tečky byly pod sebou. Tedy desetinnou část mají odlišnou, ale posouváš je stejně.

Editováno 26.11.2012 17:23
 
Nahoru Odpovědět
26.11.2012 17:22
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
matesax:26.11.2012 18:18

To je snad jedno... Buď vezmu celočíselnou část - odečtu od délky celého čísla délku stringu z té celočíselné části, nebo Regex - délka stringu... A přesnou hodnotu budeš chtít v případě, že ti bude záležet na přechodu z 99_ ...

Editováno 26.11.2012 18:19
 
Nahoru Odpovědět
26.11.2012 18:18
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na matesax
Lukáš Hruda:26.11.2012 18:22

To to ale nejdřív musíš převést na ten string. Tak jak sem to myslel já to můžeš dělat rovnou z těch čísel.

 
Nahoru Odpovědět
26.11.2012 18:22
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
matesax:26.11.2012 18:28

Jak chceš jinak změřit délku čísla?

 
Nahoru Odpovědět
26.11.2012 18:28
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na matesax
Lukáš Hruda:26.11.2012 18:32

Dělit deseti dokud je větší než 0 a při každym vydělení zvětšit délku o 1. Pro int to funguje a jelikož tady nepotřebuješ znát délku desetinný části tak to na int můžeš převést.

void print(float* arr, int n)
{
  int i,j;
  int max_count = 0;
  int* counts = malloc(sizeof(int) * n);
  for(i=0;i<n;i++)
  {
    int count = 0;
    int value = (int)arr[i];
    if(value <= 0)
    {
      value *= -1;
      count = 1;
    }
    while(value > 0)
    {
      count++;
      value /= 10;
    }
    counts[i] = count;
    if(count > max_count)
      max_count = count;
  }

  for(i=0;i<n;i++)
  {
    for(j=0;j < max_count - counts[i];j++)
      printf(" ");
    printf("%f\n",arr[i]);
  }

  free((void*)counts);
}
 
Nahoru Odpovědět
26.11.2012 18:32
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
matesax:26.11.2012 18:39

Takže není jednodušší string.Length? (Nebo jak je to v C/C++)

 
Nahoru Odpovědět
26.11.2012 18:39
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na matesax
Lukáš Hruda:26.11.2012 18:49

Je ale to nejdřív musíš na ten string převést. V C++ má třída string určitě nějakou členskou funkci která převádí float/double na řetězec. Já osobně ale třídu string nerad používam protože neni kompatibilní z Céčkovýma knihovnama, mam na práci s řetězcema svojí vlastní třídu. Navíc v C asi žádná standardní funkce pro převod float na char* neni a on tu nespecifikoval jestli to má bejt v C nebo C++. Než si psát vlastní funkci pro převod na řetězec to máš jednodušší udělat takhle. Navíc podle mě pokud je někdo začátečník, tak neni dobrý programovat stylem že si na všechno najdeš funkci/třídu v nějaký knihovně a tu jenom použiješ, tak se vůbec nenaučíš programátorsky myslet.

 
Nahoru Odpovědět
26.11.2012 18:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.