Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,778
1

Как изменить значение элемента массива на противоположному по знаку?

30.04.2016, 01:34. Просмотров 882. Ответов 2
Метки нет (Все метки)

Здравствуйте.
Пишу консольку на VC++.
По условии задачи есть массив размерностью 100 целых чисел(одномерный).Заполняется рандомно. Диапазон значений от минус 50 до +50.
Цитирую задание.
Нужно во всех последовательностях позитивных чисел сменить порядок элементов на противоположный.

Добавлено через 24 минуты
Допустим вот код

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
#include <conio.h> 
#include "stdafx.h" 
#include <conio.h>
#include <string>
#include <windows.h>
#include <iostream>
#include <cstdlib> // содержит srand() и rand()
#include <time.h>
using namespace std;
 // функция генерации случайного числа из диапазона от range_min до 
 
range_max включительно
int rrand(int range_min, int range_max) {
    return rand() % (range_max - range_min + 1) + range_min;
}
 
const unsigned int ARRSIZE = 100;
const int min = -50;
const int max = 50;
int ar[ARRSIZE];
int br[ARRSIZE];//массив дя замены
int main() {
srand(static_cast<unsigned int>(time(NULL)));
        cout << endl;
   // инициализация массива случайными значениями из диапазона 
 
-//min..max
    for (unsigned int i = 0; i < ARRSIZE; i++) {
        ar[i] = rrand(min, max);
    }
br[i]=ar[i];
//печатаем  ar[i]
  for (unsigned int ii = 0; ii < ARRSIZE; ii++) {
       cout<<ar[i]<<endl;
    }
 system("pause");
    return 0; 
}
Нужно во всех последовательностях позитивных чисел сменить порядок элементов на противоположный.

Добавлено через 5 часов 4 минуты
Например у нас есть последовательность чисел до замены 3,2,-4,1,9,7,-6,-8;5;16(всего 10 чисел)
после замены
2,3,-4,7,9,1,-6,-8,16,5
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2016, 01:34
Ответы с готовыми решениями:

Изменить значение элемента массива, не выводя его заново
Хочу написать морской бой (немного необычный). В начале кода я вывожу два массива если кому-то...

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

Как изменить значение value у элемента hidden?
По шелчку на ссылке значение эл-та hidden должно изменяться на 1 или -1 (Да или Нет). У меня не...

Как изменить размер элемента массива? C#
очень надо)

Если среди всех элементов массива, расположенных левее данного, есть меньшее значение, у данного элемента следует изменить знак
Найти минимальное значение элементов массива. Вывести на дисплей полученное значение. После этого...

2
falsecoder
0 / 0 / 1
Регистрация: 28.04.2016
Сообщений: 7
30.04.2016, 03:40 2
Лучший ответ Сообщение было отмечено scherbakovss201 как решение

Решение

Держи, вопросов возникнуть не должно, идентификаторы со смыслом

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <cstdio>
#include <cstdlib>
#include <ctime>
 
#define RAND_INIT srand(time(0))
 
bool find_unsigned_sequence(int arr[], int size, int search_from, int* start, int* end)
{
    if(size <= 2) 
        return false; 
 
    *start = 0;
    *end = 0;
 
    bool in_sequence = false;
 
    for(int i = search_from; i < size; i++)
    {
        if(i == (size - 2))
        {
            if(arr[size - 1] > 0 && arr[size - 2] > 0)
            {
                if(!in_sequence)
                    *start = size - 2;
 
                *end = size - 1;
 
                return true;
            }
        }
 
        if(arr[i] >= 0)
        {
            if(!in_sequence)
                *start = i;
 
            in_sequence = true;
        }
        else
        {
            if(in_sequence)
                *end = i;
 
            in_sequence = false;
 
            if(*end - *start > 1)
            {
                (*end)--;
 
                return true;
            }
 
            *end = 0;
            *start = 0;
        }
    }
 
    return false;
}
 
int get_signed_rand(const unsigned int value)
{
    return (rand() % value) * ((rand() % 2 == 1) ? -1 : 1);
}
 
void print_array(int arr[], int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("%5d", arr[i]);
    }
 
    putchar('\n');
}
 
void reverse_array_cut(int arr[], int from, int to)
{
    to++;
 
    int size = to - from;
 
    if(size <= 1)
        return;
 
    int* temp = new int[size];
 
    for(int i = to - 1, j = 0; i >= from; i--, j++)
        temp[j] = arr[i];
 
    for(int i = from, j = 0; i < to; i++, j++)
        arr[i] = temp[j];
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    RAND_INIT;
 
    const int size = 100;
 
    int arr[size];
 
    for(int i = 0; i < size; i++)
    {
        arr[i] = get_signed_rand(50);
    }
 
    puts("\nArray before:\n");
    print_array(arr, size);
 
    int* start = new int(0);
    int* end = new int(0);
    int last_sequence = 0;
    putchar('\n');
    while(find_unsigned_sequence(arr, size, last_sequence, start, end))
    {
        reverse_array_cut(arr, *start, *end);
        last_sequence = *end + 1;
        
        //Info
        printf("Reversing array from entry %3d to %3d incl. (sequence of %d numbers)\n", 
            *start, *end, (*end - *start) + 1);
 
        *start = 0;
        *end = 0;
    }
 
    if(!last_sequence)
        puts("\nNo sequences in this array.\n");
 
    puts("\nArray after:\n");
    print_array(arr, size);
 
    puts("\nPress <Enter> to continue...");
    getchar();
 
    return 0;
}
Добавлено через 32 минуты
Забыл освободить память в reverse_array_cut, добавь в конец функции (строка 92)
C++
1
delete[] temp;
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,778
02.05.2016, 20:24  [ТС] 3
Этот код тоже рабочий. Объясните построчно,что делаем что в каком месте и для чего делаеться?))
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
#include "stdafx.h"
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
int random()
{
return (rand() % 101) - 50;
}
int main(void)
{
    vector<int> vNumbers(100);
    generate_n(vNumbers.begin(), 100, random);
    vector<int>::iterator itrBegin = vNumbers.begin(),
        itrEnd = vNumbers.begin();
    cout << "Before:\n";
    copy(vNumbers.begin(), vNumbers.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    while ((itrBegin = find_if(itrEnd, vNumbers.end(), bind2nd(greater<int>(), 0))) !=
        vNumbers.end())
    {
        itrEnd = find_if(itrBegin, vNumbers.end(), bind2nd(less<int>(), 0));
        reverse(itrBegin, itrEnd);
    }
    cout << "\nAfter:\n";
    copy(vNumbers.begin(), vNumbers.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    system("pause");
    return EXIT_SUCCESS;
}
Добавлено через 17 часов 27 минут
работает код с векторами но не знаю как.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2016, 20:24

Поменять местами значение первого четного элемента массива со значением последнего нечетного элемента массива.
Дан массив С(30). Поменять местами значение первого четного элемента массива со значением...

Поменять местами значение первого четного элемента массива со значением последнего нечетного элемента массива
34. Дан массив С(30). Поменять местами значение первого четного элемента массива со значением...

Заполнить массив С(10) случайными значениями, изменить значение элемента и напечатать его новое значение
Заполнить массив С(10) случайными значениями.Присвоить указателю 3-го элемента содержимое 10-го...


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

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

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