SIT172: Finding Best Runway Position - Programming Assignment 2

Verified

Added on  2023/01/18

|12
|4067
|51
Practical Assignment
AI Summary
This document presents a C programming solution for SIT172 Assignment 2, a practical assignment focused on mechanical engineering principles. The assignment requires students to develop a program to determine the optimal location for an airport runway within a specified area, using an altitude map as the primary data source. The provided C code incorporates functions for calculating medians and utilizes provided data to analyze and optimize runway placement. The solution demonstrates the application of programming skills to solve a real-world engineering problem, including data processing and algorithmic implementation. The code includes necessary header files, function declarations, and definitions for the `assign2` function, along with supporting functions for median calculations. This assignment is designed to test the student's ability to apply programming concepts to solve an engineering challenge. The solution provided on Desklib offers a comprehensive understanding of the problem and its practical solution.
Document Page
Assignment two Template
Name:
Due Date:
Course Code:
Date:
/* Include Files */
#include <string.h>
#include "rt_nonfinite.h"
#include "assign2.h"
/* Function Declarations */
static double b_median(const double x[31]);
static int b_thirdOfFive(const double v[31], int ia, int ib);
static double median(const double x[9]);
static int thirdOfFive(const double v[9], int ia, int ib);
/* Function Definitions */
/*
* Arguments : const double x[31]
* Return Type : double
*/
static double b_median(const double x[31])
{
double y;
int k;
int exitg1;
double unusedU3[31];
int ipiv;
int ia;
int ib;
int ilast;
int oldnv;
boolean_T checkspeed;
boolean_T isslow;
boolean_T exitg2;
double vref;
double vk;
boolean_T guard1 = false;
int a;
int ngroupsof5;
int nlast;
k = 1;
do {
exitg1 = 0;
if (k < 32) {
if (rtIsNaN(x[k - 1])) {
y = rtNaN;
exitg1 = 1;
} else {
k++;
}
} else {
memcpy(&unusedU3[0], &x[0], 31U * sizeof(double));
ipiv = 15;
ia = 0;
ib = 30;
ilast = 30;
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
oldnv = 31;
checkspeed = false;
isslow = false;
exitg2 = false;
while ((!exitg2) && (ia + 1 < ib + 1)) {
vref = unusedU3[ipiv];
unusedU3[ipiv] = unusedU3[ib];
unusedU3[ib] = vref;
ilast = ia;
ipiv = -1;
for (k = ia; k < ib; k++) {
vk = unusedU3[k];
if (unusedU3[k] == vref) {
unusedU3[k] = unusedU3[ilast];
unusedU3[ilast] = vk;
ipiv++;
ilast++;
} else {
if (unusedU3[k] < vref) {
unusedU3[k] = unusedU3[ilast];
unusedU3[ilast] = vk;
ilast++;
}
}
}
unusedU3[ib] = unusedU3[ilast];
unusedU3[ilast] = vref;
guard1 = false;
if (16 <= ilast + 1) {
if (16 >= ilast - ipiv) {
exitg2 = true;
} else {
ib = ilast - 1;
guard1 = true;
}
} else {
ia = ilast + 1;
guard1 = true;
}
if (guard1) {
a = (ib - ia) + 1;
if (checkspeed) {
isslow = (a > oldnv / 2);
oldnv = a;
}
checkspeed = !checkspeed;
if (isslow) {
while (a > 1) {
ngroupsof5 = a / 5;
nlast = a - ngroupsof5 * 5;
a = ngroupsof5;
for (k = -1; k + 2 <= ngroupsof5; k++) {
ipiv = (ia + (k + 1) * 5) + 1;
ipiv = b_thirdOfFive(unusedU3, ipiv, ipiv + 4) - 1;
ilast = (ia + k) + 1;
vref = unusedU3[ilast];
unusedU3[ilast] = unusedU3[ipiv];
Document Page
unusedU3[ipiv] = vref;
}
if (nlast > 0) {
ipiv = (ia + ngroupsof5 * 5) + 1;
ipiv = b_thirdOfFive(unusedU3, ipiv, (ipiv + nlast) - 1) -
1;
ilast = ia + ngroupsof5;
vref = unusedU3[ilast];
unusedU3[ilast] = unusedU3[ipiv];
unusedU3[ipiv] = vref;
a = ngroupsof5 + 1;
}
}
} else {
if (a >= 3) {
ipiv = ia + (a - 1) / 2;
if (unusedU3[ia] < unusedU3[ipiv]) {
if (unusedU3[ipiv] < unusedU3[ib]) {
} else if (unusedU3[ia] < unusedU3[ib]) {
ipiv = ib;
} else {
ipiv = ia;
}
} else if (unusedU3[ia] < unusedU3[ib]) {
ipiv = ia;
} else {
if (unusedU3[ipiv] < unusedU3[ib]) {
ipiv = ib;
}
}
if (ipiv + 1 > ia + 1) {
vref = unusedU3[ia];
unusedU3[ia] = unusedU3[ipiv];
unusedU3[ipiv] = vref;
}
}
}
ipiv = ia;
ilast = ib;
}
}
y = unusedU3[ilast];
exitg1 = 1;
}
} while (exitg1 == 0);
return y;
}
/*
* Arguments : const double v[31]
* int ia
* int ib
* Return Type : int
*/
static int b_thirdOfFive(const double v[31], int ia, int ib)
Document Page
{
int im;
int b_j1;
int j2;
int j3;
int j4;
int j5;
double v4;
double v5;
if ((ia == ib) || (ia + 1 == ib)) {
im = ia;
} else if ((ia + 2 == ib) || (ia + 3 == ib)) {
if (v[ia - 1] < v[ia]) {
if (v[ia] < v[ia + 1]) {
im = ia + 1;
} else if (v[ia - 1] < v[ia + 1]) {
im = ia + 2;
} else {
im = ia;
}
} else if (v[ia - 1] < v[ia + 1]) {
im = ia;
} else if (v[ia] < v[ia + 1]) {
im = ia + 2;
} else {
im = ia + 1;
}
} else {
if (v[ia - 1] < v[ia]) {
if (v[ia] < v[ia + 1]) {
b_j1 = ia;
j2 = ia;
j3 = ia + 2;
} else if (v[ia - 1] < v[ia + 1]) {
b_j1 = ia;
j2 = ia + 1;
j3 = ia + 1;
} else {
b_j1 = ia + 2;
j2 = ia - 1;
j3 = ia + 1;
}
} else if (v[ia - 1] < v[ia + 1]) {
b_j1 = ia + 1;
j2 = ia - 1;
j3 = ia + 2;
} else if (v[ia] < v[ia + 1]) {
b_j1 = ia + 1;
j2 = ia + 1;
j3 = ia;
} else {
b_j1 = ia + 2;
j2 = ia;
j3 = ia;
}
j4 = ia;
j5 = ia + 1;
v4 = v[ia + 2];
v5 = v[ia + 3];
if (v[ia + 3] < v[ia + 2]) {
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
j4 = ia + 1;
j5 = ia;
v5 = v[ia + 2];
v4 = v[ia + 3];
}
if (v5 < v[b_j1 - 1]) {
im = b_j1;
} else if (v5 < v[j2]) {
im = j5 + 3;
} else if (v4 < v[j2]) {
im = j2 + 1;
} else if (v4 < v[j3 - 1]) {
im = j4 + 3;
} else {
im = j3;
}
}
return im;
}
/*
* Arguments : const double x[9]
* Return Type : double
*/
static double median(const double x[9])
{
double y;
int k;
int exitg1;
double unusedU3[9];
int ipiv;
int ia;
int ib;
int ilast;
int oldnv;
boolean_T checkspeed;
boolean_T isslow;
boolean_T exitg2;
double vref;
double vk;
boolean_T guard1 = false;
int a;
int ngroupsof5;
int nlast;
k = 1;
do {
exitg1 = 0;
if (k < 10) {
if (rtIsNaN(x[k - 1])) {
y = rtNaN;
exitg1 = 1;
} else {
k++;
}
} else {
memcpy(&unusedU3[0], &x[0], 9U * sizeof(double));
ipiv = 4;
ia = 0;
Document Page
ib = 8;
ilast = 8;
oldnv = 9;
checkspeed = false;
isslow = false;
exitg2 = false;
while ((!exitg2) && (ia + 1 < ib + 1)) {
vref = unusedU3[ipiv];
unusedU3[ipiv] = unusedU3[ib];
unusedU3[ib] = vref;
ilast = ia;
ipiv = -1;
for (k = ia; k < ib; k++) {
vk = unusedU3[k];
if (unusedU3[k] == vref) {
unusedU3[k] = unusedU3[ilast];
unusedU3[ilast] = vk;
ipiv++;
ilast++;
} else {
if (unusedU3[k] < vref) {
unusedU3[k] = unusedU3[ilast];
unusedU3[ilast] = vk;
ilast++;
}
}
}
unusedU3[ib] = unusedU3[ilast];
unusedU3[ilast] = vref;
guard1 = false;
if (5 <= ilast + 1) {
if (5 >= ilast - ipiv) {
exitg2 = true;
} else {
ib = ilast - 1;
guard1 = true;
}
} else {
ia = ilast + 1;
guard1 = true;
}
if (guard1) {
a = (ib - ia) + 1;
if (checkspeed) {
isslow = (a > oldnv / 2);
oldnv = a;
}
checkspeed = !checkspeed;
if (isslow) {
while (a > 1) {
ngroupsof5 = a / 5;
nlast = a - ngroupsof5 * 5;
a = ngroupsof5;
for (k = -1; k + 2 <= ngroupsof5; k++) {
ipiv = (ia + (k + 1) * 5) + 1;
ipiv = thirdOfFive(unusedU3, ipiv, ipiv + 4) - 1;
ilast = (ia + k) + 1;
Document Page
vref = unusedU3[ilast];
unusedU3[ilast] = unusedU3[ipiv];
unusedU3[ipiv] = vref;
}
if (nlast > 0) {
ipiv = (ia + ngroupsof5 * 5) + 1;
ipiv = thirdOfFive(unusedU3, ipiv, (ipiv + nlast) - 1) - 1;
ilast = ia + ngroupsof5;
vref = unusedU3[ilast];
unusedU3[ilast] = unusedU3[ipiv];
unusedU3[ipiv] = vref;
a = ngroupsof5 + 1;
}
}
} else {
if (a >= 3) {
ipiv = ia + (a - 1) / 2;
if (unusedU3[ia] < unusedU3[ipiv]) {
if (unusedU3[ipiv] < unusedU3[ib]) {
} else if (unusedU3[ia] < unusedU3[ib]) {
ipiv = ib;
} else {
ipiv = ia;
}
} else if (unusedU3[ia] < unusedU3[ib]) {
ipiv = ia;
} else {
if (unusedU3[ipiv] < unusedU3[ib]) {
ipiv = ib;
}
}
if (ipiv + 1 > ia + 1) {
vref = unusedU3[ia];
unusedU3[ia] = unusedU3[ipiv];
unusedU3[ipiv] = vref;
}
}
}
ipiv = ia;
ilast = ib;
}
}
y = unusedU3[ilast];
exitg1 = 1;
}
} while (exitg1 == 0);
return y;
}
/*
* Arguments : const double v[9]
* int ia
* int ib
* Return Type : int
*/
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
static int thirdOfFive(const double v[9], int ia, int ib)
{
int im;
int b_j1;
int j2;
int j3;
int j4;
int j5;
double v4;
double v5;
if ((ia == ib) || (ia + 1 == ib)) {
im = ia;
} else if ((ia + 2 == ib) || (ia + 3 == ib)) {
if (v[ia - 1] < v[ia]) {
if (v[ia] < v[ia + 1]) {
im = ia + 1;
} else if (v[ia - 1] < v[ia + 1]) {
im = ia + 2;
} else {
im = ia;
}
} else if (v[ia - 1] < v[ia + 1]) {
im = ia;
} else if (v[ia] < v[ia + 1]) {
im = ia + 2;
} else {
im = ia + 1;
}
} else {
if (v[ia - 1] < v[ia]) {
if (v[ia] < v[ia + 1]) {
b_j1 = ia;
j2 = ia;
j3 = ia + 2;
} else if (v[ia - 1] < v[ia + 1]) {
b_j1 = ia;
j2 = ia + 1;
j3 = ia + 1;
} else {
b_j1 = ia + 2;
j2 = ia - 1;
j3 = ia + 1;
}
} else if (v[ia - 1] < v[ia + 1]) {
b_j1 = ia + 1;
j2 = ia - 1;
j3 = ia + 2;
} else if (v[ia] < v[ia + 1]) {
b_j1 = ia + 1;
j2 = ia + 1;
j3 = ia;
} else {
b_j1 = ia + 2;
j2 = ia;
j3 = ia;
}
j4 = ia;
j5 = ia + 1;
v4 = v[ia + 2];
v5 = v[ia + 3];
Document Page
if (v[ia + 3] < v[ia + 2]) {
j4 = ia + 1;
j5 = ia;
v5 = v[ia + 2];
v4 = v[ia + 3];
}
if (v5 < v[b_j1 - 1]) {
im = b_j1;
} else if (v5 < v[j2]) {
im = j5 + 3;
} else if (v4 < v[j2]) {
im = j2 + 1;
} else if (v4 < v[j3 - 1]) {
im = j4 + 3;
} else {
im = j3;
}
}
return im;
}
/*
* dec =3;
* data = xlsread('RawData.csv');
* Arguments : double dec
* double highavailmap[279]
* double lowavailmap[279]
* Return Type : void
*/
void assign2(double dec, double highavailmap[279], double lowavailmap[279])
{
int i;
int j;
double medcol[9];
static const double data[279] = { 8.867974939, 7.595977514, 6.470696587,
3.487004378, 1.332514304, 2.813719156, 8.947221259, 7.546871958,
2.05568984,
0.939573783, 7.576162505, 9.802269533, 3.433931341, 5.978067993,
6.141832624,
5.187703999, 6.842419407, 6.983619761, 6.586343622, 2.650967342,
0.281479519,
4.51720947, 4.8833296, 4.112601858, 1.998231285, 1.228788569,
1.794603172,
1.667530285, 1.44530311, 6.957149257, 8.014112004, 5.937637053,
9.240542525,
4.405312889, 9.0179348, 4.343341216, 0.569128894, 9.946691733,
2.467302909,
7.361918814, 8.987294674, 9.760074269, 2.710322229, 1.926107135,
6.878075081,
0.31908731, 3.334342237, 4.888114373, 8.668222289, 4.467132939,
4.911609383,
8.753019417, 9.205292127, 5.939275623, 0.863295867, 1.382115227,
4.389990813,
0.19850828, 5.651301105, 6.665142732, 7.080029568, 0.654417227,
2.564411222,
0.780273518, 9.586822431, 3.629884287, 7.15106193, 4.533588418,
3.587142549,
Document Page
6.813186265, 5.204422849, 5.574429365, 1.582732027, 8.124262387,
3.633086312,
3.935873154, 8.12836, 1.497637964, 9.494915958, 6.444393078,
3.466600789,
1.920091655, 2.920711379, 4.835677122, 9.529493811, 8.227225775,
8.823496714,
9.600218338, 9.200761808, 8.168212959, 0.334910065, 0.713664278,
2.727202152,
9.769263956, 1.300927056, 7.170853355, 0.400633046, 6.533317421,
6.469688221,
7.512063803, 2.385024416, 7.954935104, 1.937182473, 7.267365425,
9.568614386,
1.372077771, 2.882797895, 6.953224295, 9.761948906, 1.559132667,
6.662363071,
7.700985248, 6.230774776, 8.216594898, 8.731006052, 9.675737043,
9.338604456,
6.243664701, 5.639941668, 4.974114723, 7.792594909, 7.448781767,
2.045768796,
2.027527588, 3.989272042, 5.54202833, 0.576200645, 5.879255516,
8.300772274,
9.684651203, 5.154754865, 2.801030069, 4.652322174, 0.237050007,
6.797113615,
1.710930383, 7.729590674, 2.641283508, 4.234288961, 3.30454842,
5.102681045,
4.40759675, 0.309926987, 1.851301345, 4.752599135, 1.420521995,
8.500659127,
9.720235581, 6.130814686, 9.932233372, 4.593642109, 5.61784365,
7.207382251,
6.99811295, 2.869024371, 8.024279519, 1.266317054, 5.53768077,
2.166697249,
3.033967946, 3.273596535, 5.534040226, 1.320425561, 1.742946809,
3.860278376,
5.638934671, 3.568145331, 4.620203529, 1.385550506, 5.254419664,
3.694842555,
4.24352499, 9.780311529, 9.116009196, 3.322650955, 5.830739222,
4.718489809,
5.311430539, 1.847748074, 0.880329112, 1.643799036, 2.893447754,
9.281825591,
4.432926565, 0.475092556, 0.406259347, 1.082487145, 2.870665286,
2.62679956,
2.117784506, 9.287794629, 9.146656162, 2.733802034, 3.450580842,
6.347574253,
4.108147877, 2.153227594, 3.500511486, 8.286458773, 4.971437421,
7.597808702,
8.659560742, 6.681639464, 8.202708779, 0.321698529, 2.339502065,
9.874656599,
0.961983796, 7.485889122, 3.008665987, 2.234179155, 1.934165787,
4.402123421,
7.185590305, 0.009579449, 4.409037912, 3.436464243, 8.318473223,
5.774148125,
3.8054346, 7.95689996, 6.963881696, 1.839031511, 9.655630704,
7.286174213,
4.559378977, 9.596943899, 2.640737222, 3.583143675, 3.299717936,
2.055028778,
5.270463421, 1.31212263, 5.150664553, 2.878981514, 1.105962628,
3.95382863,
1.424256692, 0.037861481, 7.368794943, 3.776018818, 2.610698947,
7.550001144,
1.295091168, 3.839076164, 8.536276332, 9.691486654, 1.105293596,
0.081961952,
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
8.785061686, 9.811977875, 4.785692794, 3.758035866, 7.464826569,
4.557040434,
9.132811064, 6.214026958, 1.504950967, 9.168014934, 0.87277575,
9.480850119,
7.584732352, 6.582869073, 5.754616283, 8.399975892, 9.480589726,
6.524598031,
0.644162857, 7.80869926, 1.728779173, 2.800475891, 0.058055191,
7.498451964,
3.69922017, 8.811582143, 6.442725929, 8.100681854, 3.962151251,
3.510291567
};
double medrow[31];
double highmap[279];
double lowmap[279];
(void)dec;
for (i = 0; i < 31; i++) {
for (j = 0; j < 9; j++) {
medcol[j] = data[i + 31 * j];
}
medrow[i] = median(medcol);
}
for (j = 0; j < 9; j++) {
medcol[j] = b_median(*(double (*)[31])&data[31 * j]);
}
/* %% rounding to 3 decimal places */
/* minrow = round(minrow,dec); */
/* maxrow = round(maxrow,dec); */
/* medrow = round(medrow,dec); */
/* mincol = round(mincol,dec); */
/* maxcol = round(maxcol,dec); */
/* medcol = round(medcol,dec); */
/* %% high map */
/* %% low map */
/* %% high available map */
/* %% low available map */
for (i = 0; i < 31; i++) {
for (j = 0; j < 9; j++) {
if ((data[i + 31 * j] > medrow[i]) && (data[i + 31 * j] > medcol[j]))
{
highmap[i + 31 * j] = data[i + 31 * j];
} else {
highmap[i + 31 * j] = rtNaN;
}
if ((data[i + 31 * j] < medrow[i]) && (data[i + 31 * j] < medcol[j]))
{
lowmap[i + 31 * j] = data[i + 31 * j];
} else {
lowmap[i + 31 * j] = rtNaN;
}
if (!rtIsNaN(highmap[i + 31 * j])) {
highavailmap[i + 31 * j] = 100.0;
} else {
highavailmap[i + 31 * j] = rtNaN;
}
Document Page
if (!rtIsNaN(lowmap[i + 31 * j])) {
lowavailmap[i + 31 * j] = 100.0;
} else {
lowavailmap[i + 31 * j] = rtNaN;
}
}
}
}
void assign2_initialize(void)
{
rt_InitInfAndNaN(8U);
}
/*
* Arguments : void
* Return Type : void
*/
void assign2_terminate(void)
{
}
chevron_up_icon
1 out of 12
circle_padding
hide_on_mobile
zoom_out_icon
[object Object]