1
0

added more code

This commit is contained in:
Andrew W
2022-08-28 16:12:16 -05:00
parent 5a2894ed1b
commit 7dabaef6f6
2345 changed files with 1343530 additions and 0 deletions

34
CPE348/Project2/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,34 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}

29
CPE348/Project2/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,29 @@
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"-std=c++11",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -0,0 +1,200 @@
16482
28905
26183
22666
9664
26342
1587
12704
4094
23596
9459
3914
29436
12112
14330
1337
3107
31257
15633
29246
25721
26178
20807
20408
19472
11827
25427
6293
19782
25126
3492
3496
21263
29675
26163
30927
23250
27750
10863
27344
18578
20322
31258
15246
32434
12820
16583
2773
11310
32216
32020
4263
25626
20059
24672
12331
31886
17331
18624
18900
9689
22116
22397
30952
19024
15792
29111
9506
10774
7206
4082
29352
27528
2573
11831
27195
15393
28414
29968
26703
27863
29220
30967
20721
16511
22871
284
15630
7434
18909
1762
17123
8257
24159
15307
27281
7183
11650
4019
17957
18856
8102
14542
13616
10675
26373
8043
26068
22019
5244
20004
17114
1696
18203
5068
18208
8306
5352
1070
15740
24261
2832
95
32519
26992
15402
27032
1407
27052
31052
19365
13140
6386
1139
26756
17061
27512
2032
10361
16763
7276
30365
1110
8972
15800
6178
27180
24106
11530
28250
7078
3024
31083
7173
2775
25307
22575
29807
26714
16859
28091
13311
29999
1709
14450
23988
18770
9194
26020
29132
25958
528
26729
27068
9500
9762
478
3913
1100
12008
32163
8179
15032
30478
15352
17807
23017
5160
14847
16964
22019
10170
30275
19251
11880
11958
10471
30650
21152
3723

Binary file not shown.

Binary file not shown.

BIN
CPE348/Project2/output.txt Normal file

Binary file not shown.

BIN
CPE348/Project2/project2Pt1a Executable file

Binary file not shown.

View File

@ -0,0 +1,405 @@
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <random>
#include <fstream>
#include <stdbool.h>
#define MAX_COLLISIONS 10
#define MAX_STATIONS 6
using namespace std;
struct timeSlot {
int timeOfTransmission; // time slot
int totalCollisions;
// stations A;
bool collided, transmitted;
};
struct stations {
int arrivalTimeSlot; // time slot
int collisions;
int backoff;
timeSlot A;
};
// function that generates the
// range of backoff slots
//int rangeOfBackoff(int k);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
//std::uniform_int_distribution<int> distr(0, k);
int rangeOfBackoff();
int array[200];
int arrayIndex;
int main()
{
bool didNotCollide, end;
int collisionArray[MAX_COLLISIONS];
int timeArray[MAX_COLLISIONS];
int k;
// file with numbers
string file = "Project2_part1_rn.txt";
ifstream inputFile;
inputFile.open(file.c_str());
bool transmitted;
int timeIndex = 0;
int modOperand;
struct stations st[6];
int timeSlot=0, numFromFile;
const int timeInterval = 512; // time interval in micro seconds
// strings for precise code
string check="Checking time slot: ";
string collisionsStr = " collisions: ";
string backing = ": backing off to slot ";
string dashes = "--------------------------------------------------\n";
string stationStr = "\tStation ";
// define variables
int n, totalCollisions,i;
struct timeSlot t[MAX_COLLISIONS];
//int modOperand = pow(2,st[i].collisions);
// k * timeInterval
// begining at t = 0, all stations collide
while (timeSlot < 10)
{
if (timeSlot==0)
{
cout << dashes << check << timeSlot << endl;
for (int i = 0; i < MAX_STATIONS; i++)
{
t[i].totalCollisions++;
t[i].timeOfTransmission = i;
st[i].arrivalTimeSlot=0; // Arrival Time slot
//k= pow(2,st[i].collisions);
st[i].collisions = 1;
k=1;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[i].backoff = o;
if (o==0)
{
st[i].arrivalTimeSlot=1;
t[i].timeOfTransmission=1;
timeArray[1]++;
}
else
{
timeArray[2]++;
st[i].arrivalTimeSlot = 2;
}
cout << "\tStation " << i << backing << st[i].arrivalTimeSlot << collisionsStr << st[i].collisions << endl;
}
cout << dashes << endl;
timeSlot++;
}
else
{
for (int comp = 0; comp < 6; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
// timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>=timeSlot){
//cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
//cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
for (int i = 0; i < MAX_COLLISIONS; i++)
{
//cout << dashes << check << timeSlot << endl;
for (int stationCount = 0; stationCount < MAX_STATIONS; stationCount++)
{
t[stationCount].transmitted=true;
if (stationCount==0)
{
for (int comp = 0; comp < 6; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
//timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>timeSlot){
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
for (int i = 0; i < 6; i++)
{
// cout << "TimeArray\t"<<i<<"\t" << timeArray[i] << endl;
}
if (timeSlot==10)
{
end=true;
break;
}
cout << dashes << check << timeSlot << endl;
}
transmitted==false;
if(timeArray[timeSlot]==1 && t[timeSlot].totalCollisions<=1 && st[stationCount].arrivalTimeSlot==timeSlot)//st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].totalCollisions==0 && !t[timeSlot].collided)
{
t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! ";
cout << endl << dashes << endl;
end=true;
break;
transmitted=true;
}
else if (st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].collided)
{
// if (t[timeSlot].totalCollisions==1 && timeArray[timeSlot]==1 && t[timeSlot].totalCollisions==0)
// {
// // t[timeSlot].transmitted=true;
// cout << stationStr << stationCount << " Success! " << endl;
// cout << "End of program\n";
// end = true;
// }
if (end) break;
st[stationCount].arrivalTimeSlot++;
st[stationCount].collisions++;
inputFile >> numFromFile;
//array[arrayIndex] = numFromFile;
//arrayIndex++;
modOperand = pow(2,st[stationCount].collisions);
modOperand--;
k = numFromFile % modOperand;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[stationCount].backoff = o;
st[stationCount].arrivalTimeSlot = st[stationCount].arrivalTimeSlot+st[stationCount].backoff;
timeArray[st[stationCount].arrivalTimeSlot]++;
if (timeArray[st[stationCount].arrivalTimeSlot]>1)
{
t[st[stationCount].arrivalTimeSlot].collided=false;
}
cout << "\tStation " << stationCount << backing << st[stationCount].arrivalTimeSlot << collisionsStr << st[stationCount].collisions << endl;
}
else if (t[timeSlot].totalCollisions==1 && t[timeSlot].transmitted && st[stationCount].arrivalTimeSlot==timeSlot)
{
//t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! " << endl << dashes << endl;
cout << "End of program\n";
end = true;
}
else //if (st[stationCount].arrivalTimeSlot != timeSlot && t[timeSlot].totalCollisions<1 && !t[timeSlot].transmitted)
{
if (timeArray[timeSlot]==0)
{
if(stationCount==5)
cout << " NO ATTEMPTS\n";
}
}
if (end) break;
if(stationCount==5)
{
cout << dashes << endl;
// if (t[timeSlot].totalCollisions==0)
// {
// cout << " NO ATTEMPTS\n";
// }
timeSlot++;
for (int comp = 0; comp < 6; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
//timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if ((t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>=timeSlot) && t[st[comp].arrivalTimeSlot].totalCollisions>1)
{
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
}
}
if (end) break;
/* if (t[timeSlot].totalCollisions<2 && t[timeSlot].)
// {
cout << dashes << check << timeSlot << endl << stationStr << stationCount << " Success! " << endl
<< dashes;
} */
// if(transmitted==true) cout << dashes << endl;
}
//timeSlot++;
if (timeSlot==9)
{
break;
}
if (end) break;
}
if (end) break;
}
}
int rangeOfBackoff()
{
}

View File

@ -0,0 +1,421 @@
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <random>
#include <fstream>
#include <stdbool.h>
#include<bits/stdc++.h>
#define MAX_COLLISIONS 9
#define MAX_STATIONS 6
using namespace std;
struct timeSlot {
int timeOfTransmission; // time slot
int totalCollisions;
// stations A;
bool collided, transmitted;
};
struct stations {
int arrivalTimeSlot; // time slot
int collisions;
int backoff;
timeSlot A;
};
bool areSame(int a[],int n)
{
unordered_map<int,int> m;//hash map to store the frequency of every
//element
for(int i=0;i<n;i++)
m[a[i]]++;
if(m.size()==1)
return true;
else
return false;
}
// function that generates the
// range of backoff slots
//int rangeOfBackoff(int k);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
//std::uniform_int_distribution<int> distr(0, k);
int rangeOfBackoff();
int array[200];
int arrayIndex;
int main()
{
bool didNotCollide, end;
int collisionArray[MAX_COLLISIONS];
int timeArray[MAX_COLLISIONS];
int k;
// file with numbers
string file = "Project2_part1_rn.txt";
ifstream inputFile;
inputFile.open(file.c_str());
// while (inputFile) //Read in array
// {
// if (inputFile.eof())
// {
// break;
// }
// for (int i = 0; i < 200; i++)
// {
// inputFile >> array[i];
// }
// }
int timeIndex = 0;
int modOperand;
struct stations st[6];
int timeSlot=0, numFromFile;
const int timeInterval = 512; // time interval in micro seconds
// strings for precise code
string check="Checking time slot: ";
string collisionsStr = " collisions: ";
string backing = ": backing off to slot ";
string dashes = "--------------------------------------------------\n";
string stationStr = "\tStation ";
// define variables
int n, totalCollisions,i;
struct timeSlot t[MAX_COLLISIONS];
//int modOperand = pow(2,st[i].collisions);
// k * timeInterval
// begining at t = 0, all stations collide
while (timeSlot < 10)
{
if (timeSlot==0)
{
cout << dashes << check << timeSlot << endl;
for (int i = 0; i < MAX_STATIONS; i++)
{
t[i].totalCollisions++;
t[i].timeOfTransmission = i;
st[i].arrivalTimeSlot=0; // Arrival Time slot
//k= pow(2,st[i].collisions);
st[i].collisions = 1;
k=1;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[i].backoff = o;
if (o==0)
{
st[i].arrivalTimeSlot=1;
t[i].timeOfTransmission=1;
}
else st[i].arrivalTimeSlot = 2;
cout << "\tStation " << i << backing << st[i].arrivalTimeSlot << collisionsStr << st[i].collisions << endl;
}
cout << dashes << endl;
timeSlot++;
}
else
{
for (int comp = 0; comp < 6; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
// timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>=timeSlot){
//cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
//cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
for (int i = 0; i < MAX_COLLISIONS; i++)
{
//cout << dashes << check << timeSlot << endl;
for (int stationCount = 0; stationCount < MAX_STATIONS; stationCount++)
{
t[stationCount].transmitted=true;
if (stationCount==0)
{
for (int comp = 0; comp < 6; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
//timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>timeSlot){
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
for (int i = 0; i < 6; i++)
{
// cout << "TimeArray\t"<<i<<"\t" << timeArray[i] << endl;
}
cout << dashes << check << timeSlot << endl;
}
if(/*t[timeSlot].totalCollisions==1*/ timeArray[timeSlot]==1 && t[timeSlot].transmitted && st[stationCount].arrivalTimeSlot==timeSlot)//st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].totalCollisions==0 && !t[timeSlot].collided)
{
t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! " << endl << dashes << endl;
cout << "End of program\n";
end = true;
//timeSlot++;
}
else if (st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].collided)
{
// if (t[timeSlot].totalCollisions==1 && timeArray[timeSlot]==1 && t[timeSlot].totalCollisions==0)
// {
// // t[timeSlot].transmitted=true;
// cout << stationStr << stationCount << " Success! " << endl;
// cout << "End of program\n";
// end = true;
// }
if (end) break;
st[stationCount].arrivalTimeSlot++;
st[stationCount].collisions++;
inputFile >> numFromFile;
//array[arrayIndex] = numFromFile;
//arrayIndex++;
modOperand = pow(2,st[stationCount].collisions);
modOperand--;
k = numFromFile % modOperand;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[stationCount].backoff = o;
st[stationCount].arrivalTimeSlot = st[stationCount].arrivalTimeSlot+st[stationCount].backoff;
timeArray[st[stationCount].arrivalTimeSlot]++;
if (timeArray[st[stationCount].arrivalTimeSlot]>1)
{
t[st[stationCount].arrivalTimeSlot].collided=false;
}
cout << "\tStation " << stationCount << backing << st[stationCount].arrivalTimeSlot << collisionsStr << st[stationCount].collisions << endl;
}
else if (t[timeSlot].totalCollisions==1 && t[timeSlot].transmitted && st[stationCount].arrivalTimeSlot==timeSlot)
{
//t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! " << endl << dashes << endl;
cout << "End of program\n";
end = true;
}
else //if (st[stationCount].arrivalTimeSlot != timeSlot && t[timeSlot].totalCollisions<1 && !t[timeSlot].transmitted)
{
if (t[timeSlot].totalCollisions==0)
{
if(stationCount==5)
cout << " NO ATTEMPTS\n";
}
}
if (end) break;
if(stationCount==5)
{
if (t[timeSlot].totalCollisions==0)
{
cout << " NO ATTEMPTS\n";
}
timeSlot++;
for (int comp = 0; comp < 6; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
//timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if ((t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>=timeSlot) && t[st[comp].arrivalTimeSlot].totalCollisions>1)
{
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
cout << dashes << endl;
}
}
if (end) break;
/* if (t[timeSlot].totalCollisions<2 && t[timeSlot].)
// {
cout << dashes << check << timeSlot << endl << stationStr << stationCount << " Success! " << endl
<< dashes;
} */
}
//timeSlot++;
if (timeSlot==9)
{
break;
}
if (end) break;
}
if (end) break;
}
}
int rangeOfBackoff()
{
}

BIN
CPE348/Project2/project2Pt1b Executable file

Binary file not shown.

View File

@ -0,0 +1,229 @@
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <random>
#include <fstream>
#include <stdbool.h>
#define MAX_COLLISIONS 100000
#define MAX_STATIONS 6
using namespace std;
struct timeSlot {
int timeOfTransmission; // time slot
int totalCollisions;
// stations A;
bool collided, transmitted;
};
struct stations {
int arrivalTimeSlot; // time slot
int collisions;
int backoff;
timeSlot A;
};
// function that generates the
// range of backoff slots
//int rangeOfBackoff(int k);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
//std::uniform_int_distribution<int> distr(0, k);
int main()
{
bool didNotCollide, end;
int collisionArray[MAX_COLLISIONS];
int timeArray[MAX_COLLISIONS];
int transmissions =0;
int k = 0;
// file with numbers
string file = "Project2_part1_rn.txt";
ifstream inputFile;
inputFile.open(file.c_str());
bool transmitted;
int timeIndex = 0;
int modOperand;
struct stations st[6];
int timeSlot=0, numFromFile;
const int timeInterval = 512; // time interval in micro seconds
// strings for precise code
string check="Checking time slot: ";
string collisionsStr = " collisions: ";
string backing = ": backing off to slot ";
string dashes = "--------------------------------------------------\n";
string stationStr = "\tStation ";
// define variables
int n, totalCollisions,i;
struct timeSlot t[MAX_COLLISIONS];
//int modOperand = pow(2,st[i].collisions);
// k * timeInterval
// begining at t = 0, all stations collide
while (timeSlot < MAX_COLLISIONS)
{
if (timeSlot==0)
{
cout << dashes << check << timeSlot << endl;
// add total collisions to station time
for (int i = 0; i < MAX_STATIONS; i++)
{
t[i].totalCollisions++;
t[i].timeOfTransmission = i;
st[i].arrivalTimeSlot=0; // Arrival Time slot
//k= pow(2,st[i].collisions);
st[i].collisions = 1;
k=1;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[i].backoff = o;
if (o==0)
{
st[i].arrivalTimeSlot=1;
t[i].timeOfTransmission=1;
timeArray[1]++;
}
else
{
//t[2].totalCollisions++;
timeArray[2]++;
st[i].arrivalTimeSlot = 2;
}
cout << "\tStation " << i << backing << st[i].arrivalTimeSlot << collisionsStr << st[i].collisions << endl;
t[st[i].arrivalTimeSlot].totalCollisions++;
}
cout << dashes << endl;
timeSlot++;
}
else
{
for (int i = 0; i < MAX_COLLISIONS; i++)
{
//cout << dashes << check << timeSlot << endl;
for (int stationCount = 0; stationCount < MAX_STATIONS; stationCount++)
{
t[stationCount].transmitted=true;
if (stationCount==0)
{
cout << dashes << check << timeSlot << endl;
}
transmitted==false;
if(timeArray[timeSlot]==1 && t[timeSlot].totalCollisions<=2 && st[stationCount].arrivalTimeSlot==timeSlot)//st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].totalCollisions==0 && !t[timeSlot].collided)
{
t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! ";
transmissions++;
if (transmissions>1 && transmissions != 6)
{
cout << "\t\t<=== Project1b Solution\n";
}
else if (transmissions==6)
{
cout << "\t\t<=== Project1b Solution\n" << dashes << endl;
end = true;
break;
}
else
{
cout << "\t\t<=== Project1a Solution\n";
}
transmitted=true;
}
else if (st[stationCount].arrivalTimeSlot==timeSlot && timeArray[timeSlot]>1)
{
// if (t[timeSlot].totalCollisions==1 && timeArray[timeSlot]==1 && t[timeSlot].totalCollisions==0)
// {
// // t[timeSlot].transmitted=true;
// cout << stationStr << stationCount << " Success! " << endl;
// cout << "End of program\n";
// end = true;
// }
if (end) break;
st[stationCount].arrivalTimeSlot++;
st[stationCount].collisions++;
inputFile >> numFromFile;
//array[arrayIndex] = numFromFile;
//arrayIndex++;
modOperand = pow(2,st[stationCount].collisions);
modOperand--;
k = numFromFile % modOperand;
//uniform_int_distribution<int> distr(0, k);
// int o = distr(generator);
st[stationCount].backoff = k;
st[stationCount].arrivalTimeSlot = st[stationCount].arrivalTimeSlot+st[stationCount].backoff;
timeArray[st[stationCount].arrivalTimeSlot]++;
if (timeArray[st[stationCount].arrivalTimeSlot]<=1)
{
t[st[stationCount].arrivalTimeSlot].collided=false;
}
else
t[st[stationCount].arrivalTimeSlot].collided=false;
cout << "\tStation " << stationCount << backing << st[stationCount].arrivalTimeSlot << collisionsStr << st[stationCount].collisions << endl;
t[st[stationCount].arrivalTimeSlot].totalCollisions++;
}
else if (t[timeSlot].totalCollisions==1 && t[timeSlot].transmitted && st[stationCount].arrivalTimeSlot==timeSlot)
{
//t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! " << endl << dashes << endl;
cout << "End of program\n";
end = true;
}
else //if (st[stationCount].arrivalTimeSlot != timeSlot && t[timeSlot].totalCollisions<1 && !t[timeSlot].transmitted)
{
if (timeArray[timeSlot]==0)
{
if(stationCount==5)
cout << " NO ATTEMPTS\n";
}
}
if (end) break;
if(stationCount==5)
{
cout << dashes << endl;
timeSlot++;
}
}
if (end) break;
/* if (t[timeSlot].totalCollisions<2 && t[timeSlot].)
// {
cout << dashes << check << timeSlot << endl << stationStr << stationCount << " Success! " << endl
<< dashes;
} */
// if(transmitted==true) cout << dashes << endl;
}
if (end) break;
}
}
}

BIN
CPE348/Project2/project2Pt1c Executable file

Binary file not shown.

View File

@ -0,0 +1,390 @@
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <random>
#include <fstream>
#include <stdbool.h>
#define MAX_COLLISIONS 10000
#define MAX_STATIONS 5
using namespace std;
struct timeSlot {
int timeOfTransmission; // time slot
int totalCollisions;
// stations A;
bool collided, transmitted;
};
struct stations {
int arrivalTimeSlot; // time slot
int collisions;
int backoff;
timeSlot A;
};
// function that generates the
// range of backoff slots
//int rangeOfBackoff(int k);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
//std::uniform_int_distribution<int> distr(0, k);
int main()
{
bool didNotCollide, end;
int collisionArray[MAX_COLLISIONS];
int timeArray[MAX_COLLISIONS];
int k;
// file with numbers
string file = "Project2_part1_rn.txt";
ifstream inputFile;
inputFile.open(file.c_str());
bool transmitted;
int totalTransmitted = 0;
int timeIndex = 0;
int modOperand =0;
struct stations st[6];
int timeSlot=0, numFromFile = 0;
const int timeInterval = 512; // time interval in micro seconds
// strings for precise code
string check="Checking time slot: ";
string collisionsStr = " collisions: ";
string backing = ": backing off to slot ";
string dashes = "--------------------------------------------------\n";
string stationStr = "\tStation ";
// define variables
int n, totalCollisions,i;
struct timeSlot t[MAX_COLLISIONS];
//int modOperand = pow(2,st[i].collisions);
// k * timeInterval
// begining at t = 0, all stations collide
while (1)
{
if (timeSlot==0)
{
cout << dashes << check << timeSlot << endl;
for (int i = 0; i < MAX_STATIONS; i++)
{
t[i].totalCollisions++;
t[i].timeOfTransmission = i;
st[i].arrivalTimeSlot=0; // Arrival Time slot
//k= pow(2,st[i].collisions);
st[i].collisions = 1;
k=1;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[i].backoff = o;
if (o==0)
{
st[i].arrivalTimeSlot=1;
t[i].timeOfTransmission=1;
timeArray[1]++;
}
else
{
timeArray[2]++;
st[i].arrivalTimeSlot = 2;
}
cout << "\tStation " << i << backing << st[i].arrivalTimeSlot << collisionsStr << st[i].collisions << endl;
}
cout << dashes << endl;
timeSlot++;
}
else
{
for (int comp = 0; comp < 5; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
// timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
else if (t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>=timeSlot){
//cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
//cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
for (int i = 0; i < MAX_COLLISIONS; i++)
{
//cout << dashes << check << timeSlot << endl;
for (int stationCount = 0; stationCount < MAX_STATIONS; stationCount++)
{
t[stationCount].transmitted=true;
if (stationCount==0)
{
for (int comp = 0; comp < MAX_STATIONS; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
//timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>timeSlot){
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
for (int i = 0; i < 6; i++)
{
// cout << "TimeArray\t"<<i<<"\t" << timeArray[i] << endl;
}
//stationCount++;
cout << dashes << check << timeSlot << endl;
}
transmitted==false;
if(timeArray[timeSlot]==1 && t[timeSlot].totalCollisions<=1 && st[stationCount].arrivalTimeSlot==timeSlot)//st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].totalCollisions==0 && !t[timeSlot].collided)
{
t[timeSlot].transmitted=true;
cout << stationStr << stationCount << " Success! " << endl << dashes << endl;
st[stationCount].arrivalTimeSlot=+2;
st[stationCount].collisions=0;
st[stationCount].A.transmitted==true;
totalTransmitted++;
transmitted=true;
}
else if (st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].collided)
{
// if (t[timeSlot].totalCollisions==1 && timeArray[timeSlot]==1 && t[timeSlot].totalCollisions==0)
// {
// // t[timeSlot].transmitted=true;
// cout << stationStr << stationCount << " Success! " << endl;
// cout << "End of program\n";
// end = true;
// }
if (end) break;
st[stationCount].arrivalTimeSlot++;
st[stationCount].collisions++;
inputFile >> numFromFile;
//array[arrayIndex] = numFromFile;
//arrayIndex++;
modOperand = pow(2,st[stationCount].collisions);
modOperand--;
k = numFromFile % modOperand;
uniform_int_distribution<int> distr(0, k);
int o = distr(generator);
st[stationCount].backoff = o;
st[stationCount].arrivalTimeSlot = st[stationCount].arrivalTimeSlot+st[stationCount].backoff;
timeArray[st[stationCount].arrivalTimeSlot]++;
if (timeArray[st[stationCount].arrivalTimeSlot]>1)
{
t[st[stationCount].arrivalTimeSlot].collided=false;
}
st[stationCount].A.transmitted=false;
cout << "\tStation " << stationCount << backing << st[stationCount].arrivalTimeSlot << collisionsStr << st[stationCount].collisions << endl;
if (stationCount==MAX_STATIONS-1 && st[MAX_STATIONS-1].arrivalTimeSlot==timeSlot)
{
cout << dashes << endl;
}
}
else if (t[timeSlot].totalCollisions==1 && t[timeSlot].transmitted && st[stationCount].arrivalTimeSlot==timeSlot)
{
// //t[timeSlot].transmitted=true;
// cout << stationStr << stationCount << " Success! " << endl << dashes << endl;
// cout << "End of program\n";
// end = true;
}
else //if (st[stationCount].arrivalTimeSlot != timeSlot && t[timeSlot].totalCollisions<1 && !t[timeSlot].transmitted)
{
if (timeArray[timeSlot]==0)
{
if(stationCount==4)
cout << " NO ATTEMPTS\n";
}
}
if (end) break;
if(stationCount == MAX_STATIONS-1)
{
//if(st[stationCount].A.transmitted==false) cout << dashes << endl;
timeSlot++;
for (int comp = 0; comp < 5; comp++)
{
if (st[comp].arrivalTimeSlot==st[comp+1].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+1].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+1].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+2].arrivalTimeSlot && st[comp].arrivalTimeSlot>=timeSlot && st[comp+2].arrivalTimeSlot>=timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+2].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+3].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+3].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+3].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
//timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+4].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+4].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+4].arrivalTimeSlot].collided=true;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// timeArray[st[comp].arrivalTimeSlot]++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if (st[comp].arrivalTimeSlot==st[comp+5].arrivalTimeSlot && st[comp].arrivalTimeSlot>timeSlot && st[comp+5].arrivalTimeSlot>timeSlot)
{
t[st[comp].arrivalTimeSlot].collided=true;
t[st[comp+5].arrivalTimeSlot].collided=true;
//timeArray[st[comp].arrivalTimeSlot]++;
t[st[comp].arrivalTimeSlot].totalCollisions++;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\ttrue" << endl;
}
if ((t[st[comp].arrivalTimeSlot].collided=true || st[comp].arrivalTimeSlot>=timeSlot) && t[st[comp].arrivalTimeSlot].totalCollisions>1)
{
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tcontinue" << endl;
continue;
}
else
{
t[st[comp].arrivalTimeSlot].collided=false;
// cout << comp << "\t" << st[comp].arrivalTimeSlot << "\tfalse" << endl;
}
}
if (st[MAX_STATIONS-1].A.transmitted==false)
{
cout << dashes <<endl;
}
}
}
if (end) break;
/* if (t[timeSlot].totalCollisions<2 && t[timeSlot].)
// {
cout << dashes << check << timeSlot << endl << stationStr << stationCount << " Success! " << endl
<< dashes;
} */
//if(transmitted==false) cout << dashes << endl;
}
}
if (end) break;
}
}

BIN
CPE348/Project2/project2PtAB Executable file

Binary file not shown.

View File

@ -0,0 +1,141 @@
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <fstream>
#include <stdbool.h>
#define MAX_TIME 100000
#define MAX_STATIONS 6
using namespace std;
struct timeSlot {
int timeOfTransmission; // time slot
int totalCollisions;
// stations A;
bool collided, transmitted;
};
struct stations {
int arrivalTimeSlot; // time slot
int collisions;
int backoff;
timeSlot A;
};
int main()
{
bool end;
int timeArray[MAX_TIME];
int transmissions =0;
int k = 0;
// file with numbers
string file = "Project2_part1_rn.txt";
ifstream inputFile;
inputFile.open(file.c_str());
int modOperand = 0;
struct stations st[6];
int timeSlot=0, numFromFile = 0;
const double timeInterval = 51.2; // time interval in micro seconds
// strings for precise code
string check="Checking time slot: ";
string collisionsStr = " collisions: ";
string backing = ": backing off to slot ";
string dashes = "--------------------------------------------------\n";
string stationStr = "\tStation ";
// define variables
struct timeSlot t[MAX_TIME];
//int modOperand = pow(2,st[stationCount].collisions);
// k * timeInterval
// begining at t = 0, all stations collide
for (int i = 0; i < MAX_TIME; i++)
{
//cout << dashes << check << timeSlot << endl;
for (int stationCount = 0; stationCount < MAX_STATIONS; stationCount++)
{
t[stationCount].transmitted=true;
if (stationCount==0)
{
cout << dashes << check << timeSlot << endl;
}
// no station has collided and will transmit
if(timeArray[timeSlot]==1 && t[timeSlot].totalCollisions<=2 && st[stationCount].arrivalTimeSlot==timeSlot)//st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].totalCollisions==0 && !t[timeSlot].collided)
{
t[timeSlot].transmitted=true;
transmissions++;
if (transmissions==1)
{
//cout << stationStr << stationCount << " Success! ";
cout << "Station " << stationCount << " has successfully transmitted\n" <<
"in slot number " << timeSlot << " which is " << timeInterval*timeSlot << " micro seconds";
cout << "\t\t<====\tSolution Part1a and Partb \n";
}
else if (transmissions==6)
{
//cout << stationStr << stationCount << " Success! ";
cout << "Station " << stationCount << " has successfully transmitted\n" <<
"in slot number " << timeSlot << " which is " << timeInterval*timeSlot << " micro seconds";
cout << "\t\t<====\tSolution Part1b \n" << dashes << endl;
end = true;
break;
}
else
{
//cout << stationStr << stationCount << " Success! ";
cout << "Station " << stationCount << " has successfully transmitted\n" <<
"in slot number " << timeSlot << " which is " << timeInterval*timeSlot << " micro seconds";
cout << "\t\t<==== \tSolution Part1b\n";
}
}
// Two or more stations have collided
else if (st[stationCount].arrivalTimeSlot==timeSlot || timeSlot==0)
{
// initialize values to zero
if (timeSlot==0)
{
st[stationCount].arrivalTimeSlot = 0;
st[stationCount].backoff = 0;
st[stationCount].collisions = 0;
}
st[stationCount].arrivalTimeSlot++;
st[stationCount].collisions++;
inputFile >> numFromFile;
modOperand = pow(2,st[stationCount].collisions);
k = numFromFile % modOperand;
st[stationCount].backoff = k;
st[stationCount].arrivalTimeSlot = st[stationCount].arrivalTimeSlot+st[stationCount].backoff;
timeArray[st[stationCount].arrivalTimeSlot]++;
cout << "\tStation " << stationCount << backing << st[stationCount].arrivalTimeSlot << collisionsStr << st[stationCount].collisions << endl;
t[st[stationCount].arrivalTimeSlot].totalCollisions++;
}
else
{
if (timeArray[timeSlot]==0)
{
if(stationCount==5)
cout << " NO ATTEMPTS\n";
}
}
if (end) break;
if(stationCount==5)
{
cout << dashes << endl;
timeSlot++;
}
}
if (end) break;
}
}

BIN
CPE348/Project2/project2PtC Executable file

Binary file not shown.

View File

@ -0,0 +1,140 @@
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <fstream>
#include <stdbool.h>
#define MAX_TIME 100000
#define MAX_STATIONS 5
using namespace std;
struct timeSlot {
int timeOfTransmission; // time slot
int totalCollisions;
// stations A;
bool collided, transmitted;
};
struct stations {
int arrivalTimeSlot; // time slot
int collisions;
int packetsTransmitted;
int backoff;
timeSlot A;
};
int main()
{
bool end = false;
int timeArray[MAX_TIME];
int k = 0;
// file with numbers
string file = "Project2_part1_rn.txt";
ifstream inputFile;
inputFile.open(file.c_str());
int firstTransmissions = 0;
int modOperand = 0;
struct stations st[6];
int timeSlot=0, numFromFile =0;
const double timeInterval = 51.2; // time interval in micro seconds
// strings for precise code
string check="Checking time slot: ";
string collisionsStr = " collisions: ";
string backing = ": backing off to slot ";
string dashes = "--------------------------------------------------\n";
string stationStr = "\tStation ";
// define variables
struct timeSlot t[MAX_TIME];
//int modOperand = pow(2,st[stationCount].collisions);
// k * timeInterval
// begining at t = 0, all stations collide
for (int i = 0; i < MAX_TIME; i++)
{
//cout << dashes << check << timeSlot << endl;
for (int stationCount = 0; stationCount < MAX_STATIONS; stationCount++)
{
if (stationCount==0)
{
//cout << dashes << check << timeSlot << endl;
}
// station is going to transmit
if(timeArray[timeSlot]==1 && st[stationCount].arrivalTimeSlot==timeSlot)//st[stationCount].arrivalTimeSlot==timeSlot && t[timeSlot].totalCollisions==0 && !t[timeSlot].collided)
{
t[timeSlot].transmitted=true;
st[stationCount].packetsTransmitted++;
if (st[stationCount].packetsTransmitted==1)
{
firstTransmissions++;
}
// the last station transmits
if (firstTransmissions == 5 && st[stationCount].packetsTransmitted == 1)
{
cout << "\n****************************************************\n" << "Part1c: \n";
cout << "****************************************************\n";
cout << check << timeSlot << endl;
cout << "Station " << stationCount << " has successfully transmitted\n" <<
"in slot number " << timeSlot << " which is " << timeInterval*timeSlot << " micro seconds\n";
end = true;
break;
}
st[stationCount].arrivalTimeSlot=st[stationCount].arrivalTimeSlot+3;
timeArray[st[stationCount].arrivalTimeSlot]++;
//t[st[stationCount].arrivalTimeSlot].totalCollisions++;
st[stationCount].collisions=0;
// cout << stationStr << stationCount << " Success! \n";
}
// Two or more stations have collided
else if (st[stationCount].arrivalTimeSlot==timeSlot || timeSlot==0)
{
// initialize values to zero
if (timeSlot==0)
{
st[stationCount].arrivalTimeSlot = 0;
st[stationCount].backoff = 0;
st[stationCount].collisions = 0;
st[stationCount].packetsTransmitted = 0;
}
st[stationCount].arrivalTimeSlot++;
st[stationCount].collisions++;
inputFile >> numFromFile;
modOperand = pow(2,st[stationCount].collisions);
k = numFromFile % modOperand;
st[stationCount].backoff = k;
st[stationCount].arrivalTimeSlot = st[stationCount].arrivalTimeSlot+st[stationCount].backoff;
timeArray[st[stationCount].arrivalTimeSlot]++;
// cout << "\tStation " << stationCount << backing << st[stationCount].arrivalTimeSlot << collisionsStr << st[stationCount].collisions << endl;
t[st[stationCount].arrivalTimeSlot].totalCollisions++;
}
else
{
if (timeArray[timeSlot]==0)
{
// cout << " NO ATTEMPTS\n";
}
}
if (end) break;
if(stationCount==4)
{
//cout << dashes << endl;
timeSlot++;
}
}
if (end) break;
}
}

View File

@ -0,0 +1,70 @@
--------------------------------------------------
Checking time slot: 0
station 0: backing off to slot 1 collisions: 1
station 1: backing off to slot 2 collisions: 1
station 2: backing off to slot 2 collisions: 1
station 3: backing off to slot 1 collisions: 1
station 4: backing off to slot 1 collisions: 1
--------------------------------------------------
--------------------------------------------------
Checking time slot: 1
station 0: backing off to slot 4 collisions: 2
station 3: backing off to slot 5 collisions: 2
station 4: backing off to slot 2 collisions: 2
--------------------------------------------------
--------------------------------------------------
Checking time slot: 2
station 1: backing off to slot 5 collisions: 2
station 2: backing off to slot 3 collisions: 2
station 4: backing off to slot 6 collisions: 3
--------------------------------------------------
--------------------------------------------------
Checking time slot: 3
station 2: success! <========= Solution Part1b
--------------------------------------------------
--------------------------------------------------
Checking time slot: 4
station 0: success! <========= Solution Part1a & Part1b
--------------------------------------------------
--------------------------------------------------
Checking time slot: 5
station 1: backing off to slot 2 collisions: 3
station 3: backing off to slot 3 collisions: 3
--------------------------------------------------
--------------------------------------------------
Checking time slot: 6
station 4: success! <========= Solution Part1b
--------------------------------------------------
--------------------------------------------------
Checking time slot: 7
NO ATTEMPTS
--------------------------------------------------
--------------------------------------------------
Checking time slot: 8
station 1: success! <========= Solution Part1b
--------------------------------------------------
--------------------------------------------------
Checking time slot: 9
station 3: success! <========= Solution Part1b
--------------------------------------------------
****************************************************
Par1c:
****************************************************
Checking time slot: 135
Station 3 has successfully transmitted
in slot number 135 which is 6,912 micro seconds

BIN
CPE348/Project2/t Executable file

Binary file not shown.

14
CPE348/Project2/t.cpp Normal file
View File

@ -0,0 +1,14 @@
#include <random>
#include <iostream>
int main(int argc, char const *argv[])
{
const int range_from = 0;
const int range_to = 1;
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
std::uniform_int_distribution<int> distr(range_from, range_to);
std::cout << distr(generator) << '\n';
return 0;
}