Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki,

 

Norėjau paprašyti pagalbos sprendžiant 2015 IT egzamino 2 programavimo uždavinį "Avys".

 

 

http://www.nec.lt/failai/5256_IT-VBE-1_2015.pdf (10 puslapis)

Kaip patys spręstumėte šį uždavinį. Tikriausiai yra protingesnis būdas kaip nuskaityti bei talpinti duomenis. Šiuo atveju aš 2 kartus tai darau. Pirmą kartą darau, kad pasiimti avį pagal kurią lyginsiu(avis viduryje failo, todėl nemoku nuskaityti pirmos), o poto visas kitas.

 

Mano kodas --

 

#include <iostream>

#include <fstream>

#include <iomanip>

using namespace std;

 

const char CDfv[] = "duomenys.txt";

const char CDfr[] = "rezultatai.txt";

 

struct avys{

string pav;

char s;

char s1;

string vardas;

int kiek;

 

};

void skaityti(avys A[], int &n, int & ilgis, int & k);

void skaiciavimai(avys A[], int n, int ilgis, int k);

void rikiuoti(avys A[], int n, int k);

int main()

{

avys A[50];

int n,k,ilgis;

 

skaityti(A,n,ilgis,k);

skaiciavimai(A,n,ilgis,k);

rikiuoti(A,n,k);

 

return 0;

}

 

void skaityti(avys A[], int &n, int & ilgis, int & k)

{

ifstream fd(CDfv);

fd>>n;

fd>>ilgis;

fd>>k;

for(int i = 0; i<k; i++)

{

fd>>A.vardas;

fd.ignore();

for(int j = 0; j<ilgis; j++)

fd>>A[j].s;

}

}

void skaiciavimai(avys A[], int n, int ilgis, int k)

{

ifstream fd(CDfv);

fd>>n;

fd>>ilgis;

fd>>k;

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

{

A.kiek = 0;

if(i==k-1)

{

fd>>A.vardas;

fd>>A[i+1].vardas;

fd.ignore();

}

 

fd>>A.pav;

fd.ignore();

for(int j = 0; j<ilgis; j++){

fd>>A[j].s1;

if(A[j].s1 == A[j].s)

A.kiek++;

}

}

}

 

void rikiuoti(avys A[], int n, int k)

{

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

for(int j = 0; j<n-1; j++)

{

if(A[j].kiek < A[j+1].kiek)

swap(A[j],A[j+1]);

}

}

 

 

 

Ačiū labai už pagalbą.

Redagavo TavoT3vas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Manau patogiau būtų iš pradžių nusiskaityti visas avis į vieną masyvą (nereikėtų be reikalo 2 kartus skaityti), o tada tiriama avį pasiekti iš duoto tiriamos avies numerio atėmus 1 (nes masyvas numeruojamas nuo 0). Tada galima būtų galima sukti ciklą per visas avis, praleidžiant tiriamąją. pvz jei tiriama avis yra t masyvo pozicijoje, tai iš pradžių prasuki ciklą nuo 0 iki t ir tada nuo t+1 iki galo bei atlieki skaičiavimus.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Manau patogiau būtų iš pradžių nusiskaityti visas avis į vieną masyvą (nereikėtų be reikalo 2 kartus skaityti), o tada tiriama avį pasiekti iš duoto tiriamos avies numerio atėmus 1 (nes masyvas numeruojamas nuo 0). Tada galima būtų galima sukti ciklą per visas avis, praleidžiant tiriamąją. pvz jei tiriama avis yra t masyvo pozicijoje, tai iš pradžių prasuki ciklą nuo 0 iki t ir tada nuo t+1 iki galo bei atlieki skaičiavimus.

 

Sveikas, buvau taip pagalvojęs, bet man paprastesnis pasirodė mano variantas. Ačiū už atsakymą. :)

Redagavo TavoT3vas
Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Is pradziu viska isirasau i A[], poto viska perkeliu i B[], isskyrus tiriamaja avi

 

 

 

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
#include <fstream>
//--------------------------------------------------------------
const int Cn = 20;
const char IN[] = "duomenu failas";
const char OUT[] = "rezultatu failas";

