•DITzoneC
|
 |
« : Ianuarie 21, 2007, 23:56:46 » |
|
Aici puteţi discuta despre problema Patrate 3.
|
|
« Ultima modificare: Ianuarie 30, 2007, 20:50:26 de către Crestez Dan-Leonard »
|
Memorat
|
|
|
|
•Prostu
|
 |
« Răspunde #1 : Ianuarie 24, 2007, 19:24:32 » |
|
Am incercat sa rezolv problema ca la carte, cu numere intregi, evitand astfel orice fel de erori de precizie. Numarul citit l-am inmultit cu 10000 si mai apoi cu inca 10, pentru a nu avea probleme la impartirea la 2. Astfel valoarile variaza intre [-10 9, 10 9] si prin toate operatiile nu se trece de 2 * 10 9 (cred...). Problema mea este ca respectiva sursa ia doar 5 puncte. Am modificat structura sa lucreze cu numere de tip float, citirea si functia de comparatie, si am luat 100 de puncte  . Acum, nu stiu ce sa cred. Citirea numerelor in primul caz o faceam astfel const int ZEC = 10000; for (i = 0; i < N; ++i) { fscanf(fin, " %d.%d", &u, &v); A[i].x = (u * ZEC + v) * 10;
fscanf(fin, " %d.%d", &u, &v); A[i].y = (u * ZEC + v) * 10; } Care ar fi problema?
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #2 : Ianuarie 24, 2007, 19:50:31 » |
|
daca numarul e negativ trebuie sa scazi partea fractionara.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•Prostu
|
 |
« Răspunde #3 : Ianuarie 24, 2007, 19:54:54 » |
|
Multumesc.
|
|
|
Memorat
|
|
|
|
•bogdan2412
|
 |
« Răspunde #4 : Ianuarie 24, 2007, 20:52:22 » |
|
Ai grija cum citesti -0.3 de asemenea  cand citesti -0 cu %d o sa-ti dea u = 0 si o sa crezi ca numarul e pozitiv.. Oricum .. nu inteleg de ce trebuie sa te chinui asa.. la problema asta iti trebuie o inmultire si o scadere.. nu prea ai cum sa ai probleme de precizie...
|
|
|
Memorat
|
|
|
|
•mocke
Strain
Karma: 0
Deconectat
Mesaje: 19
|
 |
« Răspunde #5 : Ianuarie 24, 2007, 21:19:31 » |
|
Si eu am avut o problema asemanatoare...luam 60p (4 TLE) si aveam variabile de tip double (cautare pe double, comparare pe double)...cand am schimbat in float am luat 85...si cand am schimbat si ABS-ul de mana cu fabs am luat 100...  Aveti vreo idee de ce s-a intamplat asta?
|
|
|
Memorat
|
oricine greseste...nu oricine invatza
|
|
|
•cos_min
|
 |
« Răspunde #6 : Ianuarie 24, 2007, 21:47:00 » |
|
probabil faceai 'abs de mana' gresit, cel mai sigur ii sa il folosesti cel predefinit apropo eu am folosit double si a mers fara probleme.
|
|
|
Memorat
|
vid...
|
|
|
•danielp
|
 |
« Răspunde #7 : Ianuarie 25, 2007, 21:53:57 » |
|
Merge foarte bine cu numere reale de orice tip, nu cred ca e esential daca folosesti float sau double. Am dat-o pe numere reale ca sa fac mai usor testele, nu ca sa o fac mai grea:)
|
|
|
Memorat
|
I can't get a life if my heart's not in it
|
|
|
•devilkind
|
 |
« Răspunde #8 : Februarie 12, 2007, 11:45:45 » |
|
care sunt cele 2 patrate din exemplu?? ma intereseaza numerele de ordine ale punctelor dak mi le puteti da.
|
|
|
Memorat
|
|
|
|
•cos_min
|
 |
« Răspunde #9 : Februarie 12, 2007, 19:44:43 » |
|
Uite exact punctele.
pt primul : 9.100000 26.510000 35.930000 34.870000 26.695000 17.275000 18.335000 44.105000
pt al doilea : 49.150000 50.690000 91.320000 13.360000 51.570000 10.940000 88.900000 53.110000
|
|
|
Memorat
|
vid...
|
|
|
|
•Protoman
|
 |
« Răspunde #11 : Februarie 04, 2008, 16:34:09 » |
|
tu cum consideri cele 2 puncte pe care le iei din prima , ca fiind diagonala sau ca fiind o latura? ca daca le iei ca fiind o latura ai grija ca ai 2 optiuni pentru celelalte una intr-o parte una in cealalata
|
|
|
Memorat
|
|
|
|
•cos_min
|
 |
« Răspunde #12 : Februarie 04, 2008, 16:44:18 » |
|
|
|
|
Memorat
|
vid...
|
|
|
•Robytzza
|
 |
« Răspunde #13 : Februarie 04, 2008, 18:10:54 » |
|
imi cer scuze ..am uitat de solutii  pentru Protoman: o iau ca fiind latura si am luat in considerare cele 2 cazuri , adik elimin un caz dupa sortare
|
|
|
Memorat
|
|
|
|
•ssergiuss
Strain
Karma: 41
Deconectat
Mesaje: 24
|
 |
« Răspunde #14 : Februarie 28, 2009, 16:28:11 » |
|
Am o problema cu problema asta. Nu stiu de ce nu imi compara bine variabilele reale (am incercat si cu float si cu double). Am mers in borland pas cu pas si imi arata ca 26.695 > 26.695  . Ma poate ajuta cineva?
|
|
|
Memorat
|
|
|
|
•DraStiK
|
 |
« Răspunde #15 : Februarie 28, 2009, 16:42:20 » |
|
probabil daca faci o functie de comparare va merge int compara (double a,double b) { if (fabs (a-b)<=0.00001) return 1; return 0; }
sper sa fiu de ajutor 
|
|
« Ultima modificare: Februarie 28, 2009, 18:43:11 de către Oprica Dragos »
|
Memorat
|
|
|
|
•ssergiuss
Strain
Karma: 41
Deconectat
Mesaje: 24
|
 |
« Răspunde #16 : Februarie 28, 2009, 17:24:46 » |
|
Mersi  ! Pana la urma am facut'o de 100, folosind functia de comparare. Dar totusi as vrea sa stiu de ce nu compara bine numerele reale.
|
|
|
Memorat
|
|
|
|
•c_e_manu
|
 |
« Răspunde #17 : Februarie 28, 2009, 17:28:09 » |
|
fiindca numerele reale au prea multe zecimale pentru a le afisa... si prin rotunjire ajung egale... de ex a=2,669 si b=2,668... a>b, dar luand doar 2 zecimale a=2,67 si b=2,67... sper ca ai inteles ce am vrut sa zic aici 
|
|
|
Memorat
|
|
|
|
•ssergiuss
Strain
Karma: 41
Deconectat
Mesaje: 24
|
 |
« Răspunde #18 : Martie 03, 2009, 14:31:12 » |
|
Mersi! 
|
|
|
Memorat
|
|
|
|
|