Pereiti prie turinio

C++ koordinaciu skaiciavimas


Rekomenduojami pranešimai

Nezinau kodel kuriau nauja tema, bet cia kiek kitokia problema nes kazkas negerai su skaiciavimais.

Taigi yra tekstinis failas kuriame parasytas figuros pavadinimas, koordinaciu skaicius ir x bei y koordinates.

Tr1 6 1.5 -5.5 5 -1.4 8.5 -5.2

Aps3 3 5.5 -5.5 10

Kt4 8 -3.5 -0.5 -3.5 5.4 2.4 5.4 2.4 -0.5

Man reikia suzinoti DIDZIAUSIA figuros perimetra ir jos varda.

Main'e susikuriau tokia funkcija.

void MaxPerimetras(FiguruKoteineris & fgk, int n){
Figura f;
double peri;
double maxPerimetras = 0.0;
for (int i=1; i <=fgk.Imti(); i++){ //  fgk.Imti() nurodo figuru kieki mano atveju 3
	for(int j=1; j<=n; j++){ // suku iki koordinaciu skaiciaus
		peri = f.Krastines(j); kiek suprantu dabar ta j deda i Krastines() funkcija
        }
}
}

Mano Figura.cpp failas (kuriame yra Krasrines())

double Figura::Krastines(int j){
if(j!=0){
	for(int m=0; m<n; m++){
		if(n-1!=m){
			krastine[m]=pow(pow(xkoordinate[m+1] - xkoordinate[m], 2) + pow(ykoordinate[m+1] - ykoordinate[m], 2), 0.5); // kam neaisku cia atstumo tarp dvieju tasku formule
		}else{
			krastine[m]=pow(pow(xkoordinate[0] - xkoordinate[m], 2) + pow(ykoordinate[0] - ykoordinate[m], 2), 0.5);
		}
	}
	return krastine[n-1];
	//cout << krastine[n-1];
}
}

Kas negari su mano funkcijomis? Kiek bandziau aiskintis nepavyksta norimo rezultato gauti. (Zinau as cia skaiciuoju tik figuru krastiniu ilgius, bet perimetra be ju niekaip neapskaicuoiu, tad kas negerai?

Redagavo deividas707
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gaila, bet pagalbos nesulaukiau su siuo klausimu. siaip ne taip sugebejau pasidaryti pats(nezinau ar gerai, bet koordinates lyg taip skaiciuoja) Visa programa idedu cia: http://www.megafileupload.com/en/file/461233/Sitasfhfh-rar.html Ir vis dar turiu klausimu del programos. kaip man padaryti kad apskaiciuotu DIDZIAUSIOS figuros perimetra(koordinates jau radau).Beda ta, kad ismeta labai daug nesamoningu reiksmiu

ten kur atsakymas 62.8319 figuros(mano atveju apskritimo) perimetras yra tikrai geras. Taciau kitu figuru meta visiskas nesamones. Kas blogai?

post-52529-0-34112100-1381868741_thumb.jpg

Redagavo deividas707
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Uzsidek break point tose vietose ir ziurek kokie skaiciai ateina ir kaip skaiciuoja. Greiviausias variantas rasti klaida bus ;)

Visa beda ta kad sakiciai ateina geri... Tik viena baisia ir net nezinau ar issprendziama klaida atradau. 107 eilutej as suku cikla iki n/2 (padalinta is dvieju nes faile yra koordinates, o as skaiciuju jau pacius kampus(be to as nusiskaitydams n/2 naudoju) nu bet esme ne cia). Visa esme kad as turiu suukti cikla iki tokio n/2 (kiekviena karta) kuris yra TOS FIGUROS KOORDINACIU KIEKIS pvz pirmame cikle kazkaip tureciau cikla sukti iki (6/2) nes toks n yra Tr1. O dabar as kiekviena karta suku n iki 8, nes tai duomenu faile yra paskutinis n ir ji issaugo kaip galutine reiksme. Sito dalyko net nesugebu isivaizduoti kaip viska teks aprasyti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visa beda ta kad sakiciai ateina geri... Tik viena baisia ir net nezinau ar issprendziama klaida atradau. 107 eilutej as suku cikla iki n/2 (padalinta is dvieju nes faile yra koordinates, o as skaiciuju jau pacius kampus(be to as nusiskaitydams n/2 naudoju) nu bet esme ne cia). Visa esme kad as turiu suukti cikla iki tokio n/2 (kiekviena karta) kuris yra TOS FIGUROS KOORDINACIU KIEKIS pvz pirmame cikle kazkaip tureciau cikla sukti iki (6/2) nes toks n yra Tr1. O dabar as kiekviena karta suku n iki 8, nes tai duomenu faile yra paskutinis n ir ji issaugo kaip galutine reiksme. Sito dalyko net nesugebu isivaizduoti kaip viska teks aprasyti.

Pasidarai metoda, kuris is figuros klases grazintu n (koordinaciu skaiciu). Tada ciklai atrodytu taip:

for (int i=0; i < fgk.Imti(); i++){ 
    for(int j = 0; j < fgk.Imti(i).ImtiN(); j++) // ta ImtiN() metoda pasidaryk Figuru klasej.

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pasidarai metoda, kuris is figuros klases grazintu n (koordinaciu skaiciu). Tada ciklai atrodytu taip:

for (int i=0; i < fgk.Imti(); i++){ 
    for(int j = 0; j < fgk.Imti(i).ImtiN(); j++) // ta ImtiN() metoda pasidaryk Figuru klasej.

Aciu, susitvarke viskas. Turiu dar viena klausima del perimetru figuru. Stai mano Figura.cpp faile esanti funkcija

void Figura::Perimetras(int j){
int i=0;
double trper = 0.0;
double kvper = 0.0;
double skper = 0.0;
double PI = 3.141592653589793238462;
FiguruKoteineris fgk;
if(n==3){
	skper = 2 * PI * spindulys; // skaiciuoja apskiritimo perimetra
}
	for(int i=0; i < fgk.Imti(); i++){ // fgk.Imti() suka cikla iki 3
		for(int j = 0; j < (fgk.Imti(i).ImtiN())/2; j++){
			if(n/2==3){
				trper = trper + krastine[i]; // trikampio 
			}
			if(n/2==4){
				kvper = kvper + krastine[i]; /// keturkampio.
			}
		}
	}
}

Noriu paklausti kaip dabar i ja man kreiptis?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O gal pati skaicaivimo funkcija nera gera, nors abejoju, bet dabar turint koordinates kaip man apskaiciuoti figuru perimetra? Ar mano nurodytas budas tinkamas? Apskritimio perimetra suskaiciuoja gerai, bet kitu figuru - ne.

Redagavo deividas707
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aciu, susitvarke viskas. Turiu dar viena klausima del perimetru figuru. Stai mano Figura.cpp faile esanti funkcija

void Figura::Perimetras(int j){
int i=0;
double trper = 0.0;
double kvper = 0.0;
double skper = 0.0;
double PI = 3.141592653589793238462;
FiguruKoteineris fgk;
if(n==3){
	skper = 2 * PI * spindulys; // skaiciuoja apskiritimo perimetra
}
	for(int i=0; i < fgk.Imti(); i++){ // fgk.Imti() suka cikla iki 3
		for(int j = 0; j < (fgk.Imti(i).ImtiN())/2; j++){
			if(n/2==3){
				trper = trper + krastine[i]; // trikampio 
			}
			if(n/2==4){
				kvper = kvper + krastine[i]; /// keturkampio.
			}
		}
	}
}

Noriu paklausti kaip dabar i ja man kreiptis?

Apie sita metoda . Visu pirma, tu susikuri nauja fgk objekta, jis yra tuscias, taciau tu bandai atlikti kazkokius veiksmus su juo toliau, logikos tame yra? Antra, tas n niekada nesikeicia, nes vel gi tu dirbi vieno kazkurio objekto viduje, tai ten tais if'ais tikrink netikrines viskas bus tas pats. Trecia, turetu but krastine[j] o ne krastine, bet kad ir sita pakeisi metodas nuo to veikti neprades. Rekomenduojamas sprendimo budas: figuros klasej apsirasyk perimetro skaiciavimo funkcija, kuri galetu atrodyti taip:

double Figura::Perimetras() {
     double perimetras = 0;
     for (int i = 0; i < n/2; i++)
          perimetras += krastine[i];
     return perimetras;
}

Dasidek dar pasitikrinima, kad apskritimui skaiciuotu kitaip. Tada noredamas pamatyti kiekvienos figuros perimetra, is main'o ar kazkokios funkcijos uz klasiu ribu kviesk taip:

for (int i = 0; i < fgk.Imti(); i++)
    cout << fgk.Imti(i).Perimetras() << endl;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Apie sita metoda . Visu pirma, tu susikuri nauja fgk objekta, jis yra tuscias, taciau tu bandai atlikti kazkokius veiksmus su juo toliau, logikos tame yra? Antra, tas n niekada nesikeicia, nes vel gi tu dirbi vieno kazkurio objekto viduje, tai ten tais if'ais tikrink netikrines viskas bus tas pats. Trecia, turetu but krastine[j] o ne krastine, bet kad ir sita pakeisi metodas nuo to veikti neprades. Rekomenduojamas sprendimo budas: figuros klasej apsirasyk perimetro skaiciavimo funkcija, kuri galetu atrodyti taip:

double Figura::Perimetras() {
     double perimetras = 0;
     for (int i = 0; i < n/2; i++)
          perimetras += krastine[i];
     return perimetras;
}

Dasidek dar pasitikrinima, kad apskritimui skaiciuotu kitaip. Tada noredamas pamatyti kiekvienos figuros perimetra, is main'o ar kazkokios funkcijos uz klasiu ribu kviesk taip:

for (int i = 0; i < fgk.Imti(); i++)
    cout << fgk.Imti(i).Perimetras() << endl;

Dekui uz atsakyma. Noriu truputeli pasitiklsinti. Jus siulote apsirasyti Perimetras() funkcija double Figura::Perimetras() kuri yra Figura.cpp ir tada ja issikvieti Jusu nurodytu metodu? Jei viska taip supratau reiksmes gaunasi blogos.

Gaunu -2.77679e+062 ir t.t. Zinau akd kazka ne toje vietoje padarau ir apsirasau. Ir problemos greiciausiai ne ten. Debuginus pasiziurejau, kad tame masyve reiksmes nenormalios kazkokios gaunasi.

Redagavo deividas707
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui uz atsakyma. Noriu truputeli pasitiklsinti. Jus siulote apsirasyti Perimetras() funkcija double Figura::Perimetras() kuri yra Figura.cpp ir tada ja issikvieti Jusu nurodytu metodu? Jei viska taip supratau reiksmes gaunasi blogos.

Gaunu -2.77679e+062 ir t.t. Zinau akd kazka ne toje vietoje padarau ir apsirasau.

Parodyk, kaip uzpildai krastiniu masyva kiekvienai figurai, nes is panaudotu metodu ir funkcija tai niekas to masyvo neuzpildo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Parodyk, kaip uzpildai krastiniu masyva kiekvienai figurai, nes is panaudotu metodu ir funkcija tai niekas to masyvo neuzpildo.

As krastiniu masyvo neplidau. As grazinu po viena krastine. Zodziu kode gal bus aiskiau

double Figura::Krastines(int v){

double krastine = 0.0;

if((this->n/2 == 4 || this->n/2 == 3) && (v < this->n / 2 && n >= 0)){
	int a;
	if(v + 1 == this->n / 2){
		a = 0;
	krastine = sqrt(pow(xkoordinate[v] - xkoordinate[a], 2) + pow(ykoordinate[v] - ykoordinate[a], 2));
	}else{
		a = v + 1;
	}
	krastine = sqrt(pow(xkoordinate[v] - xkoordinate[a], 2) + pow(ykoordinate[v] - ykoordinate[a], 2));

	return krastine;
}
return 0;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

As krastiniu masyvo neplidau. As grazinu po viena krastine. Zodziu kode gal bus aiskiau

double Figura::Krastines(int v){

double krastine = 0.0;

if((this->n/2 == 4 || this->n/2 == 3) && (v < this->n / 2 && n >= 0)){
	int a;
	if(v + 1 == this->n / 2){
		a = 0;
	krastine = sqrt(pow(xkoordinate[v] - xkoordinate[a], 2) + pow(ykoordinate[v] - ykoordinate[a], 2));
	}else{
		a = v + 1;
	}
	krastine = sqrt(pow(xkoordinate[v] - xkoordinate[a], 2) + pow(ykoordinate[v] - ykoordinate[a], 2));

	return krastine;
}
return 0;
}

Tai kaip masyve gali but kazkokios normalios reiksmes, jei tu jo nepildai. Jei pasidarei metoda skaiciuot kiekvienai krastinei atskirai, tai perimetro metoda pasikeisk, kad ne is masyvo imtu krastines, o sumuotu krastines grazintas sito metodo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kaip masyve gali but kazkokios normalios reiksmes, jei tu jo nepildai. Jei pasidarei metoda skaiciuot kiekvienai krastinei atskirai, tai perimetro metoda pasikeisk, kad ne is masyvo imtu krastines, o sumuotu krastines grazintas sito metodo.

Taip padaryti, negaliu, nes man veliau reikes kiekvienos krastines, nes reikes plota ir visa kita skaiciuoti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip padaryti, negaliu, nes man veliau reikes kiekvienos krastines, nes reikes plota ir visa kita skaiciuoti.

Zodziu, parsisiunciau tavo koda, kur vakar ten buvai idejes, jame nieko per daug keist nereikejo, kad viskas veiktu.

Figuru klases metode Perimetras pakoregavau kelias eilutes:

trper = trper + krastines[i]; pakeiciau i: trper = trper + Krastines(i);
kvper = kvper + krastines[i]; pakeiciau i: kvper = kvper + Krastines(i);

 

Tada pagrindineje programoje pasirasiau isvedima:

for (int i = 0; i < fgk.Imti(); i++)
   cout << fgk.Imti(i).Perimetras() << endl;

 

Rezultatus gaunu 17.5634, 62.8319, 23.6. Nezinau ar jie teisingi, bet skaiciai atrodo normalus.

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Zodziu, parsisiunciau tavo koda, kur vakar ten buvai idejes, jame nieko per daug keist nereikejo, kad viskas veiktu.

Figuru klases metode Perimetras pakoregavau kelias eilutes:

trper = trper + krastines[i]; pakeiciau i: trper = trper + Krastines(i);
kvper = kvper + krastines[i]; pakeiciau i: kvper = kvper + Krastines(i);

 

Tada pagrindineje programoje pasirasiau isvedima:

for (int i = 0; i < fgk.Imti(); i++)
   cout << fgk.Imti(i).Perimetras() << endl;

 

Rezultatus gaunu 17.5634, 62.8319, 23.6. Nezinau ar jie teisingi, bet skaiciai atrodo normalus.

Didelis dekui. Bandysiu aiskintis ka blogai padariau, bet tikrai labai aciu ir rezultatai teisingi :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Noriu paklausti dar vieno dalykelio. Man reikia surasti kiek staciuju trikampiu yra ibrezta i apskritima. Zinau kad skamba baisiai, bet sugebejau rasti staciuju trikampiu kieki, pasinaudodamas Pitagoro teorema. Kitas dalykas su tuo nelemtu ibrezimu. Su grupiokais sedejom gal dvi valandas ir niekaip nesugebejom rasti kiek staciuju trikampiu yra ibrezta i apskritima. Priejom bendraisvada, kad i apskiritima bus ibrezta tada ir tik tada kai APSKRITIMO SKERSMUO SUTAMPA SU TRIKAMPIO IZAMBINES ILGIU(nes trikampis laikomas ibreztu tada kai visos jo krastines liecia apskritimo lanka). Zodziu cia S lygio programavimo uzduotis, todel nelabai jos kas iveikia. Kaip reiktu visa tai pasidaryti? Jei yranors minimaliu minciu prasau parasykit :D, nes ne vienam galva nuo sio dalyko jau skauda. Imesiu paveiksleli, kaip atrodo mano figuros

Taip pat pridedu savo faila.

post-52529-0-43788400-1382033170_thumb.png

post-52529-0-68989400-1382033377_thumb.png

Sitasfhfh.rar

Redagavo deividas707
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, teorija tokia, ibreztinio staciojo trikampio izambine sutampa su apskritimo skersmeniu. Naudojant sita oficialia teorija, mano manymu i apskritima galima ibrezti tik viena statuji, arba begalybe, nes galima pribrezti begalybe skersmenu, na cia kaip paziuresi, ar laikysi tuos "begalybe" trikampiu visus skirtingus ar kaip viena, tik kaip nors kitaip pasukta. Na bet manau, kad cia sita uzduoti reiketu suprasti, kad trikampis yra apskritimo viduje, nebutinai ibreztinis (taip kaip antram paveiksleli). Jeigu uzduoti taip traktuojam tai viskas vyksta labai paprastai, turim apskritimo centra, turim spinduli, tada ieskom atstumu tarp centro ir kiekvienos trikampio virsunes, jei visi atstumai mazesni arba lygus spinduliui, trikampis yra apskritimo viduje. Butu neblogai visa pilna uzduoti pamatyt, gal ten tu turi kazkiek daug trikampiu ir tau reik atrinkt kurie yra status ir ibrezti pagal teorija is matematikos. Sunku nuspresti.

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Į apskritimą tikrai galima įbrėžti daugiau nei viena statųjį trikampį.

http://www.mathalino.com/sites/default/files/images/001-planegeom-right-triangle-inscribed-circle.jpg

Įbrėžtinis trikampis, tai toks trikampis, kurio viršūnės liečia apskritimo kraštą. Vien patikrinti ar visos trikampio viršūnės yra nutolusios nuo apskritimo centro spindulio atstumu neužtenka, nes bet koks įbrėžtinis apskritimas tenkina tokią sąlygą. Bet turbūt užtektų to patikrinimo + patikrinti ar trikampis status.

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