primitive data types -integer -floating point -decimal -boolean -character strings -character array...

23
PRIMITIVE DATA TYPES -Integer -Floating Point -Decimal -Boolean -Character STRINGS -Character Array -Class -String Length -Static -Limited Dynamic -Dynamic ENUMERATION TYPES - C++ - Fortran - Java SUBRANGE TYPES ARRAYS -Indexing -Flavors -Static -Fixed Stack Dynamic -Stack Dynamic -Fixed Heap-Dynamic -Heap Dynamic -Initalization -Operations (APL) -Rectangular/Jagged -Implementation -Single Dimensional -Multi Dimensional ASSOCIATIVE ARRAYS RECORD TYPES UNION TYPES POINTER/REFERENCE TYPES -Fundamental Operations -Problems -Memory Leak -Dangling Pointer -C++ -Java -Solutions to Pointer Problems -Tombstone -Heap Management -Reference Counter -Garbage Collection LECTURE OUTLINE FOR: CHAPTER 6 DATA TYPES

Upload: donald-lewis

Post on 30-Dec-2015

249 views

Category:

Documents


2 download

TRANSCRIPT

PRIMITIVE DATA TYPES-Integer-Floating Point-Decimal-Boolean-CharacterSTRINGS-Character Array-Class-String Length

-Static-Limited Dynamic-Dynamic

ENUMERATION TYPES- C++- Fortran- JavaSUBRANGE TYPESARRAYS-Indexing-Flavors

-Static-Fixed Stack Dynamic-Stack Dynamic-Fixed Heap-Dynamic-Heap Dynamic

-Initalization-Operations (APL)-Rectangular/Jagged-Implementation

-Single Dimensional-Multi Dimensional

ASSOCIATIVE ARRAYSRECORD TYPESUNION TYPESPOINTER/REFERENCE TYPES-Fundamental Operations-Problems

-Memory Leak-Dangling Pointer

-C++-Java-Solutions to Pointer Problems

-Tombstone-Heap Management

-Reference Counter-Garbage Collection

LECTURE OUTLINE FOR:CHAPTER 6DATA TYPES

C++ Weak Typing to Display Integer

int main(void){

int theInt = 42;char* theBytes = &theInt;

cout << “int is: “ << theInt << endl;

cout << “byte values: “ << ((int) (unsigned char)) theBytes[0] << “ “

<< ((int) (unsigned char)) theBytes[1] << “ “<< ((int) (unsigned char)) theBytes[2] << “ “<< ((int) (unsigned char)) theBytes[3] << “ “<< endl;

}

C++ Weak Typing to Display Integer Hexadecimal

int main(void){

int theInt = 42;char* theBytes = &theInt;

cout << “int is: “ << theInt << endl;

cout << “byte values: “ << hex << ((int) (unsigned char)) theBytes[0] << “ “

<< hex << ((int) (unsigned char)) theBytes[1] << “ “<< hex << ((int) (unsigned char)) theBytes[2] << “ “<< hex << ((int) (unsigned char)) theBytes[3] << “ “<< endl;

}

C++ Program to Write/Read IntegerUsing Text Files

int main(void){ int theInt = 12345678; ofstream out;

out.open(“temp.txt”); out << theInt << endl; out.close();

}

int main(void){ int theInt; ifstream in;

in.open(“temp.txt”); in >> theInt; in.close(); . . .}

C++ Program to Write/Read IntegerUsing Binary Files

int main(void){ int theInt = 12345678; ofstream out;

out.open(“temp.bin”, ios::binary); out << theInt << endl; out.close();

}

int main(void){ int theInt; ifstream in;

in.open(“temp.bin”, ios::binary); in >> theInt; in.close(); . . .}

Interest Calculation Using Floating Point Data Type

#include <iostream>using namespace std; int main(void){

// Credit card balancedouble balance = 10.10;double interest = 0.1;

 // Formattingcout.precision(30);cout << showpoint;

 // Outputcout << "Balance is:\t " << balance << endl;cout << "Interest is:\t " << interest << endl;cout << "New balance is:\t " << (balance * (1 + interest)) << endl;

 }

Interest Calculation Using Decimal Data TypeVC++ .NET

#include "stdafx.h" #using <mscorlib.dll> using namespace System; int _tmain(){

// Credit card balanceDecimal balance = 10.10;Decimal interest = 0.1;

 // OutputConsole::WriteLine("Balance is:\t {0}",balance.ToString("F30"));Console::WriteLine("Interest is:\t {0}",interest.ToString("F30"));Console::WriteLine("New Balance is:\t {0}",(balance * (1 + interest)).ToString("F30"));

 return 0;

}

String* s = new String();s = s.Concat(s,new String( “<html>”));s = s.Concat(s,new String( “<body>”));s = s.Concat(s,new String( “<ul>”));s = s.Concat(s,new String( “<li> Item One”));s = s.Concat(s,new String( “<li> Item Two”));...s = s.Concat(s,new String( “</ul>”));s = s.Concat(s,new String( “</body>”));s = s.Concat(s,new String( “</html>”));

String Concatenation Problem

ASCII Code Page

Latin-1 1252 Code Page

Figure 1: Figure 1: Unicode encoding layout for the BMP (Plane 0)

UNICODE LAYOUT Basic Plane

enum day {Mon, Tue, Wed, Thu, Fri, Sat, Sun}; // Set day of weekday d = Mon; switch (d){

case Mon: cout << “More sleep!” << endl; break;case Tue: cout << “Close to the hump!” << endl; break;case Wed: cout << “Hump day!” << endl; break;case Thu: cout << “Over the hump!” << endl; break;case Fri: cout << “Yipee! “ << endl; break;case Sat: cout << “Sweet weekend.” << endl; break;case Sun: cout << “Rats, almost Monday.” << endl; break;

}

// Set day of weekint d = 0;

 switch (d){

case 0: cout << “More sleep!” << endl; break;case 1: cout << “Close to the hump!” << endl; break;case 2: cout << “Hump day!” << endl; break;case 3: cout << “Over the hump!” << endl; break;case 4: cout << “Yipee! “ << endl; break;case 5: cout << “Sweet weekend.” << endl; break;case 6: cout << “Rats, almost Monday.” << endl; break;

}

Enumeration Types (C++ Example

 

public final class Day { public static final Day MON = new Day(); public static final Day TUE = new Day(); public static final Day WED = new Day(); public static final Day THU = new Day(); public static final Day FRI = new Day(); public static final Day SAT = new Day(); public static final Day SUN = new Day(); private Day() { // Empty private constructor ensures the only objects of // this type are the enumerated elements declared above. }

}

Enumeration Types (Java Example)

Disk

Programin

Virtual Memory

Computing Address of Element InMultidimensional Array

#!/usr/bin/env perl

## Welcome to Perl!## To run this program type: ## perl AssociativeArrayExample.pl## If the program works... then you've installed# perl correctly!#

print "Initializing associative array...\n";

%salaries = ("Gary" => 75000, "Perry" => 57000, "Mary" => 55750, "Cedric" => 47850);

print "Perry's salary is: $salaries{'Perry'}\n";

# Iterate and print the key - value pairsprint "Dumping the associative array: \n";foreach my $key (keys %salaries) { print " value of $key is $salaries{$key}\n";}

print "Deleting Gary from associative array: \n";delete $salaries{"Gary"};

print "Checking for the existance of Gary in array: ";if (exists $salaries{"Gary"}){ print "EXISTS!\n";}else { print "DOES NOT EXIST!\n";}

print "Dumping the associative array again: \n";foreach my $key (keys %salaries) { print " value of $key is $salaries{$key}\n";}

print "Emptying array: \n";%salaries = ();

print "Dumping the associative array again: \n";foreach my $key (keys %salaries) { print " value of $key is $salaries{$key}\n";}

Perl Program DemonstratingAssociative Arrays

COBOL RECORD EXAMPLES

01 OUTPUT-RECORD. 02 EMPLOYEE-NAME.

05 FIRST PICTURE IS X(20). 05 MIDDLE PICTURE IS X(20). 05 LAST PICTURE IS X(20).

02 EMPLOYEE-NUMBER PICTURE IS 9(10). 02 GROSS-PAY PICTURE IS 999V999. 02 NET-PAY PICTURE IS 999V999.

01 EMPLOYEE-RECORD. 02 EMPLOYEE-NAME.

05 FIRST PICTURE IS X(20). 05 MIDDLE PICTURE IS X(20). 05 LAST PICTURE IS X(20).

02 HOURLY-RATE PICTURE IS 99V99. 02 EMPLOYEE-NUMBER PICTURE IS 9(10).

o Numerals 01, 02, 05 indicate hierarchical structure of record

o PICTURE – indicates formatting for output o X(20) – 20 alphanumeric characters o 99V99 – 4 decimal digits with “.” in middle o 9(10) – 10 decimal digits

Ada RECORD EXAMPLES

type Employee_Name_Type is record First : String (1..20); Middle: String (1..20); Last: String (1..20); end record; type Employee_Record_Type is record Employee_Name: Employee_Name_Type; Hourly_Rate: Float; end record; Employee_Record: Employee_Record_Type;

C++ UNION TYPES#include <iostream>using namespace std; //introduces namespace stdint main( void ){

typedef union _GenericInput{

bool theBool;char theChar;int theInt;double theDouble;

} GenericInput;

GenericInput input0;GenericInput input1;

cout << "Enter a character: ";cin >> input0.theChar;

cout << "Enter a double: ";cin >> input1.theDouble;

// You should not be able to assign these two variables// because they hold different types (char and double)// but the “free union” capability in C,C++ allows this// DANGEROUS!!!input0 = input1;

char *byteArray = (char *) &input1;cout << hex << ((int) ((unsigned char) byteArray[0])) << " "

<< ((int) ((unsigned char) byteArray[1])) << " "<< ((int) ((unsigned char) byteArray[2])) << " "<< ((int) ((unsigned char) byteArray[3])) << " "<< ((int) ((unsigned char) byteArray[4])) << " "<< ((int) ((unsigned char) byteArray[5])) << " "<< ((int) ((unsigned char) byteArray[6])) << " "<< ((int) ((unsigned char) byteArray[7])) << endl;

 cout << "As boolean x[" << input0.theBool << "]" << endl;cout << "As character [" << input0.theChar << "]" << endl;cout << "As integer x[" << input0.theInt << "]" << endl;cout << "As double [" << input0.theDouble << "]" << endl;

return 0;}

OUTPUT:Enter a character: aEnter a double: 10.266 66 66 66 66 66 24 40As boolean x[66]As character [f]As integer x[66666666]As double [10.2]Press any key to continue

type Shape is (Circle, Triangle, Rectangle); type Colors is (Red, Green, Blue); type Figure (Form : Shape) is record Filled : Boolean; Color : Colors; case Form is when Circle => Diameter : Float; when Triangle => Left_Side : Integer; Right_Side : Integer; Angle : Float; when Rectangle => Side_1 : Integer; Side_2 : Integer; end case; end record;

Ada UNION TYPES