Sunteți pe pagina 1din 6

Instruciunea de ramificare multipl CASE

Subcompetene vizate: Utilizarea formulelor metalingviste i diagramele sintactice ale instruciunilor n studiu pentru verificarea corectitudinii sintactice a programelor elaborate. Elaborarea programelor n care se utilizeaz instruciunile n studiu. Obiective de realizare a subcompetenelor: elevul va fi capabil: s descrie formulele metalingviste i diagramele sintactice ale instruciunii CASE. s explice modul de execuie a instruciunii CASE. s elaboreze programe cu utilizarea instruciunii CASE.

Elaborat n data de 04.02.2013

Prof. Tudor Tanase

Tipul leciei: Formarea competenei de nelegere i acumulare a cunotinelor Resurse materiale i digitale: sal de calculatoare proiector multimedia prezentarea Instruciunea Case Modaliti de evaluare: curent.

Etapele leciei: 1. Moment organizatoric - 1 min. 2. Evocarea - 7min. 3. Realizarea sensului - 15 min. 4. Reflexie - 18 min. 5. Extindere - 4 min.

De multe ori n procesul de scriere a programelor este necesar de a face o alegere dintr-un numr mare de cazuri. Instruciunea IF n aceste cazuri este iraional de utilizat. n aa situii vine n ajutor programatorilor instruciunea de ramificare multipl CASE. Pn acum, studiind ramificarea n algoritmi, noi analizam cazurile de ramificare cu dou ramuri. Sarcina noastr de astzi s facem cunotin cu metodele de utilizare n programe a ramificrilor cu trei i mai multe ramuri. Una din modul de realizare a ramificrii multiple verificarea condiiilor pn cnd una din ele se va dovedi adevrat, ndeplinirea aciunii legate de condiia dat i ieirea din ramificare. Structura operatorului CASE poate fi reprezentat astfel: case <expresie> of <caz 1>:<instruciune 1>; <caz 2>:<instruciune 2>; <caz 3>:<instruciune 3>; . . . <caz n>:<instructiune n> else <instruciune n+1>; end;

Operatorul de selecie multipl lucreaz astfel. n dependen de valoarea expresiei se ndeplinete unul sau alt bloc de instruciuni. Dac valoarea expresiei nu se regsete n nici una din liste, atunci acioneaz ramura ELSE. Dar aceast ramur poate i lipsi, atunci nu se execut nimic. Ramificarea multipl are un neajuns, expresia (care mai este numit selector) poate fi numai de tip ordinal. Dar are i partea pozitiv, n calitate de caz poate figura i o list de constante. Sintaxa instruciunii Case este: <Instructiune case>::= case <expresie> of [<Caz>{ ; <Caz>} ] [;] end <Case>::=<Constanta>{ , <Constant>} : <Instructiune> Diagramele sintactice corespunztoare sunt urmtoarele:

S vedem prioritatea instruciunii case fa de IF n ramificare cu mai mult de dou ramuri. Problema 1. Aducei numrul citit de la tastatur din intervalul 1<9 n form textual.
program numar; var n : 1..9; begin write(Dati numarul: '); readln(n); if n=0 then write(Zero') else if n=1 then write(Unu') else if n=2 then write(Doi) else if n=3 then write(Trei') else if n=4 then write(Patru') else if n=5 then write(Cinci') else if n=6 then write(ase') else if n=7 then write(apte') else if n=8 then write(Opt') else if n=9 then write(Nou') else write(Aceasta nu e cifr);

end;

program numar; var n : 1..9; begin write(Dai numrul: '); readln(n); case n of 0: write(Zero'); 1: write(Unu'); 2: write(Doi); 3: write(Trei'); 4: write(Patru'); 5: write(Cinci'); 6: write(ase'); 7: write(apte'); 8: write(Opt'); 9: write(Nou') else write(Aceasta nu e cifr'); end; end;

Problema 2. Se citete de la tastaur un numr din intervalul 1..12, care reprezibt luna anului. S se indice anotimpul corespunztor.
Program anotimp; var i : integer; begin write(Dati luna: ); readln(i); case i of 12, 1, 2 : writeln(Iarna); 3, 4, 5 : writeln(Primavara); 6, 7, 8 : writeln(Vara); 9,10,11 : writeln(Iarna) else writeln(Nu-i luna a anului); end; readln; end.