Pereiti prie turinio

Skačiai po kablelio c++


Rekomenduojami pranešimai

Sveiki turiu pagal mane paprastą programą, bet šiek tiek užstrigau. Jei kas žinot galit nežiūrėję atsakyt į klausimą.

Kaip patikrint ar šaknis(sqrt) traukiasi švariai.

#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char *argv[]) {
double n; // plytu kiekis
       int i;
cout<< "Kiek turi plytu" <<endl;
cin>>n;	
       i=n;
while (n!=0){
	n=n-1;
	if (sqrt(n)==0) { cout<<n<<endl; // ka daryt su situo ifu?
               i=i-n;
               n=i;
                                }
             }
return 0;
}

 

Man reikia, kad šioje dalyje if (sqrt(n)%10==0); kazkaip patikrinčiau ar yra skaičių po kablelio t.y ar traukiasi šaknis be liekanos, kaip tai padaryti? Bandžiau kažką su % ženklu, bet meta klaidą.

Pridedu sąlyga:

 

 

Iš n kvadratinių plytelių reikia sudėlioti vienos plytelės storio kvadratus: pirmiausia sudėti didžiausią galimą

kvadratą, iš likusių plytelių – vėl didžiausią ir t. t. Parašykite programą, kuri išskaidytų nurodytą

plytelių skaičių į dalis, reikalingas kiekvieno kvadrato statybai.

Pasitikrinkite. Kai n = 75, turėtumėte gauti: 64, 9, 1, 1.

Redagavo xamer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pats švariausias būdas:

 

int n = {kažkoks skaičius};
int k = 1;
while (k*k < n) {
   k++;
}
if (k*k == n) {
   cout << "n yra kvadratas" << endl;
}

 

Jeigu norime šiek tiek susitepti rankas su realiaisiais skaičiais:

 

int n = {kažkoks skaičius};
double eps = 1e-8;
int k = int(sqrt(n) + eps);
if (k * k == n) {
   cout << "n yra kvadratas" << endl;
}

 

Antrame variante tiesiog ištraukiame šaknį iš skaičiaus ir paimame sveikąją dalį. Epsilon (eps) reikalingas tam, kad visko nesugadintų double paklaida (pavyzdžiui, ištraukiam šaknį iš 16 (galbūt) gausime 3.999999999..., int(3.99999999) = 3; pridėję nedidelį epsilon užtikrinsime, kad nebūtų paklaidos į mažąją pusę).

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pats švariausias būdas:

 

int n = {kažkoks skaičius};
int k = 1;
while (k*k < n) {
   k++;
}
if (k*k == n) {
   cout << "n yra kvadratas" << endl;
}

 

Jeigu norime šiek tiek susitepti rankas su realiaisiais skaičiais:

 

int n = {kažkoks skaičius};
double eps = 1e-8;
int k = int(sqrt(n) + eps);
if (k * k == n) {
   cout << "n yra kvadratas" << endl;
}

 

Antrame variante tiesiog ištraukiame šaknį iš skaičiaus ir paimame sveikąją dalį. Epsilon (eps) reikalingas tam, kad visko nesugadintų double paklaida (pavyzdžiui, ištraukiam šaknį iš 16 (galbūt) gausime 3.999999999..., int(3.99999999) = 3; pridėję nedidelį epsilon užtikrinsime, kad nebūtų paklaidos į mažąją pusę).

Kaip ir suprantu mintį, bet nesumastau kaip panaudoti šį būda programoje:

 

 

Iš n kvadratinių plytelių reikia sudėlioti vienos plytelės storio kvadratus: pirmiausia sudėti didžiausią galimą

kvadratą, iš likusių plytelių – vėl didžiausią ir t. t. Parašykite programą, kuri išskaidytų nurodytą

plytelių skaičių į dalis, reikalingas kiekvieno kvadrato statybai.

Pasitikrinkite. Kai n = 75, turėtumėte gauti: 64, 9, 1, 1.

Redagavo xamer
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nejau nera nei vieno kieto programuotojo šiame forume, kuris pagelbėtu?

Abu kolegos pateikti variantai lengvai panaudojami, naudokis kuria nori funkcija:

bool kvadratasnr2 (int n);
bool kvadratasnr1 (int n);

int main ()
{
   int n = 75;
   for (int i = n; i > 0; i--)
        if (kvadratasnr1(i)) {
           cout << i << endl;
           n = n - i;
           i = n + 1;
        }
}

bool kvadratasnr1 (int n) {
   int k = 1;
   while (k*k < n)
       k++;

   if (k*k == n)
       return true;
   return false;
}

bool kvadratasnr2 (int n) {
   double eps = 1e-8;
   int k = int(sqrt(n) + eps);
   if (k * k == n)
       return true;
   return false;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 1 mėnesio...

Abu kolegos pateikti variantai lengvai panaudojami, naudokis kuria nori funkcija:

bool kvadratasnr2 (int n);
bool kvadratasnr1 (int n);

int main ()
{
   int n = 75;
   for (int i = n; i > 0; i--)
        if (kvadratasnr1(i)) {
           cout << i << endl;
           n = n - i;
           i = n + 1;
        }
}

bool kvadratasnr1 (int n) {
   int k = 1;
   while (k*k < n)
       k++;

   if (k*k == n)
       return true;
   return false;
}

bool kvadratasnr2 (int n) {
   double eps = 1e-8;
   int k = int(sqrt(n) + eps);
   if (k * k == n)
       return true;
   return false;
}

 

Aš išsprendžiau paprasčiau:

#include <fcntl.h>
#include <cmath>
#include <iostream>

using namespace std;

int main()

{
   double n;
   double s, d;
   cout << "iveskite n: " << endl;
   cin >> n;
   s = 0;
   while (n>0){

   d = int(sqrt(n));
   s = d * d;
   n = n - s;

   cout  << s << ", ";


   }

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš išsprendžiau paprasčiau:

#include <fcntl.h>
#include <cmath>
#include <iostream>

using namespace std;

int main()

{
   double n;
   double s, d;
   cout << "iveskite n: " << endl;
   cin >> n;
   s = 0;
   while (n>0){

   d = int(sqrt(n));
   s = d * d;
   n = n - s;

   cout  << s << ", ";


   }

Saunu labai. Tik jei butum pastebejes, kad as net nesprendziau, o tik parodziau, kaip kito kolegos duotus kodus panaudoti tinkamai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...