Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica
 Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila
 Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...

Jante noi shitbox

Trinitas TV 4K
 Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebui sa vindem imobiliarele ...
 

Cum stochez intr-un int mai multe numere sau ceva gen

- - - - -
  • Please log in to reply
15 replies to this topic

#1
maxb2000

maxb2000

    Active Member

  • Grup: Members
  • Posts: 1,452
  • Înscris: 14.01.2011
Buna seara,

Am o mica nelamurire cu urmatorul cod:

https://hastebin.com/unodotarom.cpp

Cum as putea in Student[i].note sa stochez mai multe note ?

Gen sa fie Student[1].note sa aiba 4,5,6,9 etc.. ?

Nu am prea multa experienta cu C++ dar am nevoie de ceva de genul

Edited by maxb2000, 05 October 2018 - 19:13.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005
folosesti un array / sir de numere (note)

Edited by MarianG, 05 October 2018 - 19:19.


#3
ccdsah

ccdsah

    Senior Member

  • Grup: Senior Members
  • Posts: 2,581
  • Înscris: 16.03.2013

View Postmaxb2000, on 05 octombrie 2018 - 19:12, said:

Buna seara,

Am o mica nelamurire cu urmatorul cod:

https://hastebin.com/unodotarom.cpp

Cum as putea in Student[i].note sa stochez mai multe note ?

Gen sa fie Student[1].note sa aiba 4,5,6,9 etc.. ?

Nu am prea multa experienta cu C++ dar am nevoie de ceva de genul
note in engleza e singular. ala nu stocheaza decat o singura nota. Prin absurd daca ai vrea sa stochezi intr-un singur int mai multe note ai putea: Sa zicem ca fiecare student are 4 note: romana, matematica, engleza, franceza, de valoare intreaga 1..10. Aloci fiecarei note cate doua cifre > integerul va avea 7-8 cifre, dar te complici

#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005
ar fi o inginerie dar numarul de note este limitat de MAX_INT

Edited by MarianG, 05 October 2018 - 19:23.


#5
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
În primul rând notele le-aș face float.

View Postmaxb2000, on 05 octombrie 2018 - 19:12, said:

Cum as putea in Student[i].note sa stochez mai multe note ?
Ai avea mai multe variante.
  • Folosesti un vector C-like alocat static. Spre exemplu:
     float note[20]; 
    
    . Problema este că ești limitat la 20/orice alt număr de note sau folosești mai multă memorie decât este necesar. Nu este cea mai flexibilă variantă.


  • Te folosești de alocarea dinamică, iar în acest caz ai avea ca membru un pointer
    		float* note;
    		
    
    . Astfel vei putea să aloci spațiu strict cât este necesar. Acum ești responsabil si de dealocarea memoriei.


  • Folosești un container din STL, respectiv
    		std::vector<float> note;
    		
    
    Este cea mai bună variantă întrucât nu îți mai bați capul cu treburile low-level și te poți concentra pe logica aplicației.


#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005

View Postccdsah, on 05 octombrie 2018 - 19:21, said:

note in engleza e singular. ala nu stocheaza decat o singura nota. Prin absurd daca ai vrea sa stochezi intr-un singur int mai multe note ai putea: Sa zicem ca fiecare student are 4 note: romana, matematica, engleza, franceza, de valoare intreaga 1..10. Aloci fiecarei note cate doua cifre > integerul va avea 7-8 cifre, dar te complici
de ce cate doua cifre ?

#7
ccdsah

ccdsah

    Senior Member

  • Grup: Senior Members
  • Posts: 2,581
  • Înscris: 16.03.2013

View PostMarianG, on 05 octombrie 2018 - 19:28, said:

de ce cate doua cifre ?
pentru 10

#8
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005
si daca folosesc o singura cifra si trec doar zero se supara cineva ?

*ps intregul trebuie sa unsigned

Edited by MarianG, 05 October 2018 - 19:32.


#9
maxb2000

maxb2000

    Active Member

  • Grup: Members
  • Posts: 1,452
  • Înscris: 14.01.2011
Cred ca folosesc asta: float note[20];

Mi se pare simplu si momentan nu ma intereseaza sa optimizez codul. La pointeri nu am inteles utilitatea lor gen iti arata adresa de memorie si poate ai nevoie de lucruri de genul dar eu nu vad unde si de ce :)))

#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005
se optimizeaza memoria folosita, iar codul nu e extraordinar de greu

#11
cspot

cspot

    Guru Member

  • Grup: Senior Members
  • Posts: 12,855
  • Înscris: 22.07.2004
Studiaza operatorii pe biti.
     Crezi un int cu valoare zero, apoi alte variabile int cu notele.
      Nu-ti face griji pentru nota zece pentru ca trebuie sa folosesti musai 4 biti si deci poti stoca 16 numere de la 0 la 15.
      Intr-un int de 32 de biti poti stoca 8 note.
      Pui nota intr-un int si apoi folosesti shift pe biti << ca sa-i muti 4,8,16 pozitii.
       Dupa ce studiezi operatorii pe biti inclusiv AND si OR poate te lamuresti.

#12
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,956
  • Înscris: 24.04.2013
Se mai poate folosi baza 11 de numerotatie si atunci pe un unsigned int (32-biti) incap 9 note, avand in acelasi timp si notele 10 si 0 (ultima pentru chiul de la extemporal Posted Image …). Pe un long long (64-biti) incap chiar 18 note.

#13
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,445
  • Înscris: 10.08.2005
10 este o problema doar daca este prima nota, in rest, toate notele ocupa fix o cifra
iar pentru ca pe moment nu ne inteseaza ordinea notelor, zerourile se pot muta la final,

View Postsags, on 05 octombrie 2018 - 20:06, said:

si 0 (ultima pentru chiul de la extemporal Posted Image …).
sau nu adaugi nimic dar incrementezi numarul de note, zic si eu

Edited by MarianG, 05 October 2018 - 20:15.


#14
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015
Daca vorbim doar de note, 4, 5, 6, 8, nu si de  numar de repetitii atunci e simplu. Fiecare nota e reprezentata de un bit si doar de un bit si atunci foloseste doar 11 biti din int. Daca ai o nota bitul respectiv devine 1, daca nu ai nota atunci bitul e 0,
Exemplu: 4, 6, 7, 9, 10 sunt notele, 00000000000000000000011011010000 va fi reprezentarea binara a intregul lui. 1744 fiind in baza 10.

#15
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,956
  • Înscris: 24.04.2013
Buna observatia colegului @MarianG cu numarul de note. Chiar cand e codificat in baza 11 pe un unsigned int, el tot pare necesar ca altfel nu se poate sti cu cati de 0 incepe sirul (sau cati de 0 sunt la sfarsit, depinde cum codifici).

Insa a stoca (separat) numarul de note inseamna o variabila suplimentara, deci mai mult decat cei 32 biti ai unui unsigned int. De aici intrebarea: cate note 010 poti stoca strict in 32 de biti? Eu zic ca 9, dar codificarea e mai complicata:
  • daca sunt 9 note, atunci codificandu-le in baza 11 obtii un numar care in binar pe 32 de biti are 00, 01 sau 10 in cei 2 biti cei mai semnificativi. Nu poate avea niciodata 11.
  • daca sunt cel mult 8 note, atunci codificarea necesita cel mult 28-25-21-18-14-11-7-4 biti. In acest caz poti folosi bitii cei mai semnificativi, care altfel ar fi pe 0, pentru a indica numarul de note punand 1 in cei 10 - numar_de_note mai semnificativi si 0 in urmatorul.
Decodificarea se face inversand metoda de codificare de mai sus:
  • daca intregul de 32 de biti are 00, 01, sau 10 in bitii sai cei mai semnificativi, atunci sunt 9 note si il ‘scrii’ in baza 11 pentru a le obtine.
  • daca are 11 in bitii cei mai semnificativi, atunci afli cate note sunt numarand cati de 1 sunt consecutivi in bitii cei mai semnificativi, iar dupa eliminarea lor ‘scrii’ ce ramane in baza 10 pentru a afla notele.
  • De notat ca in ambele cazuri cand ‘scrii’ numarul in baza 11 trebuie ca, daca e cazul, sa il completezi cu note 0 la stanga pentru a obtine atatea note cate ai desus din analiza bitilor celor mai semnificativi.


#16
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
N-are sens folosirea bazei 11 cat timp nota 0 e invalida.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate