eMatematikas Prisijunk Forumas Egzaminų užduotys ONLINE testai

C++ skaitmenų skaičiavimas skaičių cikle


Sveiki,

gal yra galinčių skirti laiko padėti su užduotimi:

https://s30.postimg.org/ocigjo6v1/2017_01_23_2101.png

Manau, kad reikia daryti su dalyba iš 10, bet nepavyksta parašyti kodo.

funkcija, nustatanti skaičių nuo 1 iki a skaitmenų sumą:

int SkaitmenuSuma(int a)
{
int sum=0;
int kiek;
for(int i=1;i<=a;i++)
{
kiek=log(i)/log(10)+1;
sum+=kiek;
}
return sum;
}

Tomai,

aš tau tuoj turėsiu pradėti siųsti dovanas už pagalbą. Ačiū!

Belieka pasigilinti į log metodą.

Jeigu neaišku tai galiu parašyti kaip ten yra su tuo logaritmu:
Tarkime skaičius [tex]x[/tex] yra n-ženklis, tada teisinga nelygybė:
[tex]10^{n-1}≤x<10^n[/tex]
Logaritmuodami nelygybes dešimtainiu logaritmu gauname:
[tex]n-1≤lgx<n[/tex]
Pridėję 1 gauname:
[tex]n≤lgx+1<n+1[/tex]
Kadangi n ir n+1 yra greta esantys natūralieji skaičiai, vadinasi:
[tex]n=[lgx+1]=[lgx]+1[/tex],  kur [lgx]-skaičiaus lgx sveikoji dalis.
Pritaikę pagrindo keitimo formulę turime: [tex]lgx=\dfrac{lnx}{ln10}[/tex]

Programoje natūrinis logaritmas rašomas ne ln, o log, taigi ir gauname, kad skaičiaus x skaitmenų skaičius lygus: [tex]logx/log10+1[/tex]

Tomai,

gal dar galėtum padėti su:

https://s30.postimg.org/lxmrw09st/2017_01_25_2050.png
https://s30.postimg.org/9uhg8fyql/2017_01_25_2050_001.png

Įkeliu darbinį kodą, kokį esu pasirašęs. Viskas gerai pirmame ir trečiame testuose (be k papildymo). Nepavyksta parašyti kodo, kad pirmadieniais būtų papildymas.

//Darbas56
#include <io.h>
#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Lithuanian");

    int k; // Kiðenpinigiai ct. 25
    int s; // Butelio sulèiø kaina. 10
    int b; // Butelio supirkimo kaina. 3
    int i; // Savaitës diena. 2
    int n; // Kiðenpinigiai i-àjà dienà. 15
    int buteliuS;
    int tarosP;
    int skaiciavimoK;

    wcout << "Kiek kiðenpinigiø Jonas gauna kiekvienà savaitæ? "; cin >> k;
    wcout << "Kiek kainuoja butelis sulèiø? "; cin >> s;
    wcout << "Kokia butelio supirkimo kaina? "; cin >> b;
    wcout << "Kelintà savaitës dienà Jonas nusprendþia kasdien pirkti sultis? "; cin >> i;
    wcout << "Kiek kiðenpinigiø Jonas turi " << i << "-àjà savaitës dienà? "; cin >> n;

    tarosP = 0;
    buteliuS = 0;

    for (int j = i; j <= 7; j++)
    {
                n = n + tarosP;

                skaiciavimoK = n / s;

                n = n - skaiciavimoK * s;

                tarosP = 0;
                tarosP = tarosP + skaiciavimoK * b;

                if (skaiciavimoK >= 1) buteliuS = buteliuS + skaiciavimoK;
    }
   
    wcout << buteliuS << endl;

    return 0;
}

Pamomentavau kode.
#include <iostream>
#include <fstream>
using namespace std;
//----------------------------------------------------------------------------
void Skaitymas(int &k, int &s, int &b, int &i, int &n)
{
    ifstream fd("duom.txt");
    fd >> k >> s >> b >> i >> n;
    fd.close();
}
//----------------------------------------------------------------------------
int main()
{
    int k, // kisenpinigiai (gaunami kiekviena pirmadieni)
        s, // vieno sulciu butelio kaina
        b, // pelnas uz parduota tuscia buteli
        i, // dabartine diena (1<=i<=7)
        n, // turimi kisenpinigiai
        kiek = 0, // kiek isgali nusipirkti buteliu
        temp = 0; // tarpinis kintamasis, saugoti iperkamu buteliu kiekiui

    Skaitymas(k,s,b,i,n);

    while(n>=s || i==1){ // Prekiaujama tol, kol isgalima nusipirkti bent viena buteli arba ta diena yra Pirmadienis
        if(i==1) n += k; // Pirmadienis
        while(i <= 7){
            temp = n/s;
            kiek += temp;
            if(temp>0){
                n -= temp*s;
                n += temp*b;
            }
            i++;
        }
        if(temp>0) i = 1;
        else break; // jei neisgalejo nusipirkti bent vieno butelio, baige prekyba
    }
    cout << kiek << endl;
    return 0;
}

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