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

Не работает последний цикл функции interval - C++

Восстановить пароль Регистрация
 
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 129
13.04.2016, 08:02     Не работает последний цикл функции interval #1
Объясните, в чем проблема )
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
#include <iostream>
#include <ctime>
using namespace std;
void func(int A[], int C, int *f, int *s, int);
void interval(int, int, int*, int);
int main() {
    setlocale(LC_ALL, "russian");
    int  *A, n;
    int  C, f, s, m, a, b, B = 0;
    cout << "Введите размер динамического массива: ";
    cin >> m;
    A = new int[m];
    cout << "Введите число: ";
    cin >> C;
    srand(time(0));
    cout << "Элементы массива: ";
    for (int i = 0; i < m; i++) {
        A[i] = -10 + rand() % 20;
        cout << A[i] << " ";
    }
    cout << endl;
    func(A, C, &f, &s, m);
    cout << "Количество элементов, меньших заданного числа: " << f << endl;
    cout << "Сумма элементов, расположенных после первого положительного элемента, равна: " << s << endl;
    cout << "Введите интервал:";
    cin >> a >> b;
    interval(a, b, A, B);
    system("pause");
    return 0;
}
void func(int A[], int C, int *f, int *s, int m) {
    int p = 0, index;
    *s = 0;
    for (int i = 0; i < m; i++)
        if (A[i] < C)
            p++;
    *f = p;
    for (int i = 0; i < m; i++) {
        if (A[i] > 0) {
            index = i;
            break;
        }
    }
    for (int i = index + 1; i < m; i++)
        *s += A[i];
}
 
void interval(int a, int b, int *A, int m)
{
    int *B;
    B = new  int[m];
    for (int i = a; i <= b; i++) {
        cout << A[i] << " ";
        B[i] = A[i];
    }
    cout << endl;
 
 
//Доходя до этого цикла компилятор просто отказывается его проверять
    for (int i = 0; i < m; i++) 
    {
    if (A[i] == B[i]) {
    cout << "";
    }
    else cout << A[i];
    }
    delete[] A;
}
Добавлено через 9 минут
Текст самой задачи:
В одномерном массиве, состоящем из n вещественных чисел, вычислить:
а) количество элементов массива, меньших С;
б) сумму положительных элементов, расположенных после первого положительного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [a, b], а потом – все остальные.
Программа должна быть составлена с использованием функций.
P.S.: в целом всё работает, но из-за неработающего последнего цикла функции interval последнее задание решено не полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2016, 08:02     Не работает последний цикл функции interval
Посмотрите здесь:

C++ операторы ввода вывода << >>, последний не работает после определенного момента
C++ Почему цикл с условием EOF читает последний символ 2 раза?
C++ Не работает цикл
C++ Не работает цикл
C++ Цикл не работает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
13.04.2016, 08:16     Не работает последний цикл функции interval #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
С точки зрения логики второй массив тоже надо объявлять в main и передавать указатель в функцию интервал.
Цитата Сообщение от DenKG Посмотреть сообщение
B[i] = A[i];
Тут явно напрашивается другой индекс в массиве B, иначе элементы будут на тех-же местах.

Добавлено через 6 минут
Цитата Сообщение от DenKG Посмотреть сообщение
располагались все элементы, целая часть которых
Т.е. задан не интервал индексов, а самих значений. Надо проверять, что
C++
1
(int)A[i]<=b && (int)A[i]>=a
Ну и в условии массив вещественных чисел, а у вас int
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 129
13.04.2016, 10:54  [ТС]     Не работает последний цикл функции interval #3
Теперь работает, но B[j] принимает после первого цикла последнее значение и поэтому задача получается не совсем правильной. Нужно сделать так, чтобы он записывал все значения, а не перезаписывал предыдущее. Как это сделать?
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
void interval(int a, int b, int *A, int m, int *B)
{
    int j=0;
    
    for (int i = 0; i < m; i++) {        
            if (A[i] <= b && A[i] >= a) {
                cout << A[i] << " ";
                B[j] = A[i];
            
        }
        cout << " ";
    }
    cout << endl;
 
    for (int i = 0; i < m; i++) 
    {
        if (A[i] == B[j]) {
        cout << "";
        }
    else cout << A[i] << " ";
    }
 
    delete[] A;
}
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
13.04.2016, 12:12     Не работает последний цикл функции interval #4
Цитата Сообщение от DenKG Посмотреть сообщение
Как это сделать?
После записи B[j] напишите
C++
1
j++;
И потом то надо дописать остальные элементы, которые под условие не попали
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 129
13.04.2016, 13:40  [ТС]     Не работает последний цикл функции interval #5
Не очень понял, если честно
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
13.04.2016, 14:34     Не работает последний цикл функции interval #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void interval(int a, int b, int *A, int *B, int m)
{
 int j=0;
 for (int i=0;i<m;i++)
 {
  if (A[i]<=b && A[i]>=a)
  {
   cout << A[i] << " ";
   B[j] = A[i];
   j++;
  }
 }
 for (int i=0;i<m;i++)
 {
  if (A[i]<a || A[i]>b)
  {
   cout << A[i] << " ";
   B[j] = A[i];
   j++;
  }
 }
}
Yandex
Объявления
13.04.2016, 14:34     Не работает последний цикл функции interval
Ответ Создать тему
Опции темы

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