spainis Posted October 25, 2011 Report Share Posted October 25, 2011 olimpiādē būs gcc + studijas uz tiem kompjiem toč nebūs, drīzāk jau DevC++ tur tikai būs Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 25, 2011 Author Report Share Posted October 25, 2011 (edited) Šodien atradu, ka olimps piedāvā iespēju iesūtīt uzdevumus un pārbaudīt cik no cik punktiem dabūji. Nu tad sāku sūtīt, pirmo iesūtu - 5/5, otro iesūtu 0/5, trešo iesūtu - 0/5 u.t.t. Pašam uz datora viss iet, bet tur 0/5. Otrā uzd. kods ir šāds - #include <iostream> #include <fstream> using namespace std; int main() { std::ifstream input_file("taisnst.in"); int n; int m; int d; input_file >> n >> m; while (n != m) { if (n > m) { n = n - m; } if (m > n) { m = m - n; } d++; } std::ofstream output_file("taisnst.out"); output_file << d << std::endl; return 0; } Uz datora viss perfekti izvadās, bet tur pat vienu punktu neiedod, ir nojausma kādēļ? Uzdevuma apraksts šeit - http://www.lio.lv/ol...vumi.php?show=5 + vēl viena lieta, vai ir kāda iespēja, kā var noteikt programmas izpildes laiku? L. Edited October 25, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
briedis Posted October 25, 2011 Report Share Posted October 25, 2011 Kompilatoram ir dažādi option'i, ieteiktu ieslēgt strikto režīmu, moš izleks kāda kļūda... Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 25, 2011 Author Report Share Posted October 25, 2011 (edited) Hmm, nekur neatrodu kaut ko tādu VS, tūlīt paskatīšos kas ar DevC++ EDIT: DevC++ arī neko tādu neatrodu. L. Edited October 25, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
briedis Posted October 25, 2011 Report Share Posted October 25, 2011 Meklē google "compiler strict mode", vai, ja kompilators ir gcc, pievieno flagus: "-std=c89 -pedantic -Wall -Wextra" Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 25, 2011 Author Report Share Posted October 25, 2011 Edit: Tikko sapratu, kur bija kļūda - #include <iostream> #include <fstream> using namespace std; int main() { std::ifstream input_file("taisnst.in"); int n; int m; int d = 1; input_file >> n >> m; while (n != m) { if (n > m) { n = n - m; } if (m > n) { m = m - n; } d++; } std::ofstream output_file("taisnst.out"); output_file << d << std::endl; return 0; } Tagad vajadzētu strādāt 100% pareizi, bet tāpat dabūju tikai 1/5 punktiem. L. Quote Link to comment Share on other sites More sharing options...
codez Posted October 25, 2011 Report Share Posted October 25, 2011 (edited) tev tajā programmā d netiek inicializēts, tāpat arī otrā pārbaude ciklā ir pēc pirmās pārbaudes, kurā tiek izmainītas jau n un m vērtības. #include <iostream> #include <stdio.h> using namespace std; int main() { freopen ("taisnst.out","w",stdout); freopen ("taisnst.in","r",stdin); int a,b,c=0; cin >> a >> b; while (a!=b and a>0 and b>0) { if(a>b) { c+=a/b; a=a%b; } else { c+=b/a; b=b%a; } } cout << c; } P.S. ērti ir lietot freopen, vari standart inputam piekabināt failu, izstrādes laikā nokomnetēt stdout, un lietot visas standart funkcijas, lai rezultātu saņemtu konsolē, bet sūtot uz servri atkomentēt un stdout tiks rakstīts failā. Edited October 25, 2011 by codez Quote Link to comment Share on other sites More sharing options...
daGrevis Posted October 25, 2011 Report Share Posted October 25, 2011 Kā vispār tiek atļauts kko kompilēt, ja kāds mainīgais nav inicializēts? Quote Link to comment Share on other sites More sharing options...
briedis Posted October 25, 2011 Report Share Posted October 25, 2011 Kā vispār tiek atļauts kko kompilēt, ja kāds mainīgais nav inicializēts? Nejauc inicializēšanu ar definēšanu. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted October 25, 2011 Report Share Posted October 25, 2011 My bad. Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 25, 2011 Author Report Share Posted October 25, 2011 (edited) tev tajā programmā d netiek inicializēts, tāpat arī otrā pārbaude ciklā ir pēc pirmās pārbaudes, kurā tiek izmainītas jau n un m vērtības. #include <iostream> #include <stdio.h> using namespace std; int main() { freopen ("taisnst.out","w",stdout); freopen ("taisnst.in","r",stdin); int a,b,c=0; cin >> a >> b; while (a!=b and a>0 and b>0) { if(a>b) { c+=a/b; a=a%b; } else { c+=b/a; b=b%a; } } cout << c; } P.S. ērti ir lietot freopen, vari standart inputam piekabināt failu, izstrādes laikā nokomnetēt stdout, un lietot visas standart funkcijas, lai rezultātu saņemtu konsolē, bet sūtot uz servri atkomentēt un stdout tiks rakstīts failā. Hmm, tavs variants nostrādā, bet es tagad te īsti nesaprotu, kāpēc viņš nostrādā? Jo praktiski pieņemsim, ka ievadfailā ir skaitlis - 10 un 4 Tātad programma nolasa tos failus un dara sekojošo 10 piešķir n; 4 piešķir m un nodefinē jaunu mainīgo d. Tātad sākas cikls un notiek pirmādarbība - d = 2,5 (10/4) n = 2 (10%4) Nākošā darbība ir d = 4,5 (2,5 + 4/2) m = 0 pēdējā darbība ir d = 4,5 (4,5 + 2/0) n = 2%0 (kam nevajadzētu izpildīties). Es laikam esmu kaut ko ne tā izpratis vai ne? L. Edited October 25, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
codez Posted October 25, 2011 Report Share Posted October 25, 2011 (edited) 10/4 == 2, nevis 2.5, ja to dara ar int tipa mainīgajiem - veseliem skaitļiem jeb vienkārši izsakoties, tā ir dalīšana bez atlikuma. Respektīvi, vienā solī, es nogriežu visus iespējamos kvadrātus ar īsākās taisnstūra malas platuma garumu. Edited October 25, 2011 by codez Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 25, 2011 Author Report Share Posted October 25, 2011 (edited) Iesūtot trešo uzdevumu, kurš arī uz datora it kā gāja, bet tur parādījās 0/10 sāku labot viņu un nonācu pie pilnīgi cita, manuprāt daudz efektīvāka risinājuma (Vismaz īsāka), bet viņš kaut kā negrib pareizi darboties. Ja sākas desmiti un simti, aiziet nepareizi. Kods - http://paste.php.lv/...2da706?lang=cpp Uzd - http://www.lio.lv/ol...umi.php?show=11 Tagad, mēģinu uz papīra uzzīmēt, kā skriptam vajadzētu pildīt uzdevumu, respektīvi ja ir 3, tad vajadzētu būt tā - n0 = 3; n1 = 3 + 3 + 3; n2 = 9 + 9 + 9; n3 = 27 + (27%10 + 27/10) + (27%10 * 27/10); Bet, viņš no kaut kurienes izrauj maģiskus skaitļus. L. EDIT: viss sanāca, kā parasti, mūžīgo kļūdu pielaižu. EDIT2: Tā, tagad ir tikai 3/10 punktiem, mērķis ir dabūt 10/10 :). Varbūt variet iedot kādus hintus, ko vajadzētu pielabot? http://paste.php.lv/031b4e2cca024eed23b8cc3290cc6f6f?lang=cpp Edited October 25, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
briedis Posted October 25, 2011 Report Share Posted October 25, 2011 Ieteiktu mainīgajiem likt jēdzīgākus nosaukumus, citādi tikai saputroties. Vajadzētu ieturēt arī normālas atkāpes. Quote Link to comment Share on other sites More sharing options...
codez Posted October 25, 2011 Report Share Posted October 25, 2011 (edited) Sāc ar to, ka abstrahē kodu, izveidojot funkcijas ciparu summai un ciparu reizinājumam int cipsum (int a){ ... } int cipreiz (int a){ ... } Tad pārbaudi vai funkcijas strādā pareizi un tālāk jau turpini paša pamatalgorimta būvi, izmantojot šīs funkcijas. EDIT: tāpat, ja ir zināms iterāciju skaits, vajag izmantot for, nevis while ciklu Atvērt šo tikai tad, kad pats esi izdomājis risinājumu: http://paste.php.lv/c820a09e04d3c34df3f4aa9580e28c7b?lang=cpp Edited October 25, 2011 by codez Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.