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

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

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

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

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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2014, 21:38
Ответы с готовыми решениями:

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

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

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

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

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

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

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

мне бы с массивом сейчас разобраться.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
07.07.2014, 22:50 14
Цитата Сообщение от CovCek Посмотреть сообщение
мне бы с массивом сейчас разобраться.
Будут вопросы пиши. И да, спасибо за спасибки, мне было очень весело тратить время на задачи 1 курса))))
1
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
07.07.2014, 22:54  [ТС] 15
Цитата Сообщение от CovCek Посмотреть сообщение
Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.
А как сделать проверку по позициям?
0
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
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;
           }
}
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
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]);
 
 
}
1
6 / 5 / 8
Регистрация: 23.05.2014
Сообщений: 212
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, ...), а с четными все норм.
0
10.07.2014, 11:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2014, 11:53
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru