[Lekcja 19] Optymalizacja kodu
Ostatnio zmodyfikowano 2012-03-07 17:17
CPP Temat założony przez niniejszego użytkownika |
[Lekcja 19] Optymalizacja kodu » 2012-03-02 14:56:43 #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? |
|
jsc |
» 2012-03-02 15:01:49 Próby skrócenia tego kodu będą nierozsądne. |
|
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. |
|
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. |
|
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ą. |
|
pekfos |
» 2012-03-07 15:31:12 Chodzi ci o ios_base::sync_with_stdio() ? |
|
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. |
|
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ć |
|
« 1 » |