Avatar
hurvajs
Člen
Avatar
hurvajs:

Č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
Jiří Gracík
Redaktor
Avatar
Odpovídá na hurvajs
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
Kit
Redaktor
Avatar
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
Redaktor
Avatar
Nahoru Odpovědět  +1 6.12.2013 19:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
Odpovídá na hurvajs
vitamin:

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
Redaktor
Avatar
Odpovídá na vitamin
Kit:

Š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:

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
Redaktor
Avatar
Odpovídá na vitamin
Kit:

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:

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
Redaktor
Avatar
Odpovídá na hurvajs
Kit:

Ř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:

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
Redaktor
Avatar
Odpovídá na hurvajs
Kit:

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:

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

 
Nahoru Odpovědět 7.12.2013 10:39
Avatar
coells
Redaktor
Avatar
Odpovídá na hurvajs
coells:

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.