Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Diskuze: C/C++ formátování výstupu na konzoli

Aktivity
Avatar
hurvajs
Člen
Avatar
hurvajs:6.12.2013 19:17

Čauvec, dostal jsem úlohu, a chybí mi dodělat jediná věc a to správně naformátovat výstup na konzoli.
Jde mi o to, jak zarovnat výstup z pravé strany, pro představu
0000a
000ah
00aho
0ahoj

Kde nuly představují mezery..
Neví někdo ?

Editováno 6.12.2013 19:19
 
Odpovědět
6.12.2013 19:17
Avatar
Odpovídá na hurvajs
Neaktivní uživatel:6.12.2013 19:21

Zjistit délku nejdelšího stringu a pak před ostatní nacpat potřebný počet mezer :)?

Nahoru Odpovědět
6.12.2013 19:21
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na hurvajs
Kit:6.12.2013 19:28

"%-5s"

Nahoru Odpovědět
6.12.2013 19:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na hurvajs
Kit:6.12.2013 19:34

Sorry, "%5s"

Nahoru Odpovědět
6.12.2013 19:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
hurvajs
Člen
Avatar
Odpovídá na Kit
hurvajs:6.12.2013 19:35

Díky

 
Nahoru Odpovědět
6.12.2013 19:35
Avatar
vitamin
Člen
Avatar
Odpovídá na hurvajs
vitamin:6.12.2013 21:18

V c++ sa da pouzit toto:

#include <iostream>
#include <iomanip>
int main(void){
        std::cout
                << std::setfill('0') << std::setw(8)
                << "ahoj\n";

        return 0;
}
 
Nahoru Odpovědět
6.12.2013 21:18
Avatar
Kit
Tvůrce
Avatar
Odpovídá na vitamin
Kit:6.12.2013 21:20

Škoda, že to není tak elegantní jako v printf().

Nahoru Odpovědět
6.12.2013 21:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
Odpovídá na Kit
vitamin:6.12.2013 21:44

To je pravda, dalsia moznos je pouzit boost::format:

std::cout << boost::format("%08s") % "ahoj";
 
Nahoru Odpovědět
6.12.2013 21:44
Avatar
Kit
Tvůrce
Avatar
Odpovídá na vitamin
Kit:6.12.2013 21:51

To už vypadá mnohem lépe, i když by to mělo spíš vypadat takto:

std::cout << boost::format("%8s") % "ahoj";

aby tam nebyly ty zbytečné úvodní nuly, ale mezery.

Nahoru Odpovědět
6.12.2013 21:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
hurvajs
Člen
Avatar
hurvajs:7.12.2013 8:40

A ještě jeden dotaz, program mi má provést selectionsort, na různých polích. A následně vypsat počet srovnání, srovnání / počet prvků na 2, výměny, výměny / počet prvků

kde y = počet srovnání
a z = výměny

jde mi o to, jestli mám tyto dvě písmena dobře umístěna v kodu algoritmu

for (i = 0; i < n - 1; i++)
        {
                k = i;


                for (j = i + 1; j < n; j++)
                {
                        y++;
                        if (A[j] < A[k])
                        {
                                k = j;
                        }
                }
                z++;
                tmp = A[i];
                A[i] = A [k];
                A[k] = tmp;

        }
Editováno 7.12.2013 8:43
 
Nahoru Odpovědět
7.12.2013 8:40
Avatar
Kit
Tvůrce
Avatar
Odpovídá na hurvajs
Kit:7.12.2013 8:52

Řekl bych, že ne. Máš tam těch jednopísmenných proměnných nějak mnoho. Používají se pouze na místech, kde není třeba vysvětlovat, co to písmeno znamená. V daném případě proměnné i, j. Jakmile někde v komentářích musíš napsat y = počet srovnání a z = výměny, jsou proměnné pojmenovány špatně.

K samotnému algoritmu sice mám jisté výhrady, ale asi by měl fungovat.

Nahoru Odpovědět
7.12.2013 8:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
hurvajs
Člen
Avatar
hurvajs:7.12.2013 10:31

Ok, změnil jsem názvy, aby to bylo lépe srozumitelné..

for (i = 0; i < n - 1; i++)
        {
                min = i;


                for (j = i + 1; j < n; j++)
                {
                        porovnani++;
                        if (A[j] < A[min])
                        {
                                min = j;
                        }
                }
                vymeny++;
                tmp = A[i];
                A[i] = A [min];
                A[min] = tmp;

        }
 
Nahoru Odpovědět
7.12.2013 10:31
Avatar
Kit
Tvůrce
Avatar
Odpovídá na hurvajs
Kit:7.12.2013 10:36

Nevidím tam nastavení počátečních hodnot proměnných porovnani a vymeny. Jen tiše doufám, že to nastavuješ někde nad uvedeným kódem.

Jinak to vypadá OK, ale netestoval jsem to.

Nahoru Odpovědět
7.12.2013 10:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
hurvajs
Člen
Avatar
hurvajs:7.12.2013 10:39

Nastavení hodnot na nulu mám před cyklem..

 
Nahoru Odpovědět
7.12.2013 10:39
Avatar
coells
Tvůrce
Avatar
Odpovídá na hurvajs
coells:7.12.2013 22:42

Také to můžeš udělat abstraktní třídou, která obě operace udělá za tebe a počítá jejich používání. Od ní dědíš podědíš třídu s implementací daného algoritmu a využíváš poděděné metody. Viz příklad dole.

class SortAnalysis
{
private:
    int comparisons, swaps, total;

protected:
    virtual void core(int *data, int n) = 0;

public:
    void sort(int *data, int n)
    {
        comparisons = swaps = 0;
        total = n;
        core(data, n);
    }

    int lowerThen(int *data, int i, int j)
    {
        comparisons++;
        return data[i] < data[j];
    }

    void swap(int *data, int i, int j)
    {
        swaps++;
        int tmp = data[i];
        data[i] = data[j];
        data[j] = tmp;
    }

    int totalItems() { return total; }
    int numberOfComparisons() { return comparisons; }
    int numberOfSwaps() { return swaps; }
};

class SelectionSort : public SortAnalysis
{
protected:
    void core(int *data, int n)
    {
        int min;

        for (int i = 0; i < n - 1; ++i)
        {
            min = i;

            for (int j = i + 1; j < n; ++j)
                if (lowerThen(data, j, min))
                    min = j;

            if (min != i)
                swap(data, i, min);
        }
    }
};
 
Nahoru Odpovědět
7.12.2013 22:42
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.