Pereiti prie turinio

C++: VBE 2013 II užduotis | Rūšiavimas


Rekomenduojami pranešimai

Sveiki,

 

ruošiuosi VBE 2015, kuris jau ne už kalnų. Sprendžiu 2013 VBE 2-ąjį užduotį ir susidūriau su rūšiavimo problema. Mačiau temą, kurioje žmogus prašo pagalbos su pascal, tačiau aš programuoju su C++.

 

Programa turi įrašyti į failą apylinkes didėjimo tvarka (pagal gyventojų skaičių), tačiau jei skaičius sutampa, tuomet reikia rūšiuoti pasikartojančiuosius abėcėlės tvarka.

 

Štai mano kodas:

 

http://pastebin.com/sLvPv70J

 

Visas kodas veikia gerai, tačiau yra vienas bet. Kai aš užkomentuoju procedūrą "Rusiavimas" (rūšiuoja didėjimo tvarka), rūšiavimas abėcėlės tvarka puikiai veikia (tai įsitikinu išvesdamas apylinkes į ekraną), tačiau kai įjungiu abu rūšiavimus, tas kuris rūšiuoja pagal skaičius veikia, o abėcėlės rūšiavimas jau nebeveikia. Gal kas turi kokių minčių, dėl ko tai galėtų būti?

 

Pilnos užduoties sąlyga: http://nec.lt/failai/3679_2013-IT-1-uzd-intern.pdf

 

P.S dar vienas klausimas, egzamino užduotyse ten kur "Pradiniai duomenys" paaiškina duotus duomenys ir prie jų prideda intervalą, ribas:

http://puu.sh/ioDhX/6b5e08a0a3.png

Ar reikia programoje sukurti funkciją, kuri tikrintų šias ribas ar čia duota šiaip sau (testavimui)?

 

Dėkoju už atsakymus!

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki,

 

ruošiuosi VBE 2015, kuris jau ne už kalnų. Sprendžiu 2013 VBE 2-ąjį užduotį ir susidūriau su rūšiavimo problema. Mačiau temą, kurioje žmogus prašo pagalbos su pascal, tačiau aš programuoju su C++.

 

Programa turi įrašyti į failą apylinkes didėjimo tvarka (pagal gyventojų skaičių), tačiau jei skaičius sutampa, tuomet reikia rūšiuoti pasikartojančiuosius abėcėlės tvarka.

 

Štai mano kodas:

 

http://pastebin.com/sLvPv70J

 

Visas kodas veikia gerai, tačiau yra vienas bet. Kai aš užkomentuoju procedūrą "Rusiavimas" (rūšiuoja didėjimo tvarka), rūšiavimas abėcėlės tvarka puikiai veikia (tai įsitikinu išvesdamas apylinkes į ekraną), tačiau kai įjungiu abu rūšiavimus, tas kuris rūšiuoja pagal skaičius veikia, o abėcėlės rūšiavimas jau nebeveikia. Gal kas turi kokių minčių, dėl ko tai galėtų būti?

 

Pilnos užduoties sąlyga: http://nec.lt/failai...-uzd-intern.pdf

 

P.S dar vienas klausimas, egzamino užduotyse ten kur "Pradiniai duomenys" paaiškina duotus duomenys ir prie jų prideda intervalą, ribas:

http://puu.sh/ioDhX/6b5e08a0a3.png

Ar reikia programoje sukurti funkciją, kuri tikrintų šias ribas ar čia duota šiaip sau (testavimui)?

 

Dėkoju už atsakymus!

 

Prieš kokią porą valandų kaip tik išsprendžiau šią užduotį, rūšiavimui panaudojau sort funkciją ir per daug galvos dėl pačio algoritmo sukti nereikėjo, pasiskaityti gali čia:

http://www.cplusplus.../general/97555/

 

P.S. ribos tik tau, tikrinti nieko nereik

 

 

Redagavo w3ber
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prieš kokią porą valandų kaip tik išsprendžiau šią užduotį, rūšiavimui panaudojau sort funkciją ir per daug galvos dėl pačio algoritmo sukti nereikėjo, pasiskaityti gali čia:

http://www.cplusplus.../general/97555/

 

P.S. ribos tik tau, tikrinti nieko nereik

Dėkoju už atsakymą. Aš irgi bandžiau prieš tai tą sort funkciją, tačiau ar jomis galima naudotis egzamine?

 

