Advertisement
LucaSkywalker

ICT1018Coursework

May 23rd, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.66 KB | None | 0 0
  1. #include<string.h>
  2. #include <stdlib.h>
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <time.h>
  6. #include <cctype>
  7. #include <algorithm>
  8. using namespace std;
  9.  
  10. //Declarations
  11. const int A_size = 256;
  12. const int B_size = 257;
  13. int TestList[10] = {0,2,2,3,4,6,6,8,9,9};
  14. int A[A_size];
  15. int B[B_size];
  16. int C[A_size + B_size];
  17. int temp;
  18.  
  19. //Question Declarations
  20. void Question1();
  21. void Question2();
  22. void Question3(int arr[], int size);
  23. void Question4(int arr[], int size);
  24. void Question5(string input);
  25. bool Question6a(int isprime);
  26. bool Question6b(int isprime);
  27. void Question7();
  28. void Question8(int newt);
  29. void Question9(int list[], int size);
  30. void Question10(int list[], int size);
  31. void Question11(char f, int in, int n);
  32. void Question12(int n);
  33.  
  34. //General Use Function Declarations
  35. void ShellSort(int arr[], int size);
  36. void QuickSort(int arr[], int lower, int upper);
  37. int Split(int arr[], int lower, int upper);
  38. void Print(int list[], int size);
  39. bool contains(int check, int list[], int size);
  40. int FindMax(int list[], int size);
  41. int Factorial(int n);
  42. double sine(int in, int n);
  43. double cosine(int in, int n);
  44.  
  45. int main()
  46. {  
  47.     //execute questions
  48.     Question1();
  49.     Question2();
  50.     Question3(A, A_size);
  51.     //Question4(A, A_size); //running array A through question 4 takes a long time...
  52.                             //uncomment at your own risk
  53.     Question5("34+2+2x5/");
  54.     Question5("345+++"); //testing error catching
  55.     Question6a(100);
  56.     Question6a(13);
  57.     Question6b(14);
  58.     Question6b(19);
  59.     Question7();
  60.     Question8(16);
  61.     Question8(2);
  62.     Question8(13);
  63.     Question9(TestList, 10);
  64.     Question10(A, A_size);
  65.     Question11('c', 4, 4);
  66.     Question11('s', 1, 6);
  67.     Question12(11);
  68. }
  69.  
  70. void Question1(){
  71.     std::cout << "-------------------------------------------------------\n";
  72.     std::cout << "Question 1\n";
  73.    
  74.     //seeding the rand fucntion to provide better random
  75.     srand (time(NULL));
  76.    
  77.     //declaration of A
  78.     for(int i = 0; i < A_size; i++){
  79.         A[i] = 0 + (rand() % 1024);
  80.     }
  81.     //declaration of B
  82.     for(int i = 0; i < B_size; i++){
  83.         B[i] = 0 + (rand() % 1024);
  84.     }
  85.     //shell sort A
  86.     ShellSort(A, A_size);
  87.     std::cout << "A:\n";
  88.     Print(A, A_size);
  89.     //quick sort B
  90.     QuickSort(B, 0, B_size - 1);
  91.     std::cout << "B:\n";
  92.     Print(B, B_size);
  93.  
  94. }
  95. void Question2(){
  96.     std::cout << "-------------------------------------------------------\n";
  97.     std::cout << "Question 2\n";
  98.     int a = 0, b = 0;
  99.     //merge
  100.     for(int c = 0; c < (A_size + B_size); c++){
  101.         if(!(a < A_size)){
  102.             C[c] = B[b];
  103.             b++;
  104.         }
  105.         else if (!(b < B_size)){
  106.             C[c] = A[a];
  107.             a++;
  108.         }
  109.         else if (A[a] <= B[b]){
  110.             C[c] = A[a];
  111.             a++;
  112.         }
  113.         else{
  114.             C[c] = B[b];
  115.             b++;
  116.         }
  117.     }
  118.     std::cout << "C:\n";
  119.     Print(C, A_size + B_size);
  120. }
  121. void Question3(int arr[], int size){
  122.     std::cout << "-------------------------------------------------------\n";
  123.     std::cout << "Question 3\n";
  124.     bool EXTREME = 0;
  125.     for(int i = 0; i < size; i++){
  126.         if(i !=0 && i != size - 1){
  127.             if(arr[i - 1] < arr[i] && arr[i] > arr[i + 1] || arr[i - 1] > arr[i] && arr[i] < arr[i + 1]){
  128.                 EXTREME = 1;
  129.                 std::cout << "extreme\n";
  130.             }
  131.         }
  132.     }
  133.     if(!EXTREME){
  134.         std::cout << "Sorted\n";
  135.     }
  136. }
  137. void Question4(int arr[], int size){
  138.     std::cout << "-------------------------------------------------------\n";
  139.     std::cout << "Question 4\n";
  140.     for(int a = 0; a < size; a++){
  141.         for(int b = 0; b < size; b++){
  142.             for(int c = 0; c < size; c++){
  143.                 for(int d = 0; d < size; d++){
  144.                     if(a !=b && b != c && c != d){
  145.                         int ab = a * b;
  146.                         int cd = c * d;
  147.                         if(ab == cd && ab != 0){
  148.                             std::cout << a << "*" << b << ":"
  149.                             << c << "*" << d << " = " << ab <<
  150.                             "\n";
  151.                         }
  152.                     }
  153.                    
  154.                 }
  155.             }
  156.         }
  157.     }
  158. }
  159. void Question5(string input){
  160.     std::cout << "-------------------------------------------------------\n";
  161.     std::cout << "Question 5\n";
  162.     bool WRONG = false;
  163.     bool numb = true; //bool to determine if next input should be number or operator;
  164.     int currnum = 0; //int to hold current working num;
  165.     int len = 0;
  166.     while (input[len] != '\0') len++;
  167.     if(isdigit(input.at(0))){
  168.         int sum = (int)(input.at(0)) - (int)('0');
  169.         for(int i = 1; i < len; i++){
  170.             if(numb){
  171.                 if(isdigit(input.at(i))){
  172.                     currnum = (int)(input.at(i)) - (int)('0');
  173.                 }else{
  174.                      WRONG = true;
  175.                 }
  176.             }else{
  177.                 //std::cout << sum << " " << input.at(i) << " " << currnum << " = ";
  178.                 switch(input.at(i)){
  179.                     case '+': sum = sum + currnum; break;
  180.                     case '-': sum = sum - currnum; break;
  181.                     case 'x': sum = sum * currnum; break;
  182.                     case '/': sum = sum / currnum; break;
  183.                     default : WRONG = true;
  184.                    
  185.                 }
  186.                 //std::cout << sum << "\n";
  187.             }
  188.             numb = !numb;
  189.         }
  190.         if(!WRONG) std::cout << "Answer = " << sum << "\n";
  191.         else std::cout << "Incorrect Syntax!\n";
  192.     }
  193.    
  194.     else {
  195.         std::cout << "First character must be a number!\n";
  196.         WRONG = true;
  197.     }  
  198. }
  199. bool Question6a(int isprime){
  200.     std::cout << "-------------------------------------------------------\n";
  201.     std::cout << "Question 6a\n";
  202.     bool prime = true;
  203.     int half = isprime / 2;
  204.     for(int i = 2; i < half; i++){
  205.         int math = isprime % i;
  206.         if(math == 0){
  207.             prime = false;
  208.         }
  209.     }
  210.    
  211.     prime?(std::cout << isprime << " is prime\n"):
  212.     (std::cout << isprime << " is not prime\n");
  213.     return prime;
  214. }
  215. bool Question6b(int isprime){
  216.     std::cout << "-------------------------------------------------------\n";
  217.     std::cout << "Question 6b\n";
  218.     int list[isprime];
  219.     for(int i = 2; i < isprime + 1; i++){
  220.         list[i] = i;
  221.     }
  222.     for(int i = 1; i < isprime + 1; i++){
  223.         if(list[i] != 0){
  224.             for(int j = i+1; j < isprime + 1; j++){
  225.                 int math = list[j] % list[i];
  226.                 if(math == 0){
  227.                     list[j] = 0;
  228.                 }
  229.             }
  230.         }
  231.     }
  232.     if(list[isprime] != 0) {
  233.         std::cout << isprime << " is prime\n";
  234.     }else{
  235.         std::cout << isprime << " is not prime\n";
  236.     }
  237.     if(list[isprime] != 0)return true;
  238.     else return false;
  239. }
  240. void Question7(){
  241.    
  242. }
  243. void Question8(int newt){
  244.     std::cout << "-------------------------------------------------------\n";
  245.     std::cout << "Question 8\n";
  246.     double diff = 1;
  247.     double out = newt / 2.0;
  248.     double old;
  249.     while(diff > 0.001){
  250.         old = out;
  251.         out = 0.5 * (out + (newt / out));
  252.         diff = out - old;
  253.         if(diff<0.0) diff =- diff;
  254.     }
  255.     std::cout << "Root of " << newt << " is " << out << "\n";
  256. }
  257. void Question9(int list[], int size){
  258.     std::cout << "-------------------------------------------------------\n";
  259.     std::cout << "Question 9\n";
  260.     int repeated[size];
  261.     int j = 0;
  262.     for(int i = 0; i < size; i++){
  263.         for(int k = i; k < size; k++){
  264.             bool in = contains(list[k], repeated, j);
  265.             if(!in){
  266.                 if(list[i] == list[k]){
  267.                     repeated[j] = list[i];
  268.                     j++;
  269.                 }
  270.             }
  271.         }
  272.     }
  273.     Print(repeated, j);
  274. }
  275. void Question10(int list[], int size){
  276.     std::cout << "-------------------------------------------------------\n";
  277.     std::cout << "Question 10\n";
  278.     int maxi = FindMax(list, size);
  279.     std::cout << "Max is " << maxi << "\n";
  280. }
  281. void Question11(char f, int in, int n){
  282.     std::cout << "-------------------------------------------------------\n";
  283.     std::cout << "Question 11\n";
  284.     switch(f){
  285.         case 's': std::cout << sine(in, n) << "\n"; break;
  286.         case 'c': std::cout << cosine(in, n) << "\n"; break;
  287.         default: std::cout << "Please select sine (s) or cosine (c)\n";
  288.     }
  289. }
  290. void Question12( int n){
  291.     std::cout << "-------------------------------------------------------\n";
  292.     std::cout << "Question 12\n";
  293.     int sum = 1;
  294.     int old = 1;
  295.     int oldR = 0;
  296.     for (int i = 0; i < n+1; i++){
  297.         if(i > 0) {
  298.             if(i > 1) {
  299.                 int temp = old;
  300.                 old = old + oldR;
  301.                 sum+= old;
  302.                 oldR = temp;
  303.             }
  304.         }
  305.     }
  306.     std::cout<<"Sum of first " << n << " fib numbers = "<<sum<<"\n";
  307. }
  308. void ShellSort(int list[], int size){
  309.     for (int i = size / 2.0; i > 0; i = i / 2.0){
  310.         for (int j = i; j < size; j++){
  311.             int k = j, temp = list[j];
  312.             while((k>i-1) && (list[k-i] > temp)){
  313.                 list[k] = list[k-i];
  314.                 k = k-i;
  315.             }
  316.         list[k] = temp;
  317.         }
  318.     }
  319. }
  320. void QuickSort(int list[], int lower, int upper){
  321.     if (upper - lower > 0) {
  322.         int center = Split(list, lower, upper);
  323.         QuickSort(list, lower, center - 1);
  324.         QuickSort(list, center + 1, upper);
  325.     }
  326. }
  327. int Split (int list[], int lower, int upper){
  328.     int L = list[upper];
  329.     int OIndex = (lower - 1);
  330.     for (int j = lower; j <= upper-1; j++) {
  331.         if (list[j] <= L) {
  332.             OIndex++;
  333.             int temp = list[OIndex];
  334.             list[OIndex] = list[j];
  335.             list[j] = temp;
  336.         }
  337.     }
  338.     int NIndex = OIndex+1;
  339.     int temp = list[NIndex];
  340.     list[NIndex] = list[upper];
  341.     list[upper] = temp;
  342.     return (NIndex);
  343. }
  344. void Print(int list[], int size) {
  345.      
  346.     for (int i = 0; i < size; i++) {
  347.         std::cout << list[i] << "\t";
  348.     }  
  349.     std::cout << "\n";
  350. }
  351. bool contains(int check, int list[], int size){
  352.     bool out = false;
  353.     for(int i = 0; i < size; i++){
  354.         if(check == list[i]){
  355.             out = true;
  356.             break;
  357.         }
  358.     }
  359.     return out;
  360. }
  361. int FindMax(int list[], int size){
  362.     if(size != 1){
  363.         if(list[size-1] > FindMax(list, size - 1)){
  364.             return list[size-1];
  365.         }else{
  366.             return FindMax(list, size - 1);
  367.         }
  368.     }
  369.     else return list[0];
  370. }
  371. int Factorial(int n){
  372.     int out = 1;
  373.     for(int i = n; i > 0; i--){
  374.         out = out * i;
  375.     }
  376.     return out;
  377. }
  378. double sine(int in, int n){
  379.     double sum = in;
  380.     bool negs = true;
  381.     for(int i = 0; i < n; i++){
  382.         int num = 3 + 2*i;
  383.         double math = pow(in,(num)) / Factorial(num);
  384.         if(negs)sum = sum - math;
  385.             else sum = sum + math;
  386.         negs = !negs;
  387.     }
  388.     return sum;
  389. }
  390. double cosine(int in, int n){
  391.     double sum = 1;
  392.     bool negc = true;
  393.     for(int i = 0; i < n; i++){
  394.         int num = 2 + 2*i;
  395.         double math = pow(in,(num)) / Factorial(num);
  396.         if(negc)sum = sum - math;
  397.         else sum = sum + math;
  398.         negc = !negc;
  399.     }
  400.     return sum;
  401. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement