Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Aina 5 lukua per rivi

Mr.Grim [24.01.2008 10:19:23]

#

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");
}

TsaTsaTsaa [24.01.2008 10:24:55]

#

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.

Mr.Grim [24.01.2008 10:27:39]

#

Tarkoitus on olla C++.
Ja syy miksi siinä on kummatkin on koulun ikivanhat opintomateriaalit.

TsaTsaTsaa [24.01.2008 10:54:59]

#

"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;
}

Mr.Grim [24.01.2008 11:13:55]

#

No, tässä tapauksessa ei oikeaoppisuudella onneksi ole merkitystä kunhan ohjelma vain toimii, eli vain lopputulos merkitsee.

Metabolix [26.01.2008 19:14:05]

#

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;
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta