Imperative programming
This presentation is the property of its rightful owner.
Sponsored Links
1 / 37

Imperative Programming PowerPoint PPT Presentation


  • 118 Views
  • Uploaded on
  • Presentation posted in: General

Imperative Programming. Imperative Programming. Heart of program is assignment statements Aware that memory contains instructions and data values Commands: variable declarations, loops, conditionals, procedural abstraction Commands make a flowchart. Imperative Languages. FORTRAN COBOL

Download Presentation

Imperative Programming

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Imperative programming

Imperative Programming


Imperative programming1

Imperative Programming

  • Heart of program is assignment statements

  • Aware that memory contains instructions and data values

  • Commands: variable declarations, loops, conditionals, procedural abstraction

  • Commands make a flowchart


Imperative languages

Imperative Languages

  • FORTRAN

  • COBOL

  • BASIC

  • Pascal

  • C


Pascal example

Pascal Example

program Loops;vari: Integer;begin   for i := 1 to 10 do      beginWriteln('Hello');Writeln('This is loop ',i);      end;end.


C example

C Example

/*Hello, world” */

#include <stdio.h>

main()

{

printf(“Howdy, earth! \n”);

return 0;

}


C printing

C Printing

  • Print strings directly

  • Other types must be converted, because they are really numbers:

    char c = ‘A’;

    printf(“Print char c: %c.\n”,c);

    int n = 6;

    printf(“Print int n: %d.\n”,n);


Increment decrement p s same in java

Increment/Decrement(P.S. Same in Java)

int x,y,z;

x=y=z=1;

y = x++;

x=1;

z = ++x;

printf("x++ gives %d\n",y);

printf("++x gives %d\n",z);


C isms

C-isms

  • 0 is false, 1 is true (or non-zero)

  • Same logical operators, &&, ||, !

  • But there are also bitwise operators &, |, ~

  • Other bitwise operators: ^, >>, <<

  • x ? y : z means “if x, y, else z”(Same as Java)

    char c = x > 0? ‘T’ : ‘F’


Memory addresses c

Memory Addresses (C)

  • Pointers are addresses of where values are stored in memory.

  • &variable means “address of variable”

  • What happens?

    int a = 13;

    printf("a is %d\n",a);

    printf("&a is %p\n",&a);


Pointers in c

Pointers in C

int* ptr; -> ptr is a pointer to an int (with no pointee!)

What does it do?

int *ptr;

int num = 4;

ptr = &num;


More pointer fun in c

More Pointer Fun in C

int *ptr;

int num = 4;

ptr = &num;

*ptr = 5;


Pointers in pascal

Pointers in Pascal

program Pointers;var   p: ^integer;begin   new(p);   p^ := 3;writeln(p^);   dispose(p);end.


C arrays

C Arrays

intarInt[5];

int arInt2[5] = {1,4,3,2,1};

intar[2][3] = {{1,2,3},{4,5,6}};


C strings

C Strings

char str[] = “I like C.”;

char *ptrStr = “I love pointers.”;

Last character in String is ‘\0’


C strings example compute length of string

C Strings – Example:Compute length of string

intmyStrLen(const char* s)

{

int count = 0;

while (*s != ‘\0’){

count++;s++;

}

return count;

}


Preprocessor directives

Preprocessor Directives

  • #define – substitute before compiling:

    #define MAX 1000

    if(x > MAX)…


C scope modifiers

C Scope Modifiers

  • static: don’t delete from memory - permanent duration

  • register: suggest use of register for variable. Can’t ask for address of the variable

  • const: make a variable constant. When pointers are const, their “pointees” are constant


Memory

Memory

  • malloc: allocates memory. Must give number of bytes wanted. malloc function returns a pointer to the memory. (Null ptr if memory error).

  • free: frees memory.

  • char *ptr;

  • char str[] = “String!”;

  • ptr = malloc(strlen(str) + 1);

  • free(ptr);


Defining new types

Defining new types

  • Struct (record in other langs)

    typedef struct{

    char* word;

    int frequency;

    int size;

    } wordInfo;

    wordInfo wordOne;

    wordOne.word = “apple”;

    wordOne.frequency = 0;

    wordOne.size = 0;


Pointers to structs

Pointers to Structs

  • We often use pointers to structs (do you know why?

    wordInfo *wiPtr;

  • Can dereference explicitly:

    wordInfo wi = *wiPtr;

  • Or shortcut straight to the fields:

    int f = wiPtr->frequency;


What c lacks

What C Lacks

  • Iterators

  • Exception Handling

  • Overloading

  • Generics


Parameter passing

Parameter Passing

  • Pass by value vs Pass by reference

  • What’s it like in Java?


Parameter passing mechanisms

Parameter Passing Mechanisms

  • By value

  • By reference

  • By value-result

  • By name


Pass by value

Pass by Value

  • Compute the value of the argument at the time of the call and assign that value to the parameter.

  • So passing by value doesn’t normally allow the called function to modify an argument’s value.

  • All arguments in C and Java are passed by value.

  • But references can be passed to allow argument values to be modified. E.g., void swap(int *a, int *b) { … }


A look at swapping java 1

A Look at Swapping - Java 1

  • void swap(int a, int b){

  • int t = a;

  • a = b;

  • b = a;

  • }

  • int x = 3;

  • int y = 4;

  • swap(x,y);

  • System.out.println("x value: "+x+" y value: "+y);


A look at swapping java 2

A Look at Swapping - Java 2

  • void swap2(int[] array, int a, int b){

  • int t = array[a];

  • array[a] = array[b];

  • array[b] = t;

  • }

  • int[] arr = {0,1};

  • swap2(arr, 0,1);

  • System.out.println("array: "+arr[0]+” "+arr[1]);


A look at swapping java 3

A Look at Swapping - Java 3

  • void swap3(Double a, Double b){

  • Double t = a;

  • a = b;

  • b = t;

  • }

  • Double a = new Double(3.0);

  • Double b = new Double(4.0);

  • swap3(a,b);

  • System.out.println("a value: "+a.doubleValue()+" b value: "+b.doubleValue());


A look at swapping c1

A Look at Swapping - C1

  • void swap(int a, int b){

  • int t = a;

  • a = b;

  • b = t;

  • }

  • int main(void){

  • int a = 3;

  • int b = 4;

  • swap(a,b);

  • printf("a value is %d and b value is %d", a, b);

  • return 0;

  • }


A look at swapping c2

A Look at Swapping - C2

  • void swap2(int* a, int* b){

  • int temp = *a;

  • *a = *b;

  • *b = temp;

  • }

  • int main(void){

  • int a = 3;

  • int b = 4;

  • swap2(&a,&b);

  • printf("a value is %d and b value is %d", a, b);

  • return 0;

  • }


C swapping pass by reference value

C++ Swapping - Pass by Reference/Value

voidswap(int a, int b){

int temp = a;

a = b;

b = temp;

}

voidswap(int& a, int& b){

int temp = a;

a = b;

b = temp;

}

  • intmain(void){

  • int a = 3;

  • int b = 4;

  • swap(a,b);

  • printf("a value is %d and b value is %d", a, b);

  • return 0;

  • }


Pass by reference

Pass by Reference

int h, i;

void B(int* w) {

int j, k;

i = 2*(*w);

*w = *w+1;

}

void A(int* x, int* y) {

bool i, j;

B(&h);

}

int main() {

int a, b;

h = 5; a = 3; b = 2;

A(&a, &b);

}

Compute the address of the

argument at the time of the

call and assign it to the

parameter.

Example

Since h is passed by reference, its value changes during the call to B.


Pass by value result

Pass by Value-Result

  • Pass by value at the time of the call and copy the result back to the argument at the end of the call.

    • E.g., Ada’s in out parameter can be implemented as value-result.

    • Value-result is often called copy-in-copy-out.

  • Reference and value-result are the same, except when aliasing occurs.


Aliasing

Aliasing

  • 2 Names for same thing:

  • Java example:

  • Object o = new Object…

  • Object x = o;

  • Can happen other ways as well:

  • Pass variable as parameter and refer to it globally

  • Pass variable by reference twice


When pass by value result gives different answers

When Pass-by-Value-Result gives different answers…

  • (Ada:)

  • procedure f (x,y: in out Integer) is

  • begin

  • x := x + 1;y := y + 1;

  • end f;

  • f(a,a) increments a by ONE only.


More on pass by value result

More on Pass by Value-Result

  • -Sometimes the order of copying makes a difference! Different with different implementations of language.

  • Ex:

  • f(i,a[i]) -> change i first or a[i] first?

  • -All actual parameters must be l-values - things that can be assigned. (Same in pass-by-reference!)

  • Ex:

  • f(a+1) -> How would it be copied back in?


Pass by name

Pass by Name

  • Textually substitute the argument for every instance of its corresponding parameter in the function body.

    • Originated with Algol 60 (Jensen’s device), but was dropped by Algol’s successors -- Pascal, Ada, Modula.

    • Exemplifies late binding, since evaluation of the argument is delayed until its occurrence in the function body is actually executed.

    • Associated with lazy evaluation in functional languages


When pass by name gives different results

When Pass by Name Gives different results

Call swap(i, a[i]). Method becomes:

begin integer t;

t := i;

i := a[i];

a[i]:= t

end;

  • Algol 60:

  • procedure swap(a,b);

  • integer a,b;

  • begin integer t;

  • t := a;

  • a := b;

  • b:= t

  • end;

i = 0, a=[3,0,0,0].

Want: i=3, a = [0,0,0,0].

What really happens?

What happens if I call swap(a[i],i) instead?


  • Login