Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Intrebare de streamuri  (Citit de 2368 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : Iunie 08, 2008, 12:53:10 »

Recent m-am hotarat sa scriu o clasa de numere mari in C++. Voi posta intr-un articol pe infoarena codul sursa dupa ce voi termina pentru ca toata lumea sa poata folosi codul meu. Voi incerca sa o fac sa mearga cat mai repede posibil, astfel incat sa nu mai existe batai de cap la problemele de numere mari (doar in concursurile onsite Evil or Very Mad).

O problema peste care am dat este ca vreau sa supraincarc functia << de scriere. Daca folosesc baza 10, e ok. Insa daca am baza mai mare, sa zicem 10000, lucrurile devin naspa.

In C as fi facut asa:

Cod:
printf("%d", A[A[0]]);
for (i = A[0]-1; i > 0; --i)
    printf("%04d", A[i]);

Cum fac asta cu streamuri?
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #1 : Iunie 08, 2008, 13:09:35 »

Cu streamuri ai face asa:
Cod:
#include <iomanip>
cout << A[A[0]];
for (i = A[0] - 1; i > 0; --i)
    cout << setw(4) << setfill('0') << A[i];
Functia setw(x) face ca numerele sa fie scrise in coloane de x caractere iar functia setfill(c) completeaza spariile albe cu caracterul c.

Apropo, eu am implementate o parte din operatiile cu numere mari in clase. Sunt curios sa vad cu ai de gand sa le implementezi, pentru ca si eu am avut mai multe tentative, si sunt curios sa vad si ce operatii o sa implementezi. In orice caz, de cele mai multe ori, ineficienta implementarilor se tragea de la initializarile pe care le faceam, de genul memset(X, 0x00, sizeof(X)), alfel avand nevoie de multe if-uri; uneori merge si X[0] * sizeof(X[0]), dar nu tot timpul. Si daca nu vrei sa implementezi cu vectori statici, poti sa derivezi clasa vector, din STL, numai ca scrii ceva mai mult.
Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #2 : Iunie 08, 2008, 13:15:36 »

O problema peste care am dat este ca vreau sa supraincarc functia << de scriere.

<< nu e operator ? Smile
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #3 : Iunie 08, 2008, 13:16:06 »

Vrei si sa o proiectezi bine? Sau doar sa mearga repede? Pentru proiectare o sa ai multe aspecte de urmarit.
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #4 : Iunie 08, 2008, 13:32:12 »

O problema peste care am dat este ca vreau sa supraincarc functia << de scriere.

<< nu e operator ? Smile

Eh, ai prins ideea Tongue.


Vreau sa o proiectez bine. Si nu vreau sa folosesc vectori statici, si nici sa mostenesc vector. O sa am un int* in care o sa retin cifrele, si o sa fac resize-uri la fel ca vectorul. O sa vedem ce iese Smile. Oricum, probabil ca voi face asta in timpul vacantei deoarece acum sunt destul de ocupat.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
mordred
Client obisnuit
**

Karma: -39
Deconectat Deconectat

Mesaje: 51



Vezi Profilul
« Răspunde #5 : August 21, 2008, 23:43:40 »

a trecut ceva timp, dar succes!
http://infoarena.ro/lucrul-cu-nr-mari mi se pare facut cam neglijent, avea cateva erori in text si cod, si functia de scadere cred ca e busita  Huh
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #6 : August 22, 2008, 08:42:06 »

Articolul nu e finalizat, motiv pentru care nici nu apare in pagina de articole. Am aruncat un ochi pe functia de scadere si nu mi se pare deloc gresita, doar scrierea e mai compactata.
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
mordred
Client obisnuit
**

Karma: -39
Deconectat Deconectat

Mesaje: 51



Vezi Profilul
« Răspunde #7 : August 22, 2008, 16:01:32 »

am priceput compactarea, dar aveam impresia ca da "erori" in anumite situatii, probabil m-am inselat  Whistle
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #8 : Septembrie 19, 2008, 10:18:19 »

Articolul explica mai bine, dar tot prefer varianta lui Berinde din articolul http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai (dupa ce elimini anumite "buguri" care sunt compiler-dependent)
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines