Fundamentele program ă rii

17
Fundamentele Fundamentele program program ă ă rii rii Web: www.cs.ubbcluj.ro/~vcioban FundamenteleProgramarii/CursFP2008/FP1.ppt FundamenteleProgramarii/CursFP2008/FP1.ppt FundamenteleProgramarii/CursFP2008/FP2.ppt FundamenteleProgramarii/CursFP2008/FP2.ppt C2 / C2 / 07.10.2008 07.10.2008

description

C2 / 07.10.2008. Fundamentele program ă rii. Web: www.cs.ubbcluj.ro/~vcioban FundamenteleProgramarii/CursFP2008/FP1.ppt FundamenteleProgramarii/CursFP2008/FP2.ppt …. Continut :. Codificarea algoritmilor Pseudocod în Pascal. Limbajul Pascal : - elementele limbajului, - PowerPoint PPT Presentation

Transcript of Fundamentele program ă rii

Page 1: Fundamentele program ă rii

Fundamentele programFundamentele programăăriirii

Web: www.cs.ubbcluj.ro/~vciobanFundamenteleProgramarii/CursFP2008/FP1.pptFundamenteleProgramarii/CursFP2008/FP1.pptFundamenteleProgramarii/CursFP2008/FP2.pptFundamenteleProgramarii/CursFP2008/FP2.ppt

 

C2 / 07.10.2008C2 / 07.10.2008

Page 2: Fundamentele program ă rii

Continut:

2. Codificarea algoritmilor Pseudocod în PascalPascal

Limbajul Pascal :

- elementele limbajului,

- structura programelor,

- tipuri simple de date.

Page 3: Fundamentele program ă rii

Vocabularul şi sintaxa limbajuluiVocabularul şi sintaxa limbajului ::

AlfabetAlfabet :‑ literele (mari şi mici) ale alfabetului latin: A, B, C,..., X, Y, Z, a, b, c, ... , x y z‑ cifrele zecimale: 0, 1, ... , 9‑ caractere speciale: + * / . , ; : ( ) [ ] { } = < > ! ? ^ @ # $ % \ ‘ “ _ ...

Notaţia BNFNotaţia BNF (metasimboluri):: { { text }} poate să se repete de ori câte ori (inclusiv de zero ori).

[[ text ]] scrierea construcţiilor opţionale (text poate lipsi).

Identificator <id>: Identificator <id>: secvenţa de litere (mari sau mici, sau “_” ) eventual urmata de cifre (Suma_1)a == A (And == and) // ‘And’ # ’and’

Cuvinte rezervateCuvinte rezervate::AndAnd DivDiv FileFile InIn Of Of RecordRecord TypeTypeArrayArray DoDo ForFor LabelLabel OrOr RepeatRepeat UntilUntilBeginBegin DownToDownTo FunctionFunction ModMod PackedPacked SetSet VarVarCaseCase ElseElse GoTo GoTo Nil Nil ProcedureProcedure ThenThen WhileWhile

ConstConst EndEnd If If NotNot ProgramProgram ToTo WithWith

Page 4: Fundamentele program ă rii

Structura unui program PascalStructura unui program Pascal ::

antetantet, , declaraţiideclaraţii programul principal.programul principal.

<program> ::= <antetProgram> ; <bloc> . <antetProgram> ::= Program <id> [ ( <listaEl> ) ] <bloc> ::= <listaDecl> ; <insCompusă>

<listaEl> ::= <el> { ; <el> } // ,

<insCompusă> ::= Begin <listaInstr.> End

<comentariucomentariu> ::= { text } | (* text *) Scrierea este libera! Scrierea este libera!

Exemplu de program Pascal:Exemplu de program Pascal: Program Suma; { Tipareşte suma a două numere reale,}Var a,b : Real; { a şi b, citite de la tastatură.}Begin Write (' Dati doua numere separate prin spatiu, apoi Enter : '); Readln(a,b); Write (' Suma este ',a+b); ReadKeyEnd.

Page 5: Fundamentele program ă rii

Constante Constante : :

• întregi : 15, 1989, ‑314.• reale: forma normală (0.012345) sau în forma exponentială (12345E‑6). • şir de caractere : '22 Decembrie 1989' , 'Domnu'' Trandafir' • booleana: True , False

Variabile Variabile : :

• nume identificator adresa• domeniu de valori tip• valoare domeniului de valori nedefinita (neinitializata)! atribuire

• durata de viata: new . . . dispose• vizibilitate locala, globala, … • . . .

Page 6: Fundamentele program ă rii

Tipuri de dateTipuri de date : :

Tip de datăTip de dată := ( mulţime de valori (domeniul tipului), mulţime de operaţii ): - predefinite; - definite de utilizator.

PredefinitePredefinite - simplu

- real: Real

- ordinal: Ord, Succ, Pred

- întreg (IntegerInteger) [‑Maxint-1, Maxint] (32767) +,,* , DIV, MOD, /

Byte, LongInt, Word, …Byte, LongInt, Word, …

- boolean (BooleanBoolean), False < True And , Or , Not; =, <>, <=, >= .

- caracter(Charcaracter(Char), Ord( Chr(i) ) = i şi Chr( Ord(c) ) = c

- enumerare, <Tip_enum.>::=(<Lista_id>)

(Primăvară,Vară,Toamnă,Iarnă)

- subdomeniu <tip‑subdomeniu> ::= const1 .. const2 Vară..Iarnă sau

'0'..'9' - structurat: tablou: ArrayArray, mulţime: Set, şir_caractere: String, înregistrare: Record.

- tip referinta … …

Page 7: Fundamentele program ă rii

Declaraţii PascalDeclaraţii Pascal : :

<<decldecl> ::= <> ::= <defEticdefEtic> | > | <<defConstdefConst> | <> | <defTipdefTip> | <> | <defVardefVar>> | |

<<defSubPrdefSubPr>>

<<defConstdefConst>> ::= ConstConst <id> = <constanta> <id> = <constanta> {{ ; <id> = <constanta> ; <id> = <constanta> }}

Const Pi = 3.141592653; e = 2.718281828; Path = ‘f:Soft/Tp/Bgi’;

<<defTipdefTip>> ::= TypeType <id> = <tip> <id> = <tip> {{ ; <id> = <tip> ; <id> = <tip> }}

Type Culoare = (Alb, Albastru, Galben, Roşu)

Zile = (Luni,Marţi,Miercuri,Joi,Vineri,Sâmbătă,Duminică)

<<defVardefVar>> ::= VarVar <ListaId> : <tip> <ListaId> : <tip> {{ ; <ListaId> : <tip> ; <ListaId> : <tip> }}

Var i, j, k, l, m, n : Integer; a, b, x, y, z : Real; Cond : Boolean;

S : Array [1..9] Of Real ; C : Array [1..10, 1..10] Of Char ;

Page 8: Fundamentele program ă rii

Instructiuni PascalInstructiuni Pascal : :

<ins> ::= <insSimple> | <insStructurate><ins> ::= <insSimple> | <insStructurate>

<insSimple> ::= <insAtribuire> | <insGoto> | <insVidă> | <apelProcedură><apelProcedură>

<insStruct.> ::= <insCompusă> | <insCondit.> | <insRepetitiva> | <insWith>

<insAtribuire> ::= <variabilă> :=:= <expresie> // A:=B; !!!

<insCompusă>::=Begin <ins> {; <ins> } End

<insVida>::= _________________ If r>0 Then

If Odd(r) Then r:=r+1 Else { instrucţiunea vidă }

Else r:=r1;

Page 9: Fundamentele program ă rii

Citirea şi scrierea datelor Citirea şi scrierea datelor ::

Read ( <listăVariabile> ) Readln (a,b,c); // 1 2 3 xxx

Readln (v); // Simpla, Nu enumerareenumerare,

Write ( <listăExpresii> )

Writeln (a,b,c); // 1 2 3

Writeln ('…'); // …

Writeln (3.1415:5:2:5:2, 7.1:5:2:5:2, 9:3:3); // _3.14__7.10__9

Readln (a:5:2:5:2, b:5:2:5:2, k:3:3); // _3.14__7.10__9

Nu exista instructiuni Apel Proceduri

Page 10: Fundamentele program ă rii

Instructiuni conditionaleInstructiuni conditionale : :

<insCondit.> ::=If <cond> Then <ins1> // ;

[ Else <ins2> ]

Program Ecgr2; {Rezolvarea ec.de grad 2 }Var a, b, c, {Coeficientii ecuatiei } d, {Discriminantul ecuatiei} r, {variabila de lucru}

x1, x2: Real; {Rezultatele}kod: Integer; {Indicator_rezultat, 0=rad.reale, 1=complexe}

Begin Writeln('Se rezolva ecuatia de gradul doi'); Writeln('Dati coeficientii a, b, c'); Readln(a, b, c); d := b*b ‑ 4*a*c; IfIf d < 0 Then kod := 0

Else Begin kod := 1; r := sqrt(d); x1 := (‑b‑r)/(a+a); x2 := (‑b+r)/(a+a) End; IfIf kod = 0 Then Write('Ec. nu are radacini reale') Else Write('Radacinile ecuatiei sunt:', x1, x2); ReadKeyEnd.

Page 11: Fundamentele program ă rii

Case <eo> Of <lista‑c> : <ins> { ; <lista‑c> : <ins> } [ Else <ins> ] End

Program CaseCaracter; { Analiza unui caracter c. } { daca este litera, cifra sau alt caracter ? }Var c : Char; { Litera poate fi mica/mare, }Begin { vocala/consoana } Write (' Dati un caracter '); Readln(c); CaseCase c Of 'a'..'z' : Begin Write (' Este litera mica,'); CaseCase c Of 'a','e','i','o','u' : Write (' vocala.') Else Write (' consoana.') EndEnd End; 'A'..'Z' : CaseCase c Of 'A','E','I','O','U' : Write (' Este litera mare, vocala.') Else Write (' Este litera mare, consoana.') End;End; '0'..'9' : Write (' Este o cifra. '); Else Write (' Este un caracter special.'); End;End; ReadKeyEnd.

Page 12: Fundamentele program ă rii

Instructiunea ForInstructiunea For : :

<insRepetitiva> ::= <insFor>|<insWhile>|<insRepeat>

<insFor>::= For <v> := <e1> To <e2> Do <ins>;| { pas=+1 }

For <v> := <e1> DownTo <e2> Do <ins>; { pas= -1 }

<ins> = o instructiune BeginBegin … EndEnd;

<ins> se executa de 0,1,2,… ori !!!

Program Divizori; Var n, i : Integer; Begin Writeln('Se tiparesc divizorii lui n'); Write('Dati n='); Readln(n); For i:=2 To n Div 2 Do { Trunc(Sqrt(n)) } If n Mod i = 0 Then Writeln(i); End.

Page 13: Fundamentele program ă rii

Instructiunea WhileInstructiunea While : : <insWhile>::= While <cond> Do <ins>;

<ins> = o instructiune BeginBegin … EndEnd;

<ins> se executa de 0,1,2,… ori !!!<ins> modifica <cond> !!!

Program PrimeWhile; { Primele n numere Prime }Var n, i, p, d : Integer;Begin Write (' Dati n : '); Readln(n); { primele n numere prime p =2,3,5, ... } i:=0; p:=2; { i reprezinta al catelea numar prim a fost

gasit } WhileWhile i<n Do Begin { se verifica daca p este prim doar daca i<n } d:=2; { p este prim ? } WhileWhile (d<Sqrt(p)) And (p Mod d > 0) Do d:=d+1; {cauta pana la p} If d>Sqrt(p) Then Begin i:=i+1; { p este prim ! } Writeln (i:13,p:5) End; If p=2 Then p:=p+1 Else p:=p+2 { verifica numerele impare 3,... } End; ReadKeyEnd.

Page 14: Fundamentele program ă rii

Instructiunea RepeatInstructiunea Repeat : :

<insRepeat>::= Repeat <SecvIns> Until <cond>;

<SecvIns> := <ins> { ;<ins> } { modifica <cond> !!!

}Program NumarRepeat; { Cel mai mare numar n de patru cifre : } Var n, Ogl, Sc, { Ogl (n) + Sc (n) = n + 99 } Cat, Uc : Integer; { Cat= n Div 10; Uc= n Mod 10 }Begin n:=9999; Repeat n:=n1; Cat:=n; { Primul Cat este n } Sc:=0; Ogl:=0; Repeat Uc :=Cat Mod 10 { Determin Ultima cifra a numarului } Sc :=Sc + Uc; { Adun Ultima cifra la Suma cifrelor } Ogl :=Ogl*10+ Uc; { Adaug Ultima cifra la Oglindit } Cat :=Cat Div 10 { Sterg Ultima cifra din numar } Until Cat=0; Until (Ogl+Sc=n+99) Or (n=999); If n>999 Then Write (Ogl,'+',Sc,'=',n,'+99',' (',Ogl+Sc,'=',n+99,')') Else Write (' Nu exista ! '); ReadKeyEnd.

Page 15: Fundamentele program ă rii

Tipuri de date structurateTipuri de date structurate : Array, : Array, Set, String, RecordSet, String, Record

<tablou> ::= Array ‘[‘ <domeniulIndicilor> ‘]’ Of <tipulElementelor>; Type SirIntregi = Array [1..9] Of Integer; { tipul sir de maxim 9 intregi }

Var Matrice : Array [1..25] Of SirIntregi; { tipul elementelor poate fi array }

T : Array [1..6] Of Array [1..7] Of Real ; Ref.: T, T[i], T[i][j]

T : Array [1..10, 1..6] Of Real ; elementele Tij vor fi referite prin T[ i , j ].

Program CalendarPe200_; { Exemplu Array }Type ZiSapt = (Luni,Marti,Mercuri,Joi,Vineri,Sambata,Duminica); SirZile = Array [Zi_Sapt] Of Byte; Saptamana = Array [1..6] Of Sir_Zile;Const NumeZi : Array [ZiSapt] Of Char = ('L','M','M','J','V','S','D');Var Luna : Saptamana; Anul,a : Word; Zi,Zl,l,s : Byte; z,ziua : Zi_Sapt;Begin Write (' Calendarul pe anul 200'); Readln (Anul); Anul:=200+Anul; Zi:=2 { Calc. ziua de inceput a anului (0..6) } For a:=2000 To Anul Do Begin Zi:=Succ(Zi); If (a1) Mod 4 = 0 Then Zi:=Succ(Zi); End; Zi:=Zi Mod 7; { Ziua în care incepe anul } z:=Luni; While Ord(z)<Zi Do z:=Succ(z); { (Luni..Duminica) }

Page 16: Fundamentele program ă rii

For l:=1 To 12 Do Begin { Calendarul pe luna l } For s:=1 To 6 Do For ziua:=Luni To Duminica Do Luna[s,ziua]:=0; Case l Of { Nr.zile în luna l } 2 : If Anul Mod 4 = 0 Then Zl:=29

Else Zl:=28; 4,6,9,11 : Zl:=30 Else Zl:=31 End; s:=1; { saptamana s = 1,... cel mult 6} For Zi:=1 To Zl Do Begin Luna[s,z]:=Zi; If z=Duminica Then Begin z:=Luni; s:=s+1 End

Else z:=Succ(z) End; Case l Of 1 : Writeln (' Ianuarie '); 2 : Writeln (' Februarie '); 3 : Writeln (' Martie '); 4 : Writeln (' Aprilie '); 5 : Writeln (' Mai '); 6 : Writeln (' Iunie '); 7 : Writeln (' Iulie '); 8 : Writeln (' August '); 9 : Writeln (' Septembrie'); 10 : Writeln (' Octombrie '); 11 : Writeln (' Noiembrie '); 12 : Writeln (' Decembrie ') End; Writeln; For ziua:=Luni To Duminica Do Begin {pentru fiecare zi din saptamana} Write (' ',Nume_Zi[ziua],' '); For s:=1 To 6 Do Begin { pentru fiecare saptamana s } If Luna[s][ziua]>0 Then Write (Luna[s,ziua]:3) Else Write (' '); End; Writeln End; ReadKey End;End.

Page 17: Fundamentele program ă rii

Tema:Tema:

. . . C2 / 07.10.2008 . . . C2 / 07.10.2008

“ “Fiind dată o matriceFiind dată o matrice A A cu elemente reale, având cu elemente reale, având mm linii şi linii şi n n coloane, se cere coloane, se cere să se transforme această matrice prin interschimbări de linii, astfel încât pe să se transforme această matrice prin interschimbări de linii, astfel încât pe coloana coloana k k (dată), elementele să fie în ordine crescătoare, apoi să se tipărească (dată), elementele să fie în ordine crescătoare, apoi să se tipărească matricea în forma finală.”matricea în forma finală.”