P.S mano atveju nelabai ji ir tinka, nes naudoju "struct" ir nežinau aš kaip būtų galima iš jos išgauti tą .begin() ir .end()

Redagavo FiXmanish
Nuoroda į pranešimą
Dalintis kituose puslapiuose

FiXmanish >> toje temoj įmečiau savo rikiavimo funkciją visą su c++, tai pažiūrėk, lyg ir viskas aiškiai

w3ber >> o kažin kaip egzaminuotojai reaguotų į tokius fokusus, kad naudojiesi sort()? Man bent jau ramiau pačiam greit sortinimo funkciją pasirašyt, na kad matytų, kad moku, juolab kad laiko tai beveik neužima :))

Nuoroda į pranešimą
Dalintis kituose puslapiuose

FiXmanish >> toje temoj įmečiau savo rikiavimo funkciją visą su c++, tai pažiūrėk, lyg ir viskas aiškiai

w3ber >> o kažin kaip egzaminuotojai reaguotų į tokius fokusus, kad naudojiesi sort()? Man bent jau ramiau pačiam greit sortinimo funkciją pasirašyt, na kad matytų, kad moku, juolab kad laiko tai beveik neužima :))

 

Na jei jie neparašo, kad negalim naudoti kažkokios tai funkcijos čia jau jų problema? O aš nemačiau, kad būtų kur parašyta, tai kaip ir turiu teisę naudoti visas kalbos galimybes.

 

P.S.

Beje, kas būtų, jei realioj praktikoj programuotojai kiekvienam pre-made algoritmui rašytųsi savo algoritmą? Jie tam ir sukurti, kad juos naudoti.

 

įdedu savo sprendimą, galbūt kam pravers:

http://pastebin.com/X3wLJuBV

 

 

 

Redagavo w3ber
Nuoroda į pranešimą
Dalintis kituose puslapiuose

FiXmanish >> toje temoj įmečiau savo rikiavimo funkciją visą su c++, tai pažiūrėk, lyg ir viskas aiškiai

w3ber >> o kažin kaip egzaminuotojai reaguotų į tokius fokusus, kad naudojiesi sort()? Man bent jau ramiau pačiam greit sortinimo funkciją pasirašyt, na kad matytų, kad moku, juolab kad laiko tai beveik neužima :))

Taip, mačiau tavo kodą, tik kad neradau ten rūšiavimo abėcėlės tvarka.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Fragmentas iš rūšiavimo funkcijos, šiek tiek papildžiau if'ą, nes pagal viską 'a' < 'b' ir 'bananas' > 'apelsinas'.


