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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,645
Записей в блоге: 6
#1

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

31.05.2011, 17:39. Просмотров 1656. Ответов 6
Метки нет (Все метки)

Собственно не могу преобразовать.. Дайте пенка в нужном направлении.
Задача:Преобразовать массив таким образом, чтобы сначала располагались все элементы,отличающиеся от максимального не более чем на 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++):

Преобразовать матрицу согласно условию - C++
Помогите плииз с задачкой!=) Дана целочисленная матрица размера n x m, целые числа k, l (1 ≤ k ≤ n, 1 ≤ l ≤ n, k ≠ l). Преобразовать...

Динамические массивы. Преобразовать строку по условию - C++
имеется строка,содержащая буквы и цифры.Преобразуйте эту строку так,чтобы сначала в ней шли все цифры исходной строки,а потом-все буквы...

Преобразовать заданные строки, согласно условию (сортировка и сравнение строк, вставка/удаление символов) - C++
Даны строки A и B. Если все символы A входят в B и в B есть повторяющиеся символы, то упорядочить символы B в порядке, обратном к...

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

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
1. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент. (Серия - группа подряд идущих...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
31.05.2011, 19:53 #2
1. Поиск максимума сделай отдельным циклом.
2. Второй цикл - это новый проход по массиву. В котором условие - 20% от максимума. Не забудь, что их надо обменивать с начальными. Для этого - отдельный независимый индекс, который меняетс\ только внутри if().
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,645
Записей в блоге: 6
31.05.2011, 20:51  [ТС] #3
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
2. Второй цикл - это новый проход по массиву. В котором условие - 20% от максимума. Не забудь, что их надо обменивать с начальными. Для этого - отдельный независимый индекс, который меняетс\ только внутри if().
не могли бы проиллюстрировать.. что то не вникну..
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
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
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,645
Записей в блоге: 6
31.05.2011, 22:32  [ТС] #5
ValeryLaptev, а что же нам выводить собственно?
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
31.05.2011, 23:53 #6
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
ValeryLaptev, а что же нам выводить собственно?
Выводить массив после преобразования. Еще один цикл:
C++
1
2
3
for(int i = 0; i < M; ++i)
   cout <<Masiv[i]<<' ';
cout <<endl;
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,645
Записей в блоге: 6
01.06.2011, 00:21  [ТС] #7
ValeryLaptev, спасибо - все кул.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 00:21
Привет! Вот еще темы с ответами:

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
Помогите преобразовать код из языка С# в С++. Занимался разбором задачи на языке С++. Вот условие задачи: Дан целочисленный массив...

Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { int n; int k=0; int p=0; int l=0; int...

Преобразовать массив следующим образом: сначала должны стоять цифры, входящие в массив, а затем все остальные символы - C++
помогите пожайлуста с задачей. Задан массив из k символов. Преобразовать массив следующим образом: сначала должны стоять цифры,...

Скопировать массив в массив по условию - C++
Кто-то знает как можно скопировать массив в массив если ты знаешь что в одном массиве сожержится кол-во цифр которые сожержатся в другом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.06.2011, 00:21
Ответ Создать тему
Опции темы

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