added more code
This commit is contained in:
34
CPE348/Project2/.vscode/launch.json
vendored
Normal file
34
CPE348/Project2/.vscode/launch.json
vendored
Normal 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
29
CPE348/Project2/.vscode/tasks.json
vendored
Normal 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"
|
||||
}
|
BIN
CPE348/Project2/ExponentialBackoff.jpg
Normal file
BIN
CPE348/Project2/ExponentialBackoff.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 MiB |
200
CPE348/Project2/Project2_part1_rn.txt
Normal file
200
CPE348/Project2/Project2_part1_rn.txt
Normal 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
|
BIN
CPE348/Project2/Project_2.doc
Normal file
BIN
CPE348/Project2/Project_2.doc
Normal file
Binary file not shown.
BIN
CPE348/Project2/Project_2.pdf
Normal file
BIN
CPE348/Project2/Project_2.pdf
Normal file
Binary file not shown.
BIN
CPE348/Project2/output.txt
Normal file
BIN
CPE348/Project2/output.txt
Normal file
Binary file not shown.
BIN
CPE348/Project2/project2Pt1a
Executable file
BIN
CPE348/Project2/project2Pt1a
Executable file
Binary file not shown.
405
CPE348/Project2/project2Pt1a.cpp
Normal file
405
CPE348/Project2/project2Pt1a.cpp
Normal 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()
|
||||
{
|
||||
}
|
421
CPE348/Project2/project2Pt1a.cpp.bak
Normal file
421
CPE348/Project2/project2Pt1a.cpp.bak
Normal 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
BIN
CPE348/Project2/project2Pt1b
Executable file
Binary file not shown.
229
CPE348/Project2/project2Pt1b.cpp
Normal file
229
CPE348/Project2/project2Pt1b.cpp
Normal 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
BIN
CPE348/Project2/project2Pt1c
Executable file
Binary file not shown.
390
CPE348/Project2/project2Pt1c.cpp
Normal file
390
CPE348/Project2/project2Pt1c.cpp
Normal 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
BIN
CPE348/Project2/project2PtAB
Executable file
Binary file not shown.
141
CPE348/Project2/project2PtAB.cpp
Normal file
141
CPE348/Project2/project2PtAB.cpp
Normal 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
BIN
CPE348/Project2/project2PtC
Executable file
Binary file not shown.
140
CPE348/Project2/project2PtC.cpp
Normal file
140
CPE348/Project2/project2PtC.cpp
Normal 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;
|
||||
}
|
||||
|
||||
}
|
70
CPE348/Project2/submission sample.txt
Normal file
70
CPE348/Project2/submission sample.txt
Normal 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
BIN
CPE348/Project2/t
Executable file
Binary file not shown.
14
CPE348/Project2/t.cpp
Normal file
14
CPE348/Project2/t.cpp
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user