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

Преобразовать массив по условию. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
31.05.2011, 17:39     Преобразовать массив по условию. #1
Собственно не могу преобразовать.. Дайте пенка в нужном направлении.
Задача:Преобразовать массив таким образом, чтобы сначала располагались все элементы,отличающиеся от максимального не более чем на 20%, а потом — все остальные.


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
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;
int main(int argc, char *argv[])
{    setlocale (LC_CTYPE, "rus");
///////////////////////////////////////////////////////////////////////////////////////////////////
//Условие:
//Преобразовать массив таким образом, чтобы сначала располагались все элементы,
//отличающиеся от максимального не более чем на 20%, а потом — все остальные.   
///////////////////////////////////////////////////////////////////////////////////////////////////
    int m;
    double koff = 0.2;
    cout << "Введите количество элиментов массива" << endl;
    cin >> m;
    int Masiv[m];
    cout << "Введите массив : "<< m << endl;
    for(int i=0; i<m; i++)
    cin >> Masiv[i];
 
    ///////////////////////////////////////////
    // нахождение максимального элемента
    int max = Masiv[0];
    for (int i=1; i < m; i++)
   { if (Masiv[i]>max) max = Masiv[i];
    // 20 процентов от максимального элемента
    double koffMax = max * koff;
 
 
///////////////////ОШИБКА В ЭТОМ УСЛОВИИ/////////////
     int buff;
     if ((max - Masiv[i]) < koffMax) buff = Masiv[i];
     cout << buff << " ";
   }
/////////////////////////////////////////////////////////////// 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2011, 17:39     Преобразовать массив по условию.
Посмотрите здесь:

Преобразовать массив следующим образом: сначала должны стоять цифры, входящие в массив, а затем все остальные символы C++
Дан двумерный массив. Преобразовать его так, чтобы новый массив содержал элементы старого, циклически сдвинутые на 2 элемента влево. C++
Преобразовать массив Int в массив строк C++
C++ Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент
C++ Динамические массивы. Преобразовать строку по условию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
31.05.2011, 19:53     Преобразовать массив по условию. #2
1. Поиск максимума сделай отдельным циклом.
2. Второй цикл - это новый проход по массиву. В котором условие - 20% от максимума. Не забудь, что их надо обменивать с начальными. Для этого - отдельный независимый индекс, который меняетс\ только внутри if().
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
31.05.2011, 20:51  [ТС]     Преобразовать массив по условию. #3
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
2. Второй цикл - это новый проход по массиву. В котором условие - 20% от максимума. Не забудь, что их надо обменивать с начальными. Для этого - отдельный независимый индекс, который меняетс\ только внутри if().
не могли бы проиллюстрировать.. что то не вникну..
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
31.05.2011, 21:13     Преобразовать массив по условию. #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int max = Masiv[0];
    for (int i=1; i < m; i++)
      if (Masiv[i]>max) { n = i; max = Masiv[i]; }
// -- вышли из цикла --
// -- индекс максимума - в переменной n
std::swap(Masiv[n], Masiv[0]);    // -- сам максимум - на первое место в массиве --
// 20 процентов от максимального элемента
        double koffMax = max * koff;
 
i = 1; k = 1;
while (i < m)
{  if ((max - Masiv[i]) < koffMax) 
    if(i > k) { std::swap(Masiv[i], Masiv[k]); ++k; }
    ++i;
}
Как-то так. Переменные объявишь сам...
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
31.05.2011, 22:32  [ТС]     Преобразовать массив по условию. #5
ValeryLaptev, а что же нам выводить собственно?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
31.05.2011, 23:53     Преобразовать массив по условию. #6
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
ValeryLaptev, а что же нам выводить собственно?
Выводить массив после преобразования. Еще один цикл:
C++
1
2
3
for(int i = 0; i < M; ++i)
   cout <<Masiv[i]<<' ';
cout <<endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 00:21     Преобразовать массив по условию.
Еще ссылки по теме:

Превратить одномерный массив по условию C++
Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке C++
C++ Скопировать массив в массив по условию

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

Или воспользуйтесь поиском по форуму:
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
01.06.2011, 00:21  [ТС]     Преобразовать массив по условию. #7
ValeryLaptev, спасибо - все кул.
Yandex
Объявления
01.06.2011, 00:21     Преобразовать массив по условию.
Ответ Создать тему
Опции темы

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