Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 20:34   #1
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию Вывод четных числе из динамического массива (C++)

Собственно, вот задача. Вместо четных чисел из массива выводит все его элементы. ЧЯДНТ?

Код:
	

    #include <iostream>
    #include <conio.h>
     
    using namespace std;
     
    int main()
    {
    setlocale(LC_ALL, "Russian");
    int n, a = 0;
    for(;;)
    {
    cout << "Кол-во элементов в массиве: ";
    cin >> n;
    int*mas = new int[n];
    cout << "Такие элементы массива: ";
    for(int i = 0; i < n; i++)
    {
        mas[i] = n - i;
        if((i - mas[i]) < 0)
        {
       if(((-i + mas[i]) % 2) == 0)
    { cout << mas[i] << ", ";
    a = a + 1;
    }
        }
        else
        {
            if(((i - mas[i]) % 2) == 0)
       { cout << mas[i] << ", ";
         a = a + 1;
          }
        }
    }
    cout << endl;
    if(a == 0)
    {
    cout << "Нет таких элементов!" << endl;
    }
    delete[]mas;
    }
    getch();
    return 0;
    }

Тоже самое, но через функции: http://pastebin.com/7nJPti9N

Последний раз редактировалось Cynically; 29.09.2013 в 20:39.
Cynically вне форума Ответить с цитированием
Старый 29.09.2013, 20:38   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

А зачем такие проверки сложные?
Код:
for (int i = 0; i < n; ++i) {
  mas[i] = n - i;
  if (mas[i] % 2 == 0) {
    cout << mas[i] << " ";
    ++a;
  }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.09.2013, 20:43   #3
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А зачем такие проверки сложные?
Код:
for (int i = 0; i < n; ++i) {
  mas[i] = n - i;
  if (mas[i] % 2 == 0) {
    cout << mas[i] << " ";
    ++a;
  }
}

Прошу прощения. Я некорректно выразился. Вывести надо элементы массива, для которых модуль разность между номером элемента и его значением является четным числом. На всякий случай, ещё раз запощу тут ссылку на условия задачи. http://goo.gl/5r0s1a

Увы, но поправить заголовок не могу.

Последний раз редактировалось Cynically; 29.09.2013 в 20:45.
Cynically вне форума Ответить с цитированием
Старый 29.09.2013, 20:47   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Тогда:
Код:
for (int i = 0; i < n; ++i) {
  mas[i] = n - i;
  if ((i - mas[i]) % 2 == 0) {
    cout << mas[i] << " ";
    ++a;
  }
}
i - mas[i] = i - (n - i) = 2 * i - n
=>
выведет все числа при чётном n или никаких - при нечётном
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 29.09.2013 в 20:50.
BDA вне форума Ответить с цитированием
Старый 29.09.2013, 20:55   #5
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Тогда:
Код:
for (int i = 0; i < n; ++i) {
  mas[i] = n - i;
  if ((i - mas[i]) % 2 == 0) {
    cout << mas[i] << " ";
    ++a;
  }
}
i - mas[i] = i - (n - i) = 2 * i - n
=>
выведет все числа при чётном n или никаких - при нечётном

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

Последний раз редактировалось Cynically; 29.09.2013 в 21:04.
Cynically вне форума Ответить с цитированием
Старый 29.09.2013, 20:57   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

1) Не нужно рассматривать знак разности
2) Выводить должно или все элементы, или ни одного (если это так, то работает верно)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.09.2013, 21:00   #7
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
1) Не нужно рассматривать знак разности
2) Выводить должно или все элементы, или ни одного (если это так, то работает верно)
Нет, это не так. Должно выводить только те элементы массива, у которых модуль разности номера элемента и самого элемента - четный.
Cynically вне форума Ответить с цитированием
Старый 29.09.2013, 21:04   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Цитата:
Сообщение от Cynically Посмотреть сообщение
Нет, это не так. Должно выводить только те элементы массива, у которых модуль разности номера элемента и самого элемента - четный.
Честно говоря, у меня нету желания и времени Вас разубеждать.
Еще разок:
i - mas[i] = i - (n - i) = 2 * i - n
(2 * i - n) % 2 эквивалентно n % 2
Из этого следует, что только от числа n зависит, будет или нет выведен элемент на экран. Из-за независимости от i получается, что элементы или будут выведены все, или не выведено ни одного. Если Вы будете оспаривать это, то больше объяснений от меня не будет
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.09.2013, 21:10   #9
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Из-за независимости от i получается, что элементы или будут выведены все, или не выведено ни одного.
Можно тут поподробнее. Что вы понимаете под независимостью от i?
Cynically вне форума Ответить с цитированием
Старый 29.09.2013, 21:18   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Для каждого элемента разность равна 2 * i - n. Это число делится на 2 тогда же, когда и n, так как 2 * i, очевидно, делится на 2 без остатка.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка и вывод динамического структурированого массива zorg-kirill Помощь студентам 10 11.11.2012 22:43
Заполнение динамического массива данными из файла и последующий вывод на экран vitalyisaev2 Общие вопросы C/C++ 5 08.09.2010 12:51
вывод совершенных числе в Pascal otlichniza Помощь студентам 3 12.11.2009 10:37
вывод динамического массива на экран Arcueid1691 Общие вопросы C/C++ 2 15.10.2009 22:53