Line 91: Line 91:
 
#ifndef MAZE_H<br>#define MAZE_H<br>#include &lt;stdio.h&gt;
 
#ifndef MAZE_H<br>#define MAZE_H<br>#include &lt;stdio.h&gt;
  
typedef struct<br>{<br> int startRow,startCol;<br> int exitRow, exitCol;<br> int numRow,numCol;<br> <br> int** cells;<br>}Maze;
+
typedef struct<br>{<br> int startRow,startCol;<br> int exitRow, exitCol;<br> int numRow,numCol;<br> <br> int** cells;<br>}Maze;  
  
Maze Maze_construct(char* frame);<br>void Maze_traverse(Maze m);<br>void Maze_destruct(Maze m);
+
Maze Maze_construct(char* frame);<br>void Maze_traverse(Maze m);<br>void Maze_destruct(Maze m);  
  
 
#endif <br>main.c
 
#endif <br>main.c
  
<br>maze.c
+
<br>maze.c  
  
<br>/*maze.c*/<br>#include "maze.h"<br>#include &lt;stdio.h&gt;<br>Maze Maze_contruct(char* fname)<br>{<br> FIEL* fMaze;<br> fMaze = fopen(fname);<br> if(fMaze ==0)<br> {<br> //error<br> }<br> while(!feof(fMaze))<br> {<br> //stuff<br> }<br>}
+
<br>/*maze.c*/<br>#include "maze.h"<br>#include &lt;stdio.h&gt;<br>Maze Maze_contruct(char* fname)<br>{<br> FIEL* fMaze;<br> fMaze = fopen(fname);<br> if(fMaze ==0)<br> {<br> //error<br> }<br> while(!feof(fMaze))<br> {<br> //stuff<br> }<br>}  
  
<br>#include &lt;stdio.h&gt; main.c<br>#include "maze.h"<br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; Maze m;<br>&nbsp;&nbsp;&nbsp; if(argc&lt;2)<br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //error<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; m = Mazeconstruct(argv[1]);<br>&nbsp;&nbsp;&nbsp; Maze_traverse(m)<br>&nbsp;&nbsp;&nbsp; Maze_destruct(m)<br> return 0;<br>}
+
<br>#include &lt;stdio.h&gt; main.c<br>#include "maze.h"<br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; Maze m;<br>&nbsp;&nbsp;&nbsp; if(argc&lt;2)<br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //error<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; m = Mazeconstruct(argv[1]);<br>&nbsp;&nbsp;&nbsp; Maze_traverse(m)<br>&nbsp;&nbsp;&nbsp; Maze_destruct(m)<br> return 0;<br>}  
  
gcc -c maze.c need malloc<br>gcc maze.o main.o -o <br>implicitly link c library
+
gcc -c maze.c need malloc<br>gcc maze.o main.o -o <br>implicitly link c library  
  
m.cells = malloc (sizeof(char*) * numRow);<br>for
+
m.cells = malloc (sizeof(char*) * numRow);<br>for  
  
typedef struct<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; int x;<br>&nbsp;&nbsp;&nbsp; int y;<br>&nbsp;&nbsp;&nbsp; int z;<br>}Vector;
+
typedef struct<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; int x;<br>&nbsp;&nbsp;&nbsp; int y;<br>&nbsp;&nbsp;&nbsp; int z;<br>}Vector;  
  
Vector Vector_construct(int a int b int c);<br>Vector Vector_add(vector v1 vector v2);
+
Vector Vector_construct(int a int b int c);<br>Vector Vector_add(vector v1 vector v2);  
  
Vector Vector_construct(int a, int b, int c)<br>Pbecor v;;
+
Vector Vector_construct(int a, int b, int c)<br>Pbecor v;;  
  
gcc -c main.c <br>gcc -c maze.c<br>gcc main.o maze.o -o ipa1<br>./ipa1 maze1<br>current directory<br>make file for each directory<br>makeclean
+
gcc -c main.c <br>gcc -c maze.c<br>gcc main.o maze.o -o ipa1<br>./ipa1 maze1<br>current directory<br>make file for each directory<br>makeclean  
  
int numLine;<br>Question:<br>What does it mean when you return with struct, copy attribute by attribute<br>
+
int numLine;<br>Question:<br>What does it mean when you return with struct, copy attribute by attribute<br>
 +
 
 +
= Lecture&nbsp;(2-11-2011):<br> =
 +
 
 +
ECE 264 seat = D9
 +
 
 +
Practice <br>find the number of ways to partition 10 into the sum of positive and incraesing integers
 +
 
 +
5 = 1 + 4 | 1 + 1 + 3 wrong<br> = 2 + 3 | 2 + 1 + 2 wrong<br> = 5 | 3 + 2 does not count
 +
 
 +
tail recursion for quiz
 +
 
 +
f(int **array)<br>{
 +
 
 +
}
 +
 
 +
int ** cells;<br>cells = malloc()<br>f(cells);
 +
 
 +
Maze_traverse(Maze m)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m.cells[m.currRow][m.currCol]=='E')<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done!<br>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; try east<br>&nbsp; &nbsp; &nbsp; &nbsp; if(m.cells[m.currRow][m.currCol+1]==' ')<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.currCol++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maze_traverse(m);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m.cells[m.currRow+1][m.currCol] == ' ')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.currRow++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maze_traverse(m);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>if all are not satisfied you backtrack.<br>tail recursion?<br>
 +
 
 +
= Lecture (2-18-2011):<br> =
 +
 
 +
#include "maze.h"
 +
 
 +
Maze fileReadin(char* fileName)<br>{<br> //read it in as a 2 dimensional array<br> int ch;<br> int numVert = 0;<br> int col = 0;<br> int lcv = 0;<br> int mRow = 0;<br> int mCol = 0;<br> int numLines = 0;<br> <br> <br> Maze m; //declare it locally too<br> <br> //read in file<br> FILE * fMaze; <br> fMaze = fopen(fileName, "r");<br> <br> if(fMaze == 0)<br> {<br>&nbsp;&nbsp; printf("There is an Error!");<br>&nbsp;&nbsp; fclose (fMaze);<br> }<br> while(!feof(fMaze))<br> {<br>&nbsp;&nbsp; ch = fgetc(fMaze);<br>&nbsp;&nbsp; col++;<br> <br>&nbsp;&nbsp; if (ch == '\n')<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; ++numLines;<br> <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; if(numVert &lt; col)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; numVert = col;<br>&nbsp;&nbsp; &nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; col = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> }<br> <br> //printf("numLines = %4d numVert = %4d\n", numLines, numVert);<br> m.numRow = numLines;<br> m.numCol = numVert;<br> //-------------------------------------------------DUPLICATE MAtrix<br> <br> m.cells = malloc(m.numRow * sizeof(int *));<br> <br> for(lcv = 0; lcv &lt; m.numRow; lcv++)<br> {<br> m.cells[lcv] = malloc(m.numCol * sizeof(int));<br> }<br> <br> //needed<br> rewind(fMaze);<br>&nbsp;&nbsp; for (mRow = 0; mRow &lt; m.numRow; mRow++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp; &nbsp; for (mCol = 0; mCol &lt; m.numCol; mCol++)<br>&nbsp;&nbsp; &nbsp; {<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.cells[mRow][mCol] = fgetc(fMaze);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m.cells[mRow][mCol] == 'E')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; m.exitCol = mCol;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m.exitRow = mRow;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //printf("exitCol = %4d exitRow %4d\n",m.exitCol,m.exitRow);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
 +
 
 +
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m.cells[mRow][mCol] == 's')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m.startCol = mCol;<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; m.startRow = mRow;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> }<br> //close the file<br> fclose(fMaze);<br> return m;<br>}<br>
 +
 
 +
void Maze_traverse(Maze m,int row,int col, int dir, int* progress, int* found)<br>{<br> printf("Move to %d, %d", row, col);<br> m.currentRow = row;<br> m.currentCol = col;<br> <br> <br> if(m.cells[row][col]=='E')<br> {<br> *found = TRUE;<br> return;<br> }<br> //termination condition<br> if((dir!=WEST)&amp;&amp;(canMove(m,row,col,EAST,*found))<br> {<br>&nbsp;&nbsp; *progress = FORWARD;<br>&nbsp;&nbsp; Maze_traverse(m,row,col+1,EAST,progress,found);<br>&nbsp;&nbsp; revisit(*progress, *found, row, col);<br> }<br> if((dir!=NORTH)&amp;&amp;(canMove(m,row,col,SOUTH,*found)<br> {<br>&nbsp;&nbsp; *progress = FORWARD;<br>&nbsp;&nbsp; Maze_traverse(m,row+1,col,SOUTH,progress,found);<br>&nbsp;&nbsp; revisit(*progress, *found, row, col);<br> }<br> if((dir!=EAST)&amp;&amp;(canMove(m,row,col,WEST,*found)<br> {<br>&nbsp;&nbsp; *progress = FORWARD;<br>&nbsp;&nbsp; Maze_traverse(m,row,col-1,WEST,progress,found);<br>&nbsp;&nbsp; revisit(*progress, *found, row, col);<br> }<br> if((dir!=SOUTH)&amp;&amp;(canMove(m,row,col,NORTH,*found)<br> {<br>&nbsp;&nbsp; *progress = FORWARD;<br>&nbsp;&nbsp; Maze_traverse(m,row-1,col,NORTH,progress,found);<br>&nbsp;&nbsp; revisit(*progress, *found, row, col);<br> }<br> *progress = BACKWARD;<br>}
 +
 
 +
void Maze_destruct(Maze dTemp)<br>{<br> <br> int lcv = 0;<br> // destruct with struct<br>&nbsp;&nbsp; for(lcv = 0; lcv &lt; dTemp.numRow; lcv++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free(dTemp.cells[lcv]); // must break down the array in the struct before destroying whole struct.<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; free(dTemp.cells);<br>}<br>// #endif<br>
 +
 
 +
= Lecture&nbsp;(2-23-2011):<br> =
 +
 
 +
Review Exam answers<br>Last problem:<br>a = 24 b = 4 c = 4
 +
 
 +
Next project:<br>Rectangular packing. <br>No rewind<br>No fseek<br>No fopen fclose then another fopen.
 +
 
 +
typedef struct listnode<br>{<br> int value;<br> struct listnode *next;<br>}Node;
 +
 
 +
Node n;<br>Node *p;<br>p = Node_construct(5);
 +
 
 +
Node* Node_construct(int v)<br>{<br> Node* a;<br> a = malloc(sizeof(Node));<br> a-&gt; value = v;<br> a-&gt; next = 0;<br> return a;<br>}
 +
 
 +
<br>printf("%d\n", p-&gt;value);<br>

Revision as of 22:00, 30 April 2011

Lecture 1:

ECE264Lecture1-1.png

Yuanhua1-1.png

Lecture 2:

Yuanhua 2-1.png

Yuanhua 2-2.png

Lecture (1-21-2011):


Gcc –wall progl.c –o pl
Argument shell

>ls
>-l
>cd

int main(int argc, char* argv[])
}
int abc = 5;
int xyz = 10;
xyz = f1(abc);
if(abc==c)
{

}
Return 0;
}

int f1(int abc, char xyz, double stu)
{
int counter;
abc = 10;
f2(abc);
return -1;
}


void f2(int xyz)
{
int abc = -1;

}

Stack vs. Heap!
order of first in last out
counter /////
double 0.5
xyz char ‘a’
abc (main) 5
L1
xyz (int) 10
abc (from f1) 5


frame
abc -1
xyz 10
L2

Regarding maze traversal:
know your location
track your steps  go back to last intersection
map your file
priority list
detect exit (confirm there is one)
read maze

Height is unlimited
Max will not exceed 80 for width
(0,0) (0,1)
* * * *  *
*         *
*        E
*    *    *
*    *    *
* * * *  *

It can start at a intersection

(3,1) (2,3) ASCII
(2,1) (3,3) American
standard
code
for info interchange?

FILE * find = fopen(argv[1], “r”);
if(fhd == 0);
{
/*error*/
}

while(!feof(fhd))
{
int ch = fgetc(fhol);
ch is ‘*’;
‘\n’
}
fclose(fhd)


Lecture (1-26-2011):

  1. include <stdio.h>

File *fhd;
int numRow=0;
int numCol=0;
int col = 0;
int ch;


if (arg<2)
{
     /*error*/
}

fhd = fopen(argv[1]."r");
if(fhd==0)
{
    /*error*/
}
   while(!feof(fhd))
   {
       ch = fgetc(fhd);
       if(ch=='\n')
       {
          numRow++;
        }
        if(num Col<col)
        {
           numCol = col;
            col = 0;
         }
          col++;
      }
printf("width=%d,height=%d\n",numCol,numRow);

gcc prog.c -o prog

We need to know the enviornment and the direction we are going to take:
Need to have a way to remember where we are located:

Pointers:
int x;
x=5

Value ---> 800
address 650y

int *y;
/* y is a pointer to integer*/
y = 'x'; <-- warning message
take x's addr

  • y = LHS left hand side take y's value as an adr, modify the value at that addr.

= *y Right hand side (RHS) ---> Means assign
Take y's value as an addr, read from that addr.

  • y = 50;
    y = &z;
    *y = 35; ---> z = 35

Goo mainstreet ---> address
family Johnson ----> value

int a[10];
^-- 3
if(ch=='A')
^-- 65 ascII

memory
one - dimension array
int *a;
a = malloc(numElem *sizeof(int));
^---a's value is the start addr of a piece of memory
a[0] = ____
x = a [0];
.
.
.
free(a); <--- lose 50 points RELEASE THE MEMORY (Memory Leak if not there)

Stack Heap
a 1000

C does not specify sizeof(int)
Portable: Run on different machine

