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

Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях - C++

Восстановить пароль Регистрация
 
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 21:38     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #1
Есть массив:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main() {
    setlocale(LC_ALL,"RUSSIAN");
 
    int array[20];
    int i, n, k, min, sumabs = 0, minabs = 0;
 
    printf_s("Введите количество элементов массива: ");
    scanf_s("%d", &n);
 
 
    //Ввод массива
    for (i = 0; i<n; i++) {
        printf_s("Элемент ");
        printf_s("массива [%d]=", i);
        scanf_s("%d", &array[i]);
    }
    printf_s("Массив = [");
    for (i = 0; i<n; i++) {
        printf_s("%4d", array[i]);
    }
    printf_s(" ]\n");
Как сделать:
1. Найти минимальный по модулю элемент массива.

C++
1
2
3
4
    int minabs = array[0];
    for (int i = 0; i<n; i++)
    if (minabs>array[i])
        minabs = array[i];
Правильно думаю?

2. Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.

Второй пункт подскажите.

3. Вычислить сумму модулей элементов массива, расположенных после первого элемента равного нулю.
C++
1
array[0] = 0;
а дальше считать сумму через
C++
1
for(i=0;i<n;i++) array+=abs(array[i]);

Я все верно делаю?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2014, 21:38     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях
Посмотрите здесь:

C++ Превратить массив таким образом, чтобы в его первой половине располагались элементы, стоящие в четных позициях, а во второй половине - элементы, стоящ
Преобразовать массив таким образом, чтобы в его первой половине расположились элементы, стоящие в четных позициях C++
C++ Превратить массив так, чтобы в его первой половине располагались элементы стоящие в четных позициях а во второй половине - нечетные
Переделать массив таким образом, в первой половине располагались элементы, стоящие на четных позициях, а во второй половине - элементы в нечетных C++
Отсортировать методом быстрой сортировки элементы массива, стоящие на четных позициях C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,653
07.07.2014, 22:09     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #2
Если по модулю, то
C++
1
minabs>abs(array[i])
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:17  [ТС]     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #3
Цитата Сообщение от nmcf Посмотреть сообщение
Если по модулю, то
C++
1
minabs>abs(array[i])
а как это значение записать в минабс и потом вывести?

делаю вот так:
C++
1
2
3
4
5
for (int i = 0; i < n; i++){
        if (minabs <= abs(array[i]))
            minabs = array[i];
    }
    printf_s("Минимальное значение элемента массива по модулю: %d \n\n", &minabs);
он мне выводит в значении по модулю восьмизначное число.
Что неправильно?
alexkrasny
0 / 0 / 2
Регистрация: 07.07.2014
Сообщений: 25
07.07.2014, 22:24     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #4
Человек, не нужно ставить в выводе "&" перед minabs!!!
зачем ты адрес его выводишь =DDDD

Добавлено через 2 минуты
И в третьей задаче лучше цикл начать с 1. Смысл делать один лишний шаг, добавляя ноль((
+ к скорости работы программы
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2014, 22:25     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
 
 void main()
{
    // 1. Найти минимальный по модулю элемент массива. 
 
    srand(time(0));
    setlocale(LC_ALL,"RUSSIAN");
 
    int array[20];
    
    int n = 16; // кол эл
    for(int i=0;i<n;i++) // заполнение рандомом
        array[i] = rand()%100;
 
    for(int i=0;i<n;i++) // вывод
         printf_s("%4d", array[i]);
 
    
    int min = array[0];
    for(int i=0;i<n;i++) 
        if(abs(array[i]) < min) 
            min = abs(array[i]);
 
    printf_s("\n\Минимальное значение элемента массива по модулю: %d \n\n", min);
 
 
}
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:28  [ТС]     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #6
Цитата Сообщение от alexkrasny Посмотреть сообщение
Человек, не нужно ставить в выводе "&" перед minabs!!!
зачем ты адрес его выводишь =DDDD

Блин, Блин, Блин.
Точно. это же вывод)
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2014, 22:35     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
 
 void main()
{
    // 2. Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.
 
    srand(time(0));
    setlocale(LC_ALL,"RUSSIAN");
 
    int array[20];
    int temp[20];
 
    int n = 16; // кол эл
    for(int i=0;i<n;i++) // заполнение рандомом
        array[i] = rand()%100;
 
    for(int i=0;i<n;i++) // вывод
         printf_s("%4d", array[i]);
 
    int iterator_chetnuh = 0;
    int iterator_NE_chetnuh = n / 2; //
 
    for(int i=0;i<n;i++)
    {
        if( i % 2 == 0) // четные 0,2,4,6, ...
        {
            temp[iterator_chetnuh] = array[i];
            iterator_chetnuh++;
        }
        else
        {
            temp[iterator_NE_chetnuh] = array[i];
            iterator_NE_chetnuh++;
        }
    }
    printf_s("\n");
    for(int i=0;i<n;i++) // вывод
         printf_s("%4d", temp[i]);
 
 
}
Добавлено через 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
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
 
 void main()
{
    // 3. Вычислить сумму модулей элементов массива, расположенных после первого элемента равного нулю. 
 
    srand(time(0));
    setlocale(LC_ALL,"RUSSIAN");
 
    int array[20];
   
 
    int n = 16; // кол эл
    for(int i=0;i<n;i++) // заполнение рандомом
        array[i] = rand()%10;
 
    for(int i=0;i<n;i++) // вывод
         printf_s("%4d", array[i]);
 
    int suma = 0;
    bool flag = false;
    for(int i=0;i<n;i++)
    {
        if( array[i] == 0)
            flag = true;
 
        if(flag == true)
            suma += array[i];
    }
 
     printf_s("\n Cумму модулей элементов массива, расположенных после первого элемента равного нулю: %d \n\n", suma);
 
}
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:37  [ТС]     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #8
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
C++
1
2
3
4
5
int min = array[0];
* * for(int i=0;i<n;i++) 
* * * * if(abs(array[i]) < min) 
* * * * * * min = abs(array[i]);
printf_s("\n\Минимальное значение элемента массива по модулю: %d \n\n", min);
так тут он присваивает минимальное значение первому элементу и с ним сравнивает, а ведь надо же чтобы он среди элементов нашел минимальный.
alexkrasny
0 / 0 / 2
Регистрация: 07.07.2014
Сообщений: 25
07.07.2014, 22:39     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #9
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
for(int i=0;i<n;i++)
* * {
* * * * if( array[i] == 0)
* * * * * * flag = true;
if(flag == true)
* * * * * * suma += array[i];
* * }
вот тут флаги и условия лишнее!
- Время работы программы увеличится
- Лишняя переменная bool flag
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2014, 22:44     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #10
Цитата Сообщение от CovCek Посмотреть сообщение
так тут он присваивает минимальное значение первому элементу и с ним сравнивает, а ведь надо же чтобы он среди элементов нашел минимальный.
Что? Пример вам в помощь )

1 2 3 4 5 6 7 8 9
min = 1;
|2| < 1 ? Нет. min 1
|3| < 1 ? Нет. min 1
|4| < 1 ? Нет. min 1
...
min действительно 1 xD


9 8 7 6 5 4 3 2 1
min = 1;
|8| < 9 ? Да. min 8
|7| < 8 ? Да. min 7
|6| < 7 ? Да. min 6
...
|1| < 2 ? Да. min 1

Если вы о том, что я вместо
int min = abs(array[0]);
написал
int min = array[0];

То если массив заполнять и минусовыми то да, тогда надо и array[i] = rand()%100 - 50; ставить
И у вас в коде при вводе n проверять не будет ли она больше 20. А то программа рухнит.
alexkrasny
0 / 0 / 2
Регистрация: 07.07.2014
Сообщений: 25
07.07.2014, 22:44     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #11
Цитата Сообщение от CovCek Посмотреть сообщение
так тут он присваивает минимальное значение первому элементу и с ним сравнивает, а ведь надо же чтобы он среди элементов нашел минимальный.
Человек, ты подумай...В начале мы берем и говорим себе "Возьму ка я и подумаю что минимальный элемент это самый первый в массиве!" Взяли...Далее в цикле проверяем так ли это...Если мы не правильно подумали, и нашелся такой элемент массива, который меньше нашего минимального, а то есть НАШЕГО array[0], то просто переименуем min в тот элемент) Всё)

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
for(int i=0;i<n;i++)
* * * * if(abs(array[i]) < min)
* * * * * * min = abs(array[i]);
А ЗДЕСЬ ОПЯТЬ ЦИКЛ с НУЛЯ!! Ну ЗАПОМНИТЕ НАКОНЕЦ!! НЕ НАДО ДЕЛАТЬ ЛИШНИЕ ШАГИ В ЦИКЛЕ!!!
ЗАЧЕМ СРАВНИВАТЬ min с array[0] ЕСЛИ min=array[0]!!!! о боже(
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2014, 22:46     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #12
Цитата Сообщение от alexkrasny Посмотреть сообщение
вот тут флаги и условия лишнее!
- Время работы программы увеличится
- Лишняя переменная bool flag
Это задание 1 курса - о какой производительности ты говоришь )))
Напишите Ваш код без лишней переменной и проверки ))))
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:48  [ТС]     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #13
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
И у вас в коде при вводе n проверять не будет ли она больше 20. А то программа рухнит.
это пустяк, потом сделаю.

мне бы с массивом сейчас разобраться.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2014, 22:50     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #14
Цитата Сообщение от CovCek Посмотреть сообщение
мне бы с массивом сейчас разобраться.
Будут вопросы пиши. И да, спасибо за спасибки, мне было очень весело тратить время на задачи 1 курса))))
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:54  [ТС]     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #15
Цитата Сообщение от CovCek Посмотреть сообщение
Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.
А как сделать проверку по позициям?
alexkrasny
0 / 0 / 2
Регистрация: 07.07.2014
Сообщений: 25
07.07.2014, 22:55     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #16
Это легче чем использовать флаги и 2 условия

C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<n;i++)
{
      if(array[i]==0)
          {
                   for(int j=i+1;j<n;j++)
                         summ+=abs(array[j]);
            break;
           }
}
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2014, 23:30     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #17
Цитата Сообщение от CovCek Посмотреть сообщение
А как сделать проверку по позициям?
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
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
 
 void main()
{
    // 2. Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.
 
    srand(time(0));
    setlocale(LC_ALL,"RUSSIAN");
 
    int array[20]; // наш массив
    int temp[20]; // новый массив куда будем записывать уже у порядочные данные
 
    int n = 16; // кол эл
    for(int i=0;i<n;i++) // заполнение рандомом
        array[i] = rand()%100;
 
    for(int i=0;i<n;i++) // вывод
         printf_s("%4d", array[i]);
 
    int iterator_chetnuh = 0;
    int iterator_NE_chetnuh = n / 2; // начинаем запись с середины
 
    for(int i=0;i<n;i++)
    {
        if( i % 2 == 0) // четные 0,2,4,6, ...  записываем в новый массив temp[] на места от 0 до середины
        {
            temp[iterator_chetnuh] = array[i];
            iterator_chetnuh++;
        }
        else // не четные
        {
            temp[iterator_NE_chetnuh] = array[i];// записываем в новый массив temp[] на места от середины до конца
            iterator_NE_chetnuh++;
        }
    }
    printf_s("\n");
    for(int i=0;i<n;i++) // вывод
         printf_s("%4d", temp[i]);
 
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 11:53     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях
Еще ссылки по теме:

C++ В первой половине массива расположить элементы из четных позиций
C++ Найти максимальные элементы массива в первой и во второй его половине
Преобразовать массив, чтобы в первой его половине распологались элементы стоявишие в четных позициях C++

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

Или воспользуйтесь поиском по форуму:
CovCek
 Аватар для CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
10.07.2014, 11:53  [ТС]     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях #18
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int iterator_chetnuh = 0;
* * int iterator_NE_chetnuh = n / 2; // начинаем запись с середины
for(int i=0;i<n;i++)
* * {
* * * * if( i % 2 == 0) // четные 0,2,4,6, ... *записываем в новый массив temp[] на места от 0 до середины
* * * * {
* * * * * * temp[iterator_chetnuh] = array[i];
* * * * * * iterator_chetnuh++;
* * * * }
* * * * else // не четные
* * * * {
* * * * * * temp[iterator_NE_chetnuh] = array[i];// записываем в новый массив temp[] на места от середины до конца
* * * * * * iterator_NE_chetnuh++;
* * * * }
* * }
* * printf_s("\n");
* * for(int i=0;i<n;i++) // вывод
* * * * *printf_s("%4d", temp[i]);
Кстати здесь ошибка. работает неправильно с нечетным количеством элементов массива. (3, 5, ...), а с четными все норм.
Yandex
Объявления
10.07.2014, 11:53     Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях
Ответ Создать тему
Опции темы

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