Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Dėl programavimo užduoties


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1356 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki,

http://medziaga.puslapiai.lt/konsultacijos_2016_6/programavimas.pdf

Kaip reikėtų įvykdyti šios programos pageidaujamų rezultatų antrą bei ketvirtą punktus (rasti populiariausius berniukų ir mergaičių vardus). Pirmas, trečias bei penktas rezultatų punktas kaip ir pavyko.

#include <fstream>
#include <string>
using namespace std;
const char CDfv[]="Duom1.txt";
const char CRfv[]="rez.txt";
const int CMax =  10000;
//---
struct Vaikas{
string pav; // vaiko pavarde
string vard; // vaiko vardas
char x; // berniukas ar mergaitë
int met; // vaiko gimimo metai
int men; // vaiko gimimo mënuo
int d; // vaiko gimimo diena
};
void Skaityti(const char CDfv[], int & n, Vaikas A[]); // pradiniø duomenø skaitymo funkcija
void Skaiciuoti(int n, Vaikas A[], int & bern, int & merg, int vaik[]); // funkcija, kuri suskaičiuoja gimusiųjų skaičių kiekvieną metų mėnesį ir kitus reikalingus dalykus
//---
int main ()
{
    int n; // gimimø skaièius
    int bern = 0; // berniukų skaičius
    int merg = 0; // mergaičių skaičius
    int vaik[CMax]; // kiek vaikų gimė kiekvieną mėnesį
    Vaikas A[CMax];
    Skaityti(CDfv, n, A);
    Skaiciuoti(n, A, bern, merg, vaik);
    return 0;
}
void Skaityti(const char CDfv[], int & n, Vaikas A[])
{
    char ei1[13]; // kintamasis, skirtas vaiko pavardës nuskaitymui
    char ei2[12]; // kintamasis, skirtas vaiko vardo nuskaitymui
    ifstream fd(CDfv);
    fd >> n;
    fd.ignore(80, '\n');
    for (int i = 0; i < n; i++)
    {
        fd.get(ei1, 12);
        A.pav = ei1;
        fd.ignore(2, '\n');
        fd.get(ei2, 12);
        A.vard = ei2;
        fd >> A.x >> A.met >> A.men >> A.d;
        fd.ignore(80, '\n');
    }
    fd.close();
}
void Skaiciuoti(int n, Vaikas A[], int & bern, int & merg, int vaik[])
{
    for (int i = 0; i < n; i++)
    {
        if (A.x == 'v')
        {
            bern++;
        }
        else if (A.x == 'm')
        {
            merg++;
        }
    }
    for (int i = 0; i < 12; i++)
    {
        vaik = 0;
    }
    for (int i = 0; i < n; i++)
    {
        if (A.men == 1)
        {
            vaik[0]++;
        }
        else if (A.men == 2)
        {
            vaik[1]++;
        }
        else if (A.men == 3)
        {
            vaik[2]++;
        }
        else if (A.men == 4)
        {
            vaik[3]++;
        }
        else if (A.men == 5)
        {
            vaik[4]++;
        }
        else if (A.men == 6)
        {
            vaik[5]++;
        }
        else if (A.men == 7)
        {
            vaik[6]++;
        }
        else if (A.men == 8)
        {
            vaik[7]++;
        }
        else if (A.men == 9)
        {
            vaik[8]++;
        }
        else if (A.men == 10)
        {
            vaik[9]++;
        }
        else if (A.men == 11)
        {
            vaik[10]++;
        }
        else if (A.men == 12)
        {
            vaik[11]++;
        }
    }
    for (int i = 0; i < n-1; i++)
     for (j = i+1; j < n; j++)
      if (A.vard == A[j].vard)
      {
          k++;
      }
}

 

Nuoroda į komentarą
Dalintis per kitą puslapį

Manau, kad vienas iš būdų tai visų pirma surikiuot visus vaikus pagal vardą abėcėlės tvarka, nes, kai vienodas vardų populiarumas reikia pateikt pagal abc. O toliau:

int getNameID(char name[NAME_SIZE], int n, string names[]) {
    for (int i = 0; i < n; i++)
        if (strcmp(names[i].c_str(), name) == 0) return i;
    return -1; //Vardas nerastas
}

string getMostCommonNameByGender(Gender g, int n, Kid (&kids)[MAX_KIDS]) {
    int count[n];
    fill_n(count, n, 0); //Uzpildom masyva 0

    string names[n];

    for (int i = 0; i < n; i++) {
        if (kids[i].g != g) continue;

        //Surandam varda names[n] jei egzistuoja ir grazinam indeksa, kuris galioja ir count masyve
        int id = getNameID(kids[i].name, n, names);

        if (id == -1) { //Kai vardas randamas pirma karta, t.y. unikalus
            names[i] = kids[i].name; //Pridedam i vardu masyva, kad galetume veliau patikrinti
            ++count[i]; //Vardas buvo rasta pirma karta todel suteikiama reiksme = 1
        } else
            ++count[id]; //Cia pridedam kai randam pasikartojanti varda

    }

    //Ieskom didziausios reiksmes
    int max = 0, last_id = 0;
    for (int i = 0; i < n; i++) {
        if (count[i] > max) {
            max = count[i];
            last_id = i; //Priskiriam id pirmutiniam diziausiam elementui
        }
    }

    return names[last_id];
}

Also, mėnesius skaičiuot būtų žymiai paprasčiau tiesiog taip:

for (int i = 0; i < n; i++)
	++vaik[A[i].men-1];

Mano sprendimas: https://pastebin.com/G450cBGv

Redaguota , nario magax
fix
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1356 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...