Sunteți pe pagina 1din 15
Siruri de caractere aa eo Cte erori contine programul urmator? : ky 2a - a #include = a void main () { char a[5]="abed"; char b[10]="efghij"; a) niciuna =) una @ doua d) trei e) patru @ Solutie Un sir de caractere poate fi definit ca un vector de caractere, printr-o declaratie de forma char [] ; unde este identificatorul sirului, iar ne d& numéarul maxim de caractere ce pot fi memorate in sirul respectiv. O variabila de acest tip poate fi initializaté la declarare cu o constanta sir de caractere (un sir de caractere cuprins intre ghilimele). Este cazul variabilei a din programul nostru, care primeste ca valoare sirul "abcd". char a[5]="abced"; Trebuie remarcat un aspect foarte important: cu toate ca sirul "abed" are patru caractere, la declararea vectorului a s-a specificat c& dimensiunea este 5 ! De ce ? La sfarsitul sirului se memoreaza un caracter special: aga-numitul caracter NULL avand valoarea 0 binar. Acesta are rolul de a marca sfarsitul constantei sir de caractere. In ceea ce priveste caracterele propriu-zise ale sirului, acestea vor ocupa in vector pozitii consecutive incepand cu 0. In cazul nostru, af0]='a', a{1]='b', a(2]="c', a[3]="d", iar a[4] este NULL. Asadar, intotdeauna dimensiunea unui vector de caractere trebuie sa fie cel putin cu 1 mai mare decat llingimea efectivaa sitului mer memorat in vector. Astfel, re a ea 125 Scanned with CamScanner din program este declaraja (char a,ejerabear;) arf fost erat, dar 00° corecta, se declar’ un Instructunea (cha bf0}="afghis"s) °St@ SO. injilizeaza cu vector de caractere b, cu dimensiunea de 260° CAE Tr. ce ge va intdmpla Sil “ef ghs, Sir fn cauzd are Insd numai S856 CREE “posi In vOctor in acest caz 7 Caracterele girui vor ocupa Pr nls, orf (0.1025. 5) tres eentantalor veer pa a pons? comets ou caret URE — rmosificat prin abuire. Aste, Un caracter inul gir deja definit poate fi strulea In instuciures tetar este} este covet: eaacer,cu inden 4 (© aR si!) devine *$+- In urma atbuii,grul va fi "afdgs”, IP OO CY Coe a in schimb, arbuinle =i” gba sunt ONAL SY re deca a vector de earactere, iar unui vector nui se poate abl direct © VCR" iniiaizare in concluzie. programul cone doua ero : p&spuns corect: ). instructiuni (1), (11), (II) in programal umator, care dine seovertle de instustin OS realizeaza corect crea unui gi de caractere dela tasatura sal include Hinclude void main() ¢ (char 91(10],22(101,23(2017 cin >> st; cout << ats Ochi uo seant ("is 22); print ("s2>ts", 42) seane("0",c83) 7 prints ("es" 25203) 7 -f/ (HD) om ~ , 2) mumai(t) —) mai ty Ce) sia) a) () SCN) «) toate Solutio In main se declaré trel vectori de caractere s1, #2, 83. Fiecare dintre ‘acegtia poate memora giruri cu lungimea maxima de nou’ caractere (a zecea pozitie revenind caracterului NUL), Prin ctire de la tastaturd cu ein sau seané, poate fi memorat efectiv un sir Intr-un vector de caractere. De asemenea, sirul refinut intr-un vector de Caractere poate fi efigat in mod direct cu cout sau printe. Astfe, secventa (1) este corectd. Se citeste de la tastaturd vari ‘cin, apoi se afigeazd cu cout girl 81 tocmai citi. 126 la et. cu $i secventa (II) este corectd. De aceasta data citrea varabilel 22 se reaizeasa ou funeia scant, folsind speciicatorul de format "ka corespunzaior sirurilr de caractere. fh capitolul introductiv am ardtat c& pentru a citi variabilé cu func acang, lrebue s&-l tansmitem ca parametru adresa acelei variabile, gi nu sentificatorul el. De exemplu, daca vrem 88 citim o variabila x de tipul Ant, atunci Spolul corect este scant ("¥a 6x) (reaminlim c& éx reprezints adresa vaiabilei 3) Dacd Ins vrem 88 citim un sit de caractere, atunci numele variable nu mai frebuie precedat de caracterul "é". De ce ? Pentru c8 un gir este un vector de ccaractere, iar numele unui vector reprezinté el Insugi o adresa de memori, mai exact adresa primului element. Decl este corect scant ("s2",22) $i este gregit acant ("¢s" 683) “Pe de alté parte, instructiunea printf ("a2=%e", 12) este corecta: se afigeaz’ textul "e2=", urmat de girul de caractere tocmai cit In variabila #2, In conctuzle, secventa (Il) este corects. In secventa (III) intainim doua erori: = constructia "é3" In apelul functiei scant; = construcfia 310} In apelul functiei printe. Cele dou’ instructiuni nu vor produce un mesaj de eroare, dar vor afiga ccaracterul ULL, deci, practic, nu au nici un efect. ‘Réspuns corect: ¢). Aral progam umatc sage puns cores, Hostage contre 52328 OSE" ‘nar [11] ,a[11}="abedefghi3"; aS aie | teal act CG? votes: hat 2). Programul are ero @ Sin » confine numai caracteral * ¢) Inuma execute, siurlea gi coincid @ Sirul b confine numai caracterele din girl a ale c&ror coduri ASCII sunt ‘numere pare. @) Situl confine numai caracterele de rang par din a (al doilea, al parulea etc) Reamintim: ‘iterele mici au codurle ASCII succesive, Incepand cu 97 (a8 97, b'C98, etc.) 7 Scanned with CamScanner tializat cy ton a este iiializat cy Se dectra dol vectr de caractere a I, lr VECO AT sacterelor Siu “abedafgns3% Incicl whine so dolngeaz® © PCD cereor. Sil a. Contra pomete dela ncpe 68 parc nd femmiememeaeinencl Le ga 9 oo * caracterul ati} (caracterul celomentuluits(4) din girl b (bts) =a(4), Ve 5 conteceip resin eracr a gras qn meereriafee nM se : or scene ct timp codul ASC! al arate al ee spl ~ Gondia Nate cataeay” rsa ir en Gites de 0". In evaluarea oad ASCH a corral a(t], nu carter (umare a Corversiaimplcte de la caacter la rite) Cu at cuvinte, cicut Se tod carecteruui al] impart 1 2 08 rst difert de D, adicd atata timp c&t codullul at] este impar. sgni3", avem urmatoarea deruare a In programul dat, pentru a=" ictus Inia, 4-0, ‘Pasul 1: a[0}%21=07 do (a{0} este ‘a cu codul 97, Impat), = b{0]=alO}e'a gists, $92; Pasul 2: af11424=07 ny (a1} este "b* cu codul 98, par, = iese din cilu Dupa executa ciclulul, se face atribuirea b(i]=0, adica b[1]=0, prin care Ja sfargtl sii is +) adaug’ caracterul MULL (caracter cu codul O bina’). Avesta are rolul de ca Inchelerea girului b. Atunci cand formam "manual" un ‘sit de caractere (aga cur a fost cazul girului b In problema noastré), este blgatoru 8 adtugam caracterul wu la sri ilu format. Alife, el nu vaf recunoscut in memorie gi ca atare nu va putea fi aigat in mod direct (cu cout sau printé). . Prin urmare, srulb va confine numai caracteru! 'a* Cee) Fie programul urmator: ‘Aispuns corect: ), include Hnelude #includeciostrean.h> void main() { char 91(10],32[10] ,53[10}="sB"; 8 gots(el): gets (92); pute (s1¢82) / nay Af (stelon (#1) ), cu prototipul In string.b, returneazd lun numér intreg, reprezentand lungimea giului (numarul efectiv de ccaractere. Daca lungimea sinlul s1 este ma mick decat lungimea lui 52 (strien(si)". De ce ? Varabilele 1 gi 33 sunt vector (de ‘caractere), iar numele unui vector este Intotdeauna adresa primului sau element Deci, practic, expresia "s1>83" compara doud adrese. Afirmajia d) este falsa. ‘Raspuns corect: ¢). 9 Scanned with CamScanner Pentru care dite afi scorers OREM umatorpreczt = ot ajile d@ mal jos sunt finclude finclude void main() 4 char s{10]="-28! ant iynr=0; for (i=0 ;i="0 t { ne mw cah wot ok Wn (4 ) cout << mec ss ) G) Dectararea sini este corects. (0) In ciciul gox sunt parcurse corect caracterele girl s ©) Inciciul fox sunt inlocuite cu "0" cifrele din s. @) Condiia din nia 4 este eronata. (@) Programul afigeazé 40200205, —@ Solutio Vector de caractere # se iijalizeazd la declare cu sirul "-2B.2A5" ‘Numrul de zece caractere peciza a declararea vectoruli s este sufcient pentru 1 acoperi cele gapte caractore ale siruui "-28.2A5" plus carscterul NULL, ‘Asadar, afirmatja a) este adevérata In cictl €ox sunt parcurse int-adevércorectpoztile caracterelor sui o, Funcjia stelen(a) retumeaza lungimea sini s (numérul de caractere), iar pozttle caracterelor In sir sunt 0,2,...,stelen(s)-2. Agadar, pentu a arcurge aceste pozifi. In contorul 3, este corectd nia de program for (i=0;4 La fiecare pas al acestul cil se testeaza caracterul s{3). Expresia ]>='0" GE ali}="0" 66 sti1<2'9)) {1 eepere se tes styet0'; arte: ) 80 traduce astel: "dacd 84] nu este cid, atunciInlocueste 130 caracterul s{i} cu caracterul ‘0 gi incrementeazé valoarea variabllei nz (intilizata la declarare cu valoarea 0). Prin urmare, afirmatile c) sid) sunt false. pentru sirul dat 9="-28.205", dup8 Incheierea execute ciluui vom avea 20200205", Observim c& varabila nx "numara” cate caractere care nu vee sire aver in gu inj. Valoarea li nz a finele execute! program va Mfr, ultima instrucfune afigeazS 40200205 (valoarea lui ne gi girl = fr separator inte ele), deci afirmatia e) este adevérat ‘Réspuns corect: a), b) $i e), Ne propunem sa definim un vector care s8 aib& dou’ elemente, ambele «de tp sit de caractere. Fiecare sr trebuie 68 contin doua caracter, primul "abr, jar al dollea "cd". Screli dectaratia corectd char a(2}@}=("ab","cd"};) char af2] (2]={"ab","ed"); char af3][2}=("ab";red"h; @yohar al3){3J=("ab","ed"): char af] (G]i("ab", "ed"; ae Lyte eahenstt few —A1_Solutie pets BR pow OPV EE Toate variantele dete reprezinté © mace de caractee. S& anaizém declaratia de la 2) care este corecta: ee Ghar a2] (3]=("ab", "od": Fiecare Iie @ maticel a poate f priv ca un vector de caactre fel pus, fecare line este un gir de caractere. Lnile matcei sunt a0} i af33 (in fnumar de doud). Linia a0} a fost initializaté cu sirul de caractere "ab", iar linia S111 cu gil "ed. In declaraie se specicd faptul c8 fiecare line are tri oloane, des confine numal dou8 caactere..De ce ? Ulima poze de pe fecare Tne este rezervatd caacterul NULL (0 bina), care marcheazsfrgtul glu ce ropreintd lia respectva. Ase, ge exemplu, ia (vestoul) a(0} conine ementele a0) (0}='a", a[0] (3)="b", a[01 [2]=4ULL. Grafc, matcea de aractere er putea fi reprezetaia asl 0 ina {Pe Dar gi varianta @) este corecta. In declaraia unei matrice poate fi omis rnumarul de ln aluncl cand deciaraja este insoi de o iniiaizare, deoarece in ‘acest caz compilatorul aloca epatill de memoria necesar reprezentaritelementelor matricel. In schit jkde-colgane este absolut necesar. In cazul absentet © declaratie de forma {chaz al] [31 7} reprezint8 un pointer catre BI Scanned with CamScanner unui pointer, vector de trei caractere si, ca regula generald, 1a doctararea Compiitorul nu aloca spatiu pentru variable reteie cic tel vector de caractere asic Ne ge), estar tine gir nl (Vid). Si Varianta d) reprezinta o matrce cute tin Tnirucat in iniialzare s-au dat numa doud giut ( ‘memorate in vector a[0} gi a3), iar vectorul (21 V9. ‘aceasta Varianta se poate considera corects. face tot cu 0 In schimb, variantele 6) si c) sunt eronate, Avem G64 TP Cony 9 Iatrice de caraciere, dar linile Su humai dou8 cO}0a7. SET i rocare ‘memoragirunle date “abr gl ed. Acestea au nevoe de CAE TT, (doua pentru caracterele propiv-zise gi una pentru caracter poate fi numita (© matrice de caractere de tipul celor corecte de mal SUS, torl de e scut "Vector de gral do coractere™ (pentru ch este un vector de Ver caractae isons corect: 2), @) $1.2) ‘ Cle eror conine corpulfuntiel main din programul de mal jos? Hincludecstdio.b> a eee v2) 7 Ror pepe oe v1) (21) ¢ (GO doua ies hs ¢) patru ck adun, four as ne cle La fel ca sn problema precedenta, se dectard o matice de caractere v, u doua lini si zece coloane, adica un vector de dous siuri de caractere. Prin inijalzar, linile maticei vio] si vii) ale maticei vor reprezenta girule vi0J=randrei" i v[1}="Vasilescu, Numan de coloane precizat la declararea matricel tebuie s8 acopere cel mai lung dine giruile date plus Caracterul NULZ. Sirul v[2} are noua caractere, del rezuité c& pentru memorarea $iruor In matrice sunt necesare zece coloane. Aste, decaraia este corect Instrucjunea_print£("ts",v[1}) este corect: se tipegte sirul de ‘Caractere vI1), cu specificatorul "$s" corespunzatorgirulor de caractere. Instrucjunea prints "ts", v2] [2}) este eronat’, deoarece v1} [2] Feprezinté caracterul de indice 2 (al trellea) din giul v1} (caracterul ‘a), iar 132 pi carocterrobui flotspecitcato de format Xe" "4s" iru afigarea unui caracter ti 2 pentru atrraltinstuctunes printe("ve",v{0}ev(1}), este la réndud sronasyvt0} 41 v(3) sunt gt caoctee ar “adunare" 9 dou pte torul '#" este 0 operate fara sens, ar RAspuns corect: ¢). ‘Aprofundare =i a ; Care dintre variantele de mai jos reprezinta 0 declaratie corecta a unut ye de caractere? @ichar #120); / b) char *3(20]; ©) char \e: . Batyns subew7k weap Varianta corecta este a) deoarece feprezinta un vector » de 20 de caractere. In varanta b) se dectard un vector de gir de caractere In varianta ¢) Yariabla # reprezinté un pointer catre variabild de tip caracter (pe scurt, pointer care caracter;variabila » din varanta d) este de pul chaz (caracter, nu gir de caractere). In sfirgit, varianta ) este © declaratie gresitésintactic, \deoarece FeprezintS un vector caruia nui se precizeaza numa de elemente Este important sa facem urmatoarele comentarii referitoare la declaraile a) $i) respectiv: ny a) char 9 (20); ©) char +s; Tel elemente sunt comune acestor dou dectarati: 4. Regula de calcul cu adrese: de exemplu, s¢1 va reprezenta ‘urmatoarea adresd dupa cea desemnata de a (In primul caz. = reprezinta chiar ‘adresa primului element al vectorului. In al doilea caz, este vorba de prima adres’ ‘care urmeaza adresel (reerinfe!) confinute in momentul adunési de pointerul s. 2. Posibllitatea de aplicare a operatorului *. In primul caz +8 reprezinta cchiar variabila aflaté la adresa s, adica chiar primul element al vectoruiui 2; in at doilea caz +s inseamna variabila care se afla la adresa continuta de pointerul s, adic’ realizarea efectiva a referini date de continutul pointerului s. 133 Scanned with CamScanner cunoscut, adica 3. Posibiltateafolosini parantezelor para cee +60 fac In st41=*(e44), in care guma_ qi apoi aplicarea conformitate cu punctele 2. : ectarati i anume alocarea Exist insa gi o mare diferent ine cole dou "Sear cele 20 de tmemoriei: In prima’ declare se olacd etect 20 de octal a ‘componente ‘be veconah taro copra, In sine, © vale dolles remotticaba, mai exact, chiar adrosa primuli element VOST er tara ‘ca, compilatorul ereeaza numal ovariabl, num por ‘nel refer! Ova aloe seatu pen un pr de caracoe opis east face programatorl,atribuind pointeruio valoare ad ecread Evident ed, cd pon abe ce panera 0 vaoar emer sa ‘unui caracter, aun Toate caracterele Ingiuite In memori@ corecter ‘tea fi considerate ca formand un gir de caractere Inmemorie iar 8 ‘Asadar, In prima stati are loc oalocare de 20 de octet are 0 valoare fxd i nemodica este oases), In wreme ce, fo) See Se programl trebuie #2 fumizeze o valoae pointer, valoare, evident (rin atibuire sau alte mecanisme). In starpt, facem precizarea c&, desi incorect® In sine, 0 declaratie cum char s(]7 poste fi folositd numai Intr-un antet de functie gi are, numal In acest caz, re a wn encanta mai mute or, este util ca un st de caractere 88 confina un indicator al sfrgituli stu, In Cre, regula general este aceea cd orice gir de caractere rebuie 88 se {ermine cu aga-numitul caracter NULL, Acest caracter HULL, nu este atceva decat Valoarea 0 In reprezentare binara (nu ASCII). In plus toate funcile limbajului care utlizeaza giruri de caractere cer ca ultima variabilé (octet) din gir $8 conting ‘caracter ful Putem folosi valoarea nulé ca atare, tindnd cont de regula de conversie implicit, de exemplu, #{19]=0; va Insemna c& ultima componenta a vectorului s ‘contine indicatorul uzual de stérgit de gir de caractere, Dar putem foiosi gi simbolut NULL cu condita de a include print.o directiva #include un header care conjine defintia sa (marea majortate a header-elor 0 contin, Intr-adevé). In sfargit, 58 retinem c exist o situate In care compliatorulaloca sing simbolul de sfagit de gi de caractee, aga cum este cazul unei dectarai de form: ‘char #s="abed"; In acest caz s este un pointer care adreseaz’ primul caracter, ‘a’. Compilatorul loca 5 octet: « pentru caracterele propriu-ise plus caracterul nul Precizém ca alocarea realizaté de compilator nu se refer la pointer s (a c&rui vvaloare poate fi modificata oricind prin atribuire) ci la constanta de tip sir de caractere "bed"! Réspuns corect: a). 134 Pentru programul urmator, analizat) corectitudinea afieratilor de mai jos; includecatdlsb.h> 4 Hinelude oS Hnelude ort void main() t char s1(4), 92{4); long x: cin >> 81 >> 42; ) Af (atromp (ot a2)<0) xeatol (#1) ; felee 4 (atroxp(si,02)==0) x= else xeatol (a2); cout ,) relumeazd: 0 valoare negative, cacd gil ‘este mai mic din punctul de vedere al ordinii alfabetice (numité uneon 9 ordine lexicograticd) decd ,funchaIntoarce valoarea zero dacd cele coud rt sunt egale $10 valoare pots, daca esto mai mare decdt <9ir2> Functia atol () transforma gir de caractere Int-un numa de tipul Long $i returneaza numarul obtinut. Instructunea 4 se executd astfel: © daca functia stromp(s1,s2) a returnat o valoare negativa (adicd acd 8182. In aceasta si rrumérul x de tipul Leng. isa, lar 5) este r Din cele de mai sus reiese c& afirmatia 2) este f! adevaraté. Anaizam in contnuare ultimele te ama 5.1.0 dack stage gi senna, atunci s2 stwhbap(,) — compara sinuile i fra a face deosebite inte Iterete mari giterele mici > stafjeap (,,) gi stenicap (,,<0>) —> compara numal primele caracere din cele dous sii (cu, respect, fara wears mang mig) rman alin stot, mai ex 9 oe une de conver 9 un cre un if atoi (), atof () , Deosebirea const In faptl c& grul este watstormat inn num re, respec, flan. Toate cle We archi Fetureaza numarui obtinut. ‘Réspuns corect: b). avem s1<82, dar nu se afigeaza iounea x=ato2 (31), in ‘Stiind c8, in conformitate cu standardul ASCII, rile it ‘Succesive Incepand cu 65, ce va afisa programul de mae? vrais fincludecstdlib.n> Winclude 136 sinclude _ void main eos, t ute int 1220/07 Shae s1is]erane", e125), wIt5): 9 she ones oe ens [1] 2p (2T I trent OA vt. cineca oon By Totes attuaeratzeat (9): oe ) ay Ninie, sil stidvid by aera o)asis @)azci32 o) mcian —@_Solutie Se declard trei vectori de caractere 9, € gi, iar = $e intializeaza cu grul anc, Vom analiza pe rand instructiunile din program: + e=s(1]+3(2); "Adunarea a dou’ caractere" inseamna de fapt insumarea codurilor lor [ASCII (urmare a conversielimplicite caracter —> intreg). # [2] este caracterul "B (eu codul 66, lar 82) este *" cu codul 67 (primul caracter din sirul s find # (01). Rezulté c& e va fi 133. + ston(o,t,200; Funcia stoa (enz>, coo) convertete ruméru integ , dat in baza , cere pe care il memoreaza in parametrl . Agadar, num@rul e=133 va fi convertit in gird t="133". Similara este functia doa (car> , ), singura deosebie constind In feptul c& numru onvertit exo de pul Long + steopy(a,t); Functia stzcpy (cdest> ,) copiaza gil in varisila . Dec. stl val copiat In vector w, 9) vom avea u="l33". ‘sominatoare ese funcia stenepy (, ceursa>, ), cae coplaza In ‘aout numa pm caractre ale gir + streat(e,u) ; Funclia stecat(,) concateneaza (ipeste") sirul la sfargitul sirului . In cazul nostru, sin! u="333" va fi concatenat la sfargitul grului s="aBC, rezulténd s="ABC133". Existd gi functia stencat (,,), care concateneaz numai primele caractere ale sirlui la sfargitul lui . Programul va afiga girul memorat in vectorul s, adicd "ABC133". Raspuns corect: ). BT Scanned with CamScanner izecimel) 97, ‘tind C8 itera +a este weprezentat in ASCH prin nar (ERSTE iar Wera*A* pn 8, precaahrapune!eret elena roe fc . = ayeeee void main() 1 we char mic(€)="abode", Marel6); ie’ Ant i=; , 22: white (abefit) Mare[see}emielAI-32) | fat ’ tu seh La fam me Fae ® 8 Vector Mare reprezintd un yr Ge caractere.”. @ Primele cinci caractee ale vectoruli Mare eunt Iitere mar @ ‘Se Geciard doi vectori de caractere, mic gi Mare, iar vectorul mic este Intiaizat cu pind “abode”, In cickd while se declargeaz 0 parcurgere a caracterelor giruui mic. ‘Contorul & pomeste de la 0 g Incepe 68 parcurpd indicil caracterelor. La fiecare es are loc atibvirea Mare[i++]smic[1]~32, care Inseamnd: > Mare[i}mic[1}~32 (se executd expresia fard a se lua in ‘considerare operatoru ++"). Dacd mic {4} este 0 liter mic&, atunci Mare[] va f litera mare pereche (de exeniplu, 'a* are codul ASCII 87, lar 'a'~32 este "A", Cu codul 65, In viutea conversielimpliite Intreg © caracten), 4 > £96 (se tece da urmatorul caracter al grului mi prin incrementarea ‘contorutui) Cicl se executd cat tim mic{s) nu este caracterul NULL (white (eicli})" Inseamnd “white (mic{i] !=NULL)"), adicd atdta timp cd nu s-2 ojuns la stig gindui atc. Avind ind mic="abede", se va obtine: Mare [0] =aic{0}-32= 328K" (pentru 40), Mare [1]=mic[1]-32="b'-32='B', apoi Mare[2]= Maro[3]="D" gimare(é: Din cele spuse pind acum, rezulta foarte clar c& afimatile a) gic) sunt adevérate, iar d) gi €) sunt false In ciuda tuturor aparentelor, vectorul Mare nu este un gir de caractere ‘corect construt In memorie. Chiar dac& este un vector de caractere, pentru a 138 rioutl 60 9 Wrebuse 68 80 termine cu caraeten WALL. Aces cru nu se FaepidIrtrebt bn caracter, are). a ras nonttt Arf font neconard Fees cies, srbulred Mare 1}=0 (tau Mare (i }etrmt, amy Mare(t]="\0") erro 4 ore valoarea cu care a lept dn icky, ati S In consecint® afirmatia 6) este fated Ce pr Ge caractere va afiga secventa urmatoare’? Adspurs coreet: a) 34 0) char temvabedetg”, *pter peres. 4 Por spray e AU EN, d ‘tr Seta C) "detg’ di) “odet gy” ¢) secventa exte errata Un gir de caractere poate fi memorat ca un vector de caractere lar numee vectorulul reprezintd adres primulul siu element (caracter) Oe scons. un | declarat ca un “pointer citre tpul cha” In problema nostra te deciars 601 astfel de vecton, a 9 pte, iar giru » esto inijalizat cu “abode”: char te="abodefy", *ptr/ Un gir # astfe! deciarat poate fi prolucrat la fel ca gi In cazul tn care barn fh Gefinit ca vector: cltiea giruiul se face cu “gate(s)”, “cin >» 6° sw “ecant ("¥s",2)", pentru a tpt gira putem folost ‘puts out << a” ay “prante ( )*, Accesarea unui caracter se realizeazs prin spwcificarea indicelul (# (41 reprezinta caracterul de indice 4) etc. hn urma atribuiti perms, pointerul pt va adress tot rut » Instructunea pteved, ada ptreptrr4, este 0 aunare Intre un pomnter @ un lntreg Mak exact: - pte adreseazd girl «dec contine adresa caracteruul » (0) = PREG va contine adresa caracterulul 8(0+4)., acid adress lui (4) Rezuiiaidl este ainbut tot Mi per. In consecina. instrucpures “cout << te va afiga gind acresat de cétre pts. Cum pts “ba foat" pe caracten «(4 ezuts C8 $e vor afiga toate caracterele li » Inceptind cu a4) (at crciea) pad la ‘nebinrea ceracterss 1, care marcheara styl yrs Asttt se va fia "ata". ‘Rispuns corect: b). be Scanned with CamScanner Ce va ati 3 a ae void main() Soa t char ta a}e(rabor Benger Se See , eines rae 86. 4e ahaa (22 (2#8))/ , dof b NULL 2) abe d wou, b) abc do Q Peete 2B ream va sempaa erare dg complare In linia de program “cha ta[a}=(rabo" "dee", "ghi")? = iM se injaizeané un aga-rumit "Veto de git de carat’ Fierare dre opreree . 8(0}, af1], a[2] este de pul “char si reprezint un sir de C2 en iniiaizdci, vom avea af0}="abor, a[s}="det” $1 a(2]="ghi". Dar on O° $1 este la randul su un vector, pand la uma avem de-a face cu un “vector de vector ‘ caractere’, su atfel spus o matice de caractere. Aeasta descisa complet are ine: 20 tat tht ter MOLE 215 tat tet ves won 225 tt tht ee om Constructia "a (0] 103" reprezinta adresa elementuli af0] (01. Aceasta ‘adresa se memoreazé In pointer! p chiar la declarare: char *p=éa{0] [0] TTindnd cont de succesiunea’ specificatorilor de format, putem trage Concluzia c& instructnea "printe ("4s te $e",a(1] ,a[2}(1],*(P45))" void main() ( gor (=0;4<12 i++) ( (pts) Ble] he printé ("ts\n",p) 72 for (in0;i<12;i++) * (atd)=pLi]*47 printé("s",p) , 2) Nimic. 4) Textul “abedetghi5" 7 Textul "jihgtedcba" ) O succesiune de caractere imprevizbi €@) Programul contine eror —G_Solutie Se deciard un vector de caractere a, care se initalizeazd cu giul "abedefghi3". Prin insructiunea “char *p=a", se declard un pointer p care va ‘adresa a randul sau girl a, mai precis pe a0] In fiecare ciclu for, contorul 4 va lua pe rand valorile 0,2, ...,22. in primul ciclu se face la fiecare pas atribuirea * (p+i)=a[i]*i: ‘© dacd pointerul p adreseaza caracterul p[01, atunci p+i va adresa ccaracterul p(4J, iar * (p+) reprezinté caracterul adresat de pointeru! ti. Deci, In loc de * (pti) se poate scrie pI). Atribuirea devine astfel pli}=ali} “4, © afi] *4 reprezinta “sau exclusiv" pe bit intre a4) gi 4 (a[) luat ca ‘cod ASCII, nu ca gi caracter). In al doilea cictu, avem la fiecare pas atribuirea *(a+i)=p{i]*s, Interpreténd analog aceasta se mai poate scrie a{i)=p{i]*i. Pentru c& parcurgerea este identicé in cele doua cicluri, am putea scrie ‘unul singurt for (i=0;i<12;i++) ( plil=ali}*s; seeps: Inlocuind prima expresie in a doua, obtinem afi}=(ali]*4) 3, sau a[i}=a[]*(i*%). Reamintim c& sau exclusiv intre dou’ propozitii A $i B 11 Scanned with CamScanner ilo A sau Beste Teprezinta 0 propozte adevarata tunel chnd una cnt propa en oldeona adevératé, dar nu simuitan! In consecin, A eau oxoiuedY BVT 11.9 oss fals, deci 44 este 0, indferent de valoarea lui 4. In continuars 7 t scsang ALLL, deci rezuité c& dupa execulia ambelor abu car@clOr Ay vag neschimbat | In conciuzie, la finele amber cicur tn secverta dat®, ‘acelasi ca cel initial, vabedegghi3". puns erect!) 2 te gril& propuse | Precizati care dintre dectaratile de mai jos reprezinta corect gira de caractere "abode" b) char c{5)="abede"; a) char clé]="abede"; @) char c{}*"abede" ¢) char c[6]="abode' @) Nici una din variantele anterioare. P. Se consider declaratia urmatoare: char c[9]="abedo"; Care dintre urmatoarele afirmati sunt adevarate 7 2), Declaratia datd este eronata ) ef2] este *b* @) @f7) are valoarea 0 binar ——— Care dintre secventele de program de mai jos afigeaza corect ) ct5} este "0" d) cl0} este ‘at textul nove"? a) ) Q char e(4]ercee"; | char a(3}=ncte; | char e="ceen; printe("ts",8); | cout << puts(s) 7 » 2 char (4); char 8(3); Printe("ta",ae"c+4"); | cout << (s="ct+") ; P.V.4. Care dintre secventele de mai jos reaizeaza corect citrea giutlor ‘81 9 827 (Se presupune c& vanabllele #1 si 22 sunt deciarate ca gruri de ccaractere) a) gots (s1,s2); ©) scant("is $5", 81,92); @) cin >> si >> 92; ey P.LV.5. Care dintre instructiunile programului de mai jos sunt eronate 7 gets(s2); ", 681) : scant ("¥s", 682); include 13 Scanned with CamScanner include void main() eae Rl = ta ner aenataerieson HG) , 4) Declaratile de variabile din linia (1). ©) Citirea girurilor din linia (2). ©) Atribuirile din linile (3) si (4). ) Aligarea din linia (5), €) Atribuirea din linia (6). a LV.6, Se consider’ program Hinelude include void main() ‘ char [20]; int ,mz=0; cin >> 8; for (i=0)i=10" 66 [i}<='9") art? cout << m1 ) Care dintre afirmatile de mai jos sunt adevarate? 2) Citirea dela tastaturd este eronat’. 4) Dacd de ta tastaturd se introduce sirul "aboéxe", atunci ciclul are sase pasi ©) Dacd de la tastaturd se introduce girul "A72m#8", atunci programul afigeaz valoarea 3. ©) Condiia din linia i este eronats, ) Programul afigeaza valoarea inal a lui nx, adic’ 0, inditerent ce sir introducem de la tastatur —— P.v.7, Precizali ce sir de caractere se va afiga In urma executiel rogramului urmator; 144 ginclude ginclude void main() { par 9{20]="BorianD C++ 3.1" int 37 for (i=0;4='A) 66 ([4]<='Z4)) a [d]-— (ras cout << ) ) "boRIAN ot+ 3.1" a) "BoxianD C++ 3.1" @) "borland c++ 3.1" ‘c) "BORLAND C++ 3.1" @) "Borland C++ 3.1" ee P.V.8. Se considera un sir a defini ca un vector de caractere. Care dintre ‘cele doud secvente S1) 1 $2) de mai jos afigeaza prima litera mare din sir? St) Z Sie atsy ce (attic! 11 ateisten) print£("8e",afi}): 52) e0; do { itty J while (a[i] 66 M(ali]>="A' é6 ali]<='Z")); putchar(a[i]) ; a) rumai Si) 6) numaiS2)—_¢) riciuna @) ambele ‘e) secventele contin erori EEE EREEemsmeerememmemememmmemmmmmemese= men! P.V.9. Precizali ce text va tipari programul de mai Hinclude void main() { ‘char v(3] [100]=("Popescu", "onoscu", "Vasilescu"}; 4€ (v{O] void main() { 1 Mba" char a6) [2}=("ab", "act "ad", "be" "PS! rinte "toto", [3] (01,92) 111) Print€ ("bs",s(3] (0]+8(2) (11) printe("ts",s(51) 7 ) 2) Toate b) Numai pia @) Numaiprima giatida —@) Nicluna vj ted") ) Numai primele dous P.LV.A1. Ce va fig programul de mal jos? #include void main() ‘uae s[10}="npexs2P3m", b{10}; ice he Gan cl ae (482) bokl=s[ils ) bikl=0; cout << ) a) x23) Som) B 3 ) vimic ‘Aprofundare. E 12. Fie » sit dous variabile de tipul "vector de caractere’. Serif o secvenfa de program pertru enuntul "dac8 sir!» contine cel putin caractere, ‘tune! copiaza In ¢ primole n caractere alo his" @) 4 (strlen(s)>=n) strnopy(s,t,n); t{n]=0; 4) 4£ (stelen(s)>=n) strnepy(t,s,n); tIa}=0; 46 g) s€ (atrten(a)>en) stenopy (nis, 8); tfn)=0: ‘estelen(s)) stropy(s,t,n); t{n}="0'; c Fo ere rea ere EEE 143, Fie declrail PNAS Toe of (18) 22125] 231251 Instructiunea 42 (stremp(si,s2) 66 stromp(s2,83)) cout << 1; va afiga valoarea 1 daca: 4a) Siruile 81, #2 § 63 sunt cistncte doud cate dod 4) Toate cele te sur ot, 22 si 83 sunt egale. ©) Sirutile 21, 22 i 83 sunt in ordine afabeticscrescdtoare. ) Sirurile 21, 22 si 83 sunt In ordine alfabetica descrescatoare. 2) Nici una dntre variantele anteoare. See P.V.14, Considerand dectartile: char 9[4]="123",t14]; int ==123,y; Care dintre expresille de mai jos au valcarea 0? a) atoi(s)iex; ——-) itoa(x,t,10)==8; — ¢) (y=atoi (s))==x; ) x=(atoi (itoa(x,t,10))); _@) !stromp(itoa(x,t,10) ,s) ee P.V.15. Ce va afiga programul urmator? include finclude { char s[12]="6789", t(12}="6", u[12]="89"; Jong x=0; streat(t,u) ; i€ (stremp(s,t)) x-atol(t); else x=atol(s)7 4€ (streap(s,u)>0) xmatol (a) ; cout << "\n" << x; ) ao 6 ges a) 639 e) 6789 ES 137 Scanned with CamScanner P.V.A6. Ce text afigeaza program umstor? #include void main() ‘ char *s1="ExEMPLU 51 " Printé("\nt.ast.65",81/82) 7 ) a) tmaur |b) vex S020" D vexeawsnens |e) set" a P.V.A7. Co afigearA program umato? Hinclude void main() i tu; char tanes23456709" th "5 weesté), ove3, tees(Q)7 eines (engndhdr anes uae, Se)? h srupny "#52008 TRL" eXEMPLY SIMPLU SrLye a) 000 ) 002 ) 010 9 300 gui i, P.V.AB. Care dinte instruct (1), 2).(5) din functia main de mai jos sunt eronate? #include Hinlude include void main() ‘cna #02, +92, #83: int x sientest; ay scant ("s",52); — // (2) 23-681; 11) cout << sits2; — // (8) oes) : M6) 4 2.3) si(4) %) (2), (3). (4)$i(5) oD (4)si(5) d (3)3(5) €) (3), (4) $i(5) P.V.19.. Fle programul #include Mas rr | | void main() Conar 8, tt, 10 int 4," cin > 8 Goo (elo ieo; efi]; taGsfi], usted, ul0]—=t10]? x=1:0 ,44); ‘cout << xi y In urma execute programului, se va afiga valoarea 0, daca: 4) Toate caracterele girl sunt identice. 4) Ingirul » exist cel putin doua caractere succesive dient. )_Ingiru sexist cel mult dou’ caractere succesive identice @)_Ingirul exist cel putin dova caractere succesive identice, ¢@) Ingiru s nu exists doua caractere succesive identice. el P.V.20. Consider urmatoarele notiuni 'A) vector de doi pointer c’tre caracter 8) pointer cate gir de doua caractere si urmatoarele dectarati de variable: 1) chaz *a(2i; A) char (*b) (2; Precizaii corespondentele covecte: 2) A) cul) $18) cull) 2) A) cull) 3.8) cw) ©) Nuexista corespondente. @) 8) nu are corespendent. @) Cele cous dectarati semi acelagucru __———_ ————— PA 21. Ce afigeaza programul de mai jos? include void main() ‘ char *s(5]=("012", char *t, fu; int ‘t6s [1] [0] cout << (+(t+5)—=8 [2] (11) 5 veeGs(3] (0141; 420; "345", "678", "ORB, "CDE"} ; “9 Scanned with CamScanner pirite (ule1) cout << ulseel ou e) 067 P.V.22. Ce afigeaza programul de mai jos? finctose Hinelude

S-ar putea să vă placă și