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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
#1

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

07.07.2014, 21:38. Просмотров 974. Ответов 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]);

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

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

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

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

Преобразовать массив таким образом, чтобы в его первой половине расположились элементы, стоящие в четных позициях - C++
Всем привет. Не знаю как сделать одно из 4 заданий по работе с массивами: 4)превратить массив таким образом, чтобы в его первой половине...

В первой половине массива расположить элементы из четных позиций - C++
Помогите пожалуйста.В одномерном массиве состоящем из n целых элементов, вычислить. минимальный по модулю элемент массива.- его я сделал...

Преобразовать массив, поместив в начало элементы, стоявшие в чётных позициях, а в конец — стоявшие в нечётных - C++
Я написал код, который просто выводит елементы так как указано в условие, но надо сам массив &quot;пересортировать&quot;, каким образом ето сделать? ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
07.07.2014, 22:09 #2
Если по модулю, то
C++
1
minabs>abs(array[i])
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
Сообщений: 26
07.07.2014, 22:24 #4
Человек, не нужно ставить в выводе "&" перед minabs!!!
зачем ты адрес его выводишь =DDDD

Добавлено через 2 минуты
И в третьей задаче лучше цикл начать с 1. Смысл делать один лишний шаг, добавляя ноль((
+ к скорости работы программы
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
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
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:28  [ТС] #6
Цитата Сообщение от alexkrasny Посмотреть сообщение
Человек, не нужно ставить в выводе "&" перед minabs!!!
зачем ты адрес его выводишь =DDDD

Блин, Блин, Блин.
Точно. это же вывод)
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
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
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
Сообщений: 26
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
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
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
Сообщений: 26
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
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
07.07.2014, 22:46 #12
Цитата Сообщение от alexkrasny Посмотреть сообщение
вот тут флаги и условия лишнее!
- Время работы программы увеличится
- Лишняя переменная bool flag
Это задание 1 курса - о какой производительности ты говоришь )))
Напишите Ваш код без лишней переменной и проверки ))))
CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:48  [ТС] #13
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
И у вас в коде при вводе n проверять не будет ли она больше 20. А то программа рухнит.
это пустяк, потом сделаю.

мне бы с массивом сейчас разобраться.
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
07.07.2014, 22:50 #14
Цитата Сообщение от CovCek Посмотреть сообщение
мне бы с массивом сейчас разобраться.
Будут вопросы пиши. И да, спасибо за спасибки, мне было очень весело тратить время на задачи 1 курса))))
CovCek
6 / 6 / 4
Регистрация: 23.05.2014
Сообщений: 184
07.07.2014, 22:54  [ТС] #15
Цитата Сообщение от CovCek Посмотреть сообщение
Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях, а во второй – на нечетных позициях.
А как сделать проверку по позициям?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2014, 22:54
Привет! Вот еще темы с ответами:

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

Найти максимальные элементы массива в первой и во второй его половине - C++
В массиве Х(N) найти max1– максимальный элемент в первой половине массива и max2– максимальный элемент во второй половине массива. надо...

Построить массив В, содержащий элементы массива А, стоящие в четных позициях и отсортировать его - C++
Здравствуйте господа программисты) Очень нужна ваша помощь в написании программы на языке С++, пожалуйста не проходите мимо, и я буду...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.07.2014, 22:54
Ответ Создать тему
Опции темы

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