if (A[j].gyv_sk > A[j+1].gyv_sk || (A[j].gyv_sk == A[j+1].gyv_sk && A[j].pav > A[j+1].pav) {
   temp = A[j].gyv_sk;
   temps = A[j].pav;
   A[j].gyv_sk = A[j+1].gyv_sk;
   A[j].pav = A[j+1].pav;
   A[j+1].gyv_sk = temp;
   A[j+1].pav = temps;
}

Redagavo w3ber
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Fragmentas iš rūšiavimo funkcijos, šiek tiek papildžiau if'ą, nes pagal viską 'a' < 'b' ir 'bananas' > 'apelsinas'.


if (A[j].gyv_sk > A[j+1].gyv_sk || (A[j].gyv_sk == A[j+1].gyv_sk && A[j].pav > A[j+1].pav) {
   temp = A[j].gyv_sk;
   temps = A[j].pav;
   A[j].gyv_sk = A[j+1].gyv_sk;
   A[j].pav = A[j+1].pav;
   A[j+1].gyv_sk = temp;
   A[j+1].pav = temps;
}

Dėkui! Dabar viskas veikia :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Turiu dar vieną klausimą. Kam jūs viršuje užrašote visas funkcijas/procedūras?

 

Turi omeny http://pastebin.com/X3wLJuBV 23-26 eil.? Jeigu taip, tai čia funkcijų prototipai. Pačios funkcijos aprašytos apačioje, kad nereikėtų scroll'inti daug, kad rasti main() funkciją. O prototipų reikia, nes tu jau main() funkcijoje naudoji tas funkcijas, o main funkcija yra aprašyta anksčiausiai, taigi kai programa vykdo main() funkciją, tos kitos funkcijos, kurios aprašytos žemiau, dar net neegzistuoja. O štai kai yra surašyti prototipai, tai programa žino, kad tos funkcijos kažkur egzistuoja, tik reikia surasti jas programoj :D nu kažkas tokio, jei gerai klausimą supratau :))

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Mano variantas

#include <fstream>
#include <string>
using namespace std;

struct duom{
  	string aps;
  	string mst;
  	int mg;
  	};
struct rez{
  	string aps;
  	int min;
  	int gyv;
  	};
duom Md[103];
rez R[10];
int k, kieka;

void skaitom();
void apskritys();
void apsgyventojai();
void apsminimum();
bool keisti(string a, string b);
void rikiuojam();
void spausdinam();

int main()
{
skaitom();
apskritys();
apsgyventojai();
apsminimum();
rikiuojam();
spausdinam();
return 0;
}

void skaitom()
{
	char B[20];
	char C[13];
	ifstream fd("duom.txt");
	fd >> k;
	fd.ignore();
	for(int i = 0; i < k; i++)
	{
        	fd.get(B,20);
        	Md[i].mst = B;
        	fd.get(C,13);
        	Md[i].aps = C;
        	fd >> Md[i].mg;
        	fd.ignore();
	}
	fd.close();
}
void apskritys()
{
	bool tinka;
	kieka = 0;
	for(int i = 0; i < k; i++)
	{
        	tinka = true;
        	for(int j = 0; j < kieka; j++)
        	if(Md[i].aps == R[j].aps) tinka = false;
       	if (tinka) {R[kieka].aps = Md[i].aps; kieka++;}
       	}
}

void apsgyventojai()
{
	for(int i = 0; i < kieka; i++)
  	for(int j = 0; j < k; j++)
    	if(R[i].aps == Md[j].aps) R[i].gyv = R[i].gyv + Md[j].mg;
}
void apsminimum()
{
	int maznr;
	for(int i = 0; i < kieka; i++)
	{
        	maznr = 0;
        	while(R[i].aps != Md[maznr].aps)
          	maznr++;
        	for(int j = 0; j < k; j++)   	
          	if(R[i].aps == Md[j].aps)
            	if(Md[j].mg < Md[maznr].mg) maznr = j;
        	R[i].min = Md[maznr].mg;
	}
}
bool keisti(string a, string b)
{
	bool maz = true;
	bool pirmesn = false;
	int i = 0;
	while (maz && i < 13)
	{
      	if(a[i] < b[i]) {maz  = false; pirmesn = true;}
      	if(a[i] > b[i]) maz = false;
      	i++;
	}
	return pirmesn;
}
void rikiuojam()
{
	int maznr;
	rez temp;
	for(int i = 0; i < kieka - 1; i++)
	{
        	maznr = i;
        	for (int j = i + 1; j < kieka; j++)
        	{
            	if(R[j].min < R[maznr].min) maznr = j;
            	if(j != maznr && R[j].min == R[maznr].min)
              	if(keisti(R[j].aps, R[maznr].aps)) maznr = j;
        	}
        	temp = R[i]; R[i] = R[maznr]; R[maznr] = temp;
	}
}
void spausdinam()
{
	ofstream fr("rez.txt");
	fr << kieka << endl;
	for(int i = 0; i < kieka; i++)
	fr << R[i].aps << R[i].min <<"  " << R[i].gyv << endl;
	fr.close();
} 

Redagavo Tadas96
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pastebėjau, kad daug kas struktūroje ("struct") kintamiesiems priskiria reikšmę pagal nutylėjimą (default), tarkim

int kiekis = 0;

. Aš irgi taip darau programuojant savo kompiuteryje, o štai mokykloje išmesdavo klaidą prie kintamojo. Bijau, kad vertintojai galės turėti irgi per seną arba per naują versiją, kuri galėtų nepriimti tokio būdo. Kaip egzamine darysite, priskirsite iš karto (struktūroje) defaultinę reikšmę ar kur nors programoje?

Redagavo FiXmanish
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pastebėjau, kad daug kas struktūroje ("struct") kintamiesiems priskiria reikšmę pagal nutylėjimą (default), tarkim

int kiekis = 0;

. Aš irgi taip darau programuojant savo kompiuteryje, o štai mokykloje išmesdavo klaida prie kintamojo. Bijau, kad vertintojai galės turėti irgi per seną arba per naują versiją, kuri galėtų nepriimti tokio būdo. Kaip egzamine darysite, priskirsite iš karto (struktūroje) defaultinę reikšmę ar kur nors programoje?

 

http://stackoverflow.com/questions/1069621/are-members-of-a-c-struct-initialized-to-0-by-default

a single google search can do miracles, bro :))

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