SlideShare a Scribd company logo
1 of 25
Basic Types, Variables,
Literals, Constants
What is in a Word?
• A byte is the basic addressable unit
of memory in RAM
 Typically it is 8 bits (octet)
 But some machines had 7, or 9, or ...
• A word is the basic unit of operation
by the CPU
– Most registers are this size
– Largest unit of transfer between RAM
and CPU in single instruction
What is a Type?
• A type is a qualifier that is used by
the compiler
 Machine languages do not have types
• The type of a variable or constant
tells the compiler:
– How much space the object occupies
– What operations on the object mean
What is a Type?
• Given an address in RAM, what does
it mean?
 Could be anything!
• Types tell the compiler
– Which instruction to apply
Integer addition, floating pt addition
– How to increment pointers
Array references, fields
Arithmetic Types in C++
Type Meaning Minimum Size
bool Boolean NA
char character 8 bits
wchar_t wide character 16 bits
short short integer 16 bits
int integer 16 bits
long long integer 32 bits
long long very long integer 64 bits
float 1-prec. floating point 6 (7) sig. digits
double double-prec. FP 10 (16) sig. digits
some
Which Type to Use?
• General Usage
– int – most integer arithmetic
– double – for floating point computation
 char – only for chars
 bool – only for Booleans
• Unsigned
– Used to save space – who cares?
– Do not mix signed and unsigned!
– Can cause headaches easily - avoid
Type Conversion
• Casting, or conversion
– Needed when different type expected
– Compiler handles automatically
• Bool
– LHS = {false if 0, true if non-0}
– RHS = {0 if false, 1 if true}
Type Conversion
• Integer ↔ Floating point number
– Truncate FPN when int on LHS
– Fractional part 0 when int on RHS
Can lose precision
• Out-of-Range
– LHS unsigned, then residue mod size
– LHS signed, then undefined (bad)
What is a Literal?
• A literal is a fixed, explicit value that
is known at compile time
– Can be used to initialize variables
– Can be used to initialize constants
– Can be used in expressions
Generally bad programming style
• It may be int, char, bool, etc.
– 5, 5.0, -3, 'a', “a”, “Go Gators!”, 'n'
Special Characters
• Some characters are not printable
• Some characters have special meaning
to the language
• For these, we need escape sequences
– All start with backslash 
– Some predefined: n newline
– Any by x where x is a number
Special Characters
newline n horizontal tab t alert (bell) a
vertical tab v backspace b double quote ”
backslash  question mark ? single quote '
carriage return r form feed f
Can use as single character:
std::cout << 'n'; std::cout << “tHello!n”;
Generalized escape sequence:
12 = 014 = x0c = newline in decimal, octal, hex
Note: only the first 3 octal digits are accepted
Note: hex uses all the following digits (!)
Special Literals
• Boolean
 true
 false
• Pointer
– nullptr ← preferred literal
– 0
– NULL (must #include cstdlib)
– Never any other
Variables
• A variable is a logically named, typed,
structured piece of storage
• Name allows us to refer to the stored
structure
• Type allows us to know structure
• Variables can be assigned new values
• Program can manipulate them!!
Variables
• Definition: allocates space for storage
• Declaration: specifies name and type
– So variable can be referenced here
– … and defined elsewhere
• Type var_name, var_name, …;
• All vars have type given at start
• Good practice: one per line of code!
Variable Definition
int sum = 0, value, // all type int
total = 0; /* sum and total
initialized to 0 */
Sales_item item; /* type Sales_item
initialized to
default value */
std::string name(“Dr. Newman”);
/* string is a type
from std library
variable length
character sequence */
Initialization
• Good idea: ALWAYS INITIALIZE!!!!
• Initialization – object gets value at
time of definition (when created)
– May be any expression that can be
evaluated at time of creation
– Name becomes visible immediately
– Hence can be used in subsequent
initializations in same line!
Variable Initialization
int i = 0, j = 2*i; /* j init uses value
of i immediately */
int k = sizeof(double); /* value is
a function that can
be evaluated when k
is defined */
“List” Initialization
int i = 0; /* i initialized with
literal value */
int i(0); /* here also */
int i = {0}; /* i initialized with
literal value, but
restricted */
int i{0}; /* same here */
double pi = 3.14;
int a{pi},
b = {pi};
int c(pi),
d = pi;
/* floating pt */
/* fail - requires
narrowing */
/* OK, but value …
… truncated */
Declaration vs. Definition
• Definition – allocate space
• Declaration – state type and name
– Name can be used in current file
– “Makes promise” it will be defined later
– Only define in ONE file
extern int i; /* declares but doesn't
define i*/
int j; // declares and defines j
Identifiers
• Identifier = name – for variable,
function, constant, class, type, etc.
• Cannot be a keyword in C++
• Identifiers may be composed of
letters, digits, and underscore char
– Must begin with _ or letter
• Identifiers are case-sensitive
– Main is not main is not MAIN!
C++ Keywords
alignas
alignof
asm
auto
bool
break
case
catch
char
char16_t
char32_t
class
const
constexpr
const_cast
continue
decltype
default
delete
do
double
dynamic_cast
else
enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
C++ Keywords
noexcept
nullptr
operator
private
protected
public
register
reinterpret-cast
return
short
signed
sizeof
static
static_assert
static_cast
struct
switch
template
this
thread_local
throw
true
try
typedef
typeid
typename
union
unsigned
using
virtual
void
volatile
wchar_t
while
C++ Alternative Operator
Names
and
and_eq
bitand
bitor
compl
not
not_eq
or
or_eq
xor
xor_eq
Identifier Conventions
• Identifier should hint toward purpose
• Constants are all upper case
• Variables are lower case
• Classes start with upper case
• Multi-word identifiers should
distinguish each word using a capital
or underscore
– Sales_item, booksSold, totalRbis
Scoping
• When is a name visible/usable?
• Most scopes delimited by {} blocks
• Names can be reused across scopes
• Global scope – defined outside a fcn
• Block scope – accessible from point
defined onward within block
• Nested scopes – name visible in outer
scope can be redefined in inner scope

More Related Content

Similar to Lecture06-TypesVarsConsts variables data types

ProgFund_Lecture_2_Data_Types_and_Selection-1.pdf
ProgFund_Lecture_2_Data_Types_and_Selection-1.pdfProgFund_Lecture_2_Data_Types_and_Selection-1.pdf
ProgFund_Lecture_2_Data_Types_and_Selection-1.pdf
lailoesakhan
 
C Programming Lecture 3 - Elements of C.pptx
C Programming Lecture 3 - Elements of C.pptxC Programming Lecture 3 - Elements of C.pptx
C Programming Lecture 3 - Elements of C.pptx
Murali M
 
Presentation 2nd
Presentation 2ndPresentation 2nd
Presentation 2nd
Connex
 
LESSON1-C_programming (1).GRADE 8 LESSONpptx
LESSON1-C_programming (1).GRADE 8 LESSONpptxLESSON1-C_programming (1).GRADE 8 LESSONpptx
LESSON1-C_programming (1).GRADE 8 LESSONpptx
joachimbenedicttulau
 
C Sharp Jn (1)
C Sharp Jn (1)C Sharp Jn (1)
C Sharp Jn (1)
jahanullah
 
chapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptx
chapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptxchapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptx
chapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptx
Jahnavi113937
 
Cs1123 11 pointers
Cs1123 11 pointersCs1123 11 pointers
Cs1123 11 pointers
TAlha MAlik
 

Similar to Lecture06-TypesVarsConsts variables data types (20)

codingtechniques1.ppt
codingtechniques1.pptcodingtechniques1.ppt
codingtechniques1.ppt
 
ProgFund_Lecture_2_Data_Types_and_Selection-1.pdf
ProgFund_Lecture_2_Data_Types_and_Selection-1.pdfProgFund_Lecture_2_Data_Types_and_Selection-1.pdf
ProgFund_Lecture_2_Data_Types_and_Selection-1.pdf
 
Escape Sequences and Variables
Escape Sequences and VariablesEscape Sequences and Variables
Escape Sequences and Variables
 
C Programming Lecture 3 - Elements of C.pptx
C Programming Lecture 3 - Elements of C.pptxC Programming Lecture 3 - Elements of C.pptx
C Programming Lecture 3 - Elements of C.pptx
 
Python Programming 1.pptx
Python Programming 1.pptxPython Programming 1.pptx
Python Programming 1.pptx
 
Presentation 2nd
Presentation 2ndPresentation 2nd
Presentation 2nd
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 
(4) cpp automatic arrays_pointers_c-strings
(4) cpp automatic arrays_pointers_c-strings(4) cpp automatic arrays_pointers_c-strings
(4) cpp automatic arrays_pointers_c-strings
 
Chapter 2: Elementary Programming
Chapter 2: Elementary ProgrammingChapter 2: Elementary Programming
Chapter 2: Elementary Programming
 
LESSON1-C_programming (1).GRADE 8 LESSONpptx
LESSON1-C_programming (1).GRADE 8 LESSONpptxLESSON1-C_programming (1).GRADE 8 LESSONpptx
LESSON1-C_programming (1).GRADE 8 LESSONpptx
 
06.pptx
06.pptx06.pptx
06.pptx
 
14-types.ppt
14-types.ppt14-types.ppt
14-types.ppt
 
Data types IN JAVA
Data types IN JAVAData types IN JAVA
Data types IN JAVA
 
C programming language
C programming languageC programming language
C programming language
 
C Sharp Nagina (1)
C Sharp Nagina (1)C Sharp Nagina (1)
C Sharp Nagina (1)
 
C Sharp Jn (1)
C Sharp Jn (1)C Sharp Jn (1)
C Sharp Jn (1)
 
chapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptx
chapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptxchapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptx
chapter-2-eng-python-fundamentls1_1585929263876 by EasePDF.pptx
 
Py-Slides- easuajsjsjejejjwlqpqpqpp1.pdf
Py-Slides- easuajsjsjejejjwlqpqpqpp1.pdfPy-Slides- easuajsjsjejejjwlqpqpqpp1.pdf
Py-Slides- easuajsjsjejejjwlqpqpqpp1.pdf
 
Fundamentals of Python Programming
Fundamentals of Python ProgrammingFundamentals of Python Programming
Fundamentals of Python Programming
 
Cs1123 11 pointers
Cs1123 11 pointersCs1123 11 pointers
Cs1123 11 pointers
 

Recently uploaded

NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...
NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...
NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...
Amil baba
 
一比一原版西悉尼大学毕业证成绩单如何办理
一比一原版西悉尼大学毕业证成绩单如何办理一比一原版西悉尼大学毕业证成绩单如何办理
一比一原版西悉尼大学毕业证成绩单如何办理
pyhepag
 
原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证
原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证
原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证
pwgnohujw
 
如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证
如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证
如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证
acoha1
 
Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...
Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...
Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...
mikehavy0
 
一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理
一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理
一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理
pyhepag
 
1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证
1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证
1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证
ppy8zfkfm
 

Recently uploaded (20)

How to Transform Clinical Trial Management with Advanced Data Analytics
How to Transform Clinical Trial Management with Advanced Data AnalyticsHow to Transform Clinical Trial Management with Advanced Data Analytics
How to Transform Clinical Trial Management with Advanced Data Analytics
 
Formulas dax para power bI de microsoft.pdf
Formulas dax para power bI de microsoft.pdfFormulas dax para power bI de microsoft.pdf
Formulas dax para power bI de microsoft.pdf
 
NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...
NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...
NO1 Best Kala Jadu Expert Specialist In Germany Kala Jadu Expert Specialist I...
 
一比一原版西悉尼大学毕业证成绩单如何办理
一比一原版西悉尼大学毕业证成绩单如何办理一比一原版西悉尼大学毕业证成绩单如何办理
一比一原版西悉尼大学毕业证成绩单如何办理
 
The Significance of Transliteration Enhancing
The Significance of Transliteration EnhancingThe Significance of Transliteration Enhancing
The Significance of Transliteration Enhancing
 
Bios of leading Astrologers & Researchers
Bios of leading Astrologers & ResearchersBios of leading Astrologers & Researchers
Bios of leading Astrologers & Researchers
 
MATERI MANAJEMEN OF PENYAKIT TETANUS.ppt
MATERI  MANAJEMEN OF PENYAKIT TETANUS.pptMATERI  MANAJEMEN OF PENYAKIT TETANUS.ppt
MATERI MANAJEMEN OF PENYAKIT TETANUS.ppt
 
Atlantic Grupa Case Study (Mintec Data AI)
Atlantic Grupa Case Study (Mintec Data AI)Atlantic Grupa Case Study (Mintec Data AI)
Atlantic Grupa Case Study (Mintec Data AI)
 
原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证
原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证
原件一样(UWO毕业证书)西安大略大学毕业证成绩单留信学历认证
 
What is Insertion Sort. Its basic information
What is Insertion Sort. Its basic informationWhat is Insertion Sort. Its basic information
What is Insertion Sort. Its basic information
 
Identify Rules that Predict Patient’s Heart Disease - An Application of Decis...
Identify Rules that Predict Patient’s Heart Disease - An Application of Decis...Identify Rules that Predict Patient’s Heart Disease - An Application of Decis...
Identify Rules that Predict Patient’s Heart Disease - An Application of Decis...
 
Northern New England Tableau User Group (TUG) May 2024
Northern New England Tableau User Group (TUG) May 2024Northern New England Tableau User Group (TUG) May 2024
Northern New England Tableau User Group (TUG) May 2024
 
如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证
如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证
如何办理(UPenn毕业证书)宾夕法尼亚大学毕业证成绩单本科硕士学位证留信学历认证
 
Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...
Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...
Abortion Clinic in Randfontein +27791653574 Randfontein WhatsApp Abortion Cli...
 
Jual Obat Aborsi Bandung (Asli No.1) Wa 082134680322 Klinik Obat Penggugur Ka...
Jual Obat Aborsi Bandung (Asli No.1) Wa 082134680322 Klinik Obat Penggugur Ka...Jual Obat Aborsi Bandung (Asli No.1) Wa 082134680322 Klinik Obat Penggugur Ka...
Jual Obat Aborsi Bandung (Asli No.1) Wa 082134680322 Klinik Obat Penggugur Ka...
 
一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理
一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理
一比一原版加利福尼亚大学尔湾分校毕业证成绩单如何办理
 
NOAM AAUG Adobe Summit 2024: Summit Slam Dunks
NOAM AAUG Adobe Summit 2024: Summit Slam DunksNOAM AAUG Adobe Summit 2024: Summit Slam Dunks
NOAM AAUG Adobe Summit 2024: Summit Slam Dunks
 
1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证
1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证
1:1原版定制利物浦大学毕业证(Liverpool毕业证)成绩单学位证书留信学历认证
 
社内勉強会資料  Mamba - A new era or ephemeral
社内勉強会資料   Mamba - A new era or ephemeral社内勉強会資料   Mamba - A new era or ephemeral
社内勉強会資料  Mamba - A new era or ephemeral
 
Predictive Precipitation: Advanced Rain Forecasting Techniques
Predictive Precipitation: Advanced Rain Forecasting TechniquesPredictive Precipitation: Advanced Rain Forecasting Techniques
Predictive Precipitation: Advanced Rain Forecasting Techniques
 

Lecture06-TypesVarsConsts variables data types

  • 2. What is in a Word? • A byte is the basic addressable unit of memory in RAM  Typically it is 8 bits (octet)  But some machines had 7, or 9, or ... • A word is the basic unit of operation by the CPU – Most registers are this size – Largest unit of transfer between RAM and CPU in single instruction
  • 3. What is a Type? • A type is a qualifier that is used by the compiler  Machine languages do not have types • The type of a variable or constant tells the compiler: – How much space the object occupies – What operations on the object mean
  • 4. What is a Type? • Given an address in RAM, what does it mean?  Could be anything! • Types tell the compiler – Which instruction to apply Integer addition, floating pt addition – How to increment pointers Array references, fields
  • 5. Arithmetic Types in C++ Type Meaning Minimum Size bool Boolean NA char character 8 bits wchar_t wide character 16 bits short short integer 16 bits int integer 16 bits long long integer 32 bits long long very long integer 64 bits float 1-prec. floating point 6 (7) sig. digits double double-prec. FP 10 (16) sig. digits some
  • 6. Which Type to Use? • General Usage – int – most integer arithmetic – double – for floating point computation  char – only for chars  bool – only for Booleans • Unsigned – Used to save space – who cares? – Do not mix signed and unsigned! – Can cause headaches easily - avoid
  • 7. Type Conversion • Casting, or conversion – Needed when different type expected – Compiler handles automatically • Bool – LHS = {false if 0, true if non-0} – RHS = {0 if false, 1 if true}
  • 8. Type Conversion • Integer ↔ Floating point number – Truncate FPN when int on LHS – Fractional part 0 when int on RHS Can lose precision • Out-of-Range – LHS unsigned, then residue mod size – LHS signed, then undefined (bad)
  • 9. What is a Literal? • A literal is a fixed, explicit value that is known at compile time – Can be used to initialize variables – Can be used to initialize constants – Can be used in expressions Generally bad programming style • It may be int, char, bool, etc. – 5, 5.0, -3, 'a', “a”, “Go Gators!”, 'n'
  • 10. Special Characters • Some characters are not printable • Some characters have special meaning to the language • For these, we need escape sequences – All start with backslash – Some predefined: n newline – Any by x where x is a number
  • 11. Special Characters newline n horizontal tab t alert (bell) a vertical tab v backspace b double quote ” backslash question mark ? single quote ' carriage return r form feed f Can use as single character: std::cout << 'n'; std::cout << “tHello!n”; Generalized escape sequence: 12 = 014 = x0c = newline in decimal, octal, hex Note: only the first 3 octal digits are accepted Note: hex uses all the following digits (!)
  • 12. Special Literals • Boolean  true  false • Pointer – nullptr ← preferred literal – 0 – NULL (must #include cstdlib) – Never any other
  • 13. Variables • A variable is a logically named, typed, structured piece of storage • Name allows us to refer to the stored structure • Type allows us to know structure • Variables can be assigned new values • Program can manipulate them!!
  • 14. Variables • Definition: allocates space for storage • Declaration: specifies name and type – So variable can be referenced here – … and defined elsewhere • Type var_name, var_name, …; • All vars have type given at start • Good practice: one per line of code!
  • 15. Variable Definition int sum = 0, value, // all type int total = 0; /* sum and total initialized to 0 */ Sales_item item; /* type Sales_item initialized to default value */ std::string name(“Dr. Newman”); /* string is a type from std library variable length character sequence */
  • 16. Initialization • Good idea: ALWAYS INITIALIZE!!!! • Initialization – object gets value at time of definition (when created) – May be any expression that can be evaluated at time of creation – Name becomes visible immediately – Hence can be used in subsequent initializations in same line!
  • 17. Variable Initialization int i = 0, j = 2*i; /* j init uses value of i immediately */ int k = sizeof(double); /* value is a function that can be evaluated when k is defined */
  • 18. “List” Initialization int i = 0; /* i initialized with literal value */ int i(0); /* here also */ int i = {0}; /* i initialized with literal value, but restricted */ int i{0}; /* same here */ double pi = 3.14; int a{pi}, b = {pi}; int c(pi), d = pi; /* floating pt */ /* fail - requires narrowing */ /* OK, but value … … truncated */
  • 19. Declaration vs. Definition • Definition – allocate space • Declaration – state type and name – Name can be used in current file – “Makes promise” it will be defined later – Only define in ONE file extern int i; /* declares but doesn't define i*/ int j; // declares and defines j
  • 20. Identifiers • Identifier = name – for variable, function, constant, class, type, etc. • Cannot be a keyword in C++ • Identifiers may be composed of letters, digits, and underscore char – Must begin with _ or letter • Identifiers are case-sensitive – Main is not main is not MAIN!
  • 24. Identifier Conventions • Identifier should hint toward purpose • Constants are all upper case • Variables are lower case • Classes start with upper case • Multi-word identifiers should distinguish each word using a capital or underscore – Sales_item, booksSold, totalRbis
  • 25. Scoping • When is a name visible/usable? • Most scopes delimited by {} blocks • Names can be reused across scopes • Global scope – defined outside a fcn • Block scope – accessible from point defined onward within block • Nested scopes – name visible in outer scope can be redefined in inner scope

Editor's Notes

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25