Advertisement
Xom9ik

Course work (Task 35-2)

Mar 24th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. //Course work (Task 35-2)
  2. #include "stdafx.h"
  3. #include <locale>
  4. #include <iostream>
  5. #include <windows.h>
  6.  
  7. using namespace std;
  8.  
  9. int find_norecursion(int *massiv, int size, int key)
  10. {
  11.     bool f = true;
  12.     for (int i = 0; i < size; i++)
  13.     {
  14.         if (massiv[i] == key)
  15.             return i;
  16.         else
  17.             f = false;
  18.     }
  19.     if (f == false)
  20.         return -1;
  21. }
  22.  
  23. int find_recursion(int* massiv, int size, int key)
  24. {
  25.     if (size == 0)
  26.         return -1; // Не найден
  27.     if (massiv[size - 1] == key)
  28.         return size - 1; // Искомый элемент найден     
  29.     return find_recursion(massiv, size - 1, key); // Иначе ищем его среди (size-1) элементов
  30. }
  31.  
  32. void find_message(int* array, int idx)
  33. {
  34.     if (idx < 0)
  35.         cout << "\nЧисло не найдено в списке" << endl;
  36.     else
  37.         cout << "\nЧисло " << array[idx] << " с индексом [" << idx+1 << "] найдено в списке " << endl;
  38. }
  39.  
  40. int main()
  41. {
  42.     setlocale(0, "Russian");
  43.     SetConsoleCP(1251);
  44.     SetConsoleOutputCP(1251);
  45.     srand(time(NULL));
  46.     cout << "35.Перевірити наявність у списку заданого числа за допомогою рекурсивної і нерекурсівної функцій" << endl;
  47.     while (1)
  48.     {
  49.         int size, key;
  50.         cout << "Введите размерность списка: ";
  51.         while (!(cin >> size) || (cin.peek() != '\n') || size < 0) //проверка на корректность ввода
  52.         {
  53.             cin.clear();
  54.             while (cin.get() != '\n');
  55.             cout << "Введено недопустимое значение. Повторите попытку." << endl;
  56.         }
  57.  
  58.         int *massiv = new int[size];
  59.  
  60.         cout << "Список => ";
  61.         for (int i = 0; i < size; i++) //заполнение списка
  62.         {
  63.             massiv[i] = -100 + rand() % 100;
  64.             cout << massiv[i] << " ";
  65.         }
  66.         cout << "\nВведите число, которое необходимо найти в списке: ";
  67.         while (!(cin >> key) || (cin.peek() != '\n')) //проверка на корректность ввода
  68.         {
  69.             cin.clear();
  70.             while (cin.get() != '\n');
  71.             cout << "Введено недопустимое значение. Повторите попытку." << endl;
  72.         }
  73.         clock_t start_norecursion, end_norecursion, start_recursion, end_recursion;
  74.         start_norecursion = clock();
  75.         cout << "\nПоиск числа без рекурсии: ";
  76.         int idx_norecursion = find_norecursion(massiv, size, key);
  77.         find_message(massiv, idx_norecursion);
  78.         end_norecursion = clock();
  79.         cout << "Без рекурсии для поиска затрачено " << ((double)end_norecursion - start_norecursion) / ((double)CLOCKS_PER_SEC) << " секунд" << endl;
  80.        
  81.         start_recursion = clock();
  82.         cout << "\nПоиск числа с помощью рекурсии: ";
  83.         int idx_recursion = find_recursion(massiv, size, key);
  84.         find_message(massiv, idx_recursion);
  85.         end_recursion = clock();
  86.         cout << "С рекурсией для поиска затрачено " << ((double)end_recursion - start_recursion) / ((double)CLOCKS_PER_SEC) << " секунд" << endl;
  87.  
  88.         system("pause");
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement