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

Все четные элементы, стоящие левее минимального, уменьшить в 2 раза - C++

Восстановить пароль Регистрация
 
Shadow77
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 11
19.09.2013, 17:06     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #1
Здравствуйте, написала код к задаче "В массиве все четные элементы, стоящие левее минимального, уменьшить в 2 раза.
Пример: из массива A[5]: 3 2 1 0 4 должен получиться массив 3 1 1 0 4.", но код не работает. Помогите найти ошибку.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int N=5;
int i,A[N],y,r,min;
cout<<"Vvedite 5 chisel"<<endl;
for (i=0;i<5;i++){
cout<<"A["<<i<<"]="<<" ";
cin>>A[i];}
for (i=0;i<N;i++){
cout<<A[i]<<" ";}  
 
min=A[0];
r=0;
for (i=0; i<N; i++) {if (A[i]<min) {min=A[i];} {r=min;}}
 
for (i=0; i>r; --i) {if (i%2!=0) {A[i]=A[i]/2;} } 
cout<<A[i]<<" ";
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 17:06     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза
Посмотрите здесь:

C++ Дано число. Отбросить в нем все цифры, стоящие левее самой правой единицы.
C++ Вывести все четные элементы массива стоящие на не четных местах
Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. C++
В 1d массиве уменьшить в двое элементы кратные 2 и стоящие перед max элементам C++
C++ Дан массив целых чисел из 10 элементов.Все элементы кратные 10 заменить 0;Все нечетные элементы удвоить, а четные уменьшить на 2;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ouroboros-SK
 Аватар для Ouroboros-SK
60 / 60 / 21
Регистрация: 08.09.2013
Сообщений: 187
Записей в блоге: 1
19.09.2013, 17:44     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #2
Попробуйте 12-ю строчку заменить на:
C++
1
for (i=0; i<N; i++) {if (A[i]<min) {min=A[i];} {r=i;}
Shadow77
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 11
19.09.2013, 19:46  [ТС]     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #3
Не помогло... Он постоянно выдает лишь первый элемент массива
Ouroboros-SK
 Аватар для Ouroboros-SK
60 / 60 / 21
Регистрация: 08.09.2013
Сообщений: 187
Записей в блоге: 1
19.09.2013, 20:17     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #4
Вот так наверно будет работать. Посоветовал бы вам поработать над стилем программирования, чтобы другим проще было в коде разбираться.

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
#include <iostream>
#include <string>
 
int main()
{
    const int N = 5;
    int y, r, min;
    int A[N] = { 3, 2, 1, 0, 4};
 
    for (int i = 0; i < N; i++){
        std::cout << A[i] << " ";
    }
    std::cout << std::endl;
 
    min = A[0];
    r = 0;
    for (int i = 0; i < N; i++){
        if (A[i] < min){
            min = A[i];
            r = i;
        }
    }
 
    for (int i = r - 1; i > 0; i--){
        if ( i % 2 != 0){
            A[i] = A[i] / 2;
        }
    }
 
    for (int i = 0; i < N; i++)
        std::cout << A[i] << " ";
 
    return 0;
}
Shadow77
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 11
19.09.2013, 20:44  [ТС]     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #5
Большое спасибо! Постараюсь поработать над стилем программирования.
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
20.09.2013, 13:35     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #6
Как вариант.
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
#include<iostream>
using namespace std;
int main()
{
    int i,t,n,a[n],min;
    cout << "Length of an array: ";
    cin >> n;
    cout << "Enter the array" << endl;
    for(i=0; i<n; i++)
    {
        cout << "A[" << i << "]: ";
        cin >> a[i];
    }
    cout << "You enter: ";
    for(i=0; i<n; i++) cout << a[i] << ' ';
    cout << endl;
    min = a[0];
    t=0;
    for(i=0; i<n; i++)
    {
        if(min > a[i])
        {
        min = a[i];
        t = i;
        } 
    }
    for(i=0; i<n; i++)
    {
        if(i<t && a[i]%2==0) cout << a[i]/2 << ' ';
        else cout << a[i] << ' ';
    }
    return 0;
}
Добавлено через 9 минут
Цитата Сообщение от Shadow77 Посмотреть сообщение
В массиве все четные элементы, стоящие левее минимального, уменьшить в 2 раза.
Если под минимальным имееться ввиду минимальный четный элемент массива, то 21 строчку заменить на
C++
1
 if(min > a[i] && a[i]%2==0)
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
20.09.2013, 13:44     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #7
необязательно использовать две переменных для поиска минимального элемента в массиве
достаточно запомнить его индекс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    const int N = 5;
    int A[N];
 
    cout << "Vvedite 5 чисел: ";
    for (int i=0; i<5; i++)
        cin >> A[i];
 
    int index = 0;  // индекс с минимальным элементом в массиве
    for (int i=1; i<5; i++)
        if (A[i] < A[index])
            index = i;
 
    cout << "индекс минимального элемента " << index << endl
         << "значение этого элемента " << A[index] << endl;
         
    _getch();
    return 0;
}
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
20.09.2013, 13:57     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #8
Цитата Сообщение от _ Посмотреть сообщение
необязательно использовать две переменных для поиска минимального элемента в массиве
Ну я пока совсем дилетант, так что мне можно
Ну а вообще, приму к сведению, критика это хорошо.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
20.09.2013, 14:59     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #9
Цитата Сообщение от Drusha Посмотреть сообщение
Ну я пока совсем дилетант, так что мне можно
да здесь нет ничего сложного. вот смотрите, берем переменную index Это будет позиция минимального элемента. А если мы будем знать чему она равна, то можно легко получить значение, которое записано в этой позиции.

index - индекс минимального элемента
A[index] - это то значение, которое записано в массиве по номеру index

получается что одним выстрелом убиваем сразу двух зайцев
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
20.09.2013, 15:07     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #10
C++
1
for (i=0; i<N; i++) {if (A[i]<min) {min=A[i];} {r=min;}}
на

C++
1
2
3
4
5
6
7
8
for (i=0; i<N; i++) 
{
if (A[i]<min) 
{
min=A[i];
 r=i;
}
}
и зедсь:

C++
1
for (i=0; i>r; --i) {if (i%2!=0) {A[i]=A[i]/2;} }
на

C++
1
2
3
4
5
for (i=0; i<r; i++) 
{
if (i%2!=0) 
A[i]=A[i]/2;
 }
в 14 строчке почему --i был и i=0 должно быть i>r, когда r 4-ый элемент?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 16:52     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза
Еще ссылки по теме:

C++ Дан массив A[N]. Все положительные элементы уменьшить на значение минимального элемента
C++ Все нулевые элементы матрицы увеличить на 5, ненулевые уменьшить в 2 раза
C++ Массивы: все элементы, кратные 10, заменить 0, все нечетные элементы удвоить, а четные уменьшить в 2 раза

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

Или воспользуйтесь поиском по форуму:
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
20.09.2013, 16:52     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза #11
Цитата Сообщение от _ Посмотреть сообщение
да здесь нет ничего сложного
Я и в начале все понял, когда Вы сделали замечание, я начал учить два месяца назад, но схватываю все на лету, пока ничего тяжелого не вижу. Но спасибо за разъяснения.
Yandex
Объявления
20.09.2013, 16:52     Все четные элементы, стоящие левее минимального, уменьшить в 2 раза
Ответ Создать тему
Опции темы

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