310 likes | 443 Vues
This session delves into fundamental data types crucial for programming, including Integer, Boolean, String, and Real types. We'll explore variable declaration and initialization with examples such as parcel weight and phone numbers. Understanding how to declare different data types, such as byte and short integers, is key to efficient memory management. We'll also cover mathematical operations suitable for various data types, string manipulation, and the significance of Boolean values in conditionals. This guide is designed for beginners looking to grasp how data types function in computer programs.
E N D
Problem Solving for Programming Session 7 Data Types for Computer Programs
Data Types • So far we have looked at several basic data types in this module: • Integer • Decimal/fractional • String • Boolean • We also looked at how variables are created and initialized: • sugarsAdded 0 ; • parcelWeight 22.5 Kg ; • phoneNo ‘020 7631 6805’ ; • milkRequired true ; • We will now look at both of these topics in greater detail
Declaring Data Types • In programming, whenever a variable is declared, its data type must be declared integer: numberOfSugars ; boolean: milkRequired ; • Declaring variables as a particular data type helps in the allocation of computer memory: • Integer: 32 bits (Java) • Boolean: 1 bit (Java) • It also helps to avoid typing errors • integer: parcelWeight ‘seven’ ;
Integer data types • Programming tasks require us to work with a multitude of number sizes in computer programming (e.g. sugarsRequired, stadiumCapacity, distanceBetweenStars). • Using one data type (e.g. integer) for all number ranges would therefore be inefficient. • To account for different numerical ranges, most programming languages have several sub-types of integer:
Integer data types • Which integer data types do you think would be applicable to the following variables? • populationOfCountry (geography) • squadNumber (football) • licenceEndorsements (driving) • employees (small/medium enterprise)
Declaring Variables • Most programming languages allow us to declare a variables data type individually: byte: sugarsAdded ; shortinteger: parcelWeight ; shortinteger: payload ; • Or to declare them collectively: byte: sugarsAdded ; shortinteger: parcelWeight, payload, capacity ;
Integer data types • They also allow us to assign a value to a variable at the point of declaration: shortinteger: parcelWeight 0, payload 0, capacity 750 ;
Real (fractional) data types • If the only numeric data types available to us were integer types, this would lead to some complex program code (e.g. How would we calculate 17÷9 using only integers?) • To account for this, all programming languages come with real data types. • Real data types allow us to represent any number that has a fractional element real: pi 3.147 ; (constant) real: sizeOfVirus 0.009347678 ;
Mathematical Operators for Integer and Real Data • Earlier we saw that a data type is defined not only by the values it can take, but also by the operations that can be performed on it: • Where numerical data types are concerned, the following operators apply:
Operator precedence • Mathematical operators can be combined to allow expressions such as: integer: result 3 + 4 x 6 ; • What would be the result of this expression be? • Obviously it depends on which way round we do it. • (3+4) * 6 = 42 • 3 + (4 * 6) = 27 • However, a computer program would always evaluate the expression as 27. Why?
Operator precedence • Because programming languages have an order of precedence when it comes to mathematical operations. • Given these rules what would be the result of the following pseudo code snippet: • boolean: result: • IF (3^3 ÷ 9 + 20 < 7 * (2 – 1)) • result true ; • ELSE • result false ; • ENDIF
Characters and Strings • String and character data types are used to represent data which is neither numeric nor boolean. • All strings are collections of characters. E.g. the name ‘David Smith’ is a collection of 11 characters: D + a + v + i + d + ‘ ’ + S + m + i + t + h • Because strings are collections of characters we have a way of performing some basic operations on them (e.g. sorting a list of names, or working out a customer’s initials) string: firstInitial firstName[0] ; string: lastInitial lastName[0] ; string: initials firstInitial + lastInitial ; Character at position zero in the string
Characters and Strings • All characters belong to a particular characterset (e.g. English, Japanese or Arabic). • Each character in any character set is represented by a unique ASCIIcode (American Standard Code for Information Interchange)
Characters and Strings • The ASCII code is a numerical (decimal) representation of a character: • A (65) • a (97) • ! (33) • By giving a character a decimal code, the character can be transposed into a binary number and can therefore be stored in computer memory.
Boolean Data Types • We encountered Boolean data types earlier in this module (e.g. milkRequired) • We saw that a Boolean can only ever take a value of yes or no (true or false) • We also saw how Booleans could be used to form the conditions for conditional and repetition structures IF (milkRequired) Add milk ; ENDIF WHILE (NOT payNow)AND(productCount < 11) Scan Item ; itemsScanned itemsScanned + 1 ; Display Pay Now button ; Get payNow ; ENDWHILE
Declaring and Assigning Values to Boolean Variables • As we have seen a boolean can be assigned a value of true or false: boolean: isAdult false ; • A boolean can also be assigned the value of an expression: boolean: isAdult (age <= 18) ; boolean: vanFull (payload + parcelWeight > 750) ;
Using Booleans as Flags to Control Iterations • We can think of a Boolean as a flag: a raised flag corresponds to true and a lowered flag corresponds to false. • Boolean flags are often employed as sentinels to determine the point at which an iteration structure should be exited.
Using Booleans as Flags to Control Iterations 1. integer: number, 2. square ; 3. character: response ; 4. boolean: finished ; 5. DO 5.1 Display ‘Enter a number :’ ; 5.2 get value of number; 5.3 square number * number ; 5.4 Display ‘Your number squared is ‘ ; 5.5 Display square ; 5.6 Display ‘Do you want another go? Y/N’ 5.7 Get value of response ; 5.8 finished (response = ‘N’) OR (response = ‘n’) ; WHILE (NOT finished)
Boolean Operators • Like numeric data types, Boolean data types are defined by the operations available to them. • There are three (basic) Boolean operators, two of which we have already encountered: • AND • OR • NOT • The outcome of logical operators is always a Boolean true or false value
Combining Operands with AND or OR • Where two or more operands (expressions) are connected by an AND operator, both conditions must be true in order for the outcome of the statement to be true: boolean: grantVisa false ; integer: age ; boolean: isEUCitizen ; Get age ; Get isEUCitizen ; IF (age >= 16) AND (isEUCitizen) grantVisa true ; ENDIF • What would be the outcome if: • age 13 and Colombian • age 16 and Jamaican • age 16 and Italian
Combining Operands with AND or OR • Where two or more operands are connected by an OR operator, if either of the conditions is true, the outcome of the statement is true: boolean: grantVisa false ; integer: age ; boolean: isEUCitizen ; Get age ; Get isEUCitizen ; IF (age <= 16) OR (isEUCitizen) grantVisa true ; ENDIF • What would be the outcome if: • age 13 and Canadian • age 17 and Indian • age 16 and Danish
Negating a Boolean value with the NOT Operator • NOT inverts or negates the value of its associated operand: WHILE NOT(conveyorIsEmpty) Process parcels . . . ENDWHILE WHILE NOT (payNow) Scan Items ; ENDWHILE
Boolean Logic • The following truth table illustrates the results the results that the three operators (AND, OR, and NOT) give for all permutations of their operands (p & q).
Boolean Logic • Consider the following problem: An algorithm has been devised to calculate the average marks of a class. A teacher enters the mark for each student along with each student’s name. Entering ‘ZZZZZ’ and a mark of zero signals the end of the data and at this point the average mark for the class is calculated.
Boolean Logic • The algorithm may look something like the following: 1. string: name ; 2. integer mark , 3. total , 4. numberOfMarks ; 5. total 0 ; 6. numberOfMarks 0 ; 7. Get name and mark ; 8. WHILE (name ≠ ‘ZZZZZ’) AND (mark ≠ 0) 8.1 total total + mark ; 8.2 numberOfMarks numberOfMarks + 1 ; 8.3 Get next name and mark END WHILE //code to calculate average mark
Boolean Logic • At first glance the solution looks good, • Unfortunately, though, it will not suffice. • This is because the condition at #8 means that the loop will terminate as soon as a mark of zero is entered, even if name is different than ‘ZZZZZ’. The following truth table shows this clearly WHILE (name ≠ ‘ZZZZZ’) AND (mark ≠ 0)
Boolean Logic • The correct solution for this problem replaces the AND with an OR 1. string: name ; 2. integer mark , 3. total , 4. numberOfMarks ; 5. total 0 ; 6. numberOfMarks 0 ; 7. Get name and mark ; 8. WHILE (name ≠ ‘ZZZZZ’) OR (mark ≠ 0) 8.1 total total + mark ; 8.2 numberOfMarks numberOfMarks + 1 ; 8.3 Get next name and mark END WHILE //code to calculate average mark
Boolean Logic • A truth table demonstrates why this is correct WHILE (name ≠ ‘ZZZZZ’) OR (mark ≠ 0)
Boolean Logic • In both example algorithms, we have started with a condition that will be true each time the loop iterates: WHILE (name ≠ ‘ZZZZZ’) AND (mark ≠ 0) WHILE (name ≠ ‘ZZZZZ’) OR (mark ≠ 0) • An alternative approach, and one that dispenses with the OR, would be to start instead with condition that would be true when the loop terminates: WHILE (name=‘ZZZZZ’) AND (mark=0) • If we negate this condition, then any values apart from ‘ZZZZZ’ and 0 will cause the loop to continue. But we must negate the condition as a whole. WHILE NOT((name=‘ZZZZZ’) AND (mark=0)) • Again, a truth table demonstrates why this is correct
Boolean Logic WHILE NOT((name=‘ZZZZZ’) AND (mark=0))