Pereiti prie turinio

2011 VBE Pirštinės


Rekomenduojami pranešimai

Sveiki, taigi susidūriau su problema failo nusiskaitymą pasidariau gerai, viskas gerai, bet yra viena vietą kai skaičiuoju pirštinių poras man išmeta trys nors turėtu išmest 2.Ką darau Blogai? VIsas kodas ir duomenų failas:

 

14
4 1 25
4 1 13
4 2 15
4 2 25
3 2 42
3 2 25
4 1 25
3 1 25
4 1 25
3 1 42
3 1 25
3 1 36
4 1 24
4 1 15

 

const int Cmax = 100;
const int Cpav = 20;

struct Pirstines
{
   //failo skaitymui
   int Sk1; // Vieta pirmam skaičiui iš failo
   int Sk2; // antram skaičiui
   int Sk3; // trečiam skaičiui
};
//funkcijos

void Skaityti (Pirstines A[], int & n)
{
   ifstream fd(Cdf);
   fd >> n;
   for(int i = 0; i < n; i ++)
   {
       fd >> A[i].Sk1 >> A[i].Sk2 >> A[i].Sk3;
   }
   fd.close();
}

void Spausdinti (Pirstines A[], int n)
{
   ofstream fs(Cfd);
   for(int i = 0; i < n; i ++)
   {
       fs<<A[i].Sk1 << " "<< A[i].Sk2 << " "<< A[i].Sk3<<endl;
   }
   fs.close();
}


// kiek yra piršinių vyriškos ir moteriškos lyties.
int KiekYraPirstiniu(Pirstines A[], int n, int m)
{
   int c = 0;
   for(int i = 0; i < n; i++)
   {
       if(A[i].Sk1 == m)
       {
           c++;
       }
   }
   return c;
}

int PirstiniuPoros (Pirstines A[], int n,int m)
{
   int b = 0;
       for(int i = 0; i < n; i ++)
       {
          for(int j = i + 1; j < n; j++)
          {
               if(A[i].Sk3 == A[j].Sk3 && A[i].Sk1 == m && A[j].Sk1 == m && A[i].Sk2 != A[j].Sk2)
               {
                  b++;
               }

          }
       }
   return b;
}
int main()
{
   int n; // pirsšiniu skaičius
   int v = 3; int m = 4; // indeksai vyru ir moteru
   int d = 2, k = 1;
   int mot, vyr; // išviso piršinių kiek yra viriškos lyties ir keik moteriškos.
   int motp,vyrp; // vyriškų porų ir moteriškų porų piršinių sk.
   Pirstines A[Cmax];
   Skaityti(A,n);
   mot  = KiekYraPirstiniu(A,n,m);
   vyr = KiekYraPirstiniu(A,n,v);
   vyrp = PirstiniuPoros(A,n,v,);
   Spausdinti(A,n);
   cout<<vyrp;
   return 0;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Yra viena pirštinė 3 2 25 ir dvi 3 1 25, 3 1 25. Tavo PirstiniuPoros f-ja padaro iš trijų pirštinių dvi poras. Suradus porą nutrauk ciklą ir viskas turėtų būt gerai.

if(A[i].Sk3 == A[j].Sk3 && A[i].Sk1 == m && A[j].Sk1 == m && A[i].Sk2 != A[j].Sk2) {
  b++;
  break;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bandyk taip:

Pridėk į struktūrą naują kintamąjį

struct Pirstines {
 //failo skaitymui
 int Sk1; // Vieta pirmam skaičiui iš failo
 int Sk2; // antram skaičiui
 int Sk3; // trečiam skaičiui
 bool used;
};

Skaityme visur jį inicializuok

for(int i = 0; i < n; i ++) {
 fd >> A[i].Sk1 >> A[i].Sk2 >> A[i].Sk3;
 A[i].used = false;
}

Ir tikrinant poras, jau panadotas išmesk

if(A[i].Sk3 == A[j].Sk3 && A[i].Sk1 == m && A[j].Sk1 == m && A[i].Sk2 != A[j].Sk2 && (!A[i].used && !A[j].used)) {
 b++;
 A[i].used = true;
 A[j].used = true;
 break;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Bandyk taip:

Pridėk į struktūrą naują kintamąjį

struct Pirstines {
 //failo skaitymui
 int Sk1; // Vieta pirmam skaičiui iš failo
 int Sk2; // antram skaičiui
 int Sk3; // trečiam skaičiui
 bool used;
};

Skaityme visur jį inicializuok

for(int i = 0; i < n; i ++) {
 fd >> A[i].Sk1 >> A[i].Sk2 >> A[i].Sk3;
 A[i].used = false;
}

Ir tikrinant poras, jau panadotas išmesk

if(A[i].Sk3 == A[j].Sk3 && A[i].Sk1 == m && A[j].Sk1 == m && A[i].Sk2 != A[j].Sk2 && (!A[i].used && !A[j].used)) {
 b++;
 A[i].used = true;
 A[j].used = true;
 break;
}

Dėkui labai, gal galėtum paaiškint kodėl tiap reikėjo rašyt? nes su tuo bool tipu labai retai kada susiduriu. :)

Redagavo Julinho
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai čia sprendimas trivialus, yra n+k būtų padaryt praktiškai tą patį. Vienas iš kitokių kelių, vietoj bool'o galėjai panaudotos pirštinės numerius nuliais užpildyt ir jos nebeskaičiuotų. Tas bool'as šiuo atvėju kaip flagas nurodantis, praleist pirštinę jei su ja pora jau sudaryta.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai čia sprendimas trivialus, yra n+k būtų padaryt praktiškai tą patį. Vienas iš kitokių kelių, vietoj bool'o galėjai panaudotos pirštinės numerius nuliais užpildyt ir jos nebeskaičiuotų. Tas bool'as šiuo atvėju kaip flagas nurodantis, praleist pirštinę jei su ja pora jau sudaryta.

Ačiū, supratau dabar dėl ko reikėjo panaudot šitą bool :)

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