//--------------------------------------------------------------
using namespace std;
struct Avis{string vardas;
           char kodas[Cn];
           int kof=0;};
void skaitymas(Avis A[], int &n, int &m, int &nr);
void koef(Avis A[], int nr, int n, int m);
void atmetimas(int &k, Avis A[], Avis B[], int n, int nr);
void rikiavimas(Avis B[], int k);
void rasymas(Avis B[],Avis A[], int k, int nr);

//--------------------------------------------------------------
int main()
{
   int n, m, nr, k=0;
   Avis A[Cn], B[Cn];
   skaitymas(A, n, m, nr);
   koef(A,nr,n,m);
   atmetimas(k, A, B, n, nr);
   rikiavimas(B, k);
   rasymas(B, A, k, nr);
   return 0;
}
//--------------------------------------------------------------
void skaitymas(Avis A[], int &n, int &m, int &nr)
{
   ifstream in(IN);
   in>>n>>m>>nr;
   char sim[11];
   in.ignore();
   for(int i=0; i<n; i++)
   {
       in.get(sim, 11);
       A[i].vardas=sim;
       in.ignore();
       for(int j=0; j<m; j++)
       {
           in>>A[i].kodas[j];
       }
       in.ignore();
   }
   in.close();
}
//--------------------------------------------------------------
void koef(Avis A[], int nr, int n, int m)
{
   for(int i=0; i<n; i++)
   {
       for(int j=0; j<m; j++)
       {
           if(A[i].kodas[j]==A[nr-1].kodas[j]) A[i].kof++;
       }

   }
}
//--------------------------------------------------------------
void atmetimas(int &k, Avis A[], Avis B[],int n, int nr)
{
    for(int i=0; i<n; i++)
   {
       if(i!=nr-1) (B[k]=A[i], k++);

   }
}
//--------------------------------------------------------------
void rikiavimas(Avis B[], int k)
{
   int j;
   for(int i=1; i<k; i++)
   {
       j=i;
       while(B[j].kof>B[j-1].kof && j>0)
       {
           Avis temp=B[j-1];
           B[j-1]=B[j];
           B[j]=temp;
           j--;
       }
   }
   for(int i=1; i<k; i++)
   {
       j=i;
       while(B[j].vardas<B[j-1].vardas && B[j].kof==B[j-1].kof && j>0)
       {
           Avis temp=B[j-1];
           B[j-1]=B[j];
           B[j]=temp;
           j--;
       }
   }
}
//--------------------------------------------------------------
void rasymas(Avis B[],Avis A[], int k, int nr)
{
   ofstream out(OUT);
   out<<A[nr].vardas<<endl;
   for(int i=0; i<k; i++)
   {
       out<<B[i].vardas<<" "<<B[i].kof<<endl;
   }
   out.close();
}

Redagavo taskiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

#include <fstream>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
//-----------------------------
const char CDfv [] = "D.txt";
const char CRfv [] = "Rez1.txt";
//-----------------------------
int main(){
   vector<char> A {'p','b','z','r','v','k'};
   cout << A[0];
}

Paklausiu čia, kas negerai vektoriuje parašyta, kad klaidą meta man? su masyvu taip nebūna, bet masyvas ne vektorius :)

Redagavo Reserved
Nuoroda į pranešimą
Dalintis kituose puslapiuose

#include <fstream>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
//-----------------------------
const char CDfv [] = "D.txt";
const char CRfv [] = "Rez1.txt";
//-----------------------------
int main(){
   vector<char> A {'p','b','z','r','v','k'};
   cout << A[0];
}

Paklausiu čia, kas negerai vektoriuje parašyta, kad klaidą meta man? su masyvu taip nebūna, bet masyvas ne vektorius :)

 

Blogai konstruoji vektorių. Čia yra pavyzdžių: http://www.cplusplus.com/reference/vector/vector/vector/#example

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