chore: Lab04
This commit is contained in:
parent
430a0aa45e
commit
f5645fca66
23
lab03/01.cpp
Normal file
23
lab03/01.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
using namespace std;
|
||||
|
||||
int main(){
|
||||
ios::sync_with_stdio(false);
|
||||
|
||||
cout<<"Introduce a line: ";
|
||||
string line;
|
||||
getline(cin, line);
|
||||
|
||||
cout<<"Line broken into separate words:\n";
|
||||
istringstream sstream(line);
|
||||
string word;
|
||||
while(getline(sstream, word, ' ')){
|
||||
cout<<word<<"\n";
|
||||
}
|
||||
|
||||
cout.flush();
|
||||
|
||||
return 0;
|
||||
}
|
192
lab04/01.cpp
Normal file
192
lab04/01.cpp
Normal file
@ -0,0 +1,192 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <cstdlib>
|
||||
#include <chrono>
|
||||
using namespace std;
|
||||
|
||||
#define SIZE 300
|
||||
|
||||
void benchmark(void(*f)(vector<int>* v), vector<int>* v);
|
||||
void sort_insert(vector<int>* v);
|
||||
void sort_bininsert(vector<int>* v);
|
||||
void sort_select(vector<int>* v);
|
||||
void sort_bubble(vector<int>* v);
|
||||
void sort_shake(vector<int>* v);
|
||||
|
||||
int main(){
|
||||
ios::sync_with_stdio(false);
|
||||
|
||||
cout<<"----- Testing sort algorithms -----\n\n\n";
|
||||
cout<<"Usage: e[X]it, [C]reate vector, print [V]ector, [R]eset vector, [I]nsertion sort, [B]inary insertion sort, [S]elect sort, bubble sor[T], s[H]ake sort\n\n";
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
vector<int> v;
|
||||
vector<int> work;
|
||||
|
||||
while(true){
|
||||
char command;
|
||||
cout<<"> ";
|
||||
cin>>command;
|
||||
|
||||
switch(command){
|
||||
case 'X':
|
||||
case 'x':
|
||||
cout<<"Exiting..."<<endl;
|
||||
return 0;
|
||||
case 'C':
|
||||
case 'c':
|
||||
cout<<"Initializing vector...\n";
|
||||
v.clear();
|
||||
for(int i=0; i<SIZE; i++){
|
||||
v.push_back(rand()%1000);
|
||||
}
|
||||
work = v;
|
||||
cout<<"Done\n";
|
||||
break;
|
||||
case 'V':
|
||||
case 'v':
|
||||
cout<<"The vector:\n";
|
||||
for(vector<int>::iterator it = work.begin(); it < work.end(); it++){
|
||||
cout<<*it<<" ";
|
||||
}
|
||||
cout<<"\n";
|
||||
break;
|
||||
case 'R':
|
||||
case 'r':
|
||||
cout<<"Reinitializing working copy...\n";
|
||||
work = v;
|
||||
cout<<"Done\n";
|
||||
break;
|
||||
case 'I':
|
||||
case 'i':
|
||||
cout<<"# Insertion sort\n";
|
||||
benchmark(sort_insert, &work);
|
||||
break;
|
||||
case 'B':
|
||||
case 'b':
|
||||
cout<<"# Binary insertion sort\n";
|
||||
benchmark(sort_bininsert, &work);
|
||||
break;
|
||||
case 'S':
|
||||
case 's':
|
||||
cout<<"# Select sort\n";
|
||||
benchmark(sort_select, &work);
|
||||
break;
|
||||
case 'T':
|
||||
case 't':
|
||||
cout<<"# Bubble sort\n";
|
||||
benchmark(sort_bubble, &work);
|
||||
break;
|
||||
case 'H':
|
||||
case 'h':
|
||||
cout<<"# Shake sort\n";
|
||||
benchmark(sort_shake, &work);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void benchmark(void(*f)(vector<int>* v), vector<int>* v){
|
||||
auto t1 = chrono::high_resolution_clock::now();
|
||||
(*f)(v);
|
||||
auto t2 = chrono::high_resolution_clock::now();
|
||||
auto duration = chrono::duration_cast<chrono::nanoseconds>(t2 - t1).count();
|
||||
cout<<"Execution time: "<<duration<<" ns\n";
|
||||
}
|
||||
|
||||
void sort_insert(vector<int>* v){
|
||||
for(int i=2; i<v->size(); i++){
|
||||
int x = v->at(i);
|
||||
int j = i-1;
|
||||
while(j>=0 && v->at(j)>x){
|
||||
v->at(j+1) = v->at(j);
|
||||
j--;
|
||||
}
|
||||
v->at(j+1) = x;
|
||||
}
|
||||
}
|
||||
|
||||
void sort_bininsert(vector<int>* v){
|
||||
for(int i=1; i<v->size(); i++){
|
||||
int x = v->at(i);
|
||||
int start = 0;
|
||||
int dest = i-1;
|
||||
while(start <= dest){
|
||||
int middle = (start + dest) / 2;
|
||||
if(v->at(middle) > x){
|
||||
dest = middle-1;
|
||||
}
|
||||
else{
|
||||
start = middle+1;
|
||||
}
|
||||
|
||||
for(int j=i-1; j>=start; j--){
|
||||
v->at(j+1) = v->at(j);
|
||||
}
|
||||
|
||||
v->at(start) = x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sort_select(vector<int>* v){
|
||||
for(int i=0; i<v->size()-1; i++){
|
||||
int minpos = i;
|
||||
int minval = v->at(i);
|
||||
for(int j=i; j<v->size(); j++){
|
||||
if(v->at(j) < minval){
|
||||
minval = v->at(j);
|
||||
minpos = j;
|
||||
}
|
||||
}
|
||||
|
||||
v->at(minpos) = v->at(i);
|
||||
v->at(i) = minval;
|
||||
}
|
||||
}
|
||||
|
||||
void sort_bubble(vector<int>* v){
|
||||
bool done = false;
|
||||
while(!done){
|
||||
done = true;
|
||||
for(vector<int>::iterator it = v->begin(); it < v->end()-1; it++){
|
||||
if(*it > *(it+1)){
|
||||
int tmp = *it;
|
||||
*it = *(it+1);
|
||||
*(it+1) = tmp;
|
||||
done = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sort_shake(vector<int>* v){
|
||||
int left = 2;
|
||||
int right = v->size() - 1;
|
||||
int k = v->size() - 1;
|
||||
do{
|
||||
for(int j=right; j>=left; j--){
|
||||
if(v->at(j-1) > v->at(j)){
|
||||
int tmp = v->at(j-1);
|
||||
v->at(j-1) = v->at(j);
|
||||
v->at(j) = tmp;
|
||||
k = j;
|
||||
}
|
||||
}
|
||||
left = k+1;
|
||||
for(int j=1; j<=right; j++){
|
||||
if(v->at(j-1) > v->at(j)){
|
||||
int tmp = v->at(j-1);
|
||||
v->at(j-1) = v->at(j);
|
||||
v->at(j) = tmp;
|
||||
k = j;
|
||||
}
|
||||
}
|
||||
right = k-1;
|
||||
}while(left <= right);
|
||||
}
|
47
lab04/02.cpp
Normal file
47
lab04/02.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <numeric>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
using namespace std;
|
||||
|
||||
void sort_select(vector<int>* v){
|
||||
for(int i=0; i<v->size()-1; i++){
|
||||
int minpos = i;
|
||||
int minval = v->at(i);
|
||||
for(int j=i; j<v->size(); j++){
|
||||
if(v->at(j) < minval){
|
||||
minval = v->at(j);
|
||||
minpos = j;
|
||||
}
|
||||
}
|
||||
|
||||
v->at(minpos) = v->at(i);
|
||||
v->at(i) = minval;
|
||||
}
|
||||
}
|
||||
|
||||
int main(){
|
||||
ios::sync_with_stdio(false);
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
vector<int> v(49);
|
||||
iota(v.begin(), v.end(), 1);
|
||||
vector<int> res;
|
||||
|
||||
for(int i=0; i<6; i++){
|
||||
res.push_back(v[rand()%50]);
|
||||
}
|
||||
|
||||
// sort
|
||||
sort_select(&res);
|
||||
|
||||
cout<<"Elements in order: ";
|
||||
for(vector<int>::iterator it = res.begin(); it < res.end(); it++){
|
||||
cout<<*it<<" ";
|
||||
}
|
||||
cout<<endl;
|
||||
|
||||
return 0;
|
||||
}
|
91
lab04/03.cpp
Normal file
91
lab04/03.cpp
Normal file
@ -0,0 +1,91 @@
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <iomanip>
|
||||
using namespace std;
|
||||
|
||||
class Planet {
|
||||
public:
|
||||
int x,y,z;
|
||||
Planet(int x, int y, int z){
|
||||
this->x = x;
|
||||
this->y = y;
|
||||
this->z = z;
|
||||
}
|
||||
Planet(){
|
||||
x = rand()%2000 - 1000;
|
||||
y = rand()%2000 - 1000;
|
||||
z = rand()%2000 - 1000;
|
||||
}
|
||||
|
||||
double distanceTo(Planet p){
|
||||
return sqrt(pow(p.x - x, 2) + pow(p.y - y, 2) + pow(p.z - z, 2));
|
||||
}
|
||||
|
||||
void print(){
|
||||
cout<<setw(6)<<x<<setw(6)<<y<<setw(6)<<z;
|
||||
}
|
||||
};
|
||||
|
||||
int main(){
|
||||
ios::sync_with_stdio(false);
|
||||
|
||||
cout<<"Planets to generate: ";
|
||||
int n;
|
||||
cin>>n;
|
||||
|
||||
cout<<"Planets:\n";
|
||||
vector<Planet> v;
|
||||
for(int i=0; i<n; i++){
|
||||
v.push_back(Planet());
|
||||
cout<<"Planet "<<setw(3)<<i<<": ";
|
||||
v[i].print();
|
||||
cout<<"\n";
|
||||
}
|
||||
cout<<"\n";
|
||||
|
||||
int closeA = 0;
|
||||
int closeB = 1;
|
||||
double closeDist = v[0].distanceTo(v[1]);
|
||||
int farA = 0;
|
||||
int farB = 1;
|
||||
double farDist = v[0].distanceTo(v[1]);
|
||||
|
||||
for(int i=0; i<v.size(); i++){
|
||||
for(int j=i+1; j<v.size(); j++){
|
||||
double dist = v[i].distanceTo(v[j]);
|
||||
|
||||
if(dist < closeDist){
|
||||
closeDist = dist;
|
||||
closeA = i;
|
||||
closeB = j;
|
||||
}
|
||||
|
||||
if(dist > farDist){
|
||||
farDist = dist;
|
||||
farA = i;
|
||||
farB = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout<<"The planets closest to each other:\n";
|
||||
cout<<"Planet "<<closeA<<"(";
|
||||
v[closeA].print();
|
||||
cout<<") and Planet "<<closeB<<"(";
|
||||
v[closeB].print();
|
||||
cout<<")\n";
|
||||
cout<<"Distance: "<<closeDist<<"\n\n";
|
||||
|
||||
cout<<"The planets farthest to each other:\n";
|
||||
cout<<"Planet "<<farA<<"(";
|
||||
v[farA].print();
|
||||
cout<<") and Planet "<<farB<<"(";
|
||||
v[farB].print();
|
||||
cout<<")\n";
|
||||
cout<<"Distance: "<<farDist<<"\n\n";
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user