2Bytesprog2 course_2014_c5_pointers

Post on 06-Aug-2015

21 views 0 download

Tags:

transcript

Prog_2 course- 2014

2 bytes team

Kinan keshkeh

IT Engineering-Damascus University

3rd year

POINTERS

Static Variables && Dynamic Variables

Static Variables :

var x:integer;

The memory for this

variables x still until

program End , and

doesn’t free even we

don’t use it

Ex: X

Memory

We determine their places

at memory first of all

value

Dynamic Variables :

Memory

The Heap

X var x: ^integer; Ex:

the address

the address value

The memory for this

variables x in the Heap,

we can take it or

dispose it, so it can be

free!!

We determine their places at

memory during the program

Why Dynamic??

1) better usage to memory

2) to create advance data structure

like trees , lists….atc

What is the pointer?

The Definition

The pointer is an address to a memory place

Var ptr: ^Type;

Lets Have an explication!!

but…..

P1

X Value..

P1^

P1

Var p1,p2: ^Type;

x :Type;

P1^

P1

P1^

X:=value

P2

xx

P1^

P2

New(p1);

P1^:=x

Value..

P2:=P1

Value..

P1:=nil;

Value..

+1

xx

P1^

P2

Dispose(p2);

Value..

xx

P1^

xx

P2:=nil;

Value..

+1

Program pointer on Soso; There is wrong !

Type

pEmp=^Emp;

Emp=Record

eno:integer; ename:string[20];

esal:real;

end;

Var

E:Emp; E1:pEmp;

n,m,y:^integer;

EXAMPLE:

Begin i:=5;

new(y); y^:=50; write(y); write(^y); write(y^);

y:=i y^:=i ; y^:=20; i:=y^;

y:=0;

dispose(y); y:=nil;

new(m); new(y); m^:=30; y^:=80;

n:=y;

write(y^);

write(n^);

E1:=nil; new(E1);

E1^:=E ; Read(E1^.Eno);

Dispose(E1);

End.

false false TRUE

NOTE: Without “ New(n)” !! 80 80

false TRUE

STACK {FILO}

First In Last Out

pringles

The Data

next

Nil

TOP

Stack=Record

the Data: Type;

next: Pstack;

end;

The Definition

Pstack=^stack;

Var

Top: Pstack;

D:Type;

……….

Stack procedures :

Push(s,ch)

Pop(s,ch)

S_Top(s,ch)

Is_Empty(s) 3)

2)

1)

4)

EX: You have a string

“KiKi”

How to put/take it in

/from the STACK ?!

i next

TOP

K

i

K

Nil

Stack=Record

ch: char;

next: Pstack;

end;

Type

Pstack=^stack;

Var Top: Pstack; st: string[4]; i:integer; x:char;

BEGIN

Readln(st); top:=nil;

For i:=1 to (length(st) ) do

push( top, st[i] ) ; While(top<>Nil) do

begin

Pop( top, x) ; write(x,’ ’);

end;

END.

Program fifi;

PUSH

Procedure push (var Top:Pstack; c:char);

Var

temp:Pstack;

Begin

end;

new(temp);

temp^.ch:=c;

temp^.next:=top;

top:=temp;

i next

TOP

K

i

K

Nil

temp K

TOP

i

TOP

K

TOP

i

Stack=Record

ch: char;

next: Pstack;

end;

Type

Pstack=^stack;

Var Top: Pstack; st: string[4]; i:integer; x:char;

BEGIN

Readln(st); top:=nil;

For i:=1 to (length(st) )

push( top, st[i] ) ; While(top<>Nil) do

begin

Pop( top, x) ; write(x,’ ’);

end;

END.

Program fifi;

POP

Procedure pop (var Top:Pstack; var c:char);

Var temp:Pstack;

Begin

end;

Dispose(temp);

Temp:=Top;

Top:=Top^.next ;

C:=top^.ch;

i next

TOP

K

i

K

Nil The output:

C

i

temp

K

TOP

temp

TOP i temp

TOP

K

temp

i K i K

Stack=Record

ch: char;

next: Pstack;

end;

Type

Pstack=^stack;

Var Top: Pstack; st: string[4]; i:integer; x:char;

BEGIN

Readln(st); top:=nil;

For i:=1 to (length(st)-1)

push( top, st[i] ) ; begin

Pop( top, x) ; write(x,’ ’);

end;

END.

Program fifi;

While(top<>Nil) do

Is_Empty

Function Is_Empty (top:Pstack):boolean

begin

if top =Nil then

Is_Empty:=True;

else

Is_Empty:=false;

end;

S_Top

Function s_Top (top:Pstack): integer/…Type

begin

if not is_Empty(top) then

s_Top :=top^.key;

end;

NOTE: Don’t write then : top:=top^.next Cause that function just return the element without

change in stack!!

NOTE: You can reach to the data , at a

determinate place by pointers without do

pop() cause with pop() you cant restoring

your ‘poped’ data ..

You do:

S:=top; {bring the third element 64}

i:=s^.next^.next^.key;

OR:

S:=top; {bring the 11 element}

For i:=1 to 10 do

s:=s^.next;

i:=s^.key

52 next

TOP

35

64

76

Nil

S +1

Homework: :لديك تعبير حسابي مثال

(( (1 * (3+2)) * 1) +3 )

:المطلىب التعبير الحسابي وطباعتها على قيمةحساب

pop/pushالشاشة باستخدام المكدس

!مكدس واحد فقط :مالحظة

+20 points

Group : group link

Mobile phone- Kinan : 0994385748

Facebook account : kinan’s account

2 bytes team