Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212

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

07.07.2014, 21:38. Показов 4678. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив:

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]);

Я все верно делаю?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2014, 21:38
Ответы с готовыми решениями:

Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях
Сформировать массив 50 целых случайных чисел в диапазоне от 0 до 60. Напечатать его. Преобразовать массив таким образом, чтобы в первой...

Превратить массив так, чтобы в его первой половине располагались элементы стоящие в четных позициях а во второй половине - нечетные
в массиве вычислить: 3) превратить массив таким образом, чтобы в его первой половине располагались элементы стоящие в четных позициях...

Переделать массив таким образом, в первой половине располагались элементы, стоящие на четных позициях, а во второй половине - элементы в нечетных
Превратить массив таким образом, чтобы в первой половине располагались элементы, стоящие на четных позициях, а во второй половине -...

17
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.07.2014, 22:09
Если по модулю, то
C++
1
minabs>abs(array[i])
0
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
07.07.2014, 22:17  [ТС]
Цитата Сообщение от 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);
он мне выводит в значении по модулю восьмизначное число.
Что неправильно?
0
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
07.07.2014, 22:24
Человек, не нужно ставить в выводе "&" перед minabs!!!
зачем ты адрес его выводишь =DDDD

Добавлено через 2 минуты
И в третьей задаче лучше цикл начать с 1. Смысл делать один лишний шаг, добавляя ноль((
+ к скорости работы программы
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 22:25
Лучший ответ Сообщение было отмечено 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
#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);
 
 
}
1
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
07.07.2014, 22:28  [ТС]
Цитата Сообщение от alexkrasny Посмотреть сообщение
Человек, не нужно ставить в выводе "&" перед minabs!!!
зачем ты адрес его выводишь =DDDD

Блин, Блин, Блин.
Точно. это же вывод)
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 22:35
Лучший ответ Сообщение было отмечено 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[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);
 
}
1
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
07.07.2014, 22:37  [ТС]
Цитата Сообщение от 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);
так тут он присваивает минимальное значение первому элементу и с ним сравнивает, а ведь надо же чтобы он среди элементов нашел минимальный.
0
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
07.07.2014, 22:39
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
for(int i=0;i<n;i++)
* * {
* * * * if( array[i] == 0)
* * * * * * flag = true;
if(flag == true)
* * * * * * suma += array[i];
* * }
вот тут флаги и условия лишнее!
- Время работы программы увеличится
- Лишняя переменная bool flag
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 22:44
Цитата Сообщение от 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. А то программа рухнит.
0
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
07.07.2014, 22:44
Цитата Сообщение от 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]!!!! о боже(
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 22:46
Цитата Сообщение от alexkrasny Посмотреть сообщение
вот тут флаги и условия лишнее!
- Время работы программы увеличится
- Лишняя переменная bool flag
Это задание 1 курса - о какой производительности ты говоришь )))
Напишите Ваш код без лишней переменной и проверки ))))
1
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
07.07.2014, 22:48  [ТС]
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
И у вас в коде при вводе n проверять не будет ли она больше 20. А то программа рухнит.
это пустяк, потом сделаю.

мне бы с массивом сейчас разобраться.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 22:50
Цитата Сообщение от CovCek Посмотреть сообщение
мне бы с массивом сейчас разобраться.
Будут вопросы пиши. И да, спасибо за спасибки, мне было очень весело тратить время на задачи 1 курса))))
1
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
07.07.2014, 22:54  [ТС]
Цитата Сообщение от CovCek Посмотреть сообщение
Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.
А как сделать проверку по позициям?
0
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
07.07.2014, 22:55
Это легче чем использовать флаги и 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;
           }
}
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 23:30
Цитата Сообщение от 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]);
 
 
}
1
 Аватар для CovCek
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
10.07.2014, 11:53  [ТС]
Цитата Сообщение от 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, ...), а с четными все норм.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2014, 11:53
Помогаю со студенческими работами здесь

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

Преобразовать массив, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй элементы, стоявшие в нечетных
В одномерном массиве , состоящем из N целых элементов , вычислить : 1. минимальный по модулю элемент массива ; 2. сумму модулей...

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru