Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 3
1

Сначала расположить все элементы, отличающиеся от максимального не более чем на 20%, потом — остальные

04.10.2014, 13:59. Показов 1180. Ответов 2
Метки нет (Все метки)

В общем, вот задание:
В одномерном массиве, состоящем из N вещественных элементов, вычислить:
1) количество элементов массива, меньших С
2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом — все остальные.

Программу я написал, первое задание выполняется верно. Второе тоже, но если вводить символ, то в 28 строке программа продолжать вычислять, а не останавливается (для этого exit вставил, переменная b - символьная). Также в преобразовании массива есть маленькая ошибка - при чтении значений, равных 0.8*максимальное значение и 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
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <string>
 
using namespace std;
 
int main()
 
{ int N, i, k, C, d, s, e, zm;
  char b;
  float m;
  cout << "Insert N" << endl;
  cin >> N;
  m = 0;
  k = 0;
  d = 0;
  s = 0;
  float *massiv = new float[N];
  if (N == b)
  { cout << "Wrong N" << endl; exit (0); }
  for (i = 0; i < N; i = i + 1)
  {cout << "Enter " << i + 1 << " number" << endl;
   cin >> massiv [i]; 
   if (massiv [i] == 0)
   {continue; }
   if (massiv[i] == b)
   {cout << "Wrong number" << endl; exit(0);}}
   cout << "Enter C" << endl;
   cin >> C;
   for (i = 0; i < N; i = i + 1)
   {if (massiv[i] < C)
   {k = k + 1; }}
   cout << "Count of numbers smaller than C = " << k << endl;
   for (i = 0; i < N; i = i + 1)
   {if (massiv[i] < 0)
   {d = i; 
   e = d + 1;}}
   if (d > 0)
   {for (i = e; i < N; i = i + 1)
   {s = s + massiv[i]; }
    cout << "Summ of numbers after "<< massiv[d] << " = (" << s << ")" << endl;}
   else cout << "There are no negative numbers" << endl;
   for (i = 0; i < N; i = i + 1)
   {if (massiv[i] > m)
   {m = massiv[i];
   zm = i; }}
   cout << "New massive "; 
   for (i = 0; i < N; i = i + 1)
   {if (massiv[i] == 0.8*massiv[zm] || massiv[i] == 1.2*massiv[zm])
   {cout << massiv[i] << ", "; }}
   for (i = 0; i < N; i = i + 1)
   {if (0.8*massiv[zm] < massiv[i] && massiv[i] < 1.2*massiv[zm])
   {cout << massiv[i] << ", "; }}
   for (i = 0; i < N; i = i + 1)
   {if  (0.8*massiv[zm] > massiv[i] || massiv[i] > 1.2*massiv[zm])
   { cout << massiv[i] << ", "; }}
   delete [] massiv;
   return 0;
   
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2014, 13:59
Ответы с готовыми решениями:

Расположить в начале массива все элементы, отличающиеся от максимального не более, чем на 20%
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от...

Преобразовать массив, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%
&quot;Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от...

Преобразовать массив так, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%
Доброго времени суток! Помогите плиз с одним из пунктов задачи! Преобразовать массив таким...

Преобразовать массив так, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от...

2
24 / 24 / 16
Регистрация: 01.11.2013
Сообщений: 196
04.10.2014, 22:58 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
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include <vector>
 
int main()
{
    int i, n, c, mensheC = 0, poslotr = -1 , sum = 0;
    float e, max;
    std::cout << "Vvod kol-vo elementov massiva" << std::endl;
    std::cin >> n;
    std::cout << "Vvod C" << std::endl;
    std::cin >> c;
    std::vector<float> mas, newmas;
    std::cout << "Vvod elemetov massiva" << std::endl;
    for (i = 0; i < n; i++)
    {
        std::cin >> e;
        mas.push_back(e) ;
        if (e < c)
            mensheC++;
        if (e < 0)
            poslotr = i;
    }
    max = mas.at(0);
    for (i = 0; i < n; i++)
    {
        if (max < mas.at(i))
            max = mas.at(i);
    }
    if ((poslotr >= 0) && (poslotr < n))
    {
        for (i = poslotr+1; i < n; i++)
            sum += mas.at(i);
            std::cout << "Summa = " << sum << std::endl;
    }
    else
        std::cout << "V massive net otr. elementov libo otr. element posledniy" << std::endl;
   for (i = 0; i < n; i++)
   {
       if (max  - mas.at(i) <= 0.2)
   {
          newmas.push_back(mas.at(i));
   }
   }
   for (i = 0; i < n; i++)
   {
       if (max  - mas.at(i) > 0.2)
   {
          newmas.push_back(mas.at(i));
   }
   }
   std::cout << "Noviy massiv" << std::endl;
   for (i = 0; i < n; i++)
   {
        std::cout << newmas.at(i) << std::endl;
   }
    system ("pause");
    return 0;
}
Преобразовать начальный вектор не получилось, пришлось создать второй. Если кто-то сделает в изначальном векторе интересно будет взглянуть.
1
0 / 0 / 0
Регистрация: 21.09.2014
Сообщений: 3
05.10.2014, 22:41  [ТС] 3
О, спасибо большое.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2014, 22:41
Помогаю со студенческими работами здесь

Расположить в начале массива элементы, отличающиеся от максимального не более, чем на 20%
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от...

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

Преобразовать массив так, чтобы сначала располагались все элементы, отличающиеся от максимального не более 20%
Задача звучит так: Преобразовать массив таким образом, чтобы сначала располагались все элементы,...

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


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

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

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