malloc(#elem*sizeof(one elem));
^--- modify the value at that addr

if(a==0)
{
/* malloc fails */
//if malloc fails a is 0
}

you already know the size of the maze.

int array[numRow]; The program does not know when you compile the program!

Lecture (2-9-2011):

  1. ifndef MAZE_H
    #define MAZE_H
    #include <stdio.h>

typedef struct
{
int startRow,startCol;
int exitRow, exitCol;
int numRow,numCol;

int** cells;
}Maze;

Maze Maze_construct(char* frame);
void Maze_traverse(Maze m);
void Maze_destruct(Maze m);

  1. endif
    main.c


maze.c


/*maze.c*/
#include "maze.h"
#include <stdio.h>
Maze Maze_contruct(char* fname)
{
FIEL* fMaze;
fMaze = fopen(fname);
if(fMaze ==0)
{
//error
}
while(!feof(fMaze))
{
//stuff
}
}


#include <stdio.h> main.c
#include "maze.h"
int main()
{
    Maze m;
    if(argc<2)
    {
       //error
     }
    m = Mazeconstruct(argv[1]);
    Maze_traverse(m)
    Maze_destruct(m)
return 0;
}

gcc -c maze.c need malloc
gcc maze.o main.o -o
implicitly link c library

m.cells = malloc (sizeof(char*) * numRow);
for

typedef struct
{
     int x;
    int y;
    int z;
}Vector;

Vector Vector_construct(int a int b int c);
Vector Vector_add(vector v1 vector v2);

Vector Vector_construct(int a, int b, int c)
Pbecor v;;

gcc -c main.c
gcc -c maze.c
gcc main.o maze.o -o ipa1
./ipa1 maze1
current directory
make file for each directory
makeclean

int numLine;
Question:
What does it mean when you return with struct, copy attribute by attribute

Lecture (2-11-2011):

ECE 264 seat = D9

Practice
find the number of ways to partition 10 into the sum of positive and incraesing integers

5 = 1 + 4 | 1 + 1 + 3 wrong
= 2 + 3 | 2 + 1 + 2 wrong
= 5 | 3 + 2 does not count

tail recursion for quiz

f(int **array)
{

}

int ** cells;
cells = malloc()
f(cells);

Maze_traverse(Maze m)
{
        if(m.cells[m.currRow][m.currCol]=='E')
         {
         done!
         }
        try east
        if(m.cells[m.currRow][m.currCol+1]==' ')
        {
       m.currCol++;
        Maze_traverse(m);
         }
         if(m.cells[m.currRow+1][m.currCol] == ' ')
        {
          m.currRow++;
        Maze_traverse(m);
         }
}
if all are not satisfied you backtrack.
tail recursion?

Lecture (2-18-2011):

  1. include "maze.h"

Maze fileReadin(char* fileName)
{
//read it in as a 2 dimensional array
int ch;
int numVert = 0;
int col = 0;
int lcv = 0;
int mRow = 0;
int mCol = 0;
int numLines = 0;


Maze m; //declare it locally too

//read in file
FILE * fMaze;
fMaze = fopen(fileName, "r");

if(fMaze == 0)
{
   printf("There is an Error!");
   fclose (fMaze);
}
while(!feof(fMaze))
{
   ch = fgetc(fMaze);
   col++;

   if (ch == '\n')
   {
     ++numLines;

       if(numVert < col)
       {
          numVert = col;
      }
      col = 0;
      }
}

//printf("numLines = %4d numVert = %4d\n", numLines, numVert);
m.numRow = numLines;
m.numCol = numVert;
//-------------------------------------------------DUPLICATE MAtrix

m.cells = malloc(m.numRow * sizeof(int *));

for(lcv = 0; lcv < m.numRow; lcv++)
{
m.cells[lcv] = malloc(m.numCol * sizeof(int));
}

//needed
rewind(fMaze);
   for (mRow = 0; mRow < m.numRow; mRow++)
   {
     for (mCol = 0; mCol < m.numCol; mCol++)
     {

         m.cells[mRow][mCol] = fgetc(fMaze);
         if (m.cells[mRow][mCol] == 'E')
         {
           m.exitCol = mCol;
          m.exitRow = mRow;
              //printf("exitCol = %4d exitRow %4d\n",m.exitCol,m.exitRow);
          }

          if (m.cells[mRow][mCol] == 's')
          {
          m.startCol = mCol;
         m.startRow = mRow;
         }

       }
}
//close the file
fclose(fMaze);
return m;
}

void Maze_traverse(Maze m,int row,int col, int dir, int* progress, int* found)
{
printf("Move to %d, %d", row, col);
m.currentRow = row;
m.currentCol = col;


if(m.cells[row][col]=='E')
{
*found = TRUE;
return;
}
//termination condition
if((dir!=WEST)&&(canMove(m,row,col,EAST,*found))
{
   *progress = FORWARD;
   Maze_traverse(m,row,col+1,EAST,progress,found);
   revisit(*progress, *found, row, col);
}
if((dir!=NORTH)&&(canMove(m,row,col,SOUTH,*found)
{
   *progress = FORWARD;
   Maze_traverse(m,row+1,col,SOUTH,progress,found);
   revisit(*progress, *found, row, col);
}
if((dir!=EAST)&&(canMove(m,row,col,WEST,*found)
{
   *progress = FORWARD;
   Maze_traverse(m,row,col-1,WEST,progress,found);
   revisit(*progress, *found, row, col);
}
if((dir!=SOUTH)&&(canMove(m,row,col,NORTH,*found)
{
   *progress = FORWARD;
   Maze_traverse(m,row-1,col,NORTH,progress,found);
   revisit(*progress, *found, row, col);
}
*progress = BACKWARD;
}

void Maze_destruct(Maze dTemp)
{

int lcv = 0;
// destruct with struct
   for(lcv = 0; lcv < dTemp.numRow; lcv++)
   {
          free(dTemp.cells[lcv]); // must break down the array in the struct before destroying whole struct.
   }
    free(dTemp.cells);
}
// #endif

Lecture (2-23-2011):

Review Exam answers
Last problem:
a = 24 b = 4 c = 4

Next project:
Rectangular packing.
No rewind
No fseek
No fopen fclose then another fopen.

typedef struct listnode
{
int value;
struct listnode *next;
}Node;

Node n;
Node *p;
p = Node_construct(5);

Node* Node_construct(int v)
{
Node* a;
a = malloc(sizeof(Node));
a-> value = v;
a-> next = 0;
return a;
}


printf("%d\n", p->value);

Alumni Liaison

Ph.D. on Applied Mathematics in Aug 2007. Involved on applications of image super-resolution to electron microscopy

Francisco Blanco-Silva