Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
1

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

08.04.2015, 16:14. Просмотров 788. Ответов 18
Метки нет (Все метки)

Доброго времени суток.
У меня есть задание и есть код, который нужно проверить и поправить. Сейчас он не запускается, а найти ошибки самостоятельно не могу. Помогите, пожалуйста.

Вот само задание:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1. количество элементов массива, лежащих в диапазоне ;
2. сумму элементов массива, расположенных после максимального элемента.
Упорядочить элементы массива по убыванию модулей элементов.

Вот код:
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
#include <iostream>
#include <locale.h>
using namespace std;
 
// функция заполнения элементов матрицы.
void input_matrix(double M[10], double n){
    int i;
    for (i = 0; i < n; i++)
    {
        cout << " Введите значение " << i << " " << endl;
        cin >> M[i];
    }
}
 
// функция для подсчета количества элементов массива, лежащих в диапазоне.
int numbers_of_elements(double M[10], double n, int a, int b){
    int i, k;
    for (i = 0; i<n; i++)
    {
        if (M[i]>a&&M[i] < b)
            k++;
    }
    return k;
}
 
//функция для вычисления сумму элементов массива, 
//расположенных после максимального элемента.
 
double sum(double M[10], double n){
    int i; double t; double s; double max = M[0];
    for (i = 0; i<n; i++)
    {if (M[i]>max)
        {
            max = M[i];
            t = i;
        }
    }
 
    for (i = t; i<n; i++)
        s += M[i];
    return s;
}
 
// функция для вывода отсортированной матрицы
void output_matrix(double M[10], double n) {
    int i,j,t;
    for (i = 0; i<n - 1; i++)
    for (j = i + 1; j<n; j++)
    if (abs(M[j])>abs(M[i]))
    {
        t = M[i];
        M[i] = M[j];
        M[j] = t;
    }
    for (i = 0; i<n; i++)
    cout <<M[i] << " ";
    cout << endl;
}
 
 
int main()
{
    string name;
    setlocale(LC_ALL, "rus");
    double M[10];
    int n;
    int a, b;
    cout << "Введите количество элементов";
    cin >> n;
    input_matrix(M, n);
    cout << "Введите границы диапозона";
    cin >> a >> b;
    cout >> "в диапазоне " >> numbers_of_elements(M, n, a, b) >> " элементов" >> endl;
    cout >> "Сумма элементов массива, расположенных после максимального элемента: " >> sum(M, n) >>;
    cout >> "Отсортированная матрица" >> output_matrix(M, n) >> endl;
    return 0;
}
Заранее спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2015, 16:14
Ответы с готовыми решениями:

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

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

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

Вычислить количество элементов массива, лежащих в диапазоне от А до В
Добрый вечер, дорогие друзья. Прошу у вас помощи с программой: Методические...

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

18
Справлюсь
23 / 23 / 14
Регистрация: 24.07.2014
Сообщений: 209
08.04.2015, 16:20 2
какие ошибки выдает компилятор?
0
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 16:27  [ТС] 3
Справлюсь,

4 таких:
Ошибка 10 error C2676: бинарный ">>": "std::ostream" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору c:\users\123\documents\visual studio 2013\projects\lab5(1)\lab5(1)\main.cpp 73 1 lab5(1)

21 такая:
Ошибка 10 error C2676: бинарный ">>": "std::ostream" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору c:\users\123\documents\visual studio 2013\projects\lab5(1)\lab5(1)\main.cpp 73 1 lab5(1)

3 таких:
28 IntelliSense: отсутствует оператор ">>", соответствующий этим операндам
типы операндов: std::ostream >> const char [70] c:\Users\123\Documents\Visual Studio 2013\Projects\lab5(1)\lab5(1)\main.cpp 74 7 lab5(1)
0
Nishen
541 / 345 / 180
Регистрация: 26.02.2015
Сообщений: 1,619
Завершенные тесты: 3
08.04.2015, 16:28 4
Цитата Сообщение от Старый Посмотреть сообщение
cout >> "в диапазоне " >> numbers_of_elements(M, n, a, b) >> " элементов" >> endl;
* * cout >> "Сумма элементов массива, расположенных после максимального элемента: " >> sum(M, n) >>;
* * cout >> "Отсортированная матрица" >> output_matrix(M, n) >> endl;
Вот тут ошибки, например. Нужно писать не >>, а <<, когда хочешь выводить текст.

Добавлено через 57 секунд
Если ты пишешь cout, то ставь оператор <<, если пишешь cin, то ставь >>.
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 16:29  [ТС] 5
уже заметил ошибку синтаксическую в 74 строке

Добавлено через 47 секунд
Nishen, спасибо
0
Справлюсь
23 / 23 / 14
Регистрация: 24.07.2014
Сообщений: 209
08.04.2015, 16:33 6
вот правильное написание, здесь знак "<<":
Цитата Сообщение от Старый Посмотреть сообщение
cout << "Введите количество элементов";
.
а здесь неправильное(знак ">>"):
Цитата Сообщение от Старый Посмотреть сообщение
C++
1
2
3
    cout >> "в диапазоне " >> numbers_of_elements(M, n, a, b) >> " элементов" >> endl;
    cout >> "Сумма элементов массива, расположенных после максимального элемента: " >> sum(M, n) >>;
    cout >> "Отсортированная матрица" >> output_matrix(M, n) >> endl;
чувствуете разницу?
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 16:37  [ТС] 7
исправил, не запускается:
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
#include <iostream>
#include <locale.h>
using namespace std;
 
// функция заполнения элементов матрицы .
void input_matrix(double M[10], double n){
    int i;
    for (i = 0; i < n; i++)
    {
        cout << " Введите значение " << i << " " << endl;
        cin >> M[i];
    }
}
 
// функция для подсчета количества элементов массива, лежащих в диапазоне.
int numbers_of_elements(double M[10], double n, int a, int b){
    int i, k;
    for (i = 0; i<n; i++)
    {
        if (M[i]>a&&M[i] < b)
            k++;
    }
    return k;
}
 
//функция для вычисления сумму элементов массива, 
//расположенных после максимального элемента.
 
double sum(double M[10], double n){
    int i; double t; double s; double max = M[0];
    for (i = 0; i<n; i++)
    {if (M[i]>max)
        {
            max = M[i];
            t = i;
        }
    }
 
    for (i = t; i<n; i++)
        s += M[i];
    return s;
}
 
// функция для ывода отсортированной матрицы
void output_matrix(double M[10], double n) {
    int i,j,t;
    for (i = 0; i<n - 1; i++)
    for (j = i + 1; j<n; j++)
    if (abs(M[j])>abs(M[i]))
    {
        t = M[i];
        M[i] = M[j];
        M[j] = t;
    }
    for (i = 0; i<n; i++)
    cout <<M[i] << " ";
    cout << endl;
}
 
 
int main()
{
    string name;
    setlocale(LC_ALL, "rus");
    double M[10];
    int n;
    int a, b;
    cout << "Введите количество элементов";
    cin >> n;
    input_matrix(M, n);
    cout << "Введите границы диапозона";
    cin >> a >> b;
    cout << "в диапазоне " << numbers_of_elements(M, n, a, b) << " элементов";
    cout << "Сумма элементов массива, расположенных после максимального элемента: " << sum(M, n);
    cout << "Отсортированная матрица:"<< output_matrix(M, n);
    return 0;
}
0
_Scorpius_
57 / 56 / 36
Регистрация: 01.04.2015
Сообщений: 115
08.04.2015, 16:41 8
Лучший ответ Сообщение было отмечено Старый как решение

Решение

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
#include <iostream>
#include <locale.h>
using namespace std;
 
// функция заполнения элементов матрицы.
void input_matrix(double *M, int n){
    int i;
    for (i = 0; i < n; i++)
    {
//        cout << " Введите значение " << i << " " << endl;
        cin >> M[i];
    }
}
 
// функция для подсчета количества элементов массива, лежащих в диапазоне.
int numbers_of_elements(double *M, int n, int a, int b){
    int i, k=0;
    for (i = 0; i<n; i++)
    {
        if (M[i]>a && M[i]<b)
            k++;
    }
    return k;
}
 
//функция для вычисления сумму элементов массива, 
//расположенных после максимального элемента.
 
double sum(double *M, int n){
    int i; double t; double s=0; double max = M[0];
    for (i = 0; i<n; i++)
    {if (M[i]>max)
        {
            max = M[i];
            t = i;
        }
    }
 
    for (i = t+1; i<n; i++)
        s += M[i];
    return s;
}
 
// функция для вывода отсортированной матрицы
void output_matrix(double *M, int n) {
    int i,j,t;
    for (i = 0; i<n - 1; i++)
        for (j = i + 1; j<n; j++)
            if (abs(M[j])>abs(M[i]))
            {
                t = M[i];
                M[i] = M[j];
                M[j] = t;
            }
    for (i = 0; i<n; i++)
        cout <<M[i] << " ";
    cout << endl;
}
 
 
int main()
{
    string name;
    setlocale(LC_ALL, "rus");
    double M[10];
    int n;
    int a, b;
    cout << "Введите количество элементов: ";
    cin >> n;
    input_matrix(M, n);
    cout << "Введите границы диапозона: ";
    cin >> a >> b;
    cout << "В диапазоне " << numbers_of_elements(M, n, a, b) << " элементов" << endl;
    cout << "Сумма элементов массива, расположенных после максимального элемента: " << sum(M, n) << endl;
    cout << "Отсортированная матрица" << endl;
    output_matrix(M, n);
    return 0;
}
1
Lotus34
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126
08.04.2015, 16:45 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    string name;
    setlocale(LC_ALL, "rus");
    double M[10];
    int n;
    int a, b;
    cout << "Введите количество элементов";
    cin >> n;
    input_matrix(M, n);
    cout << "Введите границы диапозона";
    cin >> a >> b;
    cout << "в диапазоне " << numbers_of_elements(M, n, a, b) << " элементов";
    cout << "Сумма элементов массива, расположенных после максимального элемента: " << sum(M, n);
    cout << "Отсортированная матрица:";
    output_matrix(M, n);
    return 0;
}
Ты пытался вывести результат работы функции, а она у тебя не возвращает значение(void).
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 16:54  [ТС] 10
_Scorpius_, запустил - не работает.
Ошибки:
Ошибка 4 error LNK1120: неразрешенных внешних элементов: 1 C:\Users\123\Documents\Visual Studio 2013\Projects\lab5(1)\Debug\lab5(1).exe 1 1 lab5(1)

Ошибка 3 error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup C:\Users\123\Documents\Visual Studio 2013\Projects\lab5(1)\lab5(1)\MSVCRTD.lib(crtexew.obj) lab5(1)
0
Lotus34
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126
08.04.2015, 16:59 11
Просто опусти на следующую строчку вызов функции.
У тебя ошибки линковщика, это уже не в коде дело.
Просто измени свой проект, а не копируй отсюда.



П.С. У меня код "скорпиона" работает нормально.
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 17:06  [ТС] 12
Lotus34, сделал - не запускается.
Придется видимо в универе проверять.
Всем спасибо!
0
Lotus34
5 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 126
08.04.2015, 17:14 13
Цитата Сообщение от Старый Посмотреть сообщение
Lotus34, сделал - не запускается.
Придется видимо в универе проверять.
Всем спасибо!
Да, попробуй на др. ПК.
Эти ошибки LINK такие противные, сам с ними не раз сталкивался)
1
Nishen
541 / 345 / 180
Регистрация: 26.02.2015
Сообщений: 1,619
Завершенные тесты: 3
08.04.2015, 18:43 14
Вот тебе рабочая версия программы:
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
#include <iostream>
#include <math.h>
using namespace std;
//Функция для заполнения массива значениями
void fillingArr(double arr[], int N);
//Подсчет количества элементов, лежащих в определенных границах
int numberOfElem(double arr[], int N, double start, double finish);
//Подсчет суммы элементов, лежащих после максимального элемента
double sumOfElem(double arr[], int N);
//Функция для сортировки модулей чисел по убыванию
void sortOfArr(double arr[], int N);
 
int main(){
    setlocale(LC_ALL, "Russian");
    //N - количество элементов в массиве вещественных чисел
    //start - начало диапозона
    //finish - конец диапозона
    int N = 0;
    double start = 0.0, finish = 0.0;
    cout << "Укажите количество вещественных элементов: ";
    cin >> N;
    //Выделение памяти под массив размером N
    double* arr = new double[N];
    //Вызов функции заполнения массива значениями
    fillingArr(arr, N);
    cout << "Введите начальное значение диапозона: "; cin >> start;
    cout << "Введите конечное значение диапозона: "; cin >> finish;
    //Вызов функции подсчета количества элементов, лежащих в указанных границах
    cout << "Количества элементов, лежащих на отрезке [" << start << ";" << finish << "]: "
        << numberOfElem(arr, N, start, finish) << endl;
    cout << "Сумма элементов, лежащих после максимального: " << sumOfElem(arr, N) << endl;
    cout << "Отсортированный массив: "; sortOfArr(arr, N);
    for(int i = 0; i < N; i++){
        cout << arr[i] << " ";
    }
    system("PAUSE");
    return 0;
}
void fillingArr(double arr[], int N){
    cout << "\nВведите " << N << " вещественных значений: ";
    for(int i = 0; i < N; i++){
        cin >> arr[i];
    }
}
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;
}
double sumOfElem(double arr[], int N){
    //Нахождение максимального элемента и его индекса
    double max = arr[0], summ = 0.0;
    int maxIndex = 0;
    for(int i = 1; i < N; i++){
        if(arr[i] > max){
            max = arr[i];
            maxIndex = i;
        }
    }
    //Расчет суммы
    for(int i = maxIndex + 1; i < N; i++){
        summ += arr[i];
    }
    return summ;
}
void sortOfArr(double arr[], int N){
    for(int i = 0; i < N - 1; i++){
        for(int j = i + 1; j < N; j++){
            if(fabs(arr[i]) < fabs(arr[j])){
                swap(arr[i], arr[j]);
            }
        }
    }
}
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 19:00  [ТС] 15
Nishen, спасибо, конечно. Но опять таки не запускается. Выдает те же ошибки. Видимо, и правда беда с линковщиком.
1
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
08.04.2015, 19:10 16
Цитата Сообщение от Старый Посмотреть сообщение
ссылка на неразрешенный внешний символ _WinMain@16
видимо при создании проекта выбрали Win приложение вместо консольного.
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 19:43  [ТС] 17
retmas, с:
Посмотрел, так и есть.

переделал, теперь выдает это:
Run-Time Check Failure #3 - The variable 't' is being used without being initialized.

Первый этап обработки исключения по адресу 0x008E60BF в lab5(3).exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x669C6070.
Необработанное исключение по адресу 0x008E60BF в lab5(3).exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x669C6070.

Программа "[6604] lab5(3).exe" завершилась с кодом 0 (0x0).
0
Nishen
541 / 345 / 180
Регистрация: 26.02.2015
Сообщений: 1,619
Завершенные тесты: 3
08.04.2015, 19:45 18
Старый, мой код попробуй.

Добавлено через 56 секунд
Цитата Сообщение от Старый Посмотреть сообщение
int i; double t; double s; double max = M[0];
Вот тут прежде чем использовать переменную t, задай ей значение t = 0.0;
1
Старый
2 / 2 / 0
Регистрация: 24.01.2012
Сообщений: 96
08.04.2015, 19:56  [ТС] 19
Nishen, все, заработало.
Спасибо вам огромное!
0
08.04.2015, 19:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2015, 19:56

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

Вычислить количество элементов массива, лежащих в заданном диапазоне
Всем Привет! Помогите пожалуйста написать простенькую программу без сильно...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru