Pereiti prie turinio

Informatikos Egzamino užduotis „Grybai“. C++ kalba.


Rekomenduojami pranešimai

Sveiki, reikia pagalbos. Gal galite padėti man pabaigti šią užduotį?

http://i.imgur.com/XRtcOxU.png

Pradėtas mano kodas:

#include <iostream>
#include <fstream>
using namespace std;
const int a = 100;
void ivedimas(int &n, int D[], int B[], int R[], int L[])
{
   ifstream in ("duom.txt");
   in >> n;
   if(n >= 1 && n <=100){
   for(int i = 0; i < n; i++)
   {
       in >> D[i] >> B[i] >> R[i] >> L[i];
   }}
   in.close();
}
void skaiciavimas(int n, int D[], int B[], int R[], int L[])
{
   int B1[a];
   for(int i = 0; i < n; i++)
   {

       B1[i] = B[i];
   }
   for(int i = 0; i < n-1; i++)
       for(int j = i + 1; j < n; j++)
   {
       if(D[i] > D[j])
           {swap(D[i], D[j]);
           swap(B[i], B[j]);
           swap(R[i], R[j]);
           swap(L[i], L[j]);}
   }
   int v = 0;
   int D1[a];
   D1[v] = D[0];
   for(int i = 1; i <= n; i++)
   {
       if(D1[v]!=D[i])
       {
           v++;
           D1[v] = D[i];
       }
       else
       {

       }
   }




}
int main()
{
   int n, D[a], B[a], R[a], L[a];
   ivedimas(n,D,B,R,L);
   skaiciavimas(n,D,B,R,L);
   return 0;
}

Programoje aš surikiuoju masyvus, pasikartojančių dienų skaičius išmetu, bet kaip man reikia padaryti, kad būna tos pačios dienos sudėtų grybų masyvus ir pašalintų netinkamus?

Redagavo Mantisz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš daryčiau taip: visus duomenis saugočiau pirmiausia stuktūroje, patogiau tvarkyti mano nuomone. Main funkcijoje susikuri 2 tos pačios struktūros masyvus, abu vienodo dydžio t.y. 100 vietų, tada tikrini ar antrame masyve(kuris iš pradžių yra tusčias) jau yra įrašyta reikšmė iš pirmojo (kuris saugo duomenis iš failo).

for(int i = 0; i < n; i++){
       int k = yra(B, n2, A[i].nr); //Tikrina ar konkreti diena jau yra B masyve jei nera grazina -1
           if(k>=0) {B[k].barak += A[i].barak; B[k].lep += A[i].lep; B[k].raudon += A[i].raudon;}
           else {
               B[n2] = A[i];
               n2++
           }
   }

int yra(Diena B[], int n2; int nr){
   for(int i = 0; i < n2; i++){
       if(B[i].nr == nr) return i;
   }
   return -1;
}

 

EDIT: nepastebėjau, kad nereikia dienų kai neranda nei vieno, bet su paprasta if sąlyga šią problemą išspręsi

Redagavo Sirius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomiai jūs čia sprendžiate.

 

   // Susikuri vienmačius masyvus, nes juk mes privalome daryti užduotis pagal įdomias instrukcijas
   int grybas1[MAXN] = {0};
   int grybas2[MAXN] = {0};
   int grybas3[MAXN] = {0};

   // Nuskaitai grybus is duomenu failu 
   for(int i = 0; i < kiek; i++)
   {
       skaitai << diena << grybas1 << grybas2 << grybas3;
       grybas1[diena] += grybas1;
       grybas2[diena] += grybas2;
       grybas3[diena] += grybas3;
   }

  // Viskas suki for cikla ir tikrini ar suma yra daugiau už 0, jei jo išvedi duomenis jei ne suki cikla toliau
  // Max grybus irgi randi tuo pačiu principu

 

O dabar mano klausimas: gal yra žmonių žinančių, kokį standartą galimą naudoti informatikos egzamine? Kažkaip atrodo neįtikinamai, kad leistu naudoti c++ 11. O jeigu galima naudoti, tarkim c++ 11 standartą ir jie čia mačiau sąlygoje rašo, kad galima naudoti tik vienmačius masyvus ar galiu naudoti tada c++ 11 array?

 

std::array<int,100> masyvas;  

 

Atsimenu mokytoja sakė, kad jeigu praeina visus testus tai jiem realiai neįdomu, kaip tu ką rašei. Ar čia yra teisybės?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Iškilo klausimas kaip reikia komentuoti struktūra? :D

Čia taip liepė informatikos mokytojas komentuoti, bet nesu tuo tikras

 

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

using namespace std;
//----------------------------------------
struct grybai{
int diena;          //Pirmasis struktūros elementas
int baravykai;      //Antrasis struktūros elementas
int raudonikiai;    //Trečiasis struktūros elementas
int lepsiai;        //Ketvirtasis struktūros elementas
int suma;           //Penktasis struktūros elementas
};
//----------------------------------------
//Konstantos
const char CDfv[] = "duomenys.txt";
const char CRfv[] = "rezultatai.txt";
const int Cmax = 100;
//----------------------------------------
//Proceduros ir funkcijos
void skaityti(grybai A[], int & n);
void ieskoti(grybai A[], int & n);
void salinti(grybai A[], int n, int index);
void rikiuoti(grybai A[], int n);
void rodyti(grybai A[], int n);
int didziausias(grybai A[], int n);
//----------------------------------------
int main()
{
   grybai A[Cmax];
   int n;              //Kiek dienu grybavo
   skaityti(A, n);
   ieskoti(A, n);
   rikiuoti(A, n);
   rodyti(A, n);
   return 0;
}
//-----------------------------------------------
//Atsidaro faila, paima duomenys, surašo į struktūra.
void skaityti(grybai A[], int & n)
{
   ifstream fd(CDfv);
   fd>>n;
   for(int i = 0; i<n; i++)
   {
       fd>>A[i].diena>>A[i].baravykai>>A[i].raudonikiai>>A[i].lepsiai;
   }
   fd.close();
}
//-----------------------------------------------
//Ieško ar yra tokiu pačiu dienų jeigu randa grybus sudeda ir panaikina pakartotine diena
void ieskoti(grybai A[], int & n)
{
   int index = 0;
   for(int i = 0; i<n-1; i++)
       for(int j = i+1; j<n; j++)
   {
       if(A[i].diena==A[j].diena)
       {
           index = j;
           A[i].baravykai += A[j].baravykai;
           A[i].raudonikiai += A[j].raudonikiai;
           A[i].lepsiai += A[j].lepsiai;
           salinti(A, n, index);
           n--;
       }
       A[i].suma = A[i].baravykai + A[i].raudonikiai + A[i].lepsiai;
   }
}
//-----------------------
//Salina duomenys is masyvo
void salinti(grybai A[], int n, int index)
{
   for(int i = index; i<n; i++)
   {
       A[i] = A[i+1];
   }
}
//----------------------------------
//Surikiuoja duomenys "Burbuliuko metodu".
void rikiuoti(grybai A[], int n)
{
   for(int i = 0; i<n-1; i++)
       for(int j = i+1; j<n; j++)
           if(A[i].diena > A[j].diena)
           {
               grybai sp = A[i];
               A[i] = A[j];
               A[j] = sp;
           }
}
//------------------------------------
//Atsidaro faila išveda rezultatus
void rodyti(grybai A[], int n)
{
   ofstream fr(CRfv);
   for(int i = 0; i<n; i++)
   {
       fr<<A[i].diena<<" "<<A[i].baravykai<<" "<<A[i].raudonikiai<<" "<<A[i].lepsiai<<endl;
   }
   int did = didziausias(A, n);
   fr<<A[did].diena<<" "<<A[did].suma;
   fr.close();
}
//-------------------------------------------
//Suranda didžiausia grybų dienos kieki masyvo indeksa
int didziausias(grybai A[], int n)
{
   int index = 0;
   for(int i = 0; i<n; i++)
   {
       if(A[i].suma>A[index].suma)
           index = i;
   }
   return index;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Iškilo klausimas kaip reikia komentuoti struktūra? :D

Čia taip liepė informatikos mokytojas komentuoti, bet nesu tuo tikras

 

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

using namespace std;
//----------------------------------------
struct grybai{
int diena;          //Pirmasis struktūros elementas
int baravykai;      //Antrasis struktūros elementas
int raudonikiai;    //Trečiasis struktūros elementas
int lepsiai;        //Ketvirtasis struktūros elementas
int suma;           //Penktasis struktūros elementas
};
//----------------------------------------
//Konstantos
const char CDfv[] = "duomenys.txt";
const char CRfv[] = "rezultatai.txt";
const int Cmax = 100;
//----------------------------------------
//Proceduros ir funkcijos
void skaityti(grybai A[], int & n);
void ieskoti(grybai A[], int & n);
void salinti(grybai A[], int n, int index);
void rikiuoti(grybai A[], int n);
void rodyti(grybai A[], int n);
int didziausias(grybai A[], int n);
//----------------------------------------
int main()
{
   grybai A[Cmax];
   int n;              //Kiek dienu grybavo
   skaityti(A, n);
   ieskoti(A, n);
   rikiuoti(A, n);
   rodyti(A, n);
   return 0;
}
//-----------------------------------------------
//Atsidaro faila, paima duomenys, surašo į struktūra.
void skaityti(grybai A[], int & n)
{
   ifstream fd(CDfv);
   fd>>n;
   for(int i = 0; i<n; i++)
   {
       fd>>A[i].diena>>A[i].baravykai>>A[i].raudonikiai>>A[i].lepsiai;
   }
   fd.close();
}
//-----------------------------------------------
//Ieško ar yra tokiu pačiu dienų jeigu randa grybus sudeda ir panaikina pakartotine diena
void ieskoti(grybai A[], int & n)
{
   int index = 0;
   for(int i = 0; i<n-1; i++)
       for(int j = i+1; j<n; j++)
   {
       if(A[i].diena==A[j].diena)
       {
           index = j;
           A[i].baravykai += A[j].baravykai;
           A[i].raudonikiai += A[j].raudonikiai;
           A[i].lepsiai += A[j].lepsiai;
           salinti(A, n, index);
           n--;
       }
       A[i].suma = A[i].baravykai + A[i].raudonikiai + A[i].lepsiai;
   }
}
//-----------------------
//Salina duomenys is masyvo
void salinti(grybai A[], int n, int index)
{
   for(int i = index; i<n; i++)
   {
       A[i] = A[i+1];
   }
}
//----------------------------------
//Surikiuoja duomenys "Burbuliuko metodu".
void rikiuoti(grybai A[], int n)
{
   for(int i = 0; i<n-1; i++)
       for(int j = i+1; j<n; j++)
           if(A[i].diena > A[j].diena)
           {
               grybai sp = A[i];
               A[i] = A[j];
               A[j] = sp;
           }
}
//------------------------------------
//Atsidaro faila išveda rezultatus
void rodyti(grybai A[], int n)
{
   ofstream fr(CRfv);
   for(int i = 0; i<n; i++)
   {
       fr<<A[i].diena<<" "<<A[i].baravykai<<" "<<A[i].raudonikiai<<" "<<A[i].lepsiai<<endl;
   }
   int did = didziausias(A, n);
   fr<<A[did].diena<<" "<<A[did].suma;
   fr.close();
}
//-------------------------------------------
//Suranda didžiausia grybų dienos kieki masyvo indeksa
int didziausias(grybai A[], int n)
{
   int index = 0;
   for(int i = 0; i<n; i++)
   {
       if(A[i].suma>A[index].suma)
           index = i;
   }
   return index;
}

Ačiū, gerasis žmogau :). Taip pat dėkui ir kitiems, kurie norėjo padėti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomiai jūs čia sprendžiate.

 

   // Susikuri vienmačius masyvus, nes juk mes privalome daryti užduotis pagal įdomias instrukcijas
   int grybas1[MAXN] = {0};
   int grybas2[MAXN] = {0};
   int grybas3[MAXN] = {0};

   // Nuskaitai grybus is duomenu failu 
   for(int i = 0; i < kiek; i++)
   {
       skaitai << diena << grybas1 << grybas2 << grybas3;
       grybas1[diena] += grybas1;
       grybas2[diena] += grybas2;
       grybas3[diena] += grybas3;
   }

  // Viskas suki for cikla ir tikrini ar suma yra daugiau už 0, jei jo išvedi duomenis jei ne suki cikla toliau
  // Max grybus irgi randi tuo pačiu principu

 

O dabar mano klausimas: gal yra žmonių žinančių, kokį standartą galimą naudoti informatikos egzamine? Kažkaip atrodo neįtikinamai, kad leistu naudoti c++ 11. O jeigu galima naudoti, tarkim c++ 11 standartą ir jie čia mačiau sąlygoje rašo, kad galima naudoti tik vienmačius masyvus ar galiu naudoti tada c++ 11 array?

 

std::array<int,100> masyvas;  

 

Atsimenu mokytoja sakė, kad jeigu praeina visus testus tai jiem realiai neįdomu, kaip tu ką rašei. Ar čia yra teisybės?

Įdomus ir nelogiškas tavo sprendimas man atrodo. Jei tarkim duomenu faile bus 1, 2, 3, 10 dienos tik, tavo masyvuose 4-9 vietos bus tuscios, tai kaip zadi sukti for cikla? Beto atsiprašau, kad toliau rašau šioj temoj nors autorius ir gavo atsakymą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomus ir nelogiškas tavo sprendimas man atrodo. Jei tarkim duomenu faile bus 1, 2, 3, 10 dienos tik, tavo masyvuose 4-9 vietos bus tuscios, tai kaip zadi sukti for cikla? Beto atsiprašau, kad toliau rašau šioj temoj nors autorius ir gavo atsakymą.

 

tai suks ciklą per dienas nuo 1 iki 31 (d duota sąlygoj) ir ten kur nebus grybų bus 0, nes užsinulina tuos masyvus pradžioj.

 

 

Iškilo klausimas kaip reikia komentuoti struktūra? :D

Čia taip liepė informatikos mokytojas komentuoti, bet nesu tuo tikras

 

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

using namespace std;
//----------------------------------------
struct grybai{
   int diena;          //Pirmasis struktūros elementas
   int baravykai;      //Antrasis struktūros elementas
   int raudonikiai;    //Trečiasis struktūros elementas
   int lepsiai;        //Ketvirtasis struktūros elementas
   int suma;           //Penktasis struktūros elementas
};

 

manau, kad toks komentavimas nelogiškas, nes mes ir taip matom, kelintas nuo viršaus tas struktūros elementas yra. Manau, daug geriau būtų parašyti ką tas narys realiai reiškia/daro. Pvz. diena - grybavimo diena, baravykai/raudinikai/lepsiai - ta diena rastu grybu skaicius ir suma - bendras ta diena rastu grybu skaicius.

Redagavo Cibulinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomus ir nelogiškas tavo sprendimas man atrodo. Jei tarkim duomenu faile bus 1, 2, 3, 10 dienos tik, tavo masyvuose 4-9 vietos bus tuscios, tai kaip zadi sukti for cikla? Beto atsiprašau, kad toliau rašau šioj temoj nors autorius ir gavo atsakymą.

 

Na ištiesų, logiškiau yra susikurti papildomus masyvus ir dar kelias random funkcijas, o jei matai, kad kažkas neveikia dar sukurti kokius 2 papildomus if'us. O jei rimtai tai tikiuosi, jog atsakė į tavo klausimą, kitas narys.

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