Lasketaan summa eri kertoimilla yhdellä for-silmukalla.
#include <iostream> using namespace std; int main(){ int luvut[10] = {13,6,6,16,2,12,10,5,17,8}; int summa = 0; int kerroin = 0; for (int x = 0; x < 10; x++){ cout << luvut[x] << endl; } //Lasketaan summa kertoimilla 1-10. for (int x = 0; x < 100; x++){ if (x % 10 == 0){ //Kasvatetaan kerrointa ja näytetään edellinen summa. cout << kerroin << ":" << summa << endl; kerroin++; summa = 0; } summa += kerroin*luvut[x%10]; } cout << kerroin << ":" << summa << endl; cout << "///" << endl; return 0; }
Miksi yrität hienostella luettavuuden kustannuksella? Jos selkeään toteutukseen vaaditaan kaksi silmukkaa, niin käytä kahta silmukkaa! Monesta laittamastasi koodista ei saa yhdellä vilkaisulla tolkkua. Tämäkin koodi olisi myös todennäköisesti nopeampikin kahden silmukan toteutuksella!
Monen ohjelmointikielen kirjastoissa löytyy valmiit selkeät ja tehokkaat toteutukset tämän tapaisiin tehtäviin.
Alla sama tehtävä 8th ohjelmointikielellä:
[13,6,6,16,2,12,10,5,17,8] constant luvut : multiply-and-sum >r luvut ( r@ n:* ) a:map ' n:+ 0 a:reduce r> "kerroin: %3d summa: %4d\n" s:strfmt . ; : app:main "Luvut: " . luvut ( . space ) a:each! drop cr cr ' multiply-and-sum 1 10 loop bye ;
Ei tosin tuosta 8th-koodistakaan moni tämän foorumin vierailija saa yhdellä vilkaisulla tolkkua.
vesikuusi kirjoitti:
Ei tosin tuosta 8th-koodistakaan moni tämän foorumin vierailija saa yhdellä vilkaisulla tolkkua.
No, tuo onkin tottumiskysymys... Pointti kuitenkin oli, että miksi tehdä väkisin yhden silmukan avulla luettavuuden kustannuksella kun tuo on pidempi ja hitaampi kuin suoraviivainen kahden sisäkkäisen silmukan toteutus:
#include <iostream> using namespace std; int main() { int luvut[10] = { 13,6,6,16,2,12,10,5,17,8 }; for (int i = 0; i < 10; i++) { cout << luvut[i] << endl; } //Lasketaan summa kertoimilla 1-10. for (int k = 1; k <= 10; k++) { int summa = 0; for (int i = 0; i < 10; i++) { summa += k*luvut[i]; } cout << k << ":" << summa << endl; } cout << "///" << endl; return 0; }
Ohjelman tulostus on kauhea kun en viitsinyt korjata 8th versiota vastaavaksi...
Mistä tässä puhutaan, koodista vai hienostelusta? Vai onko tämän aiheena kauheat koodit? Ei koodit näytille alueella tarvitse olla maailman parhaimpia koodeja.
tositoo kirjoitti:
Mistä tässä puhutaan, koodista vai hienostelusta? Vai onko tämän aiheena kauheat koodit? Ei koodit näytille alueella tarvitse olla maailman parhaimpia koodeja.
Ei koodit näytille alueellekaan tarvitse silti ihan kaikkea koodia laittaa. Toivottavaa olisi, että koodi esittelisi jonkun näppärän tai kiinnostavan tavan toteuttaa joku asia! Totesin vaan, että silmukoiden määrä koodissa ei välttämättä ole se paras suorituskyvyn mittari. Lisäksi turha kikkailu luettavuuden kustannuksella ei ihan oikeasti kannata. Monesti nykypäivänä kääntäjä osaa tehdä parempaa työtä kuin yksinkertainen yritys optimoida käsin...
No jaa, miten nyt ajattelee.
JRokka on kooditaiteilija ja hänen hienot esimerkkinsä korostavat erilaisia tapoja toteuttaa muuten hyvin yksinkertaisia ongelmanratkaisuja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.