Pereiti prie turinio

Reikia pagalbos su C++[Struktūros]


Rekomenduojami pranešimai

Sveiki, sprendžiant uždavinį iškilo tokia problema. Tarkim turiu tokią struktūrą:

struct Krepsinis

{

int n;

int k[];

int t[];

int laik;

int blaik;

int bL[];

};

 

Klausimas: kaip padaryti, kad mano struktūros kintamasis n būtų visų tų masyvų esančių struktūroje ilgis?(pvz. int k[n])

Nuoroda į pranešimą
Dalintis kituose puslapiuose

neglai tureti [] laukų struktūroje, geriau paskaityk kaip naudoti std::vector

struct Krepsinis
{
   int n;
   std::vector<int> k;
   std::vector<int> t;
   int laik;
   int blaik;
   std::vector<int> bL;
};
...
Krepsinis krep;
krep.k.push_back (10);
krep.k.push_back (14);
std::cout << krep.k [0];

Redagavo alexcoldberg
Nuoroda į pranešimą
Dalintis kituose puslapiuose

neglai tureti [] laukų struktūroje, geriau paskaityk kaip naudoti std::vector

struct Krepsinis
{
   int n;
   std::vector<int> k;
   std::vector<int> t;
   int laik;
   int blaik;
   std::vector<int> bL;
};
...
Krepsinis krep;
krep.k.push_back (10);
krep.k.push_back (14);
std::cout << krep.k [0];

 

Apie tą ir kalbu, noriu, kad mano masyvai esantys struktūroje būtų int n ilgio. Ačiū.

Redagavo Delgad0
Nuoroda į pranešimą
Dalintis kituose puslapiuose

neglai tureti [] laukų struktūroje, geriau paskaityk kaip naudoti std::vector

struct Krepsinis
{
   int n;
   std::vector<int> k;
   std::vector<int> t;
   int laik;
   int blaik;
   std::vector<int> bL;
};
...
Krepsinis krep;
krep.k.push_back (10);
krep.k.push_back (14);
std::cout << krep.k [0];

 

Bet egzaminų lape būna parašyta, ką būtent taikyt masyvus, tai jeigu parašyta, jog masyvas, tai nemanau jog tiktų su vektoriais padarytas darbas, ar klystu?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

C++11 standartas turi savo konteinerį enkapsuliuojantį masyvus. Dėl jo panaudojimo manau neturėtų bėdų kilt, bet jei savo nori rašyt tai vienas iš būdų būtų:

struct Krepsinis {
int n;
int* k;
int* t;
int laik;
int blaik;
int* bL;

Krepsinis(const int& n) {
	this->n = n;
	k = new int[n];
	t = new int[n];
	bL = new int[n];
}

~Krepsinis() {
	delete[] k;
	delete[] t;
	delete[] bL;
}
};

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šiaip ten išvis nerašoma, kad reikia struktūrų, rašo kad svarbu vienmačius masyvus panaudot, tai kai aš sprendžiau, dariau taip

 

#include <iostream>
#include <fstream>

using namespace std;

void rikiuoti(int startp[]);
void skaityti(int &n, int numeriai[], int buvoaikstelej[], int buvosuolely[], int startinispenk[]);
void skmazdaug(int n, int numeriai[], int buvo[], int &index);
void isvesti(int startinispenk[], int numeriai[], int buvoaikstelej[], int buvosuolely[], int dzaideindex, int mzaideindex);


int main()
{
   int n;
   int numeriai[12]={0}, buvoaikstelej[12]={0}, buvosuolely[12]={0}, startinispenk[5]={0};
   int dzaideindex=0, mzaideindex=0;

   skaityti(n, numeriai, buvoaikstelej, buvosuolely, startinispenk);
   rikiuoti(startinispenk);
   skmazdaug(n, numeriai, buvosuolely, mzaideindex);
   skmazdaug(n, numeriai, buvoaikstelej, dzaideindex);
   isvesti(startinispenk, numeriai, buvoaikstelej, buvosuolely, dzaideindex, mzaideindex);
}

void skmazdaug(int n, int numeriai[], int buvo[], int &index){ // rasti maziausia ir rasti didziausia
   int zaide=0;
   for(int i=0; i<n; i++){
       if(buvo[i]>zaide){index=i; zaide=buvo[i];}
   }
}

void skaityti(int &n, int numeriai[], int buvoaikstelej[], int buvosuolely[], int startinispenk[]){
   int laikas, laiku, sp=0;
   ifstream a("U1.txt");
   a>>n;
   for(int i=0; i<n; i++){
       a>>numeriai[i];
       a>>laiku;

       a>>laikas;
       if(laikas>0){buvoaikstelej[i]+=laikas; startinispenk[sp]=numeriai[i]; sp++;}else{buvosuolely[i]-=laikas;}
       for(int x=1; x<laiku; x++){
           a>>laikas;
           if(laikas>0){buvoaikstelej[i]+=laikas;}else{buvosuolely[i]-=laikas;}
       }
   }
   a.close();
}

void rikiuoti(int startp[]){
   for(int a=0; a<5; a++){
   for(int i=0; i<4; i++){
       if(startp[i]>startp[i+1]){int temp=startp[i]; startp[i]=startp[i+1]; startp[i+1]=temp;}
   }}
}

void isvesti(int startinispenk[], int numeriai[], int buvoaikstelej[], int buvosuolely[], int dzaideindex, int mzaideindex){
   ofstream isvedimas("U1rez.txt");
   for(int i=0; i<5; i++){
       isvedimas << startinispenk[i]<< " ";
   }
   isvedimas << endl << numeriai[dzaideindex] << " " << buvoaikstelej[dzaideindex] << endl;
   isvedimas << numeriai[mzaideindex]<<" "<< buvosuolely[mzaideindex] << endl;
   isvedimas.close();
}

 

 

aišku niekas nebaus ir su struktūrom, bet kai per egzą gali tekti greitai suktis, ir nereikalauja struktūrų, tai manau šitas sprendimas būtų (y) :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Šiaip ten išvis nerašoma, kad reikia struktūrų, rašo kad svarbu vienmačius masyvus panaudot, tai kai aš sprendžiau, dariau taip

 

#include <iostream>
#include <fstream>

using namespace std;

void rikiuoti(int startp[]);
void skaityti(int &n, int numeriai[], int buvoaikstelej[], int buvosuolely[], int startinispenk[]);
void skmazdaug(int n, int numeriai[], int buvo[], int &index);
void isvesti(int startinispenk[], int numeriai[], int buvoaikstelej[], int buvosuolely[], int dzaideindex, int mzaideindex);


int main()
{
   int n;
   int numeriai[12]={0}, buvoaikstelej[12]={0}, buvosuolely[12]={0}, startinispenk[5]={0};
   int dzaideindex=0, mzaideindex=0;

   skaityti(n, numeriai, buvoaikstelej, buvosuolely, startinispenk);
   rikiuoti(startinispenk);
   skmazdaug(n, numeriai, buvosuolely, mzaideindex);
   skmazdaug(n, numeriai, buvoaikstelej, dzaideindex);
   isvesti(startinispenk, numeriai, buvoaikstelej, buvosuolely, dzaideindex, mzaideindex);
}

void skmazdaug(int n, int numeriai[], int buvo[], int &index){ // rasti maziausia ir rasti didziausia
   int zaide=0;
   for(int i=0; i<n; i++){
       if(buvo[i]>zaide){index=i; zaide=buvo[i];}
   }
}

void skaityti(int &n, int numeriai[], int buvoaikstelej[], int buvosuolely[], int startinispenk[]){
   int laikas, laiku, sp=0;
   ifstream a("U1.txt");
   a>>n;
   for(int i=0; i<n; i++){
       a>>numeriai[i];
       a>>laiku;

       a>>laikas;
       if(laikas>0){buvoaikstelej[i]+=laikas; startinispenk[sp]=numeriai[i]; sp++;}else{buvosuolely[i]-=laikas;}
       for(int x=1; x<laiku; x++){
           a>>laikas;
           if(laikas>0){buvoaikstelej[i]+=laikas;}else{buvosuolely[i]-=laikas;}
       }
   }
   a.close();
}

void rikiuoti(int startp[]){
   for(int a=0; a<5; a++){
   for(int i=0; i<4; i++){
       if(startp[i]>startp[i+1]){int temp=startp[i]; startp[i]=startp[i+1]; startp[i+1]=temp;}
   }}
}

void isvesti(int startinispenk[], int numeriai[], int buvoaikstelej[], int buvosuolely[], int dzaideindex, int mzaideindex){
   ofstream isvedimas("U1rez.txt");
   for(int i=0; i<5; i++){
       isvedimas << startinispenk[i]<< " ";
   }
   isvedimas << endl << numeriai[dzaideindex] << " " << buvoaikstelej[dzaideindex] << endl;
   isvedimas << numeriai[mzaideindex]<<" "<< buvosuolely[mzaideindex] << endl;
   isvedimas.close();
}

 

 

aišku niekas nebaus ir su struktūrom, bet kai per egzą gali tekti greitai suktis, ir nereikalauja struktūrų, tai manau šitas sprendimas būtų (y) :)

 

Ačiū :) aš kitaip išsprendžiau :)

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