30
Σημειώσεις για την Pascal 10 Νοεμβρίου 2013 1 Γλώσσες προγραμματισμού Οι σύγχρονοι μικροεπεξεργαστές μπορούν μεταξύ άλλων να εκτελούν αριθμητικές και λογικές πράξεις και να διαβάζουν και γράφουν στη μνήμη του υπολογιστή. Για να γίνει αυτό πρέπει να τους δωθούν οι ανάλογες εντολές. Οι εντολές είναι κωδικοποιημένες ως αριθμοί. Για παράδειγμα οι παρακάτω εντολές βάζουν σε μια θέση μνήμης τον αριθμό 5, σε μια άλλη τον αριθμό 7, προσθέτουν τους δύο αριθμούς και αποθηκεύουν το αποτέλεσμα σε μια τρίτη θέση μνήμης (για έναν επεξεργαστή Pentium). 457f 464c 0101 0001 0000 0000 0000 0000 0001 0003 0001 0000 0000 0000 0000 0000 00d0 0000 0000 0000 0034 0000 0000 0028 0009 0006 8955 83e5 10ec 45c7 05fc 0000 c700 f845 0007 0000 458b 8bf8 fc55 048d 8902 f445 00b8 0000 c900 00c3 4700 4343 203a 5528 7562 746e 2f75 694c 616e 6f72 3420 342e 342e 312d 7534 7562 746e 3575 2029 2e34 2e34 0035 2e00 7973 746d 6261 2e00 7473 7472 6261 2e00 6873 7473 7472 6261 2e00 6574 7478 2e00 6164 6174 2e00 7362 0073 632e 6d6f 656d 746e 2e00 6f6e 6574 472e 554e 732d 6174 6b63 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Είναι προφανώς ακατανόητο. Ο λόγος δεν είναι απλώς ότι οι εντολές είναι κωδικοποιημένες ως αριθμοί αλλά και ότι πρέπει να τοποθετούνται σε μια συγκεκριμένη σειρά σε σχέση με τις παραμέτρους τους, να εκτελούνται κάποιες προπαρασκευαστικές λειτουργίες πριν εκτελεστούν αυτές καθαυτές οι εντολές κτλ. Για να απλουστεύσουν τα πράγματα οι κατασκευαστές μικροεπεξεργαστών αναθέτουν σε κάθε εντολή ένα μνημονικό (mnemonic) και έτσι μπορεί κανείς να καταλάβει ευκολότερα το παρακάτω 1 movl $5, -4(% ebp ) 2 movl $7, -8(% ebp ) 3 movl -8(% ebp ), % eax 4 movl -4(% ebp ), % edx 5 leal (% edx ,% eax ), % eax 1

Pascal

Embed Size (px)

DESCRIPTION

Shmeioseis mathimatos, Pascal eidikothtas texnikos efarmogwn plhroforikhs

Citation preview

  • Pascal

    10 2013

    1

    . . . 5, 7, ( Pentium).

    457f 464c 0101 0001 0000 0000 0000 00000001 0003 0001 0000 0000 0000 0000 000000d0 0000 0000 0000 0034 0000 0000 00280009 0006 8955 83e5 10ec 45c7 05fc 0000c700 f845 0007 0000 458b 8bf8 fc55 048d8902 f445 00b8 0000 c900 00c3 4700 4343203a 5528 7562 746e 2f75 694c 616e 6f723420 342e 342e 312d 7534 7562 746e 35752029 2e34 2e34 0035 2e00 7973 746d 62612e00 7473 7472 6261 2e00 6873 7473 74726261 2e00 6574 7478 2e00 6164 6174 2e007362 0073 632e 6d6f 656d 746e 2e00 6f6e6574 472e 554e 732d 6174 6b63 0000 00000000 0000 0000 0000 0000 0000 0000 0000 . , . (mnemonic)

    1 movl $5, -4(%ebp)2 movl $7, -8(%ebp)3 movl -8(%ebp), %eax4 movl -4(%ebp), %edx5 leal (%edx,%eax), %eax

    1

  • 6 movl %eax, -12(%ebp) . . . . , - , . , . . , 5 7, Pascal :

    1 a := 5;2 b := 7;3 c := a + b;

    , , (source code). - assembly. . - . (compiler). . -, . - , . . (objectivecode)., , - , .. . linker. linker (executable program) ., : . -. linker -.

    2

  • . , .

    2 Pascal

    Hello, world!. Pascal :

    1 program hello;2 begin3 writeln('Hello, world!');4 end.

    Hello, world!. Pascal:

    program . , , ( ' ) .

    2 4 begin end. Pascal (block) begin end. end . Pascal , end , 4 .

    Pascal 1 3 . . Pascal . : begin 2 . begin end. Pascal . begin end. 3 . , . writeln

    Pascal

    3

  • 3 begin-end .

    3

    - . ( ). . . . (variables). - . . . Pascal (declare). - 3. onoma_metavlitis: typos_metavlitis;. (identier) / . - Pascal integer, real, boolean char . . begin . var. - : i, j, k: integer. 7 `' writeln. writeln . - . . 6 . readln writeln . ., 8 . := : .

    writeln . .

    4

  • . i , := . : :=. . , :=.

    1 program var1;2 var3 i: integer;4 begin5 write('Dose tin timi tis i: ');6 readln(i);7 writeln('H timi poy edoses einai ', i);8 i := i + 5;9 writeln('An tou pros8eseis to 5 givetai ', i);

    10 end.

    4 Pascal

    4.1 if

    . . Pascal

    1 if synthiki then2 entoli;3 ...

    : 1. 2 3. , 2 3. , .. 7 > 5, i j . if .

    1 if synthiki then2 entoli3 else4 entoli2;

    begin-end . .

    .

    5

  • 5 ... 2 else 5. 2 4. 5. 2. Pascal 1 2 1 4 () . if if. : 5 , 5 12 10 5000 20 12 .

    1 program foros1;2 var3 eisodima, foros: real;4

    5 begin6 write('Dose to etisio eisodima sou: ');7 readln(eisodima);8

    9 if (eisodima

  • 1 for variable := start to end do2 entoli;

    for (control variable) variable . start end end-start+1 . entoli. variable start entoli. start+1 entoli, end (). start end . to 1 downto -1 +1. for (loop). (body) . 1 n n , n 1 1.

    1 program progression;2 var3 total, i, n: integer;4

    5 begin6 write('Dose to n: ');7 readln(n);8

    9 total := 0;10 for i := 1 to n do11 total := total + i;12

    13 writeln('To a8roisma tvn orwv eivai: ', total);14 end.

    4.3 while-do

    while-do. :

    1 while synthiki do2 entoli;3 ...

    if. while : . while, . while

    7

  • ( 3 ). while for. while . while . Fibonacci. (block) begin-end. . Pascal .

    1 program fib;2 var3 a, b, c: integer;4 limit: integer;5

    6 begin7 write('Dose to ano fragma twv orwv poy 8a ypologistouv: ');8 readln(limit);9

    10 a := 1;11 b := 1;12 write(a, ' ');13

    14 while b < limit do15 begin16 write(b, ' ');17 c := a + b;18 a := b;19 b := c;20 end;21 end.

    4.4 repeat-until

    Pascal repeat-until. :

    1 repeat2 entoli1;3 entoli2;4 ...5 until synthiki;

    : repeat until - . .

    8

  • , - . . - while-do . begin-end. Fibonacci repeat-until.

    1 program fib;2 var3 a: integer;4 b, c: integer;5 limit: integer;6

    7 begin8 a := 1;9 b := 1;

    10 write('Dose to orio');11 readln(limit);12

    13 repeat14 c := a + b;15 a := b;16 b := c;17 write(c, ' ');18 until a + b > limit;19

    20 writeln;21 end.

    4.5 case

    `' if else . . 50 , 75, 100 50 . if

    1 if paidia = 0 then writeln ('0 euro')2 else if paidia = 1 then writeln('50 euro')3 else if paidia = 2 then writeln('75 euro')4 else if paidia = 3 then writeln('100 euro')5 else writeln(100 + (paidia -3) * 50, ' euro);

    . case. :

    9

  • 1 case expression of2 value1: commands1;3 value2: commands2;4 ...5 valuen: commandsn;6 else commands;7 end;

    : expression ( ). , integer, boolean char. value1 2, value2 3, . , 6, else. else . begin-end . , case :

    1 case paidia of2 1: writeln('50 euro');3 2: writeln('75 euro');4 3: writeln('100 euro');5 else writeln(100 + (paidia - 3) * 50, ' euro');6 end;

    5 Pascal

    standard Pascal :

    integer: -32768 32767,

    real: 3:4 1038 3:4 1038 ,

    boolean: Boole true false,

    char: .. 'a', 'b', 'F' .

    :

    + ,

    - ,

    / ,

    * ,

    div ,

    10

  • mod .

    . :

    < ,

    > ,

    = ,

    = ,

    .

    true false, . true false true false . :

    and ,

    or ,

    not ,

    xor .

    .

    5.1 integer

    integer -32768 32767. . a: integer 1.2, true 'c'. . integer , -32768 32767. .. listing 1

    Listing 1:

    1 a := 256 * 64; writeln(a);2 a := a * 2; writeln(a);

    :

    11

  • 16384-32768 256 * 64 16384 16384 2 32768, . / Pascal . div . mod . a b c d a b a = c b+ d d 0 d < b.

    5.2 real

    ' (.. , .) integer real. real mod div. real . .. listing 2

    4.20000000000000E+0014.20000000000000E+002

    Listing 2: real

    1 a := 42; writeln(a);2 a := 420; writeln(a);

    writeln , :x :x:y. , y x . listing 3

    42.00420.00420.000.420.04

    Listing 3: real

    1 a := 42; writeln(a:2:2);2 a := 420; writeln(a:2:2);3 a := 0.42; writeln(a:2:2);4 a := 0.042; writeln(a:2:2);

    .. 4/2.

    12

  • real ` --' .. 42.25, 0.007 `-e-' .. 12e47 12 1047,0.1e-12 0:1 1012 .

    5.3 integer real

    : +, - * integer real. integer integer real. div mod integer integer. / integer real real. integer real integer real. , true false. real. - Pascal . . 0 1 . . :

    1 program compare;2 var3 a, b, c: real;4 begin5 a := 100;6 c := 100;7 b := 1e-24;8 a := a + b;9 if a = c then

    10 writeln('a equals c');11 end.

    a c 100. a 11024 . . = real ( ) Pascal. `'.

    5.4 boolean

    boolean Boole: true false. .

    13

  • false < true. . and (, ), or (, ) not (, ). . and or , not . : a and b true true a b ( a b false false). a or b false false ( true true). not a a. :

    a b a and b a or b not atrue true true true falsetrue false false true falsefalse true false true truefalse false false false true

    Pascal , if, repeat-until while-do.

    5.5 char

    char . .. integer

    1 var i: integer;2 begin3 i := 5;

    char ,.. :

    1 var a: char;2 begin3 a := 'j';

    a 'j'. a writeln(a); j ( ). a := 'j' Pascal . a := j; Pascal a j. :

    1 program char1;2 var3 a,b: char;4 begin

    14

  • 5 a := 'a';6 writeln('H metavliti a exei timn ', a);7 b:= 'c';8 writeln('H metavliti v exei timn ', b);9 end.

    5 6 'a' a 'H metavliti a exei timn ' a. , . 6 7 b 'c'. 7 'H metavliti v exei timn ' 'H metavliti b exei timn ' Pascal .

    H metavliti a exei timn aH metavliti v exei timn c

    char , a char a:='e' a:=101. ASCII. , a:='e' 101 a 101 a a:=101. Pascal '' . ord(x) . , chr(x) . :

    1 program example;2 var3 a: char;4 begin5 a := 'A';6 repeat7 write(a);8 a := chr(ord(a) + 1);9 until a > 'Z';

    8 a ASCII . a E ( 69), ord(a) 69. 1 70. chr(70) F. chr ord a chr(ord(a))

    15

  • n 0-255 ord(chr(n)) . succ pred. . succ pred .

    5.6 (built-in) Pascal

    Pascal . . 1 ( ) . real integer. abs sqr real integer . real.

    1: abs(x) xsqr(x) x sin(x) xcos(x) xexp(x) e x- ln(x) xsqrt(x) xarctan(x) x

    trunc(x) round(x). real integer. , - . .. trunc(3.5) 3, trunc(2.9) 2, trunc(-3.7) -3. . .. round(3.7) 4, round(3.2) 3 round(-3.7) -4. ' , round(3.5) 4 round(-3.5) -4.

    6

    . Pascal . . , (strings), , (records). strings.

    16

  • 6.1 (arrays)

    . . . . . . :var p: array[1..10] of integer; p :var r: array[30..40] of real r 30 40.

    1 name: array[a..b] of typename; name , a , b typename. 10 , .

    1 program example;2 var3 p: array[1..10] of integer;4 i: integer;5 mik: integer;6

    7 begin8 for i := 1 to 10 do9 begin

    10 write('Dose ton #', i, ' ari8mo: ');11 readln(p[i]);12 end;13

    14 mik := p[1];15 for i := 2 to 10 do16 begin17 if p[i] < mik then18 mik := p[i]19 end;20 writeln('O mikroteros eivai o ', mik);21 readln;22 end.

    8 11 i 1 10 readln 11 p[1], p[2], . p[i] .

    17

  • , p: array[a..b] of typename :

    1 type2 myarray = array[1..10] of integer;3 mybigarray = array[1..1000] of real;

    . . myarray 1 10 mybigarray 1 1000. , Pascal (integer, boolean .).

    1 var2 p: myarray;3 q: myarray;4 r: mybigarray;5 i, j, k: integer;

    p q 10 , r 1000 .

    6.2 Strings

    byte char Pascal. . . , - , . Pascal string. string , .. s := 'This is a string'. string : var s:string;. standardPascal string :array[0..255] of char . 256 0, 1 , . 4 :

    Mikos: 6Xaraktiras 1: HXaraktiras 2: e

    6 'Hello.'. s[0], array. 5 s[0] char Pascal

    18

  • Listing 4: string

    1 program strex1;2 var s: string;3 begin4 s := 'Hello.';5 writeln('Mikos: ', ord(s[0]));6 writeln('Xaraktiras 1: ', s[1]);7 writeln('Xaraktiras 2: ', s[2]);8 end.

    6 ASCII 6. s[0] ord. string s[1], s[2] . . :

    1 for i := 1 to length(s) do2 if (s[i] >= 'A') and (s[i]

  • . , . . , ( , .) . . . . record Pascal. listing 5.

    Listing 5: record

    1 program recex;2 type3 kartela = record4 eponymo: string;5 onoma: string;6 xronologia: integer;7 end;8

    9 var10 a, b: kartela;11 begin12 a.eponymo := 'Karamanlis';13 a.onoma := 'Konstantinos';14 a.xronologia := 1975;15 writeln(a.eponymo);16 writeln(a.onoma);17 writeln(a.xronologia);18

    19 b := a;20 writeln(b.eponymo);21 writeln(b.onoma);22 writeln(b.xronologia);23 end.

    3-7, type kartela. record () - : strings eponymo onoma integer . kartela 10 a. record , 12-14 15-17. records 19, b := a; b a b

    20

  • a. b := a; b.eponymo := a.eponymo; b.onoma := a.onoma; b.xronologia := a.xronologia; - record . with b do begin ... end; , b. 20-22

    1 with b do2 begin3 writeln(eponymo);4 writeln(onoma);5 writeln(xronologia);6 end;

    7 , procedures functions

    7.1 Procedures

    Pascal (procedures). . (call). . 6:

    Listing 6: procedure

    1 program proc1;2

    3 procedure myproc;4 begin5 write('H kota ekave to augo,');6 write(' h to augo tnv kota; ');7 writeln('To be or not to be?');8 end;9

    10 begin11 myproc;12 myproc;13

    14 readln;15 end.

    procedure myproc 3 8. procedure begin-end . procedure . 3 end 8 . , , 11 12.

    21

  • . 3 8 . begin-end , 10. begin-end . 10 begin . 11 ( ) 4 8 . 12. 4 8. (arguments) . . x. for x .

    Listing 7: procedure

    1 program proc2;2

    3 procedure print_stars(x: integer);4 var5 i: integer;6 begin7 for i := 1 to x do8 write('*');9 writeln;

    10 end;11

    12 begin13 print_stars(3);14 print_stars(2);15 print_stars(5);16

    17 readln;18 end.

    :

    **********

    : print_stars x

    22

  • , , - . x , .. 7. i 7 var 4 5. , 13 15 . 13-15 6-10 6-10 - x 3, 2 5 13-15. . :

    Listing 8: procedure

    1 program proc3;2

    3 procedure print_chars(c: char; x: integer);4 var5 i: integer;6 begin7 for i := 1 to x do8 write(c);9 end;

    10

    11 begin12 print_chars('*', 3);13 print_chars('.', 1);14 print_chars('*', 3);15

    16 readln;17 end.

    8 c char. x . . 12-14 . . . 12 c '*' x 3, 13 c '.' x 1. :

    procedure, , ( ) .

    23

  • -. onoma: typos on1, on2, ..., onx: typos .

    begin-end . var .

    7.2

    . . . 9.

    Listing 9:

    1 program triangle;2 var3 n, i, j: integer;4

    5 begin6 write('Dose to n:');7 readln(n);8

    9 for j := n div 2 downto 0 do10 begin11 for i := 1 to j do12 write('*');13 for i := 1 to n - 2 * j do14 write('.');15 for i := 1 to j do16 write('*');17 writeln;18 end;19 end.

    10.

    Listing 10:

    1 program triangle3;2

    3 procedure print_chars(c: char; x: integer);4 var5 k: integer;6 begin7 for k := 1 to x do8 write(c);

    24

  • 9 end;10

    11 var12 n, j: integer;13 begin14 write('Dose to n:');15 readln(n);16

    17 for j := n div 2 downto 0 do18 begin19 print_chars('*', j);20 print_chars('.', n - 2 * j);21 print_chars('*', j);22 writeln;23 end;24 end.

    7.3 Functions ()

    . . Pascal . . . , x apolyti:

    1 if x < 0 then2 apolyti := -x;3 else4 apolyti := x;

    11 procedure.

    Listing 11:

    1 function myabs(x: integer) : integer;2 begin3 if x < 0 then4 myabs := -x5 else6 myabs := x;7 end;

    25

  • 1 function procedure. procedures. . procedures , functions - , integer. procedures, var begin-end. begin-end ( myabs) . Pascal ( ) , end; begin-end . 7.3 .

    1 var2 arithmos: integer;3 apotelesma: integer;4 begin5 write('Dose evav ari8mo: ');6 readln(arithmos);7 apotelesma := myabs(arithmos);8 writeln('H apolytn timn toy ', arithmos, ' eivai ', apotelesma);

    ( procedures). 7. arithmos. apotelesma. 7 .. apotelesma := 4 * x := . := myabs(arithmos). Pascal . , myabs integer integer , .. +, -, *, mod, div . real mod div. , . Pascal 5 * 7 + 12 Pascal ( ) 5 * 7 35 - 35 + 12 47. 5 * myabs(-7) + 12

    26

  • Pascal 5 * myabs*(-7). , myabs -7. 7. Pascal myabs(-7) 5 * 7 + 12 .

    7.4 ,

    7.4.

    1 program scopes1;2 var3 a: integer;4

    5 procedure p;6 var7 b: integer;8 begin9 b := 5;

    10 writeln('To a eivai ', a);11 writeln('To b eivai ', b);12 end;13

    14 begin15 a := 3;16 p;17 end.

    procedure p 5-12. procedure b var-block 6-7. (14-17) var-block 2-3. :

    To a eivai 3To b eivai 5

    procedure p. a b . 11 procedure p 16 b . 2-3 12. a 10 . `' . . b procedure p, 8

    27

  • 12. procedures functions, procedure 7.4 x y begin-end procedure.

    1 procedure proc(x: real; y: integer)2 var3 a: real;4 begin5 a := x + y;6 end;

    . . 7.4.

    1 procedure p1;2 var3 a: integer;4 begin5 end;6

    7 procedure p2;8 var9 a: integer;

    10 begin11 end;

    procedures a. : a procedure p1 procedure p2; . Pascal. var procedure function, , . procedure function .

    7.5 Call by value, call by reference

    : . .. 7.5

    1 procedure p(a: integer);2 begin3 writeln(a); a:= 6; writeln(a);4 end;5 ...

    28

  • 6 b:= 5; p(b); p a. 3 . b 5. p a 5 . p 6. b a p. , , b . . call by value ( ' ) . , . , .. x y , function . , Pascal - ' . call by reference . , var. 7.5. 3-8 p . 10-18, 1, 2 3. 17.

    1 program byref;2

    3 procedure p(a: integer; b: integer; c: integer);4 begin5 a := 11;6 b := 12;7 c := 13;8 end;9

    10 var11 i,j,k: integer;12 begin13 i := 1;14 j := 2;

    records

    29

  • 15 k := 3;16 p(i,j,k);17 writeln(i, ' ', j, ' ', k);18 end.

    1 2 3

    i, j k p. , ' , . p - procedure p(a: integer; var b: integer; c: integer); var b

    1 12 3

    b `' , j .

    30

    Pascal Pascal if for while-do repeat-until case

    Pascal integer real integer real boolean char (built-in) Pascal

    (arrays)StringsRecords

    , procedures functionsProcedures Functions (), Call by value, call by reference