Pascal Tutorial: Learning Pascal by Glenn Grotzinger Part 1 -- Starting Out. all parts copyright (c) 1995-1996 by Glenn Grotzinger. I am writing this tutorial as a means for people to start out and learn a great deal about Pascal. I write this part with the understanding that you have looked at the compiler, and have figured out how to use it to enter a program, how to compile and run a program within the IDE, save a source code file, or compile at the DOS prompt, or in the IDE to create an EXE file; but do not have any understanding of Pascal programming as a whole. Any subsequent parts will be written assuming that you have read prior parts, and fully understand all the examples. Please work through the examples, entering them in yourself, to get used to programming in Pascal. I also recommend that you print all parts out, so you may have reference for any future parts that we see. As I am writing each part as we go, for right now, I will try to have each part written and posted on a weekly basis. About this part =============== This will be a lengthy part, since we are trying to introduce enough material to get to the point of writing a simple program. The basics ========== My intent in this section is to familiarize you with the proper starting structure to remember for to get ready to write a program. Let's look at the short example below. (I numbered the lines with {}'s for purposes of this explanation.) {1} program tutorial1; uses crt; {2} var {3} world_stmt: string; {4} begin {5} world_stmt := 'Hello world!'; {6} writeln(world_stmt); {7} end. This is a relatively simple program for starting out. Let us run through what each line has. {1} this is the programID, and the uses clause. program ; uses ; is the syntax. may be anything that we may decide to call the program. is a specification of additional libraries, or *units* of commands that we may want to use. crt is the name of one library we will use a lot in our programming. The commands that can be accessed in this library will be detailed later on in the tutorial. If we want to use any of the commands in a library, we must tell the compiler to use the library, and the uses statement does this. I will specify if any commands we use will come out of a unit. {2} var is a signal we use at the beginning of a program block to tell the compiler that we want to start defining variables. {3} This is a definition of a string, or sequence of text. Variable defs. will be covered later in this part. We are defining a variable named world_stmt to be a string. {4} begin says we want to begin a block of code. {5} & {6} are some program commands. We will explain them later. {7} end; ends a program block. A few basic commands ==================== I will now discuss variable definitions. string: a section of text. "Hello world!" would be a string. integer: a number which does not have a decimal part. 12 is an integer. char: one part of a string. "G" is a character, while "GG" is not. real: a number which has a decimal part. 3.25 would be a real. Comments. If you wish to make some text as a remark to what something does, use the { key or (* to start and the } or *) to end it. The assign. We use the := to assign a value to a variable. Examples of that would be such as: world_stmt := 'Hello world.'; { a definition of a string. The ' s must be there on each side } choice_char := 'a'; { a definition of a character The ' s must be there on each side } money := 3.25; { a definition of a real } coins := 10; { a definition of an integer } Arithmetic computations. We often have to do arithmetic to program and solve a problem. I will illustrate addition, subtraction, multiplication, and division. sum := 3 + 2; { we're telling the computer to add 3 and 2 and then place 5 in an integer called sum. Assignments can also work with this way } sub := 10 - 7; { we're telling the computer to subtract 7 from 10 and then place 3 in an integer called sub. } mult := 3 * 2; { we're telling the computer to multiply 3 by 2. } divisn := 10 / 2; {dividing 10 by 2 } Any of these can be combined in one statement, with the order of operations being /, *, -, +. ('s may be used to force one group of numbers. For example: answer := 3 + (2 + 6) * 4; Rules: We must use the following idea to determine whether things are OK to do for arithmetic. 1) If we perform an arithmetic operation with anything with a real in it, the receiving variable in the assign must be defined as a real. 2) If we perform a division with two integers that have a chance of dividing to become a real, we must use a real for a receiving variable. 12 / 7 would be an example and be 1.71 (rounded to 2 decimal places). Note: dividing and getting a real or using a real in the other stuff will result in answers such as 3.232133412E+02. I will cover later the way to make that look readable and normal. We will now look at an example of some of the stuff above. program tutorial2; var first_number, second_number: integer; result: integer; begin first_number := 3; {assign first number the value of 3} second_number := first_number * 2; {assign 2nd number-multiply first number by 2} first_number := second_number - 5; {assign 1st number-old value of 1st number - 5} result := first_number + second_number; {assign result to be 1st number + 2nd number} end. A question to understand what is going on. Answer this one, and you understand everything up to this point. What is the value of each and every one of the integer variables as listed in the tutorial2 after all the statements execute? (Answer will appear in the next part). DIV and MOD These are special operators. Div places the whole number of a division in the receiving variable, and MOD places the remainder. For example: whole := 12 div 7; {whole becomes 1} remainder := 12 mod 7; {remainder becomes 5} 7 goes into 12 one time with a remainder of five. reading and writing information. We will stick to use of the keyboard for reading information, and the monitor for writing information right now. Remember for any variable, we must not define it to be the name of a command, when we do this. read(a_number); This command stops the program and waits for the user to input data which will be placed in a_number and does NOT produce a movement to a new line. readln(a_number); This command does exactly as read, but produces a movement to a new line. write(a_number); This command writes the contents of a_number to the screen without a new line. writeln(a_number); This command does exactly as write, but produces a movement to a new line on the screen. These commands can be used with any combination of literal, variable, or arithmetic expression. A literal is a defined statement. 3 is a literal in write(3);. write(3); will write a 3 on the monitor. program tutorial3; var some_text: string; begin write('Type some text and press ENTER when done: '); readln(some_text); writeln('You just typed the following: ', some_text); end. Proper events in this program will be (as it will appear on the screen): Type some text and press ENTER when done: You just typed the following: The readln prompts you to enter text which is rewritten with the last writeln command. If you type the examples in and compile them up to this point (as I recommend -- it will help you learn), you will see exactly how tutorial3 is supposed to work. The End of Part 1 ================= All of my tutorial parts will be formatted much like this one. First I will cover some new topics, giving examples, then as the final act will always be a programming problem, which I will leave you, the reader, to solve, learning on your own. The best thing to learn and get competent in any language is to actually sit down and program. Any of the programming problems I leave you will not involve concepts that I have not covered in previous text, though I will try my best to make them challenging to further the reader's programming ability. A solution to each of the problems in each part will be presented in the next part. My rules to you. These are for your benefit. 1) Do not ask anyone else to help you in any programming sub, or anywhere in programming these little practice programs I give. You will not learn anything, if at all, and your time looking through this will be wasted. 2) Anyone who does know, please do not help anyone who is going through this tutorial. They will not learn if someone else gives them the answer! 3) Try and at least attempt the practice programming problem. Do not just sit and wait until I present a solution. The syntax is easy to learn from having notes and such, but the logic of actually programming some- thing is only gotten by practice. If you wish me to give your code from the practice programming problems in this tutorial a quick look, send 'em to me at ggrotz@2sprint.net. Practice Programming Problem for Tutorial Part 1 ================================================ Write a Pascal program (and entirely Pascal) which will accept two integers from the keyboard, presenting the user with a prompt to enter a number for each integer. Then print out statements which tell us what the two digits add up to, subtract to, and multiply to. To be correct, you must act on the first number and then the second number in your computations. For example, 14 and 7 (in that order) would be treated as 14+7, 14-7, and 14*7. Example Monitor Screen (using 14 and 7): ------------------------------------------------------------------------ Please enter the 1st number: 14 Please enter the 2nd number: 7 Adding 14 and 7 gives 21. Subtracting 7 from 14 gives 7. Multiplying 14 and 7 gives 98. Good luck! And a solution to this problem will appear in part two! Next Time ========= Next time, we will discuss the use of decision-making (IF statements) in Pascal programming, as well as loops which repeat a defined, set number of times (FOR loops). Eventually, when the tutorial is over, we will have covered most, if not all of the data and control structures, and a few special topics of interest to you (in Pascal). If you have any comments please send them to ggrotz@2sprint.net.