Tarvisin apua tämän ohjelman kanssa.
Ohjelma siis tulostaa kaikki 11. jaolliset luvut 1 ja 10000 välillä, mutta pitäisi saada se tulostamaan luvut niin että tulee vain 5 lukua per rivi, voisiko joku auttaa avutonta ?
#include <iostream.h> #include <stdio.h> #define LUKU_MIN 1 #define LUKU_MAX 10000 int main () { int i = LUKU_MIN; for(; i <= LUKU_MAX; ++i) { if(i % 11 == 0) { printf("%d ", i); } } system("PAUSE"); }
Lisää vain laskurin, joka laskee, montako numeroa on tulostettu ja tutkitaan sitä ja jos se on viidellä jaollinen, tulostetaan rivinvaihto. Miksi muuten includoit sekä C:n että C++:n io-kirjastot? Kumpaa tämän on tarkoitus olla? C:ltä enempi näyttää...
#include <stdio.h> #define LUKU_MIN 1 #define LUKU_MAX 10000 int main () { int i = LUKU_MIN; int laskuri = 0; for(; i <= LUKU_MAX; ++i) { if(i % 11 == 0) { printf("%d ", i); laskuri++; if (laskuri % 5 == 0) { printf("\n"); } } } system("PAUSE"); }
Pitäisi toimia.
Tarkoitus on olla C++.
Ja syy miksi siinä on kummatkin on koulun ikivanhat opintomateriaalit.
"Oikeaoppisena" C++:na näyttäisi kutakuinkin tältä:
#include <iostream> using std::cout; using std::endl; const int LUKU_MIN = 1; const int LUKU_MAX = 10000; int main() { int laskuri = 0; for (int i = LUKU_MIN ; i <= LUKU_MAX ; ++i) { if ( i % 11 == 0 ) { cout << i << " "; laskuri++; if ( laskuri % 5 == 0 ) { cout << endl; } } } system("PAUSE"); return 0; }
No, tässä tapauksessa ei oikeaoppisuudella onneksi ole merkitystä kunhan ohjelma vain toimii, eli vain lopputulos merkitsee.
Ohjelmahan sinänsä on aivan älytön, koska on selvää, että 11:lla jaolliset luvut ovat 11:n päässä toisistaan. Koko laskelma voidaan tehdä vakioajassa, silmukkaa tarvitaan vain tulostamiseen lopuksi:
const int MIN = 1; const int MAX = 100; const int JAKAJA = 11; const int RIVILLA = 5; // Jaolliset luvut const int pienin = (MIN / JAKAJA + (MIN % JAKAJA ? 1 : 0)) * JAKAJA; const int suurin = MAX - MAX % JAKAJA; const int lukuja = 1 + (suurin - pienin) / JAKAJA; // Ohjelma (tulostus) #include <iostream> int main() { // Alku, väli ja lukumäärä tiedetään. // Tulostetaan oikea määrä lukuja... for (int i = 0; i < lukuja; ++i) { // ... joista ensimmäinen on pienin + 0 * JAKAJA ja seuraavat aina yhtä jakajaa suurempia. std::cout << (pienin + i * JAKAJA) << ((i + 1) % RIVILLA == 0 ? "\n" : " "); } if (lukuja % RIVILLA) { std::cout << std::endl; // Viimeiseenkin riviin rivinvaihto } std::cout << std::flush; return 0; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.