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

Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Считать вектор из файла, записать вектор в файл http://www.cyberforum.ru/cpp-beginners/thread1093341.html
Доброго времени суток. Программа должна считывать числа из заданного файла, потом записывать в другой файл вектор, в котором каждый элемент на 1 больше. Билдер dev c++ 4.9.9.5. Говорит, что не понимает что такое setw(), но и без его ничего не делает. Компилируется без setw() без ошибок, спрашивает то, что задумано, но не считывает файл. Подскажите что не так и где прочитать про звездочки(*) перед...
C++ Locale - не верное отображение символа - разделителя тысяч для чисел Объясните в чём может быть проблема символ - разделитель тысячной части в русской и украинской локали в консоли выглядит вместо пробела символом 'а'? // пример использования функции localeconv #include <iostream> // для оператора cout #include <clocale> // для функции localeconv #include <iomanip> using namespace std; ... http://www.cyberforum.ru/cpp-beginners/thread1093324.html
Наследование классов - не передается нужный параметр C++
Доброе утро всем! Встала не с той ноги и тут еще с кодом неполадки. Интересует такой вопрос - есть код PentagramGenerator *pentagram = new PentagramGenerator(v1, v2, v3, v4, v5); widget->setGeometryGenerator( pentagram); Функция setGeometryGenerator() принимает указатель на класс GeometryGenerator. А класс PentagramGenerator от него наследуется. class PentagramGenerator : public...
Как правильно выпустить проект из Visual Studio 2012 ? C++
Здравствуйте, подскажите пожалуйста как правильно выпустить проект из Visual Studio 2012 ? т.е. такая ситуация, запускаю из VS в Debug приложение работает, запускаю в ней же через Release все запускается, запускаю экзешник из папки пишет ошибку "Прекращена работа программы ..." потом пишет "Программа "..." не работает Возникшая проблема привела к прекращению работы программы. ..." как исправить...
C++ Есть ли введенное число в массиве? http://www.cyberforum.ru/cpp-beginners/thread1093286.html
нужна помощь , почти завалил сессию напишите пожалуйста программу с++ которая проверяет есть ли введенное число из клавиатуры в массиве , массив должен вводится во время роботы программы
C++ Создать файл и записать в него числа последовательности, не кратные заданному числу помогите ребят! #include "stdafx.h" #include <iostream> #include <ctime> #include <fstream> using namespace std; int main() { setlocale(LC_ALL, "rus"); подробнее

Показать сообщение отдельно
Ikol
 Аватар для Ikol
7 / 7 / 3
Регистрация: 11.02.2012
Сообщений: 21
10.02.2014, 16:04     Одномерный массив более 3-х подряд идущих отрицательных элементов, заменить на максимальный элемент
Цитата Сообщение от Valera1984 Посмотреть сообщение
Ikol, Спасибо ... но вот эта строчка for (int j=i-1;a<x;i++) не понятна...
Ну всё просто. В месте массива, где был найден третий подряд идущий элемент мы начинаем менять массив.(Только косяк у себя нашёл, там где a[j]=max; нужно написать a[i-2]=max. Так вот, здесь мы перед циклом обхода массива присваиваем максимальное значение элементу, который был на 2 элемента раньше(чем последний, третий подряд идущий отрицательный элемент). Затем мы начинаем цикл с элемента, который был перед текущим, элементом (то есть 2й подряд идущий отрицательный элемент), и уже начиная с него, начинаем присваивать текущему элементу массива(от второго подряд идущего отрицательного элемента и далее), элемент, индекс которого на 2 больше(от следующего элемента, после последнего подряд идущего отрицательного и далее).

И я вот тут немного додумал цикл. Насколько я понимаю, подряд идущих отрицательных чисел может быть не ровно 3, поэтому нужна ещё проверка именно на длину этой отрицательной серии элементов, с заменой всей серии на 1 элемент. В общем вот.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int k=0;
for (int i=0;i<x;i++) 
       {
        k=0;
        if(a[i]<0)
           while ((a[i]<0)&&(i<x))   //Будет проходить массив, пока встречаются отрицательные элементы И не достигнут конец массива
               {
                    k++;   //Считает длину серии отрицательных элементов
                    i++;   //Увеличивает индекс массива на 1, таким образом обрабатывая следующий элемент массива
               }
 
               if (k>=3) 
               {     
                      a[i-k]=max;   //замена первого элемента серии на максимальный
                      x-=(k-1);      //изменение размера массива в соответствии с длинной серии
                      for (int j=i-k+1;j<x;j++)   //цикл изменения массива, начинается от второго элемента серии
                          a[j]=a[j+k-1];    //сама замена элементов, на элементы, идущие после последнего элемента серии
                i=0;  //обнуление индекса до 0, чтобы пройти массив сначала в поисках серии отрицательных элементов. Если не будет серии отрицательных элементов, удовлетврояющих условию(>3), то индекс обнуляться не будет
               }                                      
        }
Добавлено через 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
#include <iostream>
 
using namespace std;
 
int main()
{
    int a[10] = {1, -2, -3, -4, 5, -6, -7, -8, -9, 10};
    int x=10;
    cout<<endl<<endl<<"MAXSIMALNII ILEMENT:";
int max=0; //в этой переменной будет содержаться максимальное значение
for (int i=0; i<x; i++)
    if(a[i]>max)    //сравнивать нужно именно с этой переменной
        max=a[i];   //И присваивать нужно именно значение, а не индекс
        cout<< "Max = "<<max<<endl<<endl;
int k=0;
for (int i=0;i<x;i++) 
       {
        k=0;
        if(a[i]<0)
           while ((a[i]<0)&&(i<x))   //Будет проходить массив, пока встречаются отрицательные элементы И не достигнут конец массива
               {
                    k++;   //Считает длину серии отрицательных элементов
                    i++;   //Увеличивает индекс массива на 1, таким образом обрабатывая следующий элемент массива
               }
 
               if (k>=3) 
               {     
                      a[i-k]=max;   //замена первого элемента серии на максимальный
                      x-=(k-1);      //изменение размера массива в соответствии с длинной серии
                      for (int j=i-k+1;j<x;j++)   //цикл изменения массива, начинается от второго элемента серии
                          a[j]=a[j+k-1];    //сама замена элементов, на элементы, идущие после последнего элемента серии
                i=0;  //обнуление индекса до 0, чтобы пройти массив сначала в поисках серии отрицательных элементов. Если не будет серии отрицательных элементов, удовлетврояющих условию(>3), то индекс обнуляться не будет
               }                                      
        }    
        
for (int i=0;i<x;i++)
cout<<a[i]<<" ";
   return 0;
}
 
Текущее время: 05:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru