Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 19] Optymalizacja kodu

Ostatnio zmodyfikowano 2012-03-07 17:17
Autor Wiadomość
CPP
Temat założony przez niniejszego użytkownika
[Lekcja 19] Optymalizacja kodu
» 2012-03-02 14:56:43
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int wylosujLiczby( int t[], int ileLiczb, int a, int b )
{
    cout << "Wylsowoane liczby to: " << endl;
    int licznik = 0;
    do
    {
        t[ licznik ] =(( rand() % b ) + a );
        licznik++;
       
    } while( licznik <= ileLiczb );
   
}

int wypiszLiczby( int t[], int ileLiczb )
{
    cout << "Oto wylosowane liczby: " << endl;
    int licznik = 0;
    do
    {
        cout << "- " << t[ licznik ] << endl;
        licznik++;
    } while( licznik <= ileLiczb );
   
}

int obliczSume( int t[], int ileLiczb )
{
    int wynik = 0;
    int licznik = 0;
    do
    {
        wynik = wynik + t[ licznik ];
        licznik++;
    } while( licznik <= ileLiczb );
   
    return wynik;
}

int main()
{
    int tablica[ 15 ];
    wylosujLiczby( tablica, 15, 4, 10 );
    wypiszLiczby( tablica, 15 );
    int iSuma = obliczSume( tablica, 15 );
    std::cout << "Suma liczb wynosi: " << iSuma << std::endl;
    return 0;
}
Czy ten kod dałoby się napisać krócej?
P-51728
jsc
» 2012-03-02 15:01:49
Próby skrócenia tego kodu będą nierozsądne.
P-51729
Chlorek
» 2012-03-06 20:35:40
Co ty masz do tego "skracania" i optymalizacji kodu. To samo w sobie jest dość prosto napisane, jednak można wykonywać operacje na wylosowanych liczbach od razu w tej samej funkcji i od razu po wylosowaniu każdej z nich. Trochę będzie to mniej czytelne ale wyjdzie mniej kodu.
P-52105
akwes
» 2012-03-06 21:05:08
@Chlorek Zamiast cout można też użyć printf, które jest szybsze, ale chyba nie rozumiesz na czym polega kurs.

Kod ma być zrozumiały dla piszącego, ładnie sformatowany i do tego ma poprawnie działać. Próby optymalizacji takiego kodu to bezsens i głupota.
P-52110
Chlorek
» 2012-03-06 22:15:40
Przepraszam za mały offtop, ale printf nie musi być koniecznie szybsze? Wydaje mi się, że za pomocą cout można osiągnąć nawet lepszy wynik dodając na początku linijkę kodu (nie pamiętam jaką ale taka jest, dla chętnych google), która przyspiesza znacznie działanie strumienia wyjścia (a także strumienia wyjścia do plików). Ogólnie to niezauważalna ilość czasu jednak przy bardzo dużej ilości operacji wyświetlania tekstu jest zauważalna różnica o około 5-10%. Poza tym printf ma jeden znaczny minus w porównaniu do strumieni, jego parametry są dokładnie sprawdzane i przetwarzane w czasie działania programu, z użyciem cout jest lepiej, kompilator jakoś inaczej interpretuje strumień (dokładnie nie powiem, aż tak się nie znam) i sprawia to, że program o wiele szybciej radzi sobie z taką metodą.
P-52133
pekfos
» 2012-03-07 15:31:12
Chodzi ci o
ios_base::sync_with_stdio()
 ?
P-52170
SeaMonster131
» 2012-03-07 16:11:12
@Chlorek, robiłem n-testów dla małej ilości tekstu jak i dla dużej. W obu przypadkach printf było szybsze.
P-52172
yoogi
» 2012-03-07 17:17:33
@up fakt :) ale według mnie WriteConsole czy jakoś tak z WinAPI powinno być szybsze, oczywiście mogę się mylić
P-52173
« 1 »
  Strona 1 z 1