0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 139
1

Вычислить количество элементов массива расположенных между элементами имеющими заданные значения

31.03.2021, 17:28. Показов 2338. Ответов 19

Author24 — интернет-сервис помощи студентам
Вычислить количество элементов массива, лежащих в диапазоне от А до В.
Массив состоит из вещественных чисел (они могут быть и положительные и отрицательный).

Вот набросала функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
int numberOfElem(double arr[], int N, double start, double finish)
{
    int number = 0;
    for(int i = 0; i < N; i++){
        if(arr[i] >= start && arr[i] <= finish)
                {
            number++;
        }
    }
    return number;
}
Но он не правильно определяет количество (скрин).
Как переделать код, чтоб правильно вычисляло?
Благодарю заранее
Миниатюры
Вычислить количество элементов массива расположенных между элементами имеющими заданные значения  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2021, 17:28
Ответы с готовыми решениями:

Вычислить сумму и количество элементов массива, расположенных между первым и последним нулевыми элементами
В одномерном массиве, состоящем из n целых элементов, вычислить сумму и количество элементов...

Вычислить произведение элементов массива, расположенных между элементами
В одномерном массиве, состоящем из N целых элементов, вычислить: Произведение элементов массива,...

Подсчитать количество четных элементов массива, расположенных между наибольшим и наименьшим элементами массива
Помогите мне решить эти 4 задачки по Паскалю,а то не получается у меня её решить(( 2)Дан...

Для массива вычислить произведение элементов массива, расположенных между максимальным и минимальными элементами
Для одномерного массива вычислить произведение элементов массива, расположенных между максимальным...

19
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
31.03.2021, 17:32 2
Цитата Сообщение от Ekaterina 12 Посмотреть сообщение
Но он не правильно определяет количество (скрин).
Почему неправильно? 4 элемента из заданного диапазона в массиве.
0
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
31.03.2021, 17:35 3
Можна полностю код програми , а то у меня все работает

Добавлено через 1 минуту
woolfskinny, там 3
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 139
31.03.2021, 17:36  [ТС] 4
woolfskinny, возможно я плохо смотрю, но [-0.5; -0.6; 0.5] - 3 элемента
0
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
31.03.2021, 17:37 5
Ekaterina 12, полностю код можете кинуть?
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 139
31.03.2021, 17:42  [ТС] 6
matviiv ,
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using namespace std;
 
//Функция для заполнения массива значениями
void fillingArr(double arr[], int N)
{   cout << "Исходный массив: ";
    for(int i = 0; i < N; i++)
    {
        arr[i] = 0.1*(rand()%21-10); //заполнение массива случаными вещественными числоми
        cout << arr[i] << "  ";  
    }
  cout << endl;  
}
 
//Подсчет количества элементов, лежащих в определенных границах
int numberOfElem(double arr[], int N, double start, double finish)
{
    int number = 0; //начальное значение количества элементов
    for(int i = 0; i < N; i++){
        if(arr[i] >= start && arr[i] <= finish)
                {
            number++;
        }
    }
    return number;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    //N - количество элементов в массиве вещественных чисел
    //start - начало диапозона
    //finish - конец диапозона
    int N;
    int k=1;
    double start = 0.0, finish = 0.0; 
        cout << "Укажите количество вещественных элементов: ";
        cin >> N;
         //Выделение памяти под массив размером N
    double* arr = new double[N];   
 while (k!=3)
 {system("cls");
  cout<<"1.Заполнение массива"<<endl;
  cout<<"2.Подсчета количества элементов, лежащих в указанных границах"<<endl;
  cout<<"3.Выход"<<endl;
  cin>>k;
  switch(k)
  {
  case 1: { 
        //Вызов функции заполнения массива значениями
        fillingArr(arr, N);              
               system("pause");
          break;
             }
             
  case 2: { 
            cout << "Исходный массив: ";
                for(int i = 0; i < N; i++)
                { 
             cout << arr[i] << "  ";  
                }
            cout << endl; 
            cout << "Введите начальное значение диапозона: "; cin >> start;
                    cout << "Введите конечное значение диапозона: "; cin >> finish;
                    //Вызов функции подсчета количества элементов, лежащих в указанных границах
                   cout << "Количества элементов, лежащих на отрезке [" << start << ";" << finish << "]: " << numberOfElem(arr, N, start, finish) << endl;
            
            system("pause");
          break;
             }
  }//switch
  }//while  
    delete [] arr;
    system("PAUSE");
    return 0;
}
0
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
31.03.2021, 17:42 7
Да нашел еще один баг,когда от 0 к -0.1 например то 0 всегда
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 139
31.03.2021, 17:53  [ТС] 8
matviiv, какое условие нужно сделать, чтоб правильно вычислялось?
0
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
31.03.2021, 17:53 9
Ekaterina 12, щас пробую
0
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
31.03.2021, 18:04 10
Цитата Сообщение от Ekaterina 12 Посмотреть сообщение
возможно я плохо смотрю, но [-0.5; -0.6; 0.5] - 3 элемента
А, я неправильно понял условие. Тогда вот, попробуйте:

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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
void Input(int* &A, int N)
{
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }
}
 
int Counter(int* A, int N, int a, int b)
{
    int start = -1, end = -1, check = 0;
    for (int i = 0; i < N; i++) {
        if (A[i] == a && check == 0) {
            start = i;
            check++;
        }
        else if (A[i] == b && check == 1) {
            end = i;
            check++;
        }
    }
    
    int count = 0;
    if (start != -1 && end != -1) {
        for (int i = start+1; i < end; i++) {
            count++;
        }
    }
    return count;
}
 
int main()
{
    int n; cin >> n;
    int* a = new int[n];
    int A, B; cin >> A >> B;
    
    Input(a, n);
    cout << "\n\nCount: " << Counter(a, n, A, B);
    
    delete[] a;
    
    system("pause");
    return 0;
}
Ввод с консоли, если что сможете переделать под себя, я думаю.
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 139
01.04.2021, 08:49  [ТС] 11
woolfskinny, всё равно не правильно считает, A и B - вещественные значения, и не обязательно диапазон от -1 до 1
0
126 / 83 / 44
Регистрация: 18.11.2018
Сообщений: 299
01.04.2021, 14:20 12
Цитата Сообщение от Ekaterina 12 Посмотреть сообщение
всё равно не правильно считает,
А, я границы не включил в цикле при расчете. Попробуйте так:

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
#include <iostream>
 
using namespace std;
 
void Input(double* &A, int N)
{
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }
}
 
int Counter(double* A, int N, double a, double b)
{
    int start = -1, end = -1, check = 0;
    for (int i = 0; i < N; i++) {
        if (A[i] == a && check == 0) {
            start = i;
            check++;
        }
        else if (A[i] == b && check == 1) {
            end = i;
            check++;
        }
    }
    
    int count = 0;
    if (start != -1 && end != -1) {
        for (int i = start; i <= end; i++) {
            count++;
        }
    }
    return count;
}
 
int main()
{
    int n; cin >> n;
    double* a = new double[n];
    double A, B; cin >> A >> B;
    
    Input(a, n);
    cout << "\n\nCount: " << Counter(a, n, A, B);
    
    delete[] a;
    
    system("pause");
    return 0;
}
Ваш пример во вложении.
Миниатюры
Вычислить количество элементов массива расположенных между элементами имеющими заданные значения  
1
2523 / 1243 / 459
Регистрация: 08.11.2016
Сообщений: 3,412
01.04.2021, 16:10 13
Лучший ответ Сообщение было отмечено Ekaterina 12 как решение

Решение

Тоже вариант
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
int find_idx(double *arr, int N, double val)
{
    for (int i = 0; i < N; ++i)
    {
        if (fabs(arr[i] - val) < 1e-6)
            return i;
    }
 
    return -1;
}
 
int main()
{
    int n;
    std::cin >> n;
    double *arr = new double[n];
    for (int i = 0; i < n; ++i)
        std::cin >> arr[i];
 
    double a, b;
    std::cin >> a >> b;
 
    int a_idx = find_idx(arr, n, a);
    int b_idx = find_idx(arr, n, b);
 
    if (a_idx < 0 || b_idx < 0)
        std::cout << "One or both range value is not found in array" << std::endl;
    else
        std::cout << abs(a_idx - b_idx) + 1 << std::endl;
 
    delete arr;
 
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
5164 / 2889 / 1498
Регистрация: 14.12.2018
Сообщений: 5,225
Записей в блоге: 1
01.04.2021, 16:51 14
Цитата Сообщение от Annemesski Посмотреть сообщение
1e-6
С типом double ли хватает для оценить их равенство ? По-моему надо 1e-15 (примерно такой). Может быть 1e-6 соответствует только типу float.
1
2523 / 1243 / 459
Регистрация: 08.11.2016
Сообщений: 3,412
01.04.2021, 17:36 15
Volga_, тут числа вводятся пользователем с клавиатуры, а это, как првавило, 3 - 4 разряда дробной части - не вижу смысла раздувать точность.
0
Модератор
Эксперт CЭксперт С++
5164 / 2889 / 1498
Регистрация: 14.12.2018
Сообщений: 5,225
Записей в блоге: 1
01.04.2021, 17:54 16
Цитата Сообщение от Annemesski Посмотреть сообщение
тут числа вводятся пользователем с клавиатуры
Это может быть смысла от вас, я понял. Но по-моему вообще при использовании типа double повышение точности нужно соответственно чем при float. Однако, в этой задаче согласен с вами о такой точности.
1
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
02.04.2021, 07:43 17
Ekaterina 12, -0.5 0.5 -0.2 0.2, все попадают в [-0.5; 0.5], что не так ?
0
0 / 0 / 0
Регистрация: 13.10.2020
Сообщений: 139
02.04.2021, 09:11  [ТС] 18
Новичок, а мне надо, чтобы считалось [-0, 5; -0, 6; 0,5]

Добавлено через 22 минуты
Annemesski, спасибо большое! Заработало. Можешь немного пояснить код, тип как это находится?!

Добавлено через 8 секунд
Annemesski, спасибо большое! Заработало. Можешь немного пояснить код, тип как это находится?!
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
02.04.2021, 09:15 19
Цитата Сообщение от Ekaterina 12 Посмотреть сообщение
Вычислить количество элементов массива, лежащих в диапазоне от А до В.
Странно, что в задании вот это написано.
0
2523 / 1243 / 459
Регистрация: 08.11.2016
Сообщений: 3,412
02.04.2021, 09:28 20
Цитата Сообщение от Ekaterina 12 Посмотреть сообщение
как это находится?!
Элементарно:
1. функция int find_idx(double *arr, int N, double val) ищет в массиве вещественных чисел элемент по значению и, если находит, то возвращает его индекс, иначе - если в массиве нет элемента с таким значением - возвращает -1 как маркер ошибки.
2. далее с помощью этой же функции определяются индексы элементов границ диапазона и если оба индекса найдены, то ответом будет модуль разности найденных индексов увеличенный на единицу, так как сами элементы границ диапазона включены в сам диапазон.
0
02.04.2021, 09:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2021, 09:28
Помогаю со студенческими работами здесь

Найти количество элементов, расположенных между максимальным и минимальным элементами массива
Нужна блок-схема и программа Дан массив X(N). Найти количество элементов, расположенных между...

Найти количество элементов массива, расположенных между минимальным и максимальным элементами
В одномерном массиве, состоящем из вещественных элементов, вычислить: А) произведение элементов...

Подсчитать количество элементов массива, расположенных между первым и минимальным элементами
1.Подсчитать количество элементов массива, расположенных между первым и минимальным элементами.

Вычислить сумму отрицательных элементов массива и произведение элементов, расположенных между максимальным и минимальным элементами
Помогите пожалуйста в одномерном массиве, состоящих из вещественных элементов вычислить: 1)сумму...

Вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами
В одномерном массиве, состоящем из 10 целых элементов, вычислить произведение элементов массива,...

Вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; const int N=4; int main() { int mas={1, 2,3,4,};...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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