## Surface area of a tetrahedron

```#include <stdio.h>
#include <math.h>

typedef struct {
float x;
float y;
float z;
} point;

typedef struct {
point ver1;
point ver2;
point ver3;
point ver4;
} tetrahedron;

typedef struct {
point v1;
point v2;
point v3;
} triangle;

point Diff(point a, point b) {
point c;

c.x = a.x - b.x;
c.y = a.y - b.y;
c.z = a.z - b.z;

return(c);
}

point Cross(point a, point b) {
point c;

c.x = a.y*b.z - a.z*b.y;
c.y = a.z*b.x - a.x*b.z;
c.z = a.x*b.y - a.y*b.x;

return(c);
}

float Length(point a) {
return(sqrt(a.x*a.x + a.y*a.y + a.z*a.z));
}

float Area(triangle t) {
point a, b, c;

a = Diff(t.v3,t.v1);
b = Diff(t.v2,t.v1);

c = Cross(a,b);

return(Length(c)/2);
}

triangle Side(tetrahedron T,int i){
triangle t;

switch (i) {
case 1: t.v1 = T.ver2;
t.v2 = T.ver3;
t.v3 = T.ver4;
break;

case 2: t.v1 = T.ver1;
t.v2 = T.ver3;
t.v3 = T.ver4;
break;

case 3: t.v1 = T.ver1;
t.v2 = T.ver2;
t.v3 = T.ver4;
break;

case 4: t.v1 = T.ver1;
t.v2 = T.ver2;
t.v3 = T.ver3;
break;
}

return(t);
}

main(){
tetrahedron T;
float area;
int i;

printf("The coordinates of the first point are: ");
scanf("%f %f %f", &T.ver1.x, &T.ver1.y, &T.ver1.z);

printf("The coordinates of the second point are: ");
scanf("%f %f %f", &T.ver2.x, &T.ver2.y, &T.ver2.z);

printf("The coordinates of the third point are: ");
scanf("%f %f %f", &T.ver3.x, &T.ver3.y, &T.ver3.z);

printf("The coordinates of the fourth point are: ");
scanf("%f %f %f", &T.ver4.x, &T.ver4.y, &T.ver4.z);

area = 0;

for (i = 1; i <= 4 ; i++) {
printf("The area of the %d-th side of T is equal to %f\n", i, Area(Side(T,i)));
area = area + Area(Side(T,i));
}

printf("The surface area of the tetrahedron T is equal to %f\n", area);
}
```

## Determinants using cofactor expansion

```#include <stdio.h>

#define dim 20

typedef struct {
float coeff[dim][dim];
int size;
} matrix;

matrix cofactor( matrix A, int k) {
matrix B;
int i, j ;

B.size = A.size - 1;
for (j = 0 ; j < B.size ; j++ )
for (i = 0 ; i < B.size ; i++ ){
if ( i < k )
B.coeff[j][i] = A.coeff[j+1][i];
else
B.coeff[j][i] = A.coeff[j+1][i+1];
}
return(B);
}

float Det( matrix A ){
matrix B;
float det;
int i;

det = 0;

if (A.size == 1)
det = A.coeff[0][0];
else
for (i = 0 ; i < A.size ; i++ ){
B = cofactor(A,i);
if (i%2 == 0)
det = det + A.coeff[0][i] * Det(B);
else
det = det - A.coeff[0][i] * Det(B);
}
return(det);
}

int main(){

matrix A;
int i, j;

for ( i = 0 ; i < dim ; i++ ){
for ( j =0 ; j < dim ; j++ )
A.coeff[i][j] = 0;
}

printf("The size of the determinant is: ");
scanf("%d",&A.size);

for ( i = 0 ; i < A.size ; i++ ){
printf("Enter the %dth row of the matrix: ",i+1);
for ( j =0 ; j < A.size ; j++ )
scanf("%f",&A.coeff[i][j]);
printf("\n");
}

printf("The determinant is %f\n",Det(A));
}

```