|
< 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:
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: 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 Î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?
Motivul:
Hei, mersi de răspuns.
|