Pereiti prie turinio

C++ uždavinys (struct)


Rekomenduojami pranešimai

Sveiki, sprendžiu paprasta uždavinį ir niekaip neišsprendžiu. Gal atsirastu gerų žmonių, kurie galėtų padėti? Pagrindinė problema yra tokia, jog man negrąžina m reikšmės, nes be jos negaliu išvesti atsakymo, bet manau kažkur yra ir kitų klaidų...

 

Uzdavinio salyga:

http://www.part.lt/img/3249716244913fb2327ddf65e69d6984468.jpg

 

#include <fstream>
#include <iomanip>
#include <iostream>
#include <string>

using namespace std;
//-------------------------------------
const char CDfv[] = "U1.txt";
const char CRfv[] = "U1rez.txt";
const int CMax = 50;
//-------------------------------------
struct Duomenys {
       string pav;
       double ugis;
       int    task;
};
//-------------------------------------
void Skaityti(Duomenys A[], int & n, int p, int k);
void Spausdinti(Duomenys A[], int n);
void Atrinkti(Duomenys A[], int n, Duomenys B[], int p, int k, int & m);
//-------------------------------------
int main()
{
   Duomenys A[CMax]; int n;
   Duomenys B[CMax]; int m;
   int p, k;

   Skaityti(A, n, p, k);
   Atrinkti(A, n, B, p, k, m);
   Spausdinti(B, m);
   return 0;
}

void Skaityti(Duomenys A[], int & n, int p, int k)
{
   ifstream GET(CDfv);
   GET >> n;
   for(int i = 0; i < n; i++)
   {
       GET >> A[i].pav >> A[i].ugis >> A[i].task;
   }
   GET >> p >> k;
   GET.close();
}

void Spausdinti(Duomenys A[], int n)
{
   ofstream PUT(CRfv);
   PUT << "--------------------------------------" << endl;
   PUT << "Vardas        Ugis    Taskai          " << endl;
   PUT << "--------------------------------------" << endl;
   for (int i = 0; i < n; i++)
   {
       PUT << left << setw(15) << A[i].pav << setw(7) << A[i].ugis << A[i].task << endl;
   }
   PUT << "--------------------------------------" << endl;
   PUT.close();
}

void Atrinkti(Duomenys A[], int n, Duomenys B[], int p, int k, int & m)
{
   double maxu = 0;   // didziausias ugis
   int maxt = 0;      // daugiausiai imesta tasku
   int m = 0;

   for(int i = 0; i < n; i++)
   {
       for(int j = 0; j < n; j++)
       {
           if(A[j].ugis > maxu)
           {
               maxu = A[j].ugis;
           }
           else if(A[j].task > maxt)
           {
               maxt = A[i].task;
           }
       }
       if((A[i].ugis >= maxu * (1-(p / 100))) || (A[i].task >= maxt * (1-(k / 100))))
       {
           B[m] = A[i];
           m++;
       }
   }
}

Redagavo Magahaka
Nuoroda į pranešimą
Dalintis kituose puslapiuose

nes m kintamasis jau yra apibrėžtas maine, o Atrinkti funkcijoje vėl deklaruoji jį per naują.

 

Manau taip turėtų būti:

void Atrinkti(Duomenys A[], int n, Duomenys B[], int p, int k, int & m)
{
   double maxu = 0;   // didziausias ugis
   int maxt = 0;      // daugiausiai imesta tasku
   m = 0;

   for(int i = 0; i < n; i++)
   {
       for(int j = 0; j < n; j++)
       {
           if(A[j].ugis > maxu)
           {
               maxu = A[j].ugis;
           }
           else if(A[j].task > maxt)
           {
               maxt = A[i].task;
           }
       }
       if((A[i].ugis >= maxu * (1-(p / 100))) || (A[i].task >= maxt * (1-(k / 100))))
       {
           B[m] = A[i];
           m++;
       }
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

error: declaration of 'int m' shadows a parameter

 

Tokai žinute gaunu :/ Nors beveik toks pat pavizdys buvo knygoje programos.

 

Tai viską pasako.

void Atrinkti(..., int & m)

{

...

int m = 0;

 

Du kartus apsirašai tą patį kintamąjį. Vieną kartą funkcijos parametruose, kitą - lokaliai funkcijos viduje. Tiesiog pakeisk kurio nors iš jų vardą į tokį, kurio kitur nenaudoji.

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ą...