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.