Jump to content
informatician

Problema triunghiuri c++

Recommended Posts

Fisierul text triunghiuri.in contine datele referitoare la N triunghiuri, astfel:

pe prima linie se afla numarul N al triunghiurilor, 0 < N < 100;

pe urmatoarele N linii se gasesc câte sase numere întregi x1, y1, x2, y2, x3, y3, separate prin câte un spatiu, reprezentând coordonatele (x1, y1), (x2, y2) si (x3, y3) ale celor 3 vârfuri ale unui triunghi în planul xOy.

Consideram declararea tipului Punct:

C/C++

typedef struct Punct {

x, y: integer;

};

si prototipul/antetul functiei dist:

C/C++

double dist(Punct A, Punct B);

/C/C++ care:

a) Contine definitia completa a functiei dist, care calculeaza distanta dintre doua puncte din planul xOy ale caror coordonate sunt transmise prin intermediul parametrilor A si B;

B) Determina si afiseaza pe ecran numarul triunghiurilor care au aria mai mare decât o valoare reala citita de la tastatura.

Am incercat o rezolvare, dar nu i-am dat de capat..

Link to comment
Share on other sites

Pai cum sa te astepti sa fii in stare sa programezi daca tu nu stii sa diferentiezi o declaratie de variabile din C++ cu una din Pascal?

Si inca ceva, in C++ nu sunt sigur ca exista typedef struct Punct .Ma refer la typedef, nustiu ce sens are el pe-acolo (da' nu-s 100% sigur ca nu-i bine), totusi merita sa mai verifici odata sursa.

Link to comment
Share on other sites

Pai cum sa te astepti sa fii in stare sa programezi daca tu nu stii sa diferentiezi o declaratie de variabile din C++ cu una din Pascal?

Si inca ceva, in C++ nu sunt sigur ca exista typedef struct Punct .Ma refer la typedef, nustiu ce sens are el pe-acolo (da' nu-s 100% sigur ca nu-i bine), totusi merita sa mai verifici odata sursa.

Auzi, nu eu am scris aceasta problema!Acesta este enuntul, dar mi-am dat seama ca e gresit acuma cand mi-ai zis tu!trebuia sa fie int x,y;..nu x,y:integer;!

Link to comment
Share on other sites

@informatician: sa observam situatia din urmatoarea perspectiva: esti la bac, sau un alt examen, si nu reusesti sa faci o problema.. Ce faci? Intrebi prin sala cum sa rezolvi? Daca e munca individuala, sa ramana munca individuala.

Da corect..voiam doar o sugestie!Oricum o sa-i dau de capat pana la urma.

PS.Oricum aceasta pentru multi NU va fi o munca individuala.

Link to comment
Share on other sites

C++ code by cmiN - 42 lines - codepad

Eroarea este de un epsilon > 0 (->0) (adica daca ii dai ca valoare: x, iar aria unui triunghi va da tot x atunci x de triunghi va fi mai mare ca x introdus ... limita din dreapta)

#include <iostream>
#include <fstream>
#include <math.h>
#define fname "triunghiuri.in"

using namespace std;
struct Punct {
int x, y;
};

double dist(Punct A, Punct
{
return sqrt(pow((B.x - A.x), 2) + pow((B.y - A.y), 2));
}

int main()
{
int n, i, nr = 0;
double val, lat[3], sp;
Punct tgl[3];
cout << "Valoare: ";
cin >> val;
ifstream fin(fname);
fin >> n;
while (n-- > 0) {
for (i = 0; i < 3; i++) {
fin >> tgl[i].x >> tgl[i].y;
}
lat[0] = dist(tgl[0], tgl[1]);
lat[1] = dist(tgl[0], tgl[2]);
lat[2] = dist(tgl[1], tgl[2]);
// Heron
sp = (lat[0] + lat[1] + lat[2]) / 2;
if (sqrt(sp * (sp - lat[0]) * (sp - lat[1]) * (sp - lat[2])) > val) {
nr++;
}
}
fin.close();
cout << nr;
system("pause >nul");
return 0;
}

Link to comment
Share on other sites

C++ code by cmiN - 42 lines - codepad

Eroarea este de un epsilon -> 0 (adica daca ii dai ca valoare: x, iar aria unui triunghi va da tot x atunci x de triunghi va fi mai mare ca x introdus ... limita din dreapta)

#include <iostream>
#include <fstream>
#include <math.h>
#define fname "triunghiuri.in"

using namespace std;
struct Punct {
int x, y;
};

double dist(Punct A, Punct
{
return sqrt(pow((B.x - A.x), 2) + pow((B.y - A.y), 2));
}

int main()
{
int n, i, nr = 0;
double val, lat[3], sp;
Punct tgl[3];
cout << "Valoare: ";
cin >> val;
ifstream fin(fname);
fin >> n;
while (n-- > 0) {
for (i = 0; i < 3; i++) {
fin >> tgl[i].x >> tgl[i].y;
}
lat[0] = dist(tgl[0], tgl[1]);
lat[1] = dist(tgl[0], tgl[2]);
lat[2] = dist(tgl[1], tgl[2]);
// Heron
sp = (lat[0] + lat[1] + lat[2]) / 2;
if (sqrt(sp * (sp - lat[0]) * (sp - lat[1]) * (sp - lat[2])) > val) {
nr++;
}
}
fin.close();
cout << nr;
system("pause >nul");
return 0;
}

Multumesc mult!

Link to comment
Share on other sites

Enuntul nu are nimic , nu confunda c cu pascal pur si simplu e un limbaj de pseudocod mai special,

aria triungiurilor o afli cu formula lui euclid(cu semiperimetrele) mai ai nevoie de o formula care sa iti calculeze lungimea dreptelor si ai terminat(prin cartea de cls 11 sau 12 ceva cu panta:))

poti declara o clasa Dreapta unde in constructor setezi lungimea dreptei si o metoda care iti returneaza valoarea .

public class Dreapta

{ private float Val;

Dreapta(Punct x,Punct y)

{

Val=Calc_Distanta(x,y);

}

public float GetVal()

{

return Val;

}

}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...