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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 409
#1

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

13.04.2016, 08:02. Просмотров 181. Ответов 5
Метки нет (Все метки)

Объясните, в чем проблема )
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 последнее задание решено не полностью.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2016, 08:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает последний цикл функции interval (C++):

Массив как поле класса: цикл в основной функции работает некорректно - C++
Ребят привет. Не могу понять в чем трабла... Цикл в основной функции работает не корректно... В чем беда не пойму... ...

Почему цикл с условием EOF читает последний символ 2 раза? - C++
Данная программа читает двоичную строку и выводит длину самой продолжительной цепочки нулей. Почему мой цикл читает 2 раза последнее...

операторы ввода вывода << >>, последний не работает после определенного момента - C++
у меня отказывает оператор &gt;&gt; после определенного момента ни в какую не хочет принимать на вход поток. не знаю почему но мне кажется...

Не работает цикл!!! - C++
Help!!!!! Почему не считает цикл... опять где-то ошибся #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;iostream&gt; ...

Не работает цикл - C++
Не могу понять почему не работает цикл. Объясните, пожалуйста. #include &lt;iostream&gt; using namespace std; int main(int...

Цикл for не работает - C++
начал учить с++ дошол к циклам, написал вот такой код, а он видает только число 11, подскажите в чем проблема? #include &lt;iostream&gt; ...

5
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.04.2016, 08:16 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
С точки зрения логики второй массив тоже надо объявлять в main и передавать указатель в функцию интервал.
Цитата Сообщение от DenKG Посмотреть сообщение
B[i] = A[i];
Тут явно напрашивается другой индекс в массиве B, иначе элементы будут на тех-же местах.

Добавлено через 6 минут
Цитата Сообщение от DenKG Посмотреть сообщение
располагались все элементы, целая часть которых
Т.е. задан не интервал индексов, а самих значений. Надо проверять, что
C++
1
(int)A[i]<=b && (int)A[i]>=a
Ну и в условии массив вещественных чисел, а у вас int
1
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 409
13.04.2016, 10:54  [ТС] #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;
}
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.04.2016, 12:12 #4
Цитата Сообщение от DenKG Посмотреть сообщение
Как это сделать?
После записи B[j] напишите
C++
1
j++;
И потом то надо дописать остальные элементы, которые под условие не попали
1
DenKG
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 409
13.04.2016, 13:40  [ТС] #5
Не очень понял, если честно
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.04.2016, 14:34 #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++;
  }
 }
}
1
13.04.2016, 14:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2016, 14:34
Привет! Вот еще темы с ответами:

Не работает цикл - C++
int Date::getYear() { int a; while (1) { cout&lt;&lt;&quot;Year: &quot;; cin&gt;&gt;a; if (a&gt;0||a&lt;10000) break; cout&lt;&lt;&quot;Error!&quot;&lt;&lt;endl; ...

Не работает цикл for - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int x; for(x=0; x&lt;10; x++); cout &lt;&lt; x &lt;&lt; &quot; &quot;; ...

Не работает цикл while() - C++
Подскажите, почему в функции Viewfull() цикл срабатывает только на половину while (m1!=m2 &amp;&amp; y1!=y2) то есть только для m1!=m2 void...

Не работает цикл - C++
почему i всегда 0 ? #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main(void) { int j = 0; int n =...


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

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

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