Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Tablouri

c


Tablouri

Vom scrie acum un program care va contoriza aparitiile
fiecarei cifre, a fiecarui caracter de spatiere (blanc, tab, linie
noua) si a tuturor celorlalte caractere. Desigur, este un
program artificial, dar ne va permite sa ilustram ma 959c25j i multe aspec-
te ale lui C intr-un singur program.

Exista 12 categorii de intrari, asa ca ne este mai convenabil
sa folosim un tablou pentru a tine numarul de aparitii a fiecarei
cifre, decit sa folosim 10 variabile individuale. Iata acum o
versiune a acestui program:

main() /* contorizeaza cifre, spatii albe, alte caractere */


Declaratia

int ndigit[10];

spune ca ndigit este un tablou de 10 intregi. Indicii de
tablou intodeauna incep de la zero in C (spre deosebire de
FORTRAN sau PL/1 unde incepe de la unu), asa ca elementele
tabloului sint ndigit[0], ndigit[1] , ...,ndigit[9]. Acestea se
reflecta in buclele "for", care initializeaza si tiparesc tabloul.
Un indice poate sa fie orice expresie intreaga, inclusiv desi-
gur variabilele intregi ca "i", sau constantele intregi.
Acest program particular se bazeaza mult pe proprietatile
reprezentarii drept caractere a cifrelor. De exemplu, testul

if (c >= '0' && c <= '9') ...

determina daca un caracter din c este cifra. Daca el este
cifra, valoare numerica a acelei cifre este

c - '0'

Acest algoritm functioneaza bine numai daca '0', '1', etc
sint pozitive si in ordine crescatoare, si intre '0' si '9' nu se
gaseste altceva decit cifre. Din fericire, aceasta este ade-
varul pentru toate seturile de caractere conventionale.

Prin definitie, calculele aritmetice care implica tipuri
"char" si "int", convertesc totul in tipul "int" inainte de
prelucrare, asa ca variabilele si constantele de tip "char"
sint esential identice cu tipul "int" in contexte aritmetice.
Acest fapt este aproape natural si convenabil; de exemplu: c-
'0' este o expresie intreaga cu o valoare intre 0 si 9 corespunza-
toare caracteruluidintre '0' si '9' depus in c, si deci este
un indice valid pentru tabloul ndigit.

Decizia se ia asupra caracterului (daca el este o cifra, un
caracter de spatiere sau altceva) in secventa:

if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;

Constructia de tipul

if (conditie)
instructiune
else if (conditie)
instructiune
else
instructiune

apare frecvent in programe ca o modalitate de a exprima deci-
ziile multiple. Codul se citeste simplu de sus in jos pina cind o
conditie este indeplinita; in acest punct, se executa partea
corespunzatoare de "instructiune" si intreaga constructie este
terminata. (Desigur ca "instructiune" pot fi mai multe in-
structiuni incluse intre paranteze). Daca nici una din con-
ditii nu este indeplinita, instructiunea care urmeaza dupa ultimul
"else" este executata daca este prezenta. Daca "else" final si
"instructiune" lipsesc (ca in programul nostru), nu are loc nici o
actiune. Pot exista un numar arbitrar de constructii de tipul

else if (conditie)
instructiune

grupate intre "if"-ul initial si "else"-ul final. Ca o ches-
tiune de stil, va sfatuim sa formati aceste constructii asa cum
le-am facut si noi, astfel incit deciziile lungi sa nu ajunga pe
marginea din dreapta a paginii.

Instructiunea "switch", care va fi prezentata in Capitolul 3,
reprezinta un alt mod de a scrie o decizie multipla si este
potrivita, in particular, cind conditia care se testeaza este
simpla sau cind o expresie de caractere sau de intregi se potri-
veste cu o constanta dintr-un sir dat. Prin contrast, vom
prezenta o versiune "switch" a acestui program in Capitolul 3.

Exercitiul 1-12. Scrieti un program pentru a tipari histogra-
ma lungimilor cuvintelor care apar la intrare. Este cel mai
usor sa desenati histograma orizontal; o orientare verticala este
mai laborioasa.




Document Info


Accesari: 964
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )