Se poate trece la capitolul următor cu tasta ► și se poate reveni la un capitol precedent cu tasta ◄

Suma cifrelor unui număr (Pascal)


<

C
a
p
i
t
o
l
u
l

a
n
t
e
r
i
o
r

<

Una din problemele de început cerute celor care învață un limbaj de programare este suma cifrelor unui număr. Această problemă cere ca programatorul să știe să citească datele venite de la tastatură și, după prelucrare, să le afișeze. Pe lângă asta e nevoie de puțină gândire pentru a finaliza problema.

1. Abordare abstractă

Problema se poate despărți în trei (3) componente:

  1. citirea numărului
  2. aflarea sumei cifrelor sale
  3. tipărirea rezultatului

Punctele a. și c. pentru cei care au citit cum se face citirea și scrierea sunt ușor de realizat. Rămâne punctul b.

2. Algoritmul

Pentru a afla suma cifrelor este nevoie să avem la îndemână cifrele. Într-o variabilă vom avea suma (care o vom inițializa cu 0) și va trebui să adunăm pe rând fiecare cifră a numărului introdus.

Să luăm un exemplu: numărul 14 352. Suma cifrelor sale este 15. 1 + 4 + 3 + 5 + 2. Cum putem lua pe rând fiecare cifră a sa în mod programatic. Pentru asta va trebui să folosim împărțirea din clasele primare. Cea cu rest.

Vom împărți numărul nostru la 10 și vom lua restul. 14 352 împărțit la 10, conform acelor vremuri, dă câtul 1 435 și restul 2. Pentru a afla restul unei împărțiri avem operatorul MOD în Pascal. După ce adunăm 2 la variabila noastră, ne trebuie câtul. Pentru aceasta avem operatorul DIV.

Cum nu știm de câte ori trebuie să facem aceste 2 operații, vom folosi o buclă cu pași nedefiniți (WHILE sau REPEAT). Până când? Până când ni se termină numărul. Sau, în limbaj matematic, până când câtul împărțirii este 0.

Ca să formulăm mai simplu tot algoritmul, vom scrie pseudocodul aferent lui:

citește număr

variabila sumă ia valoarea 0.

cât timp număr este diferit de 0 execută

rest ia valoarea număr MOD 10

sumă ia valoarea sumă + rest

număr ia valoarea număr DIV 10

sfârșit CÂT TIMP

afișează sumă

 

3. Executare

Codul efectiv urmează exact pașii descriși mai sus. Singurul lucru ce trebuie să-l definim sunt tipurile de date pe care vrem să le folosim. Mai întâi să vedem codul:

Suma cifrelor unui număr în Pascal

Variabila număr am definit-o de tip longint fiindcă e cel mai mare tip de dată întreg ce poate fi folosit fără probleme.

Rest este shortint fiindcă avem de a face în acest caz doar de un număr mic, de la 0 la 9.

Suma este un număr întreg, în acest caz definit ca word doar să fim siguri.

 

Un alt mod de a rezolva problema poate fi:

1. Pseudocod

sumă ia valoarea 0

Repetă

citește tasta apăsată

dacă tasta apăsată e o cifră

sumă ia valoarea sumă + cifra apăsată

sfârșit dacă

până când tasta apăsată nu este o cifră

afișează sumă

2. Executare

Suma cifrelor unui număr în Pascal (alternativ)

În primul rând va trebui să folosim niște funcții speciale pentru a putea rezolva problema în modul acesta. Ne trebuie o metodă să avem tasta citită. Apoi să putem determina dacă este o cifră și apoi va trebui să transformăm tasta citită într-un număr.

Pentru toate acestea va trebui să includem o colecție de funcții. Pentru asta avem uses crt; scris pe linia a doua. Colecția de funcții care cuprinde și cele de care avem noi nevoie se numește crt.

Apoi pentru a putea obține tasta apăsată, folosim funcția Readkey. Ea returnează un caracter, dat de tipul de date char. Pentru asta am și definit variabila tasta.

Apoi pentru a putea determina dacă caracterul este o cifră ne folosim de funcția Ord. Ord nu face parte din Crt, ci e o funcție standard care ne dă ordinea unui element dintr-o mulțime. În cazul caracterelor, consultând un tabel al caracterelor ASCII vom vedea că cifrele sunt între numărul de ordine 48 (cifra 0) și 57 (cifra 9). E standard. Așa e oriunde se folosește tipul de dată caracter. Nicăieri în lume nu sunt așezate în altă ordine.

Revenind la algoritmul nostru, el urmează pașii descriși mai sus:

- repetă

- citește tasta apăsată

- dacă tasta este o cifră (numărul de ordine al caracterului este în intervalul 48 - 57) atunci o adăugăm la sumă. Pentru a o converti ne putem folosi tot de numărul ei de ordine. Dacă scădem 48 din acest număr, obținem direct cifra. 48 - 48 este 0. Iar apoi 53 - 48 este 5 și capătul de interval, 57 - 48, este 9.

- Singura parte în plus aici este linia write(cifra); În cazul instrucțiunii Readkey, nu se mai și afișează în consolă tasta apăsată, așa că acuma la sfârșitul buclei, o tipărim ca utilizatorul să vadă și ce număr a scris.

- toată bucla se va repeta până când tasta apăsată nu mai e cifra și deci ordinea sa este înafară intervalului 48 - 57.


Avantajul imediat al acestei a doua metode de abordare este evident: nu mai suntem limitați de tipurile de date, număr nostru poate fi oricât de lung.

 

Pentru sugestii de probleme pe care aţi vrea să le vedeţi rezolvate, daţi un mesaj cu sugestii aici.


>

C
a
p
i
t
o
l
u
l

u
r
m
ă
t
o
r

>

Ți-a fost de ajutor ce am scris aici?
Hei, mersi de răspuns.