eMatematikas Prisijunk Forumas Egzaminų užduotys ONLINE testai

VBE Miestai ir apskritys c++


Galbūt kas nors esat dare 2013m Miestai ir apskritys užduotį ir galėtumet pasidalinti, ką daryti su tom pasikartojančiom apsikritim jokio sprendimu nesugebu rast, lūžinėja programa...
http://i.imgur.com/EXz7vYj.png
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct pradiniai{
    string miestas;
    string aps;
    int gyventojuskaicius;

};
struct rezultatas{
    string aps;
    int gyventojusuma;
    int mingyventoju;

};
void ivedimas(pradiniai Duomenys[], int n);
void apskritiesieskojimas(pradiniai Duomenys[], rezultatas Rezultatas[], int n, bool yra, int &apskr);
void salink(int m, int n);
int main()
{
    pradiniai Duomenys[103];
    rezultatas Rezultatas[103];
    int n; int m;
    bool yra;
    int apskr=0;
    ivedimas(Duomenys, n);
    apskritiesieskojimas(Duomenys, Rezultatas, n, yra);
    return 0;
}
void ivedimas(pradiniai Duomenys[], int n){
    ifstream fd("U1.txt");
    fd >> n;
    for(int i=1; i<=n; i++){
        fd >> Duomenys[i].miestas >> Duomenys[i].aps >> Duomenys[i].gyventojuskaicius;
    }
}

void apskritiesieskojimas(pradiniai Duomenys[], rezultatas Rezultatas[], int n, bool yra, int &apskr){
    for(int i=1; i<=n; i++){
            yra=false;
        for(int j=i; j<=n; j++){
            if(Duomenys[i].aps.compare(Rezultatas[j].aps) == 0){
                    yra=true;
            }
            if(!yra){
                Rezultatas[apskr].aps= Duomenys[i].aps;
                Rezultatas[apskr].gyventojusuma=0;
                Rezultatas[apskr].mingyventoju = 600000;
                apskr++;

            }
        }
    }
}


pakeista prieš 7 m

Pastebejimai:
į masyvą rašyk/skaityk duomenis nuo 0-intosios pozicijos: for(int i=0; i<n; i++)

if(Duomenys[i].aps.compare(Rezultatas[j].aps) == 0) //gali keisti į
if(Duomenys[i].aps == Rezultatas[j].aps)          // čia dėl patogumo tik


Tau derėtų patobulinti apskrities ieškojimo funkciją. Aš tą funkciją rašyčiau taip: http://pastebin.com/YHwW6r8q. Jeigu darysi mano algoritmu, tau, turbūt, reiks rezultatų struktūros masyve turėti miestų masyvą su gyventojais.

Šiaip dar šios VBE užduoties nedaręs, nes tolokai man iki VBE.

pakeista prieš 7 m

šiek tiek paveluotai, bet gal kitiems pravers.


#include <iostream>
#include <fstream>

using namespace std;

struct Miestai
{
    string miestas;
    string apskritis;
    int maziausi;
    int kiekis;
};

void Skaitymas(Miestai A[], int &n, Miestai B[]);
void Veiksmai(Miestai A[], Miestai B[], int n, int &m);
int Radimas(Miestai B[], string apskr, int n);
void Minimum(Miestai A[], int n, Miestai B[], int m);
void Rikiavimas(Miestai B[], int m);
void Rasymas(Miestai B[], int m);

int main()
{
    Miestai A[300];
    Miestai B[300];
    int n, m; /// n - kiekis miestu; m - keikis apskriciu;
    Skaitymas(A, n, B);
    Veiksmai(A, B, n, m);
    Minimum(A, n, B, m);
    Rikiavimas(B, m);
    Rasymas(B, m);
    return 0;
}

void Skaitymas(Miestai A[], int &n, Miestai B[])
{
    ifstream fd("u2.txt");
    fd >> n;
    ///cout << n;
    char name[21];
    char name1[14];
    for(int i = 0; i < n; i++)
    {
        fd.ignore(80, '\n');
        fd.get(name, 21);
        A[i].miestas = name;
        fd.get(name1, 14);
        A[i].apskritis = name1;
        fd >> A[i].kiekis;
      ///cout << A[i].miestas << " " << A[i].apskritis << " " << A[i].kiekis << endl;
        B[i].kiekis = 0;
        B[i].maziausi = 0;
    }
    fd.close();
}

void Veiksmai(Miestai A[], Miestai B[], int n, int &m) /// apkriciu radimas ir gyventoju skaicius radimas
{
    m = 0; /// naujas kiekis;
    int k; /// reiksmei;
    int l; /// minimalei reiksmei;
    for(int i = 0; i < n; i++)
    {
        k = Radimas(B, A[i].apskritis, n);
        if(k >= 0)
        {
            B[k].kiekis += A[i].kiekis;
        } else{
            B[m] = A[i];
            m++;
        }
    }
}

int Radimas(Miestai B[], string apskr, int n)
{
    for(int i = 0; i < n; i++)
    {
        if(B[i].apskritis == apskr)
        {
            return i;
        }
    }
    return -1;
}

void Rasymas(Miestai B[], int m)
{
    ofstream fr("u2rez.txt");
    for(int i = 0; i < m; i++)
    {
        fr << B[i].apskritis << " " << B[i].maziausi << " " << B[i].kiekis << endl;
        cout << B[i].apskritis << " " << B[i].maziausi << " " << B[i].kiekis << endl;
    }
    fr.close();
}

void Minimum(Miestai A[], int n, Miestai B[], int m)
{
    int j = 0;
    for(int i = 0; i < m; i++)
    {
        j = 0;
        for(int l = 0; l < n; l++)
        {
            if(B[i].apskritis == A[l].apskritis)
            {
                if(A[l].kiekis < A[j].kiekis)
                {
                    j = l;
                }
            }
        }
        B[i].maziausi = A[j].kiekis;
    }
}

void Rikiavimas(Miestai B[], int m)
{
    Miestai pagalbinis;
    for(int i = 0; i < m; i++)
    {
        for(int j = i+1; j < m; j++)
        {
            if(B[i].maziausi >= B[j].maziausi)
            {
                pagalbinis = B[i];
                B[i] = B[j];
                B[j] = pagalbinis;
            }
        }
    }
}

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »