Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: citire parsata  (Citit de 2991 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
soriyn
Vorbaret
****

Karma: 24
Deconectat Deconectat

Mesaje: 150



Vezi Profilul
« : Iulie 16, 2008, 12:26:48 »

As vrea sa suit și eu ce înseamna citirea parsata, am cautat dar nu am găsit nimic pe forum
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #1 : Iulie 16, 2008, 12:52:38 »

Citirea parsata este citirea ca sir de caractere a unor numere si apoi transformarea lor in numere, fiind mai rapida decat citirea normala. Cu cat sunt mai multe numere pe un rand, cu atat este mai rapida.

Uite un exemplu

Cod:
n=200;
for (i=1;i<=n;++i)
    scanf("%d",&v[i]);

poate fi inlocuit cu

Cod:

char s[1000];
n=200;aux=0;poz=0;
gets(s);
for (i=0;s[i];++i){
    if (s[i]==' '){
       v[++poz]=aux;
       aux=0;
    }
    else
        aux=aux*10+s[i]-'0';
}
v[++poz]=aux;



sper ca nu am gresit implementarea  Embarassed... spor  Thumb up
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #2 : Iulie 16, 2008, 16:23:57 »

Eu am inteles ca e mai rapid asa, dar nu inteleg de ce. Poate sa-mi explic cineva? Multumesc mult.
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #3 : Iulie 16, 2008, 17:10:31 »

Functiile standard de citire ("scanf" & co) iau in considerare mult mai multe tipuri de formatare ale datelor de intrare. Din acest motiv, cand cunosti concret structura inputului, poti sa castigi un plus de viteza parsand.
De exemplu, daca stii ca trebuie sa citesti un numar pozitiv, nu trebuie sa faci discutie in functie de semnul numarului. "scanf" nu stie acest lucru, iar daca citesti ca "int", tot trebuie sa testeze primul caracter ca nu cumva sa fie semn.
P.S. Nu am studiat codul intern ca sa vad cum sunt implementate functiile astea, dar in principiu, asa functioneaza.
Memorat

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

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #4 : Iulie 17, 2008, 14:30:26 »

Mersi. Deci vrei sa zici ca daca citesc un sir de caractere, nu verifica nimic. Pe cand la alte tipuri verifica si spatiile, semnele etc.
Dar care merge mai repede, citirea caracter cu caracter sau cate un rand intreg?(cin.get()/cin.getline()) si de ce?
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #5 : Iulie 22, 2008, 08:42:10 »

Teoretic merge mai repede daca citesti cate o linie sau cat mai mult de-o data. Asa harddiskul va citi un bloc intreg, adesea continuu. Daca citesti caracter cu caracter, harddiskul va face cate o operatie de citire pentru fiecare caracter.
Asta in teorie, in practica, amandoua variantele merg cam la fel de repede deoarece sistemul de operare face "read-ahead". Adica daca citesti primul caracter, apoi al doilea caracter, se prinde ca o sa vrei sa citesti si al treilea sau al patrulea asa ca le citeste din timp si le tine in memorie.
Cel mai rapid mod de a citi (teoretic) este sa retii cate 2^x octeti dintr-o bucata, indiferent ca trece sau nu pe linia urmatoare. Si odata ajunse in memorie datele te poti juca cu ele cum vrei. Cu cat e x mai mare, cu atat e mai rapid. (din nou: fara a se lua in calcul optimizarile facute de OS!)

Valentin
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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