Форум программистов, компьютерный форум CyberForum.ru

Вычислить количество элементов массива, лежащих в диапазоне от А до В - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 403
17.02.2014, 16:29     Вычислить количество элементов массива, лежащих в диапазоне от А до В #1
Добрый вечер, дорогие друзья. Прошу у вас помощи с программой:

Методические указания

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

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество элементов массива, лежащих в диапазоне от А до В;

2) сумму элементов массива, расположенных посте максимального элемента.

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
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
// lab_12.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
 
// 1212.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
 
/*
Ввод и вывод массива, а также три пункта задания оформить в виде функций, глобальные переменные не использовать.
Размерности массивов вводить в основной функции. Первый массив описать статически (размерность задать константой), второй динамически
Все результаты данных функций выводятся в основной функции.
Задание
Ввести и обработать два одномерных массива, содержащие соответственно п целых и m вещественных компонентов. Вычислить:
1) количество элементов массива, лежащих в диапазоне от А до В;
2) сумму элементов массива, расположенных после максимального элемента.
3) Упорядочить элементы массива по убыванию модулей элементов.
*/
#include <iostream>
#include <math.h>
#include <stdio.h>
//#include <time.h>
#include <stdlib.h>     //подключение необходимых библиотек
using namespace std;
 
//void Random(float *arr, size_t size);
void Out(float *arr, size_t size);
void In(float *arr, size_t size);
int Z1(float *arr, size_t size, int a, int b);
int SAM(float *arr, size_t size);
void Sort(float *arr, size_t size);
                                                //прототипы функций(сами функции внизу)
int main()
{
 
int N;  //размерность массива
int a,b;    //переменные задания 1
cout<<"size array:= "; cin>>N;      //вводим размерность массива
float brr[N];    //массив
cout<<"!!!a<b!!!"<<endl;
cout<<"a= ";cin>>a; cout<<"b= ";cin>>b;                 //ввод переменных для 1 задания
 
 
 
In(brr,N);                      //вызов функции ввода массива
cout<<endl;
Out(brr,N);                     //функция вывода массива
cout<<"from a to b number: "<<Z1(brr,N,a,b)<<" element"<<endl;        //функция 1 задания
cout<<"sum after maximal element = "<<SAM(brr,N)<<endl;             //функция задания 2
Sort(brr,N);         //вызов функции 3 задания
Out(brr,N);         //вызов функции вывода массива
// С массивом , заданным динамически закончено, теперь с массивом заданным статически (размерность задать константой)
int m; m=6;         //задаем размерность статически, переменной m
int a1, b1;         //те же самые а и b, только для второго массива
cout<<"size array:= "<<m<<endl;
float crr[m];       //массив
 
cout<<"!!!a<b!!!"<<endl;
cout<<"a= ";cin>>a1; cout<<"b= ";cin>>b1;    //ввод границ а и b
In(crr,m);                      //вызов функции ввода массива
cout<<endl;
Out(crr,m);                     //вызов функции вывода массива
 
cout<<"from a to b number: "<<Z1(crr,m,a1,b1)<<" element"<<endl;        //вызов функции 1 задания
cout<<"sum after maximal element = "<<SAM(crr,m)<<endl;             //вызов функции задания 2
Sort(crr,m);            //вызов функции 3 задания
Out(crr,m);             //вызов функции вывода массива
 
return 0;
}
//////////////////////////////////////////////////////////////////
/*
void Random(float *arr, size_t size)
            {
 
                    srand(static_cast<unsigned int>(time(NULL)));   //организовываем инициализацию генератора рандомных чисел
                    for (int i=0; i< size ; i++)                        //перебор значений от 0 до N
                    {
 
                    arr[i] = rand() %10 *1560;                       //организовываем инициализацию генератора рандомных чисел
                    cout<<"arr["<<i<<"]: "<<arr[i]<<" "<<endl;   //вывод на экран всех членов массива с номером
                    }
                    cout<<endl;                                              //заполнение массива рандомом.
            }
*/
////////////////////////////////////////////////////////////////////////////////////////////////
void Out(float *arr, size_t size)   //функция вывода массива
    {
 
                    for (int i=0; i< size; i++)                        //перебор значений от 0 до N
                    {
 
 
                    cout<<"arr["<<i<<"]: "<<arr[i]<<" "<<endl;   //вывод на экран всех членов массива с номером
                    }
                    cout<<endl;
    }
////////////////////////////////////////////////////////////////////////////////////////////////////
void In(float *arr, size_t size)    //функция ввода в масив
    {
 
        for(int i=0; i< size;i++)
        {
 
        cout<<"arr["<<i<<"]: ";
        cin>>arr[i];
        }
    }
////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Z1(float *arr, size_t size, int a, int b)       //функция ищет количество элементов массива, лежащих в диапазоне от А до В;
    {
        int j; j=0;
        for(int i=0; i< size;i++)
        {
            if(arr[i]>=a && arr[i]<=b)
            {
                j++;
            }
        }
        return j;
    }
////////////////////////////////////////////////////////////////////////////////////////////////////////
int SAM(float *arr, size_t size)            //функция считает сумму элементов массива, расположенных после максимального элемента.
        {
            int maxpos=0; int sum=0;
            float tekmax=0;
            for(int i=0; i< size; i++)         //перебор значений от 0 до N
                {
                    if(arr[i]>tekmax)     //если текущий элемент массива больше 0, то переменной tekmax присваевается это значние, а вторая переменная maxpos запоминает номер эл-та, таким образом мы находим максимальный элемент и его номер
                    {
                        tekmax = arr[i];
                        maxpos = i;
                    }
                }
            for(int i=maxpos+1; i< size; i++)
                {
                    sum+= arr[i];
                }
 
            return sum;
        }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Sort(float *arr, size_t size)  //функция сортировка по убыванию
    {
        for(int i=0;i<size;i++)
        for(int j=size-1;j>i;j--)
          if (abs(arr[j-1])<abs(arr[j]))
           {
              int x=arr[j-1];
              arr[j-1]=arr[j];
              arr[j]=x;
           }
    }
//////////////////////////////////////////////////////////////////////////////////////////////
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 16:29     Вычислить количество элементов массива, лежащих в диапазоне от А до В
Посмотрите здесь:

Найти количество элементов массива, лежащих в диапазоне от А до В C++
Найти сумму элементов массива каждой строки, лежащих в диапазоне от А до В (ввод с клавиатуры) C++
C++ количество элементов массива, лежащих в диапазоне от a до b (функции)
Вычислить количество элементов массива, лежащих в диапазоне от А до В C++
C++ Вычислить количество элементов массива, лежащих в диапазоне от А до B
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
17.02.2014, 16:36     Вычислить количество элементов массива, лежащих в диапазоне от А до В #2
Цитата Сообщение от avatar1870 Посмотреть сообщение
C++
1
2
3
int SAM(float *arr, size_t size)  //функция считает сумму элементов массива, расположенных после максимального элемента.
  {
  int maxpos=0; int sum=0;
Попробуй так
C++
1
2
3
int SAM(float *arr, size_t size) //функция считает сумму элементов массива, расположенных после максимального элемента.
 {
  int maxpos=0; float sum=0.0;
Добавлено через 55 секунд
Цитата Сообщение от avatar1870 Посмотреть сообщение
C++
1
2
3
int x=arr[j-1];
  arr[j-1]=arr[j];
  arr[j]=x;
и здесь тоже:
C++
1
2
3
float x=arr[j-1];
  arr[j-1]=arr[j];
  arr[j]=x;
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 403
17.02.2014, 16:54  [ТС]     Вычислить количество элементов массива, лежащих в диапазоне от А до В #3
Не хочет всё-равно
Миниатюры
Вычислить количество элементов массива, лежащих в диапазоне от А до В  
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,714
Записей в блоге: 3
17.02.2014, 19:13     Вычислить количество элементов массива, лежащих в диапазоне от А до В #4
С шаблонами, если подойдёт:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
template<class T>
int number_within_the_limmmits(T *arr, size_t arr_sz, T left, T right){
if(left>right){
T tmp_i = left;
left = right;
right = tmp_i;
    }
int number_whithin = 0;
for(size_t i = 0; i < arr_sz; ++i)
if(arr[i] >= left && arr[i] <= right) number_whithin++;//включая границы
return number_whithin;
}
 
template<class T>
int ind_of_max_element(T *arr, size_t arr_sz){
int ind_of_max=0;
T max_element = arr[ind_of_max];
for(size_t i = 1; i < arr_sz; ++i){
    if(max_element < arr[i]){
        max_element = arr[i];
ind_of_max = i;
    }
}
return ind_of_max;
}
 
template<class T>
T summ_arr_after_max(T *arr, size_t arr_sz){
int ind_of_max=ind_of_max_element(arr,  arr_sz);
T summ_after_max = 0;
for(size_t i = ind_of_max+1; i < arr_sz; ++i)
summ_after_max += arr[i];
return summ_after_max;
}
 
template<class T>
T abs_T(T a){
    return (a >= 0)? a : -a;
}
 
template<class T>
void Sort_arr(T *arr, size_t size)  //функция сортировка по убыванию
    {
        for(size_t i=0;i<size;i++)
        for(size_t j=size-1;j>i;j--)
          if (abs_T(arr[j-1])<abs_T(arr[j]))
           {
              T x=arr[j-1];
              arr[j-1]=arr[j];
              arr[j]=x;
           }
    }
 
int main(){
 
const int n = 6;
int source_stat_arr[n] = {
        12, 123,   24, 112, -101, 55
    };
cout<<"source arrays"<<endl;
for(int i = 0; i < n; ++i)cout<<source_stat_arr[i]<<" ";
cout<<endl<<endl;
float *source_dyn_arr = new float[n];
for(int i = 0; i < n; ++i)source_dyn_arr[i] = source_stat_arr[i]/10.0f;//один из другого /10 
for(int i = 0; i < n; ++i)cout<<source_dyn_arr[i]<<" ";
cout<<endl<<endl;
 
cout<<"between 15...112 and 1,5...11.2"<<endl;
cout<<number_within_the_limmmits(source_stat_arr, n, 15, 112)<<endl;//числа 15 и 112 - пределы (от фонаря)
cout<<number_within_the_limmmits(source_dyn_arr, n, 1.5f, 11.2f)<<endl;//числа 15 и 112 - пределы (от фонаря)
cout<<"summs after max"<<endl;
cout<<summ_arr_after_max(source_stat_arr, n)<<endl;
cout<<summ_arr_after_max(source_dyn_arr, n)<<endl;
cout<<endl<<endl;
Sort_arr(source_stat_arr, n);
cout<<"sorted"<<endl;
for(int i = 0; i < n; ++i)cout<<source_stat_arr[i]<<" ";
cout<<endl<<endl;
Sort_arr(source_dyn_arr, n);
for(int i = 0; i < n; ++i)cout<<source_dyn_arr[i]<<" ";
cout<<endl<<endl;
 
cout<<endl<<endl;
system("pause");
return 0;
}
Только, если литералы в параметры передаёте, то либо с суффиксами либо, явно приводите.
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 403
17.02.2014, 22:23  [ТС]     Вычислить количество элементов массива, лежащих в диапазоне от А до В #5
ой, мы ещё до такого не дошли, не примут у меня такой код(
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,714
Записей в блоге: 3
17.02.2014, 23:25     Вычислить количество элементов массива, лежащих в диапазоне от А до В #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от avatar1870 Посмотреть сообщение
ой, мы ещё до такого не дошли, не примут у меня такой код(
если объясните, как работает, - примут. И наградят персональным отрезом на костюм.
В любом случае можно и вручную перегрузить:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
 
int number_within_the_limmmits(int *arr, size_t arr_sz, int left, int right){
if(left>right){
int tmp_i = left;
left = right;
right = tmp_i;
    }
int number_whithin = 0;
for(size_t i = 0; i < arr_sz; ++i)
if(arr[i] >= left && arr[i] <= right) number_whithin++;//включая границы
return number_whithin;
}
 
int number_within_the_limmmits(float *arr, size_t arr_sz, float left, float right){
if(left>right){
float tmp_i = left;
left = right;
right = tmp_i;
    }
int number_whithin = 0;
for(size_t i = 0; i < arr_sz; ++i)
if(arr[i] >= left && arr[i] <= right) number_whithin++;//включая границы
return number_whithin;
}
 
int ind_of_max_element(int *arr, size_t arr_sz){
int ind_of_max=0;
int max_element = arr[ind_of_max];
for(size_t i = 1; i < arr_sz; ++i){
    if(max_element < arr[i]){
        max_element = arr[i];
ind_of_max = i;
    }
}
return ind_of_max;
}
 
int ind_of_max_element(float *arr, size_t arr_sz){
int ind_of_max=0;
float max_element = arr[ind_of_max];
for(size_t i = 1; i < arr_sz; ++i){
    if(max_element < arr[i]){
        max_element = arr[i];
ind_of_max = i;
    }
}
return ind_of_max;
}
 
int summ_arr_after_max(int *arr, size_t arr_sz){
int ind_of_max=ind_of_max_element(arr,  arr_sz);
int summ_after_max = 0;
for(size_t i = ind_of_max+1; i < arr_sz; ++i)
summ_after_max += arr[i];
return summ_after_max;
}
 
float summ_arr_after_max(float *arr, size_t arr_sz){
int ind_of_max=ind_of_max_element(arr,  arr_sz);
float summ_after_max = 0;
for(size_t i = ind_of_max+1; i < arr_sz; ++i)
summ_after_max += arr[i];
return summ_after_max;
}
 
int abs_T(int a){
    return abs(a);
}
 
float abs_T(float a){
    return (a >= 0)? a : -a;
}
 
void Sort_arr(int *arr, size_t size)  //функция сортировка по убыванию
    {
        for(size_t i=0;i<size;i++)
        for(size_t j=size-1;j>i;j--)
          if (abs_T(arr[j-1])<abs_T(arr[j]))
           {
              int x=arr[j-1];
              arr[j-1]=arr[j];
              arr[j]=x;
           }
    }
 
void Sort_arr(float *arr, size_t size)  //функция сортировка по убыванию
    {
        for(size_t i=0;i<size;i++)
        for(size_t j=size-1;j>i;j--)
          if (abs_T(arr[j-1])<abs_T(arr[j]))
           {
              float x=arr[j-1];
              arr[j-1]=arr[j];
              arr[j]=x;
           }
    }
 
int main(){
 
const int n = 6;
int source_stat_arr[n] = {
        12, 123,   24, 112, -101, 55
    };
cout<<"source arrays"<<endl;
for(int i = 0; i < n; ++i)cout<<source_stat_arr[i]<<" ";
cout<<endl<<endl;
float *source_dyn_arr = new float[n];
for(int i = 0; i < n; ++i)source_dyn_arr[i] = source_stat_arr[i]/10.0f;//один из другого /10 
for(int i = 0; i < n; ++i)cout<<source_dyn_arr[i]<<" ";
cout<<endl<<endl;
 
cout<<"between 15...112 and 1,5...11.2"<<endl;
cout<<number_within_the_limmmits(source_stat_arr, n, 15, 112)<<endl;//числа 15 и 112 - пределы (от фонаря)
cout<<number_within_the_limmmits(source_dyn_arr, n, 1.5f, 11.2f)<<endl;//числа 15 и 112 - пределы (от фонаря)
cout<<"summs after max"<<endl;
cout<<summ_arr_after_max(source_stat_arr, n)<<endl;
cout<<summ_arr_after_max(source_dyn_arr, n)<<endl;
cout<<endl<<endl;
Sort_arr(source_stat_arr, n);
cout<<"sorted"<<endl;
for(int i = 0; i < n; ++i)cout<<source_stat_arr[i]<<" ";
cout<<endl<<endl;
Sort_arr(source_dyn_arr, n);
for(int i = 0; i < n; ++i)cout<<source_dyn_arr[i]<<" ";
cout<<endl<<endl;
 
cout<<endl<<endl;
system("pause");
return 0;
}
для double сами сделайте, если нужно.
Yandex
Объявления
17.02.2014, 23:25     Вычислить количество элементов массива, лежащих в диапазоне от А до В
Ответ Создать тему
Опции темы

Текущее время: 21:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru