Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 28.09.2013
Сообщений: 116
1

Подсчет количества сравнений алгоритма поиска

19.03.2018, 22:10. Показов 4727. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Условие задачи: Дан одномерный массив А из n элементов. Определить, существует ли элемент, равный сумме всех последующих за ним элементов.
Помогите исправить подсчет количества операций поиска
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>  
#include<locale>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
void exist(const long int &, const long int&, const long int *);       //Определяет существование элемента, который равен сумме всех следующих
long int b,i,k;
 
int main()
{
    setlocale(0, "rus");
    cout << " Введите ключ :  "; 
    cin >> b;
    cout << " Введите количество элементов массива ";
    cin >> k;
    long int *A = new long int[k];
    cout << " Массив чисел \n";
        for (i = 0;i < k;i++)
        {
            cout << " ";
            cin >> A[i];
        }
    cout << endl;
    exist(b,k,A);
    delete[]A;
    system("pause");
    return 0;
}
 
void exist(const long int& t, const long int& r , const long int *G) 
{
    long int sum = 0, i, j; //tmp =*G
    bool f = 1;
    long int p_e = 0;    
    cout << " \n 3). Ищем элемент, равный сумме следующих за ним: \n\n";//Существует ли элемент, равный сумме всех последующих за ним элементов
    for (i = 0; i < r; i++)
    {
        for (j = i+1; j < r; j++)
            sum += *(G + j);
        if (*(G + i) == sum)
        {
            cout << " Элемент A[" << i << "] равен сумме следующих за ним элементов \n";
            f = 0;
            break;
        }
        else p_e++;//неправильно осуществляется подсчет количества операций
        sum = 0 ;
    }   
    if (f) cout << "\n Такого ключа нет ";
    cout<<"\n Количество операций = "<<p_e<<endl;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2018, 22:10
Ответы с готовыми решениями:

Подсчет количества обменов и сравнений в алгоритмах сортировки
Помогите как в алгоритмах сортировки: простыми включениями (простой вставкой),методом пузырька...

Быстрая сортировка, неправильный подсчет количества сравнений и перестановок
Сортирует верно (по убыванию элементов в строке), а кол-во сравнений и перестановок выдает ошибочно...

Куда в программе добавить счетчик для поиска количества перестановок и сравнений?
void InsertSort(int *mas, int N) //сортировка вставками { int i,key=0,temp=0; int...

Двоичное дерево поиска: подсчет количества элементов в дереве
Помогите написать программу. Описать структуры данных, процедуры и функции, необходимые для работы...

4
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
19.03.2018, 22:31 2
Лучший ответ Сообщение было отмечено BARS08 как решение

Решение

Само сравнение происходит всегда, а значит внутри условия необходимо увеличивать счетчик тоже.
C++
1
2
3
4
5
6
7
        if (*(G + i) == sum)
        {
            cout << " Элемент A[" << i << "] равен сумме следующих за ним элементов \n";
            f = 0;
            p_e++;
            break;
        }
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
20.03.2018, 12:01 3
SuperKir, BARS08, создай класс Int и реализуй для него операцию сравнения, которая увеличивает счетчик.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
template<typename T>
struct Int 
{
    Int(T const value_) : value{value_}, counter{0} { }
    bool operator==(T other) { ++counter; return value == other; }
    size_t get_counter() const { return counter; }
 
  private:
    T value;
    size_t counter;
};
 
template<typename T>
bool operator==(T lhs, Int<T>& rhs) { return rhs == lhs; }
 
int main() {
    Int<long> sum = 2;
    if (sum == 0L) std::cout << "Something wrong" << std::endl;
    if (2L == sum) std::cout << "Everything good" << std::endl;
    std::cout << sum.get_counter() << std::endl;
}
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
20.03.2018, 18:03 4
outoftime, Человек в задаче с массивом и условием запутался, а ты предлагаешь ему еще перегрузки и шаблоны сунуть?)
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
21.03.2018, 20:32 5
SuperKir, при таком подходе используется разделение ответсвенности и уменьшение связности, что положительно влияет на понимание происходяещего.
0
21.03.2018, 20:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2018, 20:32
Помогаю со студенческими работами здесь

Функция: подсчет количества сравнений чисел, выполняемых при операциях сортировки/поиска
Подсчет количества сравнений чисел, выполняемых при операциях сортировки, многократного линейного и...

Подсчет количества сравнений в бинарном поиске
Здравствуйте.Нужно подсчитать общее количество сравнений в бинарном поиске. #include &lt;stdio.h&gt;...

Сортировке Шейкера (подсчет количества сравнений и обменов)
Здравствуйте, пожалуйста, помогите исправить ошибку в сортировке Шейкера (подсчет количества...

Программа подсчёта количества обменов и сравнений алгоритма сортировки вставками
Нужно написать программу со счётчиками,которые выводят числа,которые обозначают количества обменов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru