0% found this document useful (0 votes)
22 views87 pages

Pro 1

Uploaded by

yonassetegn016
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views87 pages

Pro 1

Uploaded by

yonassetegn016
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 87

Chapter One

Overview of programming

2
Introduction
o Computer is an electronic device that accepts data, performs
computations and makes logical decisions according to instructions that
have been given to it;

o Then produces meaningful information in a form that is useful to the user.

o Computer system has two major components: hardware and software

3
o Computer programs, software programs, or just programs are the

instructions that tells the computer what to do.

o Computer programming (programming or coding) is the process of

writing, testing, debugging/troubleshooting, and maintaining the source


code of computer programs.

o A computer program consists of two elements:

o Code – action

o Data – characteristics

o Computer programs (also know as source code) is often written by

professionals known as Computer Programmers.

o Source code is written in one of programming languages.


4
Programming Language
o A programming language is an artificial language that can be used

to control the behavior of a machine, particularly a computer.

o Programming languages, like natural language, are defined by

syntactic and semantic rules which describe their structure and


meaning respectively.

o The syntax of a language describes the possible combinations of

symbols that form a syntactically correct program.

o The meaning given to a combination of symbols is handled by

semantics.
5
Cont…

For example:

#include <iostream.h>

int main() {
cout << "Hello Ethiopia!\n“;
return 0;
}

6
Levels of Programming Language
o A main purpose of programming languages is to provide instructions to a

computer.

o Available programming languages come in a variety of forms and types.

o Programming languages can be divided in to two major categories:

 Low-level languages (Machine and Assembly language)

 High-level languages
o There are 3 types of programming language:

 Machine language
 Assembly language
 High level language

7
Machine Languages
o Computers only understand one language and that is binary language or the

language of 1s and 0s.

o Binary language is also known as machine language, one of low-level languages.

o It is understood by the computer without translation

o It is written as strings of 1 and 0

 Advantage:

 Executed very fast by the computer.

 Limitation:

 It is machine dependent

 It is difficult to program

 It is error prone

8  It is difficult to modify
Assembly Language
o It correspondences symbolic instructions and executable machine codes

and was created to use letters (called mnemonics) to each machine


language instructions to make it easier to remember or write.

Example: ADD A, B – adds two numbers in memory location A and B

o The assembly language must be translated to machine code by a separate

program called assembler.

o The machine instruction created by the assembler from the original

program (source code) is called object code.

o Thus assembly languages are unique to a specific computer (machine).

o Assemblers are written for each unique machine language.

9
Cont…
o Advantages Assembly Machine

 Easier to understand and use

 Easy to locate and correct errors

 Easier to modify

o Limitations

 Machine dependent

 Knowledge of hardware required

 Machine level coding

o Machine and assembly Language being machine dependent are referred to as

Low Level Languages.


10
High-level Languages
 High-level languages are more English-like and, therefore, make it easier

for programmers to "think" in the programming language.

 They permitted a programmer to ignore many low-level details of the

computer's hardware.

 Closer the syntax, rules, and mnemonics to "natural language“.

 They are symbolic languages that use English words and/or mathematical

symbols instead of mnemonics.

 For the translation purpose we do have compilers and interpreters.

11
Cont…
o Advantage

 Machine independence

 Easy to learn and use

 Fewer errors

 Easier to maintain

o Limitation

 Lack of flexibility

12
Cont…
o High-level languages also require translation to machine language

before execution.
o This translation is accomplished by either a compiler or an

interpreter.
 Compilers translate the entire source code program before execution.

 Interpreters translate source code programs one line at a time.

Interpreters are more interactive than compilers.

E.g. FORTRAN (FORmula TRANslator), BASIC (Bingers All Purpose Symbolic


Instruction Code), PASCAL, C, C++, Java, C#, python etc..

13
The Compiler vs Interpreter
 Compiler
o Can diagnose the following kinds of errors

 Illegal characters
 Illegal combination of characters
 Improper sequencing of instructions in a program
o But it can‟t diagnose logical errors .

 It translate the whole program


Interpreter
 Translate line by line.
 Can diagnose logical errors
 The advantage of an interpreter over a complier is fast response to
changes in the source program.
14
Basic Elements of Programming
o What is C++?

o C++ is a case-sensitive, general-purpose, object-oriented


programming language.

o C++ is an extension of C programming language.

o C++ includes all the elements of the C language plus it has

additional features for working with objects, classes, events and


other object oriented concepts.
o C++ is one of the various high level programming languages by

which we can write computer instructions.

15
Cont…
 We use the Integrated Development Environment (IDE) of C++, like Turbo C++

or Borland C++, and Quincy to develop programs using this language.

 C++ programing Features


o Simple
o Machine Independent or Portable

o Rich Library: C++ inbuilt functions makes the development fast.

o Memory Management: supports the feature of dynamic memory

allocation

o Speed: The compilation and execution time of C++ language is fast.

o Pointer: C++ provides the feature of pointers.


16
cont..
o Recursion: Provides code reusability for every function

o Extensible: C++ language is extensible because it can easily adopt

new features.
o Object Oriented: C++ is object oriented programming language.
o Compiler based: C++ is a compiler based programming language

17
C++ Basic Elements
o A token is the smallest independent unit of meaning in a program, as

defined by the compiler.

o There are different types of tokens:

 Identifiers
 Variables
 Keywords  Constants
 Literals  Operators

 Data types  Escape characters

o Tokens should be separated by white space to make the source code more

readable.

o White space includes blanks, horizontal and vertical tabs, new lines, form

18 feeds, and comments.


Keywords (reserved words)
o These reserved words may not be used as constant or variable or any

other identifier names.


o Reserved/Key words have a unique meaning within a C++ program.

o These symbols, the reserved words, must not be used for any other

purposes.
o All reserved words are in lower-case letters.

o The following are some of the reserved words of C++.

19
o

20
Identifier

oAn identifier is name associated with a function or data object


and variables used to refer to that function or data object.
oA C++ identifier is a name used to identify a variable, function,
class, module, or any other user-defined item.
oAn identifier must:
oUse upper and lowercase letters, and the digits from 1 to 9.
oIdentifiers can be as long as you like, but most compilers will
only recognize the first few hundred characters.
oStart with a letter or underscore
oNot be a reserved word
21
Literals
o Literals are constant values which can be a number, a character of a

string.
o For example the number 129.005, the character „A‟ and the string “hello

world” are all literals.


o There is no identifier that identifies them.

Comments
o A comment is a piece of descriptive text which explains some aspect of

a program.
o Program comments are totally ignored by the compiler and are only

intended for human readers.

22
Basic Data Types
o When you define a variable in C++, you must tell the compiler what

kind of variable it is.

– This information tells the compiler how much room to set aside

and what kind of value you want to store in your variable.

o Several data types are built into C++.

– The varieties of data types allow programmers to select the type

appropriate to the needs of the applications being developed.

23
o The data types supported by C++ can be classified as basic

(fundamental) data types, user defined data types, derived data


types and empty data types.

o Basic (fundamental) data types in C++ can be conveniently divided

into numeric and character types.

o Numeric variables can further be divided into integer variables and

floating-point variables (real numbers).

o Both the numeric data types offer modifiers that are used to vary the

nature of the data to be stored.

o The modifiers used can be short, long, signed and unsigned.

24
C++ Data Types and Ranges

25
Variables
o A variable is a symbolic name for a memory location in which data can

be stored and subsequently recalled.

o Variables are used for holding data values so that they can be utilized in

various computations in a program

o All variables have two important attributes:

– Type: Once defined, the type of a C++ variable cannot be changed.

– Value: The kind of values a variable can assume depends on its type.

o Variables in C++ are given names by the programmer, the way he/she

thinks it is meaningful and that it reflects clearly what it represents in the


program.
1-26
Constants
 There are two types of constants in C++: literal and symbolic constants

o Literal constants

 These are values typed directly into the program when they are needed

and they can be numbers, characters or strings.

int num = 35;

char char_var = „a‟;


35 and „a‟ above are literal constants.
 Note that character constants use single quotation marks around.

 There are also string constants which use double quotation marks.

1-27
 Symbolic Constants
 C++ introduces the concept of a named constant that is just like a

variable, except that its value cannot be changed.


 The qualifier const tells the compiler that a name represents a

constant.
 Any data type, built-in or user-defined, may be defined as const.

 If you define something as const and then attempt to modify it,

the compiler will generate an error. Example:

const float PI = 3.1416;

const double SALESTAX = 0.05;

const int MAXNUM = 100;

1-28
Operators
o Operators are symbols that tells the compiler to perform specific

mathematical or logical operations.

o These operators work on either a single or two operands and so can be

called either unary or binary based on the number of their operands


respectively.

o The followings are C++ operators for specific purpose.

Assignment

Arithmetic

Relational

Logical
29
Increment/ decrement operators
Assignment Operators (=)
o The assignment operator is used for storing a value at some memory

location (typically denoted by a variable).

o Its left operand should be an lvalue (left value), and its right operand may

be an arbitrary expression.
– The latter is evaluated and the outcome is stored in the location denoted

by the lvalue.
– An lvalue is anything that denotes a memory location in which a value

may be stored.
o The assignment operator has a number of variants

=, +=, -=, *=, /= etc.


30
Cont..

31
Arithmetic Operators
o C++ provides five basic arithmetic operators.

o Except for remainder (%) all other arithmetic operators can accept a mix

of integer and real operands.

– Generally, if both operands are integers then the result will be an

integer. However, if one or both of the operands are real's then the result

will be a real (or double to be exact).

o The remainder operator (%) expects integers for both of its operands.

– It returns the remainder of integer-dividing the operands.


32
Cont..

33
Relational Operators
o C++ provides six relational operators for comparing numeric quantities.

o Relational operators evaluate to 1 (true outcome) or 0 (false outcome).

34
Logical Operators
o C++ provides three logical operators for combining logical expression.

o Like the relational operators, logical operators evaluate to 1 or 0.

o Logical negation is a unary operator, which negates the logical value of its

single operand.
– If its operand is nonzero it produces 0, and if it is 0 it produces 1.

35
o Increment/Decrement Operators
o The auto increment (++) and auto decrement (--) operators provide

a convenient way of, respectively, adding and subtracting 1 from a


numeric variable.

o When used in prefix form, the operator is first applied and the

outcome is then used in the expression.

o When used in the postfix form, the expression is evaluated first and

then the operator applied. Example: int k=5;

36
Escape operators
o The backslash causes an “ escape ” from the normal way characters are

interpreted and there are some basic characters that we use in escape sequence
i.e. preceding them with a backslash.

o Escape sequences are usually used with string constants that are sent to the cout.

37
Examples:

cout<<”This is a line \n and this is too.”;

The above statement outputs:


what is the out put?

cout<<”\” Run, John, run, \”she said .”;

The output looks like

what is the output?

38
Precedence of Operators

o The order in which operators are evaluated in an expression is significant

and is determined by precedence rules.

o These rules divide the C++ operators into a number of precedence levels.

o Operators in higher levels take precedence over operators in lower levels.

o We can force an expression to be evaluated first by placing the bracket ( )

around it.

39
40
Expressions and Statements
o Expression is any statement or part of a statement that evaluates to a value

(returns a value) as a result of computation.

o A statement may have one or many expressions.

o Expressions are made up of sequences of operators, operands in the form of

constants and variables, and punctuators, which specify a computation as per the
rules of the underlying language

o Their arrangement should in a correct syntax.

o Expressions are evaluated based on the operators they contain and the context in

which they are used.


o An expression ending with a semicolon (;) is called a statement.

o Statements specify the action(s) that the program performs.


41
 Input / Output Statements
o The most common way in which a program communicates with the
outside world is through simple, character-oriented Input / Output
(IO) operations.

o C++ provides two useful operators for this purpose: >> for input and
<< for output. Example
 #include <iostream.h>
 int main() {
 int a, b, sum;
 cout << “Enter number a:” << endl;
 cin>>a;
 cout << “Enter number b: “ << endl;
 cin>>b;
 sum = a+b;
 cout << “sum is: “ << sum << endl;
42
 return 0; }
Control statements
o Flow control in a program is sequential, from one

statement to the next, but may be diverted to other paths


by branch statements.

o Declaration statements are used for defining variables.

o Assignment-like statements are used for simple,


algebraic computations.

o Branching statements are used for specifying alternate

paths of execution, depending on the outcome of a logical

43
condition.
Cont..
o Loop statements are used for specifying computations, which

need to be repeated until a certain logical condition is satisfied.

o Jumping statements are used to divert the execution path to

another part of the program.

44
Conditional Statements
o Selection statements are used for specifying alternate paths of execution,

depending on the outcome of a logical condition

o The conditional expressions are mainly used for decision making.

o The following statements are used to perform the task of the conditional

operations.
if statement

If-else statement

else-if statement

Nested if –else statement

Switch statement

45
if statement
o The if statement is used to express conditional expressions.

o If the given condition is true then it will execute the statements

otherwise skip the statements.


o The general form is:

if (conditional expression) {

statement-1;

statement-2;

……… STATEMENT-N

o The expression is evaluated and if the expression is true the statements will be executed.

o If the expression is false the statements are skipped and execution continues with the

next statements.
46
Example: write the program To check percentage of a student and display pass if it is greater than

50.

#include <iostream.h>

int main() {

float percent;

cout<<"Enter your percentage: ";

cin>>percent;

cout<<" You scored "<< percent << “ %"<< endl;

if (percent>=50) {

cout<<"Congratulation: You have passed";

return 0;

}
47
if - else statement
o It is a two way branching statement.

o It is similar to if statement but the only difference is if the condition is false then

a different block of statements are executed which is inside else statement.


o The Syntax of if-else statement:

if (condition)
{
statements;
... ... ...
}
else
{
statements;
... ... ...
48 }
Cont..
//write the program to Checking even/odd numbers
#include<iostream.h>
int main () {
int n;
cout<<"Enter a Number: " ;
cin>>n;
if (n%2= =0)
{
cout<<n<<" is Even!"; }
else
{
cout<<n<<" is Odd!"; }
return 0;
}

49
else-if statements
o It used when there are two or more conditions that needs to be checked to

decide which block of statement is to be executed.

o Syntax of else-if statement


if (condition 1) {
statements;
}
else if (condition 2) {  Thus control will be transferred out of the entire nest once
statements;
a true condition is encountered.
}
else if (condition n) {  The final else clause will be apply if none of the exp is
statements; true.
}
 The number of else if statements depends upon the number
else {
statements; of conditions to be checked.
}
50
Cont..
 When a logical expression is encountered whose value is true the
corresponding statements will be executed and the remainder of the nested
else if statement will be bypassed.

Fig: flow chart of


else-if statements

51
example

52
Nested if-else statement
o It is possible to nest if-else statements, one within another.

o There are several different form that nested if-else statements can

take.

o An if statement inside another if statement is known as nested if

statements.

o Nested if statements are used if there is a sub condition to be

tested after one condition has been checked.

o The depth/number of nested if statements depends upon the

number of conditions to be checked.

53
Cont…

54
Cont..

55
//Demo to check even no. and divisible by 5 else
#include <iostream.h> {
int main() { if (n%5 == 0)
int n;
{
cout<<"Enter a number: ";
cout<<"Number is not even
cin>>n; but divisible by 5";
if (n%2 == 0) }
{ else
if (n%5 == 0)
{
{
cout<<"Number is not even
cout<<"Number is even and divisible by 5"; and not divisible by 5";
} }
else { }
cout<<"Number is even but not divisible by 5";
return 0;
}
}
}​
56
switch statement
o The switch statement provides a way of choosing between a set of

alternatives, based on the value of an expression.


o The general form (Syntax) of the switch statement is:
switch (expression)
{
case Constant1:
statements;
break;
case Constant2:
statements;
break;
default:
statements;
break;
57
}
o First expression (called the switch tag) is evaluated, and the outcome is compared

to each of the numeric constants (called case labels), in the order they appear, until

a match is found.

o The statements following the matching cases are then executed.

o Execution continues until either a break statement is encountered or all intervening

statements until the end of the switch statement are executed.

o The final default case is optional and is exercised if none of the earlier cases

provide a match.

 Rules for Switch Statements

 Values for 'case' must be integer, Boolean or character constants.

 The order of the 'case' statements is not more obligatory.

 The default clause may occur first (convention places it last)


58
If-else vs. switch statements

59
60
61
Looping Statements
o Looping is a way of repeating a series of instructions several times
to execute a block of statements.

o A loop allows to execute a statement or block of statements


repeatedly.

o The statements in the block may be executed any number of times,


from zero to infinite number.

o If a loop continues forever, it is called an infinite loop.


o In looping, a sequence of statements are executed until some
conditions from the termination of the loop are satisfied

62
Cont..
 A program loop consists of two statements:
1. Body of the loop

2. Control statements

 The control statement tests certain conditions and then directs the repeated
execution of the statements contained in the body of the loop.

 A looping process, in general, would include the ff. four steps:


1. Setting and initialization of a counter

2. Test for a specified condition for execution of the loop

3. Execution of the statements in the loop

4. Increment/Decrement the counter

63
Cont..
 Depending on the position of the control statement in the loop, a control
structure can be either as the entry-controlled loop or as exit-controlled loop.

 In entry-controlled loop, the control conditions are tested before the start of
the loop execution.

 In exit-controlled loop, the test is performed at the end of the body of the loop
and therefore the body is executed unconditionally for the first time.

 Three types of loops in C++:

1. while loops

2. do …while loops

3. for loops

64
While Statement
o The while statement (also called while loop) provides a way of

repeating a statement while a condition holds.

o The general form of the while statement is:

while (expression)

statement;

o First expression (called the loop condition) is evaluated. If the

outcome is nonzero then statement (called the loop body) is


executed and the whole process is repeated.

o Otherwise, the loop is terminated.


65
o For example: suppose we wish to calculate the sum of all numbers

from 1 to some integer denoted by n.

o This can be expressed as:

i = 1;
sum = 0;
while (i <= n)
{
sum += i;
i++;}
 The while loop is top tested i.e., it evaluates the
condition before executing statements in the body.
66
Then it is called entry control loop.
//Adding whole numbers from 0 -20
#include<iostream.h>
int main()
{
int i=0;
int sum=0;
while(i<=10)
{
sum+=i;
i++;
}
cout<<"\n\t The Sum is "<<sum;
67 return 0;
for Statement
o The for statement (for loop) is similar to the while statement,

but has two additional components: an expression which is


evaluated only once before everything else, and an
expression which is evaluated once at the end of each
iteration.

o The general form of the for statement is:

for (expression1; expression2; expression3)

statement;

o First expression1 is evaluated. Each time round the loop,


68 expression2 is evaluated.
Cont..
o If the outcome is nonzero then statement is executed and expression3

is evaluated. Otherwise, the loop is terminated.

o The general for loop is equivalent to the following while loop:

expression1;

while (expression2)

statement;

expression3;

}
69
o The general form of the for statement is:

for ( expression1; expression2; expression3 )


statement;

70
Cont..
o The most common use of for loops is for situations where a variable is

incremented or decremented with every iteration of the loop.

o The following for loop, for example, calculates the sum of all integers from

1 to n.
sum = 0;
for (i = 1; i <= n; ++i)
sum += i;

o This is preferred to the while-loop version.

o C++ allows the first expression in a for loop to be a variable definition.

for (int i = 1; i <= n; ++i)


sum += i;
71
Cont..
o A loop becomes infinite loop if a condition never becomes false.

for (;;)// infinite loop


statements;
//Example of infinite loop
#include <iostream.h>
int main ()
{
for( ; ; )
{
Cout<<"This loop will run forever.\n";
}
return 0;
}

72
// Demo add the first 10 natural numbers
#include<iostream.h>
int main()
{
int sum = 0;
for (int i=1; i<=10; i++)
{
sum += i;
}
cout<<"the sum is "<<sum<<endl;
return 0;
}

73
do…while Statement
o The do statement is similar to the while statement, except that its body

is executed first and then the loop condition is examined.

o The general form of the do statement is:

do
statement;
while (expression);
o First statement is executed and then expression is evaluated.

o If the outcome of the latter is nonzero then the whole process is

repeated. Otherwise, the loop is terminated.

o It is useful for situations where we need the loop body to be executed at

least once, regardless of the loop condition.

74
o For example, suppose we wish to repeatedly read a value and print its square,

and stop when the value is zero.

o This can be expressed as the following loop:

do {

cin >> n;
cout << n * n << '\n';
}
while (n != 0);

o Unlike the while loop, the do loop is never used in situations where it would

have a null body.

o Although a do loop with a null body would be equivalent to a similar while

loop, the latter is always preferred for its superior readability.


75
//example
#include<iostream.h>
int main()
{
int n;
do
{
cout<<"Enter the number "<<endl;
cin >> n;
cout << n * n << "\n";
}
while (n != 0);
cout<<"End of the loop executed!!!";
return 0;
}
76
//write the program Adding (n) numbers using do-while loop
#include<iostream.h>
int main()
{
int counter=0, sum=0, n;
cout<<"enter the required number"<<" ";
cin>>n;
do
{
sum=sum + counter;
counter=counter+1;
}
while(counter<n);
cout<<"the sum of the number is"<<" "<<sum;
cout<<"end of the do while loop";
return 0;
77
}
Nested Looping Statements
o Many applications require nesting of the loop statements, allowing on loop

statement to be surrounded with in another loop statement.

o Nesting can be defined as the method of embedding one control structure with

in another control structure.

o While making control structures to be reside one with in another, the inner and

outer control structures may be of the same type or may not be of same type.

o But, it is essential for us to ensure that one control structure is completely

embedded within another.

78
//what is the output of the following program?
#include<iostream.h>
int main()
{
int i;
int j;
for(i=5;i>=1;i--)
{
for(j=1;j<=i;j++)
{
cout<<i;
}
cout<<endl;
}
return 0;
}
79
Jumping Statements
o Jump statements are used to divert the execution path to another part of the

program.

o Jump statements cause an unconditional jump to


another statement elsewhere in the code.

o They are used primarily to interrupt switch statements and loops.

o The followings are the types of jumping statement used in C++ program.

1. Break statements

2. Continue statements

3. goto statements

4. Return statements

80
Break Statement
o Using break we can leave a loop even if the condition for its end

is not fulfilled.

o It can be used to end an infinite loop, or to force it to end before

its natural end.

o When used in a for, while, do-while or switch structures:

 Causes immediate exit from the structure

 Program execution continues with the first statement after the

structure.
 Commonly used to escape early from a loop, or skip the

remainder of a switch structure.


81
Cont..
// break loop example
#include <iostream.h>
int main ()
{
int n;
for (n=10; n>0; n--)
{
cout << n << ", ";
if (n==3)
{
cout << "countdown aborted!";
break;
}
}
return 0;
}
82
Continue Statement
o The continue statement terminates the current iteration of a loop and instead

jumps to the next iteration.

o For example, we are going to skip the number 5 in our countdown:

// Continue loop example


#include <iostream.h>
int main ()
{ Output
for (int n=10; n>0; n--)
10, 9, 8, 7, 6, 4, 3, 2, 1,FIRE!
{
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!\n";
return 0;
}
83
goto statement
o goto allows to make an absolute jump to another point in the

program.

o The goto statement provides the lowest-level of jumping.

o The general form:

goto label;
where label is an identifier which marks the jump destination
of goto.

o The label should be followed by a colon and appear before a

statement within the same function as the goto statement itself.

o The destination point is identified by a label, which is then used


84 as an argument for the goto statement.
//goto example

#include<iostream.h>

void main() {

cout << "\n Statement 1.";

cout << "\n Statement 2."; Output


cout << "\n Statement 3.";
Statement 1.
goto last;
Statement 2.
cout << "\n Statement 4."; Statement 3.

cout << "\n Statement 5."; End of Program.

last:

cout << "\n End of Program.";

return 0;
85
}
// goto loop example
#include <iostream.h>
int main ()
{
Output
int n=10;
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,FIRE!
loop:
cout << n << ", ";
n--;
if (n>0)
goto loop;
cout << "FIRE!\n";
return 0;
86
}
return Statement
o The return statement enables a function to return a value to its caller.
o The general form/syntax of return statement is:
return expression;
where expression denotes the value returned by the function.
o The type of this value should match the return type of the function.
o For a function whose return type is void, expression should be empty.
return;
o The main function may have return type int.
o The return value of main is what the program returns to the operating system when it
completes its execution.
For example:
#include<iostream.h>
int main (void)
{
cout << "Hello World\n";
return 0;
}
87
88

You might also like