Pereiti prie turinio

C++ funkcija grąžina ne visas reikšmes


Rekomenduojami pranešimai

Sveiki, iškilo tokia problemėlė dėl c++ uždavinuko su funkcijom. Štai sąlyga :

http://postimg.org/image/q8c2g8rvb/

 

Bėda ta, kad nežinau kaip susitvarkyti su pačia c++ sintakse. Darau ciklą, bet finale man grąžina tik paskutinę reikšmę(turėtų išmesti 5 eilutes nuo 1 iki 5, bet išmeta tik penktąją). Pats aiškiai matau kad negalima taip daryti, bet tiesiog nežinau kaip užrašyt teisingai, bėda cikle.Būtų šaunu jei kas nors padėtų! Štai kodas:

 

#include <iostream>

#include <fstream>

#include <iomanip>

 

const char FVR[] = "Rez.txt";

 

using namespace std;

 

void irasyk (const char FVR[], float &coliai, float &pedos, float &jardai);

 

int main()

{

float coliai, pedos, jardai;

 

irasyk(FVR, coliai, pedos, jardai);

 

return 0;

}

 

void irasyk (const char FVR[], float &coliai, float &pedos, float &jardai)

{

ofstream Rez (FVR);

 

for(int i=1; i<=5; i++)

{

coliai = (1 / 2.54) * (i*100);

pedos = coliai / 12;

jardai = pedos / 3;

}

 

Rez << "Coliai" << " Pedos" << " Jardai" << endl;

Rez << fixed << setprecision(2) << coliai << " " << pedos << " " << jardai << endl;

 

Rez.close();

}

Redagavo CaL
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nenorėdamas kurti naujos temos, norėčiau išsiaiškinti šitą errorą:

 

Užduotis:

http://ipix.lt/di/24B7/omo.png

 

Kodas:

#include <iostream>

#include <fstream>

 

const char FVD[] = "Duom.txt";

const char FVR[] = "Rez.txt";

 

using namespace std;

 

void funkcija (const char FVD, const char FVR, int &I, int &R, int &U);

 

int main()

{

int I, R, U;

 

funkcija(FVD, FVR, I, R, U);

 

return 0;

}

 

void funkcija (const char FVD, const char FVR, int &I, int &R, int &U)

{

ifstream Duom (FVD);

ofstream Rez (FVR);

 

int n;

 

Duom >> n;

 

for(int i=1; i<=n; i++)

{

Duom >> I >> U >> R;

if (I==0)

{

I = U / R;

}

else if (U==0)

{

U = I * R;

}

else

{

R = U / I;

}

 

Rez << I << " " << U << " " << R << endl;

}

 

Duom.close();

Rez.close();

}

 

Nekuriant funkcijos, skaičiavimai vėlgi yra teisingi ir veikia puikiai. Bet klaida vėl kažkur sintaksėjė, kurios nepykite, dar neperkandu. Problema funkcijos iškvietime, ar atsiras žinančių kaip pataisyti tai?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kodėl nedarai programos su globaliais kintamaisiais? P.s kai nori parašyti kodą naudok specialiai tam skirta įterpimą.

Va dabar veikia

#include <iostream>
#include <fstream>
using namespace std;
void funkcija ( int &I, int &R, int &U);
int main()
{
   int I, R, U;
   funkcija( I, R, U);
   return 0;
}
void funkcija ( int &I, int &R, int &U)
{
   const char FVD[12] = "Duom.txt";
   const char FVR[12] = "Rez.txt";
   ifstream Duom (FVD);
   ofstream Rez (FVR);
   int n;
   Duom >> n;
   for(int i=1; i<=n; i++)
   {
       Duom >> I >> U >> R;
       if (I==0)
       {
           I = U / R;
       }
       else if (U==0)
       {
           U = I * R;
       }
       else
       {
           R = U / I;
       }

       Rez << I << " " << U << " " << R << endl;
   }

   Duom.close();
   Rez.close();
}

Redagavo west
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O kodėl nedarai programos su globaliais kintamaisiais? P.s kai nori parašyti kodą naudok specialiai tam skirta įterpimą.

Va dabar veikia

#include <iostream>
#include <fstream>
using namespace std;
void funkcija ( int &I, int &R, int &U);
int main()
{
   int I, R, U;
   funkcija( I, R, U);
   return 0;
}
void funkcija ( int &I, int &R, int &U)
{
   const char FVD[12] = "Duom.txt";
   const char FVR[12] = "Rez.txt";
   ifstream Duom (FVD);
   ofstream Rez (FVR);
   int n;
   Duom >> n;
   for(int i=1; i<=n; i++)
   {
       Duom >> I >> U >> R;
       if (I==0)
       {
           I = U / R;
       }
       else if (U==0)
       {
           U = I * R;
       }
       else
       {
           R = U / I;
       }

       Rez << I << " " << U << " " << R << endl;
   }

   Duom.close();
   Rez.close();
}

 

Didelis dėkui :)

O prie const char'o skaičius 12, ką jis reiškia?

Redagavo CaL
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šito tiksliai negaliu paaiškinti, nelabai aš naudoju konstantas. Tiesiog maniau, kad ji kaip ir sukuria char masyva todėl nurodžiau ilgi. O globalus kintamieji tai kintamieji, kuriuos gali naudoti betkuri funkcija. Va taip atrodytu programa su globaliais kintamaisiais.

#include <iostream>
#include <fstream>
using namespace std;
// Globalus kintamieji
int I, R, U;

void funkcija ( );
int main()
{
   funkcija( );
   return 0;
}
void funkcija ( )
{
   const char FVD[] = "Duom.txt";
   const char FVR[] = "Rez.txt";
   ifstream Duom (FVD);
   ofstream Rez (FVR);
   int n;
   Duom >> n;
   for(int i=1; i<=n; i++)
   {
       Duom >> I >> U >> R;
       if (I==0)
       {
           I = U / R;
       }
       else if (U==0)
       {
           U = I * R;
       }
       else
       {
           R = U / I;
       }

       Rez << I << " " << U << " " << R << endl;
   }

   Duom.close();
   Rez.close();
}

Redagavo west
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodėl yra nepatartina naudoti? Ir ar mažina egzamine balus jei juos naudoji?

 

Labai tikėtina, kad numažintų.

 

Šiaip, visus funkcijai reikalingus duomenis reikėtų perduoti per parametrus. Jeigu naudojami globalūs kintamieji, funkcija praranda savo lankstumą: negali pasirinkti, ką paduoti kaip parametrą; rekursija praranda savo privalumus.

 

Be to, globalūs kintamieji užteršia kintamųjų erdvę. Tarkim, turi globalų kintamąjį max, tai bet kurioje iš esamų funkcijų nelabai begali (nors niekas nedraudžia) susikurti kintamojo taip pat pavadinto max. Tokiu atveju vienas kintamasis užklos kitą, todėl programos kodas pasidarys sunkiau skaitomas ir suvokiamas.

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.

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