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.

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