eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

C++ problema su funkcija ir joje esančiu ciklu while


Užduotis:
Name yra n butų, sunumeruotų nuo 1 iki n. Prie kiekvieno buto durų reikia prikalti lenteles su to buto numeriu. Ant vienos lenteles užrašytas tik vienas skaitmuo. Jei buto numeris nevienženklis skaičius, tai prie durų kalamos kelios lenteles.

Programa tai turiu parašyta bet nesuprantu ciklo while, gal galite paaiškinti kam ten cikle x=x/10? 

#include <fstream>
#include <cmath>
#include <iostream>
using namespace std;
const char CDfv[] = "Duomenys4_u2.txt"; // pradiniø duomenø failo vardas
const char CRfv[] = "Rezultatai4_u2.txt"; // rezultatø failo vardas
//-------------------------------------------------------------------
int Kiek(int x);
//-------------------------------------------------------------------
int main()
{
  int n;
  int v = 0;
  ifstream fd(CDfv);
  fd >> n;
  for (int i = 1; i <= n; i++) {
      v = v + Kiek(i);
  }
  fd.close();
  ofstream fr(CRfv);
  fr << v;
  fr.close();
  return 0;
}
//-------------------------------------------------------------------
int Kiek(int x)
{
  int k = 0;
  while (x > 0) {
      k = k + 1;
    x = x / 10;  kam jis reikalingas ir kur naudojamas jis dar cikle?
  }
  return k;
}

x kazkaip turi kisti, kitaip ciklas butu begalinis. for ciklas turi konkrecius rezius, ciklas while turi tik viena salyga ir jeigu tu nenurodysi kaip kinta kintamasis nurodytas cikle jis visalaika bus >0 ir ciklas niekada nesibaigs(tapts begaliniu).

almostlowx kazkaip turi kisti, kitaip ciklas butu begalinis. for ciklas turi konkrecius rezius, ciklas while turi tik viena salyga ir jeigu tu nenurodysi kaip kinta kintamasis nurodytas cikle jis visalaika bus >0 ir ciklas niekada nesibaigs(tapts begaliniu).

bet kaip jis turi kisti kodel butent is 10, nes jei is 9 ar vienuolikos tai atsakymas buna vienu daugiau arba mažiau. ir kaip ten prideda po 2 kai dviženklis nes k=k+1 tai po viena prideda?

Kiek zinau tai dalyba is 10 c++ reiskia sveikos dalies traukimas is skaiciaus. Jeigu pvz int tipo kintamasis, tai pvz 77/10 = 7,7 bet kadangi int tipas tai rezultatas yra 7(niekas cia neapvalina). Taigi jeigu dvizenklis skaicius ciklas paskaiciuos 2 lenteles, kadangi pvz x = 77, poto x = 7 poto x = 0(ir cia jau nevykdo toliau ciklo. Jeigu trizenklis atitinkamai 3 kartus.

k = k+1  - taip cia reiskia kad prie lenteliu kekio yra pridedama 1 lentele.

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »