ﻣﺪرس :ﻧﻮري
ﻣﻬﺮ 88
ﻣﻄﺎﻟﺐ ﺟﻠﺴﻪ ﻗﺒﻞ
yﻣﻌﺮﻓﻲ اﺟﺰاي ﻳﻚ ﻛﺎﻣﭙﻴﻮﺗﺮ
yﻣﻌﺮﻓﻲ ﺗﺤﻮﻻت زﺑﺎنﻫﺎي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ
yﻣﻌﺮﻓﻲ ﻣﺮاﺣﻞ ﻧﻮﺷﺘﻦ ﻳﻚ ﺑﺮﻧﺎﻣﻪ از ﺗﺤﻠﻴﻞ ﻣﺴﺄﻟﻪ ﺗﺎ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ
2
زﺑﺎن ﭘﺎﺳﻜﺎل
yاﻳﻦ زﺑﺎن ﺑﻪ اﻓﺘﺨﺎر ﭘﺎﺳﻜﺎل رﻳﺎﺿﻴﺪان ﻗﺮن 17ﻧﺎﻣﮕﺬاري ﺷﺪه اﺳﺖ.
yزﺑﺎﻧﻲ آﻣﻮزﺷﻲ اﺳﺖ ﻛﻪ ﻣﻔﺎﻫﻴﻢ ﻣﺸﺘﺮك ﺑﻴﻦ ﻫﻤﻪ زﺑﺎنﻫﺎي ﻛﺎﻣﭙﻴﻮﺗﺮي را
ﭘﺮرﻧﮓ ﻣﻲﻛﻨﺪ.
yﺑﺎ اﺳﺘﺎﻧﺪارد ﺳﺎزي زﺑﺎن ،ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ را راﺣﺖ ﻣﻲﻛﻨﺪ.
yﻗﻮاﻧﻴﻦ ﺳﺨﺖﮔﻴﺮاﻧﻪ اﻳﻦ زﺑﺎن ،ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﺑﺪ را دﺷﻮار ﻣﻲﺳﺎزد.
3
ﺳﺎﺧﺘﺎر ﺑﺮﻧﺎﻣﻪ
. ﻫﻤﻪ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎﻳﺪ ﺳﺎﺧﺘﺎر زﻳﺮ را رﻋﺎﻳﺖ ﻛﻨﻨﺪy
program TITLE;
begin
program statements;
program statement
end.
4
ﺳﺎﺧﺘﺎر ﺑﺮﻧﺎﻣﻪ
program y
;program TITLE
begin
;program statements
program statement
end.
yاوﻟﻴﻦ ﻛﻠﻤﻪ ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎل اﺳﺖ.
yﻳﻚ ﻛﻠﻤﻪ رزرو ﺷﺪه اﺳﺖ ،ﻳﻌﻨﻲ ﻧﻤﻲﺗﻮان از آن در
ﺳﺎﻳﺮ ﺑﺨﺶﻫﺎ ﻣﺜﻞ ﻧﺎم ﻣﺘﻐﻴﺮﻫﺎ اﺳﺘﻔﺎده ﻛﺮد.
TITLE y
yﻧﺎﻣﻲ اﺳﺖ ﻛﻪ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﺑﺮاي ﺑﺮﻧﺎﻣﻪاش اﻧﺘﺨﺎب
ﻣﻲﻛﻨﺪ.
yاﻳﻦ ﻧﺎم ﻳﻚ ﺷﻨﺎﺳﻪ اﺳﺖ و ﺑﺎﻳﺪ از ﻗﻮاﻧﻴﻦ ﻣﺮﺑﻮط ﺑﻪ
ﺷﻨﺎﺳﻪﻫﺎ ﺗﺒﻌﻴﺖ ﻛﻨﺪ.
5
ﺷﻨﺎﺳﻪﻫﺎ
yﻳﻚ ﺷﻨﺎﺳﻪ ﺑﺎ ﻳﻚ ﺣﺮف ﻳﺎ _ ﺷﺮوع ﺷﺪه و ﺑﺎ ﺗﻌﺪادي ﺣﺮف ﻳﺎ ﻋﺪد
ﻳﺎ _ اداﻣﻪ ﻣﻲﻳﺎﺑﺪ.
yدر ﺗﻮرﺑﻮ ﭘﺎﺳﻜﺎل ﻳﻚ ﺷﻨﺎﺳﻪ ﺣﺪاﻛﺜﺮ ﻃﻮل 63دارد .در ﺷﻨﺎﺳﻪﻫﺎي
ﺑﺎ ﻃﻮل ﺑﻴﺸﺘﺮ از ،63ﻓﻘﻂ 63ﻛﺎراﻛﺘﺮ اول در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮﻧﺪ.
6
ﺷﻨﺎﺳﻪﻫﺎ
ﻛﺪام ﻳﻚ از ﻧﺎمﻫﺎي زﻳﺮ ﻧﻤﻲﺗﻮاﻧﺪ ﻳﻚ ﺷﻨﺎﺳﻪ ﺑﺎﺷﺪ؟y
birthday
Too_hot?
First_Initial
grade
1stprogram
down.to.earth
see you
OldName
case
7
ﺳﺎﺧﺘﺎر ﺑﺮﻧﺎﻣﻪ
y
y
y
y
: beginآﻏﺎز دﺳﺘﻮرات ﺑﺮﻧﺎﻣﻪ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ.
: end.ﻫﻤﻴﺸﻪ ﺧﺎﺗﻤﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﺑﺎ اﻳﻦ ﻛﻠﻤﻪ ﻣﺸﺨﺺ ﻣﻲﺷﻮد.
: program statementsدﺳﺘﻮرات اﺻﻠﻲ ﺑﺮﻧﺎﻣﻪ را ﻣﺸﺨﺺ
ﻣﻲﻛﻨﺪ ﻛﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻣﻮﻇﻒ ﺑﻪ اﺟﺮاي آنﻫﺎﺳﺖ.
beginو endﻋﻼوه ﺑﺮ وﻇﻴﻔﻪ ذﻛﺮ ﺷﺪه ،اﺑﺘﺪا و اﻧﺘﻬﺎي ﻳﻚ ﮔﺮوه
دﺳﺘﻮرات را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ.
;program TITLE
begin
;program statements
program statement
end.
8
ﺳﺎﺧﺘﺎر ﺑﺮﻧﺎﻣﻪ
yدر اﻧﺘﻬﺎي ﻫﻤﻪ دﺳﺘﻮرات ﺑﺮﻧﺎﻣﻪ ﺑﺠﺰ beginو endﺑﺎﻳﺪ semi colon
);( ﻗﺮار ﺑﮕﻴﺮد.
yدﺳﺘﻮراﺗﻲ ﻛﻪ ﺑﻌﺪ از آنﻫﺎ ﻛﻠﻤﻪ endﺑﻴﺎﻳﺪ ﻧﻴﺎزي ﺑﻪ ; ﻧﺪارﻧﺪ.
yﭘﺎﺳﻜﺎل ﺑﻪ ﺑﺰرﮔﻲ و ﻛﻮﭼﻜﻲ ﺣﺮوف ﺣﺴﺎس ﻧﻴﺴﺖ
(case insensitive) y
;program TITLE
begin
;program statements
program statement
end.
9
دﺳﺘﻮر ﭼﺎپ ﺧﺮوﺟﻲ
دﺳﺘﻮر ﭼﺎپ ﺧﺮوﺟﻲ ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺘﻔﺎده ﻣﻲﺷﻮدy
WriteLn(‘Hi, Please tell me your name’);
WriteLn(‘The sum of 1 + 4 = ‘, 1+4);
WriteLn(a, b);
WriteLn(a, b, …);
Write(‘A simple message’);
Write(‘A message that follow the previous one’)
10
ﭼﺎپ ﺧﺮوﺟﻲ
program WriteVsWriteLn;
{Digging into some details
about write and writeln}
begin
WriteLn(‘This produces a new line.’);
Write(‘This is going to be’);
WriteLn(‘a mess.’);
Write(‘But this is going to be ‘);
WriteLn(‘OK.’)
end.
11
ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ
12
ﭼﻨﺪ ﻣﺜﺎل ﺳﺎده
program First;
begin
WriteLn(‘This is my first Pascal program’)
end.
program UseWrite;
begin
Write(‘One’);
Write(‘Two’)
end.
13
ﭼﻨﺪ ﻣﺜﺎل ﺳﺎده
program UseWriteLn;
begin
WriteLn(‘One’);
Write(‘Two.’)
end.
program UseWriteLn2;
begin
WriteLn(‘One’);
WriteLn;
WriteLn(‘Two.’)
end.
14
دﺳﺘﻮر درﻳﺎﻓﺖ ورودي
yدﺳﺘﻮر ﻻزم ﺑﺮاي درﻳﺎﻓﺖ ورودي از ﻛﺎرﺑﺮ
Read a Line = Readln
اﺳﺖ و ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺘﻔﺎده ﻣﻲﺷﻮد
;)ReadLn(a
;)ReadLn(a, b
)… ReadLn(a, b,
15
ﺷﻨﺎﺳﻪﻫﺎي اﺳﺘﺎﻧﺪارد
yدﺳﺘﻮرات ReadLnو WriteLnﺟﺰو ﺷﻨﺎﺳﻪﻫﺎي اﺳﺘﺎﻧﺪارد ﻫﺴﺘﻨﺪ.
yﺷﻨﺎﺳﻪ اﺳﺘﺎﻧﺪارد ،ﺷﻨﺎﺳﻪاي اﺳﺖ ﻛﻪ ﻣﻌﻨﻲ ﺧﺎﺻﻲ دارد ،وﻟﻲ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ
ﻣﻲﺗﻮاﻧﺪ ﺗﻌﺮﻳﻒ آن را ﺗﻐﻴﻴﺮ دﻫﺪ.
yﺗﻮﺻﻴﻪ ﻣﻲﺷﻮد ﻛﻪ ﺷﻨﺎﺳﻪﻫﺎي ﺧﻮد را )ﻧﺎم ﺑﺮﻧﺎﻣﻪ ،ﻣﺘﻐﻴﺮﻫﺎ ،ﺛﻮاﺑﺖ و (...را
از ﺷﻨﺎﺳﻪﻫﺎي اﺳﺘﺎﻧﺪارد اﻧﺘﺨﺎب ﻧﻜﻨﻴﺪ.
16
ﺗﻜﻤﻴﻞ ﺳﺎﺧﺘﺎر ﺑﺮﻧﺎﻣﻪ
program TITLE;
const
ﺑﺨﺶ ﺗﻌﺎرﻳﻒ
var
begin
program statements;
program statement
end.
ﺑﺪﻧﻪ اﺻﻠﻲ ﺑﺮﻧﺎﻣﻪ
17
ﺗﻜﻤﻴﻞ ﺳﺎﺧﺘﺎر ﺑﺮﻧﺎﻣﻪ
yﻛﻠﻤﺎت زﻳﺮ ﻫﻤﻪ ﻛﻠﻤﺎت ﻛﻠﻴﺪي ﻫﺴﺘﻨﺪ.
y
y
y
y
y
program
var
const
begin
end
yﻳﻌﻨﻲ ﻧﻤﻲﺗﻮان از آنﻫﺎ ﺑﺠﺰ در ﻗﺴﻤﺖﻫﺎﻳﻲ ﻛﻪ ﭘﺎﺳﻜﺎل ﻣﺸﺨﺺ ﻛﺮده،
اﺳﺘﻔﺎده ﻛﺮد.
18
ﻛﻠﻤﺎت ﻛﻠﻴﺪي ﭘﺎﺳﻜﺎل
and
array
begin
case
const
div
do
downto
else
end
file
for
forward
function
goto
if
in
label
mod
nil
not
of
or
packed
procedure
program
record
repeat
set
then
until
var
while
with
19
ﺑﺨﺶ ﺗﻌﺎرﻳﻒ
yﺗﻌﺎرﻳﻒ ﺷﺎﻣﻞ
yﻧﺎم و ﻧﻮع ﻣﺘﻐﻴﺮﻫﺎﻳﻲ اﺳﺖ
yﻧﺎم و ﻣﻘﺪار ﺛﻮاﺑﺘﻲ اﺳﺖ
ﻛﻪ در ﻃﻮل ﺑﺮﻧﺎﻣﻪ اﺳﺘﻔﺎده ﻣﻲﺷﻮﻧﺪ.
20
اﻧﻮاع ﻣﺨﺘﻠﻒ دادهﻫﺎ و ﻣﺘﻐﻴﺮﻫﺎ
yﭘﺎﺳﻜﺎل 5ﻧﻮع داده از ﻗﺒﻞ ﺗﻌﺮﻳﻒ ﺷﺪه را در اﺧﺘﻴﺎر ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻗﺮار
ﻣﻲدﻫﺪ:
y
y
y
y
y
21
اﻋﺪاد ﺻﺤﻴﺢ )(Integer
اﻋﺪاد اﻋﺸﺎري )(Real
ﺣﺮﻓﻲ )(Char
درﺳﺖ/ﻧﺎدرﺳﺖ )(Boolean
رﺷﺘﻪاي )(String
ﭼﺮا اﻧﻮاع ﻣﺨﺘﻠﻒ داده
yﭘﺎﺳﻜﺎل ﺑﺮاي ﻛﺎﻫﺶ ﺧﻄﺎﻫﺎي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ اﻳﻦ اﻧﻮاع داده را ﺗﻌﺮﻳﻒ
ﻛﺮده اﺳﺖ.
yﺗﺸﺨﻴﺺ ﻗﺮاردادن ﻣﻘﺪار ﻏﻠﻂ در ﻣﺤﻠﻲ از ﺣﺎﻓﻈﻪ
y
ﻣﺜﻞ ﺟﻤﻊ ﻛﺮدن دو ﻋﺪد اﻋﺸﺎري و ﻗﺮار دادن آن در ﻳﻚ ﻣﺘﻐﻴﺮ ﺻﺤﻴﺢ.
yﻣﻤﺎﻧﻌﺖ از اﻧﺠﺎم ﻛﺎرﻫﺎي ﺑﻲﻣﻌﻨﻲ
y
22
ﺟﻤﻊ ﻛﺮدن دو رﺷﺘﻪ ﻛﻪ در آنﻫﺎ ﻋﺪد ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ.
Integer
yاﻳﻦ ﻧﻮع داده ،ﻗﺎﺑﻠﻴﺖ ﻧﮕﻪداري اﻋﺪاد ﺻﺤﻴﺢ را دارد.
yﭼﻮن ﺑﺮاي اﻳﻦ ﻧﻮع داده 2ﺑﺎﻳﺖ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه اﺳﺖ ،ﻣﻲﺗﻮان اﻋﺪاد
ﺑﻴﻦ -32768ﺗﺎ 32767را در اﻳﻦ ﻧﻮع داده ذﺧﻴﺮه ﻛﺮد.
yﻫﺮ ﺑﺎﻳﺖ 8ﺑﻴﺖ اﺳﺖ.
+1 * (118*256 + 7) y
0 0 0 0 0 1 1 1
0 1 1 1 0 1 1 0
اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﻋﺪد
ﻋﻼﻣﺖ
23
Integer
0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
+1 * (127*256 + 255) = 32767 = MaxInt
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
‐1 * (127*256 + 255) = ‐32767 = ‐MaxInt
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
‐1 * (0 + 0)
= ‐32768 = ‐MaxInt ‐ 1
24
ﻣﺤﺎﺳﺒﻪ ﻣﺴﺎﺣﺖ ﻣﺮﺑﻊ
program AreaOfSquare;
var
Side, Area : Integer;
begin
Side := 5;
Area := Side * Side;
WriteLn(‘The area of square with side ‘,
Side, ‘ is equal to ‘, Area);
End.
25
ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ
26
Real
yاﻳﻦ ﻧﻮع داده ﺑﺮاي ذﺧﻴﺮه اﻋﺪاد اﻋﺸﺎري اﺳﺘﻔﺎده ﻣﻲﺷﻮد.
yﻫﺮ ﻋﺪد اﻋﺸﺎري در ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﻪ ﺻﻮرت اﺳﺘﺎﻧﺪارد ذﺧﻴﺮه ﻣﻲﺷﻮد.
yدر ﺷﻜﻞ اﺳﺘﺎﻧﺪارد ،ﻋﺪد اﻋﺸﺎري ﺑﺎ دو ﻋﺪد Mو Eذﺧﻴﺮه ﻣﻲﺷﻮد ﺑﻪ
ﻃﻮري ﻛﻪ ﻋﺪد ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ ﺣﺎﺻﻞ ﻋﺒﺎرت .M * 2^E
yﺑﺮاي ﻫﺮ ﻋﺪد 6 ،Realﺑﺎﻳﺖ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮد ﻛﻪ ﻣﻲﺗﻮاﻧﺪ اﻋﺪادي در ﺑﺎزه
) 2/9 * 10^(-39ﺗﺎ 1/7 * 10^38را در ﺧﻮد ذﺧﻴﺮه ﻛﻨﺪ )ﺑﺮاي اﻋﺪاد
ﻣﻨﻔﻲ ﻧﻴﺰ ﺑﺎزهاي ﻣﺸﺎﺑﻪ وﺟﻮد دارد(.
27
Real
yﻧﻤﺎد ﻋﻠﻤﻲ
1/234567 * 10^6 = 1234567 y
1/234 * 10^(-4) = 0/0001234 y
yﻧﻤﺎﻳﺶ اﻋﺪاد اﻋﺸﺎري در ﭘﺎﺳﻜﺎل
1.234567E6 = 1234567 y
1.234E‐4= 0.0001234 y
28
ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ
var
a: Integer;
b, c: Real;
d, age, grade: Integer;
29
ﻣﺤﺎﺳﺒﻪ ﻣﺴﺎﺣﺖ داﻳﺮه
program AreaOfCircle;
var
Radius: Integer;
Pi, Area : Real;
begin
Pi := 3.14;
Radius := 5;
Pi := 3.14159;
Area := Pi * Radius * Radius;
WriteLn(‘The area of a circle with radius ‘,
Radius, ‘ is equal to ‘, Area)
end.
30
ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ
31
ﺗﻌﺮﻳﻒ ﻣﻘﺪار ﺛﺎﺑﺖ
const
PI = 3.14159;
METERS_TO_YARDS = 1.196;
MAX_GRADE = 20;
32
ﺑﺮﻧﺎﻣﻪ ﺗﺒﺪﻳﻞ واﺣﺪﻫﺎ
ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻃﻮل ﻳﻚ ﭘﺎرﭼﻪ را ﺑﻪ ﻣﺘﺮ ﻣﺮﺑﻊ درﻳﺎﻓﺖ ﻛﺮده و ﻣﻘﺪار آن را ﺑﻪ ﻳﺎرد ﻣﺮﺑﻊ ﻣﺤﺎﺳﺒﻪ وy
.ﭼﺎپ ﻛﻨﺪ
program Metric;
const
METERS_TO_YARDS = 1.196;
var
SqMeters,
SqYards : Real;
begin
Write(‘Enter the fabric size in square meters >’);
ReadLn(SqMeters);
SqYards := METERS_TO_YARDS * SqMeters;
WriteLn(‘The fabric size in square yards is ‘,
SqYards)
end.
33
ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ
34
دﺳﺘﻮر اﻧﺘﺴﺎب
yﻳﻚ ﻣﻘﺪار ﻳﺎ ﻧﺘﻴﺠﻪ ﻳﻚ ﻣﺤﺎﺳﺒﻪ را در ﻳﻚ ﻣﺘﻐﻴﺮ ﻗﺮار ﻣﻲدﻫﺪ.
SqYards := METERS_TO_YARDS * SqMeters
yﻧﺘﻴﺠﻪ ﺣﺎﺻﻞﺿﺮب دو ﻣﻘﺪار اﺳﺖ.
yدو ﻣﺘﻐﻴﺮ )ﺛﺎﺑﺖ( ﺳﻤﺖ راﺳﺖ ﺑﺎﻳﺪ ﻣﻘﺪار ﻣﻌﻴﻨﻲ داﺷﺘﻪ ﺑﺎﺷﻨﺪ )دو ﻋﺪد
ﺣﻘﻴﻘﻲ(
yﻋﻼﻣﺖ = :را ﻛﻪ ﺑﺮاي اﻧﺘﺴﺎب اﺳﺘﻔﺎده ﻣﻲﺷﻮد ،ﺑﺨﻮاﻧﻴﺪ ﻣﻘﺪار ...را
ﻣﻲﮔﻴﺮد ،ﻳﺎ ﻣﻲﺷﻮد و ﻧﻪ ﻣﺴﺎوي.
Variable := expression
X := Y + Z + 2.0
35
دﺳﺘﻮر اﻧﺘﺴﺎب
y
y
y
y
y
y
36
Sum := Sum + Item
در رﻳﺎﺿﻲ ﻋﺒﺎرت ﺑﺎﻻ ،ﻳﻚ ﺗﺴﺎوي ﺟﺒﺮي ﻧﻴﺴﺖ.
در ﭘﺎﺳﻜﺎل و ﺳﺎﻳﺮ زﺑﺎنﻫﺎي ﻛﺎﻣﭙﻴﻮﺗﺮي زﻳﺎد اﺳﺘﻔﺎده ﻣﻲﺷﻮد.
ﻣﻘﺪار ﻗﺒﻠﻲ Sumاز ﺑﻴﻦ رﻓﺘﻪ و ﻣﻘﺪار ﺟﺪﻳﺪ ﺣﺎﺻﻞﺟﻤﻊ Sumو Item
اﺳﺖ.
ﻣﻘﺪار Itemﺗﻐﻴﻴﺮي ﻧﻤﻲﻛﻨﺪ.
ﻫﻤﻴﺸﻪ ﺳﻤﺖ ﭼﭗ اﻧﺘﺴﺎب ﻓﻘﻂ ﻳﻚ ﻣﺘﻐﻴﺮ ﻗﺮار دارد.
ﻣﻘﺪار ﻣﺤﺎﺳﺒﻪ ﺷﺪه از ﻋﺒﺎرت ﺳﻤﺖ راﺳﺖ ،ﺑﺎﻳﺪ ﻫﻤﻨﻮع ﺑﺎ ﻣﺘﻐﻴﺮ ﺳﻤﺖ
ﭼﭗ ﺑﺎﺷﺪ.
© Copyright 2026 Paperzz