1 / 37

Imperative Programming

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

skule
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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Imperative Programming

  2. 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

  3. Imperative Languages • FORTRAN • COBOL • BASIC • Pascal • C

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

  5. C Example /*Hello, world” */ #include <stdio.h> main() { printf(“Howdy, earth! \n”); return 0; }

  6. 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);

  7. 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);

  8. 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’

  9. 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);

  10. 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;

  11. More Pointer Fun in C int *ptr; int num = 4; ptr = &num; *ptr = 5;

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

  13. C Arrays intarInt[5]; int arInt2[5] = {1,4,3,2,1}; intar[2][3] = {{1,2,3},{4,5,6}};

  14. C Strings char str[] = “I like C.”; char *ptrStr = “I love pointers.”; Last character in String is ‘\0’

  15. C Strings – Example:Compute length of string intmyStrLen(const char* s) { int count = 0; while (*s != ‘\0’){ count++; s++; } return count; }

  16. Preprocessor Directives • #define – substitute before compiling: #define MAX 1000 if(x > MAX)…

  17. 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

  18. 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);

  19. 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;

  20. 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;

  21. What C Lacks • Iterators • Exception Handling • Overloading • Generics

  22. Parameter Passing • Pass by value vs Pass by reference • What’s it like in Java?

  23. Parameter Passing Mechanisms • By value • By reference • By value-result • By name

  24. 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) { … }

  25. 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);

  26. 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]);

  27. 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());

  28. 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; • }

  29. 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; • }

  30. 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; • }

  31. 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.

  32. 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.

  33. 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

  34. 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.

  35. 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?

  36. 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

  37. 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?

More Related