Informatică, întrebare adresată de HermioneJGranger, 9 ani în urmă

Mirel a învățat astăzi la școală la ora de matematică despre baze de numerație. De exemplu a învățat cum să transforme un număr dintr-o bază oarecare în baza zece. Pentru acasă a primit următoarea temă: Pentru un cuvânt dat, se inlocuiește fiecare literă a acestuia cu numărul de litere de dinaintea sa în alfabet, astfel litera a devine 0, litera b devine 1, litera c devine 2 ș.a.m.d. , iar cuvântul dat devine un număr in baza 26. Să se transforme acest număr în baza zece. Date de intrare În fișierul baza.in se citește de pe prima linie un cuvânt, format doar din litere mici ale alfabetului englez. Date de ieșire În fișierul baza.out se va afișa pe prima linie un număr, reprezentând valoarea in baza zece a cuvântului din baza 26. Restricții Lungimea cuvântului <= 50 Exemplu baza.in baza.out Explicație abz 51 a=0, b = 1, z = 25. abz(26)= 0 * 262 + 1 * 261 + 25 * 260 = 51(10)


stassahul: Ai luato de pe un site? Am in vedere pbinfo, infoarena etc. Daca da, poti sa scrii id-ul problemei so rezolv acolo si dupa sa-ti pun solutia aici.
HermioneJGranger: nu o am de pe un site.Profesoara ne-a dictat-o

Răspunsuri la întrebare

Răspuns de Seckar
3
O sa presupun ca stii ce e ala ASCII. Daca nu stii, pe scurt, calculatoarele deja ai cate un cod numeric pentru fiecare litera, si pentru simboluri gen ounct virgula etc.

Codul numeric pentru 'a' mic este 97(pentru b este 98, pentru c 99, etc.) asa ca pentru a transforma o litera in numarul sau din alfabet, gen 'a' sa il faci 0 nu trebuie decat sa ii iei codul ASCII si sa scazi 97.

Astfel a, care e 97, va deveni 0, b care e 98 devine 1, etc.

Pentru a transforma un caracter in numarul sau ASCII nu trebuie decat sa ii dai unei variabile in valoarea caracterului:

char c = 'b';
int i = c;

Daca vei afisa acum variabila i, vei primi 98, deci ca sa primim ce vrei tu, facem asa:

i = c - 97;

Asa ca nu ai decat sa:

1. Citesti intr-un sir de caractere cuvantul.

2. Faci un vector de numere ca sa restii codurile caracterelor.

3. Cu un for de la 0 la strlen(cuvant)-1 iei fiecare litera din cuvant si o transformi in numar ca mai sus.

Dupa asta, ca sa obtii nr in baza 10 faci in felul urmator:

1. Iti faci o variabila, result = 0, in care o sa pui numarul

2. Parcurgi vectorul de numere DE LA SFARSIT SPRE INCEPUT, pentru ca tehnic ultimul element e "ultima cifra"

3. Ca sa convertesti sin baxa X in baza 10, oricare ar fi X, iei "cifrele" lui x de la coada la cap, si le inmultesti cu puteri ale lui X. Las si un exemplui sa fie mai clar:

Daca cuvantul tau e "abcda":

Asta inseamna 0 1 2 3 0, in baza 26

Tu vei parcurge numerele astea in ordine INVERSA

Iar rezultatul final il vei obtine adunand asa:

(prima cifra de la coada) * ((baza) ^ (a cata cifra de la coada este... minus unu!))
 + 
(a doua cifra de la coada) * ((baza) ^ (...))

Si tot asa. 

Deci pt exemplul nostru cu 0 1 2 3 0 ar veni asa:

0 * 26 ^ 0     +
3 * 26 ^ 1     +
2 * 26 ^ 2     +
1 * 26 ^ 3     +
0 * 26 ^ 4

Spor!
Alte întrebări interesante