Peršokti į turinį

Neteisingai rodo gimimų skaičių


Recommended Posts

Sveiki, kodas veikia gerai, bet ištiko problema. Man reikia parodyti, kiek žmonių gimė kiekvieną mėnesį, bet pačiame faile yra parodyti ne visi mėnesiai. Susikūriau dar vieną skaičiaivmo funkciją "void menesiai" ir ten susiskaičiuoti, tačiau main dalyje parašius, kad parodytų man skaičius, rodo neteisingai (vien tik vienetus: '1 1 1 1 1 1 1 1'). Kaip reikia tiksliai man tai padaryti?

Failas atrodo taip: 


Antanaitis  Martynas    v 2011 02 16
Giedraitis  Antanas     v 2011 02 21
Rokaitis    Rokas       v 2011 01 01
Martinaitis Martynas    v 2011 05 03
Gretaite    Greta       m 2011 02 14
Rasaite     Rasa        m 2011 01 10
Juozaitis   Rokas       v 2011 12 12
Gerdaite    Greta       m 2011 01 15

#include <iostream>
#include <fstream>
#include <iomanip>
#include <clocale>
using namespace std;

struct mokiniai {
    string vardas, pavarde;
    char lytis{};
    int metai{}, menuo{}, diena{};
    int men = 0; 
};
struct atrinkimai {
    string vardas; 
    char lytis{}; 
    int metai{}, menuo{}, diena{};
    int kartai = 0;
};
 void skaitymas(mokiniai x[], int &kiekis)
{
    const int ilgis = 12;
    char s[12]{};
    ifstream failas("duom1.txt");
    failas >> kiekis; failas.ignore(80, '\n');
    for (int i = 0; i < kiekis; i++)
    {
        failas.get(s, ilgis);
        x[i].pavarde = s;
        failas.get(s, ilgis);
        x[i].vardas = s;
        failas >> x[i].lytis >> x[i].metai >> x[i].menuo >> x[i].diena; failas.ignore(80, '\n');
    }
    failas.close();
}
/*void kiek(mokiniai x[], int kiekis)
{
    for (int i = 0; i < kiekis; i++)
    {
        if (x[i].lytis == 'v')
        {
            x[i].kiek1++;
        }
        if (x[i].lytis == 'm')
        {
            x[i].kiek2++;
        }
    }
}*/
 int kiek(mokiniai x[], int kiekis, char simb)
 {
     int k = 0;
     for (int i = 0; i < kiekis; i++)
     {
         if (x[i].lytis == simb)
         {
             k++;
         }
     }
     return k;
 }

bool tikrinti(atrinkimai y[], int kiekis1, string tekstas)
{
    bool yra = false; 
    for (int i = 0; i <= kiekis1; i++)
    {
        if (y[i].vardas == tekstas)
        {
            yra = true; 
        }
    }
    return yra; 
}
void tikrinimas(mokiniai x[], int kiekis, atrinkimai y[], int &kiekis1)
{
    kiekis1 = 0; 
    y[kiekis1].vardas = x[kiekis1].vardas; 
    y[kiekis1].lytis = x[kiekis1].lytis; 
    for (int i = 0; i < kiekis; i++)
    {
        if (tikrinti(y, kiekis1, x[i].vardas) == false)
        {
            kiekis1++; 
            y[kiekis1].vardas = x[i].vardas; 
            y[kiekis1].lytis = x[i].lytis;
        }
    }
}
void sumavimas(int kiekis, int kiekis1, mokiniai x[], atrinkimai y[])
{
    for (int i = 0; i <= kiekis1; i++)
    {
        for (int j = 0; j < kiekis; j++)
        {
            if (y[i].vardas == x[j].vardas)
            {
                y[i].kartai++;
            }
        }
    }
}
void didziausias(atrinkimai y[], mokiniai x[], int kiekis1, int& vard)
{
    vard = y[0].kartai;
    for (int i = 0; i <= kiekis1; i++)
    {    
        {
            if (y[i].kartai > vard)
            {
                if (y[i].lytis == 'v')
                {
                    vard = y[i].kartai;
                }
            }
        }
    }
}
void didziausias1(atrinkimai y[], mokiniai x[], int kiekis1, int& vard1)
{
    vard1 = y[0].kartai;
    for (int i = 0; i <= kiekis1; i++)
    {
        if (y[i].kartai > vard1)
        {
            if (y[i].lytis == 'm')
            {
                vard1 = y[i].kartai;
            }
        }
    }
}
void rikiavimas(atrinkimai y[], int kiekis1)
{
    for (int i = 0; i <= kiekis1; i++)
    {
        for (int j = 0; j <= kiekis1 - 1; j++)
        {
            if (y[j].vardas > y[j + 1].vardas)
                swap(y[j], y[j + 1]); 
        }
    }
}
void menesiai(mokiniai x[], int kiekis)
{
    int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    for (int j = 0; j < 12; j++)
    {
        for (int i = 0; i < kiekis; i++)
        {
            if (x[i].menuo == a[j])
            {
                x[i].men++;
            }
        }
    }
}

int main()
{
    setlocale(LC_ALL, "Lithuanian"); 
    mokiniai x[100]; 
    atrinkimai y[100];
    int kiekis, kiekis1, vard, vard1; 
    skaitymas(x, kiekis);
    //kiek(x, kiekis);
    tikrinimas(x, kiekis, y, kiekis1); 
    sumavimas(kiekis, kiekis1, x, y); 
    didziausias(y, x, kiekis1, vard); 
    didziausias1(y, x, kiekis1, vard1);
    rikiavimas(y, kiekis1); 
    menesiai(x, kiekis); 
    
for (int i = 0; i <= kiekis1; i++)
    {
    if (y[i].kartai == vard1)
        {
            if (y[i].lytis == 'v')
            {
                if (y[i].vardas < y[i + 1].vardas)
                {
                    cout << y[i].vardas << y[i].kartai << endl;
                    break; 
                }
            }
        }
    }
cout << "Berniukai: " << kiek(x, kiekis, 'v') << endl;
for (int i = 0; i <= kiekis1; i++)
{
    if (y[i].kartai == vard1)
    {
        if (y[i].lytis == 'm')
        {
            if (y[i].vardas < y[i + 1].vardas)
            {
                cout << y[i].vardas << y[i].kartai  << endl;
                break;
            }
        }
    }
}
cout << "Mergaitės: " << kiek(x, kiekis, 'm') << endl;
cout << endl; 

for (int i = 0; i < kiekis; i++)
{
    cout << " " << x[i].men;
}


    return 0;
}
    

prieš 13 valandas(-ų), Artūraz parašė:

Sveiki, kodas veikia gerai, bet ištiko problema. Man reikia parodyti, kiek žmonių gimė kiekvieną mėnesį, bet pačiame faile yra parodyti ne visi mėnesiai. Susikūriau dar vieną skaičiaivmo funkciją "void menesiai" ir ten susiskaičiuoti, tačiau main dalyje parašius, kad parodytų man skaičius, rodo neteisingai (vien tik vienetus: '1 1 1 1 1 1 1 1'). Kaip reikia tiksliai man tai padaryti?

Failas atrodo taip: 


Antanaitis  Martynas    v 2011 02 16
Giedraitis  Antanas     v 2011 02 21
Rokaitis    Rokas       v 2011 01 01
Martinaitis Martynas    v 2011 05 03
Gretaite    Greta       m 2011 02 14
Rasaite     Rasa        m 2011 01 10
Juozaitis   Rokas       v 2011 12 12
Gerdaite    Greta       m 2011 01 15

#include <iostream>
#include <fstream>
#include <iomanip>
#include <clocale>
using namespace std;

struct mokiniai {
    string vardas, pavarde;
    char lytis{};
    int metai{}, menuo{}, diena{};
    int men = 0; 
};
struct atrinkimai {
    string vardas; 
    char lytis{}; 
    int metai{}, menuo{}, diena{};
    int kartai = 0;
};
 void skaitymas(mokiniai x[], int &kiekis)
{
    const int ilgis = 12;
    char s[12]{};
    ifstream failas("duom1.txt");
    failas >> kiekis; failas.ignore(80, '\n');
    for (int i = 0; i < kiekis; i++)
    {
        failas.get(s, ilgis);
        x[i].pavarde = s;
        failas.get(s, ilgis);
        x[i].vardas = s;
        failas >> x[i].lytis >> x[i].metai >> x[i].menuo >> x[i].diena; failas.ignore(80, '\n');
    }
    failas.close();
}
/*void kiek(mokiniai x[], int kiekis)
{
    for (int i = 0; i < kiekis; i++)
    {
        if (x[i].lytis == 'v')
        {
            x[i].kiek1++;
        }
        if (x[i].lytis == 'm')
        {
            x[i].kiek2++;
        }
    }
}*/
 int kiek(mokiniai x[], int kiekis, char simb)
 {
     int k = 0;
     for (int i = 0; i < kiekis; i++)
     {
         if (x[i].lytis == simb)
         {
             k++;
         }
     }
     return k;
 }

bool tikrinti(atrinkimai y[], int kiekis1, string tekstas)
{
    bool yra = false; 
    for (int i = 0; i <= kiekis1; i++)
    {
        if (y[i].vardas == tekstas)
        {
            yra = true; 
        }
    }
    return yra; 
}
void tikrinimas(mokiniai x[], int kiekis, atrinkimai y[], int &kiekis1)
{
    kiekis1 = 0; 
    y[kiekis1].vardas = x[kiekis1].vardas; 
    y[kiekis1].lytis = x[kiekis1].lytis; 
    for (int i = 0; i < kiekis; i++)
    {
        if (tikrinti(y, kiekis1, x[i].vardas) == false)
        {
            kiekis1++; 
            y[kiekis1].vardas = x[i].vardas; 
            y[kiekis1].lytis = x[i].lytis;
        }
    }
}
void sumavimas(int kiekis, int kiekis1, mokiniai x[], atrinkimai y[])
{
    for (int i = 0; i <= kiekis1; i++)
    {
        for (int j = 0; j < kiekis; j++)
        {
            if (y[i].vardas == x[j].vardas)
            {
                y[i].kartai++;
            }
        }
    }
}
void didziausias(atrinkimai y[], mokiniai x[], int kiekis1, int& vard)
{
    vard = y[0].kartai;
    for (int i = 0; i <= kiekis1; i++)
    {    
        {
            if (y[i].kartai > vard)
            {
                if (y[i].lytis == 'v')
                {
                    vard = y[i].kartai;
                }
            }
        }
    }
}
void didziausias1(atrinkimai y[], mokiniai x[], int kiekis1, int& vard1)
{
    vard1 = y[0].kartai;
    for (int i = 0; i <= kiekis1; i++)
    {
        if (y[i].kartai > vard1)
        {
            if (y[i].lytis == 'm')
            {
                vard1 = y[i].kartai;
            }
        }
    }
}
void rikiavimas(atrinkimai y[], int kiekis1)
{
    for (int i = 0; i <= kiekis1; i++)
    {
        for (int j = 0; j <= kiekis1 - 1; j++)
        {
            if (y[j].vardas > y[j + 1].vardas)
                swap(y[j], y[j + 1]); 
        }
    }
}
void menesiai(mokiniai x[], int kiekis)
{
    int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    for (int j = 0; j < 12; j++)
    {
        for (int i = 0; i < kiekis; i++)
        {
            if (x[i].menuo == a[j])
            {
                x[i].men++;
            }
        }
    }
}

int main()
{
    setlocale(LC_ALL, "Lithuanian"); 
    mokiniai x[100]; 
    atrinkimai y[100];
    int kiekis, kiekis1, vard, vard1; 
    skaitymas(x, kiekis);
    //kiek(x, kiekis);
    tikrinimas(x, kiekis, y, kiekis1); 
    sumavimas(kiekis, kiekis1, x, y); 
    didziausias(y, x, kiekis1, vard); 
    didziausias1(y, x, kiekis1, vard1);
    rikiavimas(y, kiekis1); 
    menesiai(x, kiekis); 
    
for (int i = 0; i <= kiekis1; i++)
    {
    if (y[i].kartai == vard1)
        {
            if (y[i].lytis == 'v')
            {
                if (y[i].vardas < y[i + 1].vardas)
                {
                    cout << y[i].vardas << y[i].kartai << endl;
                    break; 
                }
            }
        }
    }
cout << "Berniukai: " << kiek(x, kiekis, 'v') << endl;
for (int i = 0; i <= kiekis1; i++)
{
    if (y[i].kartai == vard1)
    {
        if (y[i].lytis == 'm')
        {
            if (y[i].vardas < y[i + 1].vardas)
            {
                cout << y[i].vardas << y[i].kartai  << endl;
                break;
            }
        }
    }
}
cout << "Mergaitės: " << kiek(x, kiekis, 'm') << endl;
cout << endl; 

for (int i = 0; i < kiekis; i++)
{
    cout << " " << x[i].men;
}


    return 0;
}
    

Tai ar gali kažkas padėti, o ne tiesiog praeiti? 

Redaguota , nario Artūraz
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Artūraz pakeitė pavadinimą į Neteisingai rodo gimimų skaičių
prieš 3 minutes , Adomas J. parašė:

@Artūraz nesuprantu, negi nežinai tokio dalyko kaip ChatGPT? Ta ką parašei temoje parašai tenai ir volia, gausi atsakymą į savo klausimą.

Supranti, kad tas gpt grybas paskutinis? (Nebent turi užsiprenumeravęs mokamą versiją mėnesiui) Aš jį tik naudoju anglų esėms parašyt, niekam daugiau. Ne kartą to bot'o prašiau pagalbos - visad šūdą sumaldavo su programavimu. Todėl čia ir prašau pagalbos :D Ir plius - per sunkiai man ten suprast ką ten prirašo tas bot'as, ypač kai naudoja kokius vektorius ar "std map" (kažkas tokio). 

Nuoroda į komentarą
Dalintis per kitą puslapį

prieš 3 minutes , Artūraz parašė:

Supranti, kad tas gpt grybas paskutinis? (Nebent turi užsiprenumeravęs mokamą versiją mėnesiui) Aš jį tik naudoju anglų esėms parašyt, niekam daugiau. Ne kartą to bot'o prašiau pagalbos - visad šūdą sumaldavo su programavimu. Todėl čia ir prašau pagalbos :D Ir plius - per sunkiai man ten suprast ką ten prirašo tas bot'as, ypač kai naudoja kokius vektorius ar "std map" (kažkas tokio). 

Aš kaip tik galvoju jog tai vienas iš geriausių žmonijos išradimų :D Surašai atitinkamus promptus ir ko tiksliai nori, tada neturėtų būti bėdų.

Čia ką ChatGPT 4 parašė parašius tavo temos tekstą su duotu tavo kodu (modifikuota mėnesiai funkcija)

void menesiai(mokiniai x[], int kiekis, int monthCounts[])
{
    for (int i = 0; i < kiekis; i++)
    {
        monthCounts[x[i].menuo - 1]++;
    }
}

int main()
{
    setlocale(LC_ALL, "Lithuanian"); 
    mokiniai x[100]; 
    atrinkimai y[100];
    int kiekis, kiekis1, vard, vard1; 
    int monthCounts[12] = {}; // Initialize the count for each month to 0

    skaitymas(x, kiekis);
    tikrinimas(x, kiekis, y, kiekis1); 
    sumavimas(kiekis, kiekis1, x, y); 
    didziausias(y, x, kiekis1, vard); 
    didziausias1(y, x, kiekis1, vard1);
    rikiavimas(y, kiekis1); 
    menesiai(x, kiekis, monthCounts); // Calculate births per month
    
    cout << "Berniukai: " << kiek(x, kiekis, 'v') << endl;
    cout << "Mergaitės: " << kiek(x, kiekis, 'm') << endl;
    cout << endl; 

    // Display the number of people born in each month
    for (int i = 0; i < 12; i++)
    {
        cout << "Month " << i + 1 << ": " << monthCounts[i] << endl;
    }

    return 0;
}

 

Nuoroda į komentarą
Dalintis per kitą puslapį

prieš 17 minutes , Adomas J. parašė:

Aš kaip tik galvoju jog tai vienas iš geriausių žmonijos išradimų :D Surašai atitinkamus promptus ir ko tiksliai nori, tada neturėtų būti bėdų.

Čia ką ChatGPT 4 parašė parašius tavo temos tekstą su duotu tavo kodu (modifikuota mėnesiai funkcija)

void menesiai(mokiniai x[], int kiekis, int monthCounts[])
{
    for (int i = 0; i < kiekis; i++)
    {
        monthCounts[x[i].menuo - 1]++;
    }
}

int main()
{
    setlocale(LC_ALL, "Lithuanian"); 
    mokiniai x[100]; 
    atrinkimai y[100];
    int kiekis, kiekis1, vard, vard1; 
    int monthCounts[12] = {}; // Initialize the count for each month to 0

    skaitymas(x, kiekis);
    tikrinimas(x, kiekis, y, kiekis1); 
    sumavimas(kiekis, kiekis1, x, y); 
    didziausias(y, x, kiekis1, vard); 
    didziausias1(y, x, kiekis1, vard1);
    rikiavimas(y, kiekis1); 
    menesiai(x, kiekis, monthCounts); // Calculate births per month
    
    cout << "Berniukai: " << kiek(x, kiekis, 'v') << endl;
    cout << "Mergaitės: " << kiek(x, kiekis, 'm') << endl;
    cout << endl; 

    // Display the number of people born in each month
    for (int i = 0; i < 12; i++)
    {
        cout << "Month " << i + 1 << ": " << monthCounts[i] << endl;
    }

    return 0;
}

 

Žiūriu..bet nelabai suprantu į ką žiūriu :D 

Nuoroda į komentarą
Dalintis per kitą puslapį

2024-04-28 19:36, Adomas J. parašė:

Aš kaip tik galvoju jog tai vienas iš geriausių žmonijos išradimų :D Surašai atitinkamus promptus ir ko tiksliai nori, tada neturėtų būti bėdų.

Čia ką ChatGPT 4 parašė parašius tavo temos tekstą su duotu tavo kodu (modifikuota mėnesiai funkcija)

void menesiai(mokiniai x[], int kiekis, int monthCounts[])
{
    for (int i = 0; i < kiekis; i++)
    {
        monthCounts[x[i].menuo - 1]++;
    }
}

int main()
{
    setlocale(LC_ALL, "Lithuanian"); 
    mokiniai x[100]; 
    atrinkimai y[100];
    int kiekis, kiekis1, vard, vard1; 
    int monthCounts[12] = {}; // Initialize the count for each month to 0

    skaitymas(x, kiekis);
    tikrinimas(x, kiekis, y, kiekis1); 
    sumavimas(kiekis, kiekis1, x, y); 
    didziausias(y, x, kiekis1, vard); 
    didziausias1(y, x, kiekis1, vard1);
    rikiavimas(y, kiekis1); 
    menesiai(x, kiekis, monthCounts); // Calculate births per month
    
    cout << "Berniukai: " << kiek(x, kiekis, 'v') << endl;
    cout << "Mergaitės: " << kiek(x, kiekis, 'm') << endl;
    cout << endl; 

    // Display the number of people born in each month
    for (int i = 0; i < 12; i++)
    {
        cout << "Month " << i + 1 << ": " << monthCounts[i] << endl;
    }

    return 0;
}

 

Jei nemoka klausimo korektiskai uzduot, tai chatgpt nepades)))

Nuoroda į komentarą
Dalintis per kitą puslapį

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