1 / 17

Fundamentele program ă rii

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,

bryson
Télécharger la présentation

Fundamentele program ă rii

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Continut: • Codificarea algoritmilor Pseudocod în Pascal • Limbajul Pascal : • - elementele limbajului, • - structura programelor, • - tipuri simple de date.

  3. Vocabularul şi sintaxa limbajului: • Alfabet : • ‑ 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 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>: secvenţa de litere (mari sau mici, sau “_” ) eventual urmata de cifre (Suma_1) a == A (And == and) // ‘And’ # ’and’ Cuvinte rezervate: And Div File In Of Record Type Array Do For Label Or Repeat Until Begin DownTo Function Mod Packed Set Var Case Else GoTo Nil Procedure Then While Const End If Not Program To With

  4. Structura unui program Pascal: antet, declaraţii programul principal. <program> ::= <antetProgram> ; <bloc> . <antetProgram> ::= Program <id> [ ( <listaEl> ) ] <bloc> ::= <listaDecl> ; <insCompusă> <listaEl> ::= <el> { ; <el> } // , <insCompusă> ::= Begin <listaInstr.>End <comentariu> ::= { text } | (* text *) Scrierea este libera! 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); ReadKey End.

  5. 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 : • nume identificator  adresa • domeniu de valori tip • valoare  domeniului de valorinedefinita (neinitializata)!  atribuire • durata de viata:  new . . . dispose • vizibilitate  locala, globala, … • . . .

  6. Tipuri de date: Tip de dată:= ( mulţime de valori (domeniul tipului), mulţime de operaţii ): - predefinite; - definite de utilizator. Predefinite - simplu - real: Real - ordinal: Ord, Succ, Pred - întreg (Integer) [‑Maxint-1, Maxint] (32767)  +,,* , DIV, MOD,/ Byte, LongInt, Word, … - boolean (Boolean),  False < True  And , Or , Not; =, <>, <=, >=. - caracter(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: Array, mulţime: Set, şir_caractere: String, înregistrare: Record. - tip referinta …  …

  7. Declaraţii Pascal: <decl> ::= <defEtic> | <defConst> | <defTip> | <defVar> |<defSubPr> <defConst> ::= Const <id> = <constanta> { ; <id> = <constanta> } Const Pi = 3.141592653;  e = 2.718281828; Path = ‘f:Soft/Tp/Bgi’; <defTip> ::= Type <id> = <tip> { ; <id> = <tip> } Type Culoare = (Alb, Albastru, Galben, Roşu)  Zile = (Luni,Marţi,Miercuri,Joi,Vineri,Sâmbătă,Duminică) <defVar> ::= Var <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 ;

  8. Instructiuni Pascal: <ins> ::= <insSimple> | <insStructurate> <insSimple> ::= <insAtribuire> | <insGoto> | <insVidă> | <apelProcedură> <insStruct.> ::= <insCompusă> | <insCondit.> | <insRepetitiva> | <insWith> <insAtribuire> ::=<variabilă> :=<expresie>// A:=B; !!! <insCompusă>::=Begin <ins> {; <ins> } End <insVida>::= _________________ If r>0 Then If Odd(r) Thenr:=r+1 Else { instrucţiunea vidă } Elser:=r1;

  9. Citirea şi scrierea datelor : Nu exista instructiuni  Apel Proceduri Read ( <listăVariabile> ) Readln (a,b,c); // 1 2 3 xxx Readln (v); // Simpla, Nu enumerare, Write( <listăExpresii> ) Writeln (a,b,c); // 1 2 3 Writeln ('…'); // … Writeln (3.1415:5:2, 7.1:5:2, 9:3); // _3.14__7.10__9 Readln(a:5:2, b:5:2, k:3); // _3.14__7.10__9

  10. Instructiuni 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; If d < 0 Then kod := 0 Else Begin kod := 1; r := sqrt(d); x1 := (‑b‑r)/(a+a); x2 := (‑b+r)/(a+a) End; If kod = 0 Then Write('Ec. nu are radacini reale') Else Write('Radacinile ecuatiei sunt:', x1, x2); ReadKey End.

  11. 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); Case c Of 'a'..'z' : Begin Write (' Este litera mica,'); Case c Of 'a','e','i','o','u' : Write (' vocala.') Else Write (' consoana.') End End; 'A'..'Z' : Case c Of 'A','E','I','O','U' : Write (' Este litera mare, vocala.') Else Write (' Este litera mare, consoana.') End; '0'..'9' : Write (' Este o cifra. '); Else Write (' Este un caracter special.'); End; ReadKey End.

  12. Instructiunea 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  Begin … End; <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.

  13. Instructiunea While: <insWhile>::= While <cond>Do <ins>; <ins> = o instructiune  Begin … End; <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 } While i<n Do Begin { se verifica daca p este prim doar daca i<n } d:=2; { p este prim ? } While (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; ReadKey End.

  14. Instructiunea 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:=n1; 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 ! '); ReadKey End.

  15. Tipuri de date structurate: Array, Set, 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 (a1) 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) }

  16. 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.

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

More Related