С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
#1

Массив(чётные и нечётные числа) - C++

19.09.2012, 10:39. Просмотров 10863. Ответов 39
Метки нет (Все метки)

помогите, пожалуйста, написать программу:
нужно в массиве, в его начало, поставить сначала все четные числа, а затем нечётные...затем посчитать количество чётных чисел в массиве(массив можно ввести с клавиатуры, а можно через "srand").
Делать это нужно путём перестановки элементов в массиве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2012, 10:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив(чётные и нечётные числа) (C++):

Массив(чётные и нечётные числа) - C++
помогите, пожалуйста, написать программу: нужно в массиве, в его начало, поставить сначала все четные числа, а затем нечётные...затем...

Дан массив из N элементов. В нём чётные числа заменить на 0, а нечётные на -1 - C++
Помогите пожалуйста с задачей Дан массив из N элементов. В нём чётные числа заменить на 0, а нечётные на -1, Вывести на экран монитора...

Из заданного массива C записать в массив А чётные положительные элементы, а в массив В нечётные отрицательные - C++
Здравствуйте всем, помогите пожалуйста решить задачи по С++, контрольная горит, буду очень благодарен) 1) Дан массив С(10)....

Напечатать отдельно чётные и нечётные числа массива в отсортированном виде - C++
задачка такая, надо отсортировать цифры, и напечатать отдельно четные и нечетные цыфри я отсортировал, а дальше как надо ??? прощу...

Отсортировать массив, поставив сначала чётные элементы, а потом нечётные - C++
Люди добрые помогите пожалуйста! мне нужно заполнить двумерный массив А случайными целыми числами от –1000 до +1000 и отсортировать...

Скопировать чётные элементы из массива X в массив Y, а нечётные элементы в массив Z - C++
Ребята помогите пожалуиста скопировать четные елементы из масива X в масив Y и нечетные елементы в масив Z. Я использою Дев С++. ...

39
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.09.2012, 21:14 #16
Micki, в прямом:
C++
1
int m=0,l,i=0,k=0; //присвоить здесь l=0
0
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
21.09.2012, 21:18  [ТС] #17
Цитата Сообщение от BumerangSP Посмотреть сообщение
Micki, в прямом:
вот что в итоге выходит: http://gyazo.com/c1718f20054b03a539f7b2c0b8844a8c.png?1348246836
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.09.2012, 21:43 #18
Micki, хм, проверял на dev-cpp, visual c++ 2008, все хорошо работает.
0
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 16:19  [ТС] #19
Цитата Сообщение от BumerangSP Посмотреть сообщение
Micki, хм, проверял на dev-cpp, visual c++ 2008, все хорошо работает.
а вы точно такой же массив вводите(1 2 3 4 5 6 7 8 9 10), да? и программа выдаёт на выходе цифру 10?
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 16:37 #20
Micki, нет, программа выдает 123456789 при таком же примере.
0
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 16:58  [ТС] #21
Цитата Сообщение от BumerangSP Посмотреть сообщение
Micki, нет, программа выдает 123456789 при таком же примере.
а разве не должна выдавать 10? так как не убывающая последовательность состоит из 10 элеиентов? или я где-то чего-то не так понимаю?
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 17:25 #22
Так: здесь я спросил: http://www.cyberforum.ru/cpp/thread654324.html#post3470579 Ответ был "да". Т.е нужно просто длину вывести?

Добавлено через 11 минут
И еще: Вы вводили через пробелы числа? Тогда это все меняет: я ведь использовал строку, а не массив, отсюда такие различия.
0
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 17:52  [ТС] #23
Цитата Сообщение от BumerangSP Посмотреть сообщение
Так: здесь я спросил: http://www.cyberforum.ru/cpp/thread654324.html#post3470579 Ответ был "да". Т.е нужно просто длину вывести?

Добавлено через 11 минут
И еще: Вы вводили через пробелы числа? Тогда это все меняет: я ведь использовал строку, а не массив, отсюда такие различия.
упс, ссори...мой косяк. Я Ваш вопрос не так для себя разьяснил. Начнём всё с начала
На экран нужно вывести максимальную длинну неубывающей последовательности какого-то массива(массив можно ввести с помощью "srand", а можно вручную)
Пример: 1 2 3 4 5 6 7 8 9 10
Программа даёт ответ: 10
Я, по сути написал такую программу ,но преподователь забраковал её, приведя ме такой пример при котором программа работает неверно, вот фото: http://www.imageup.ru/img274/1048564/dsc_0136.jpg только вот я уме не приложу, что там не так
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 18:02 #24
Micki, мой код в данный момент походит на Ваш. А пример тот самый есть?
0
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 18:39  [ТС] #25
Цитата Сообщение от BumerangSP Посмотреть сообщение
Micki, мой код в данный момент походит на Ваш. А пример тот самый есть?
на том фото и есть тот самый пример. Там он(преподователь) ввёл(задал) массив из 11 элементов ,а искать максимальную длину неубывающей последовательности он попросил программу среди 10 элементов этого массива...в итоге в ответе печатается 1, хотя по замыслу должна выводить 10.
вот моя программа без изменений преподователя(но там вроде как есть ошибки): http://www.imageup.ru/img247/1050183/dsc_0134.jpg
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 19:09 #26
А так прокатит?
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
#include <iostream>
#include <iomanip>
const int n = 5; //размер последовательности
int main()
{
 int i;
 int* a = new int [n];
 std::cout<<"Input "<<n<<" numbers: ";
 for (i=0;i<n;i++)
  std::cin>>a[i];
 std::cout<<'\n';
 for (i=0;i<n;i++)
  std::cout<<a[i]<<std::setw(4); 
 int m=0,k=0;
 int j=1;
 for (i=n-1;i>=-1;i--)
  {
   if (i==0)
    j=0;
   if ((a[i]>=a[i-j])&&(i>=0))
    k++;
   else
    if (k>0)
    {
     if (k>m)
      {     
       m=k;
       if (i>0)
        m++;
      }
     k=0;
    }
   }
 if (m==1)
  m=0;
 std::cout<<std::endl<<"The longest: "<<m<<'\n';
 delete[] a; 
 system("pause");
 return 0;
}
Сорри, на ум больше ничего не приходит(
0
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
22.09.2012, 19:15  [ТС] #27
Цитата Сообщение от BumerangSP Посмотреть сообщение
А так прокатит?...Сорри, на ум больше ничего не приходит(
спасибо большое! и как всегда, если можно- каждую строчку расписать? И в кратце принцип действия этой программы(всмысли, что она делает последовательно...т.ч. берёт первый элемент ,сравнивает с предыдущим...меняет местами)
Спасибо
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.09.2012, 19:33 #28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <boost/lambda/lambda.hpp>
 
int main()
{
    using namespace boost::lambda;
    
    srand( time(0) );
    std::vector< int > arr(rand() % 30);
    std::generate(arr.begin(), arr.end(), rand);
    std::cout << "Before: ";
    std::for_each(arr.begin(), arr.end(), std::cout << _1 << " ");
    int even_count = std::partition(arr.begin(), arr.end(), !(_1 % 2) ) - arr.begin();
    std::cout << "\nAfter: ";
    std::for_each(arr.begin(), arr.end(), std::cout << _1 << " ");
    std::cout << "\nEven count: " << even_count << std::endl;
}
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
22.09.2012, 19:44 #29
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
const int n = 5; //размер последовательности
int main()
{
 int i;
 int* a = new int [n];
 std::cout<<"Input "<<n<<" numbers: ";
 for (i=0;i<n;i++)
  std::cin>>a[i];
 std::cout<<'\n';
 for (i=0;i<n;i++)
  std::cout<<a[i]<<std::setw(4); 
 int m=0,k=0;
 int j=1;
 for (i=n-1;i>=-1;i--) //начинаем чтения массива с конца
  {
   if (i==0) //предотвращение ошибки чтения за границей массива (в начале)
    j=0;
   if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
    k++;
   else
    if (k>0) //если нашли хоть что-то
    {
     if (k>m)
      {     
       m=k; //записываем
       if (i>0) //на случай, если послед-ть не на краях массива
        m++;
      }
     k=0;
    }
   }
 if (m==1) //в случаях, когда посл-ти вообще нет, может выйти 1, тоже исправляем
  m=0;
 std::cout<<std::endl<<"The longest: "<<m<<'\n';
 delete[] a; 
 system("pause");
 return 0;
}
1
Micki
227 / 3 / 0
Регистрация: 01.04.2010
Сообщений: 145
24.09.2012, 21:18  [ТС] #30
Цитата Сообщение от BumerangSP Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
const int n = 5; //размер последовательности
int main()
{
 int i;
 int* a = new int [n];
 std::cout<<"Input "<<n<<" numbers: ";
 for (i=0;i<n;i++)
  std::cin>>a[i];
 std::cout<<'\n';
 for (i=0;i<n;i++)
  std::cout<<a[i]<<std::setw(4); 
 int m=0,k=0;
 int j=1;
 for (i=n-1;i>=-1;i--) //начинаем чтения массива с конца
  {
   if (i==0) //предотвращение ошибки чтения за границей массива (в начале)
    j=0;
   if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
    k++;
   else
    if (k>0) //если нашли хоть что-то
    {
     if (k>m)
      {     
       m=k; //записываем
       if (i>0) //на случай, если послед-ть не на краях массива
        m++;
      }
     k=0;
    }
   }
 if (m==1) //в случаях, когда посл-ти вообще нет, может выйти 1, тоже исправляем
  m=0;
 std::cout<<std::endl<<"The longest: "<<m<<'\n';
 delete[] a; 
 system("pause");
 return 0;
}
а можешь на словах объяснить принцип этого алгоритма? К примеру: берётся последний элемент массива, сравнивается с предпоследним, если он меньше предпоследнего, то k увеличиваем на один...если к больше m, то k=m...т.ч мне не понятна переменная j
Цитата Сообщение от BumerangSP Посмотреть сообщение
int m=0,k=0;
int j=1;
for (i=n-1;i>=-1;i--) //начинаем чтения массива с конца
{
if (i==0)
j=0;
if ((a[i]>=a[i-j])&&(i>=0)) //сравнение
k++;
П.с: понимаю, что уже надоел вам, но хотелось бы до конца разобраться в поставленной задаче
0
24.09.2012, 21:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 21:18
Привет! Вот еще темы с ответами:

Расположить чётные числа массива в порядке возрастания, а нечётные в порядке убывания - C++
Требуется расположить чётные числа в порядке возрастания, а не чётные в порядке убывания. Относительного расположения чисел не менять. С...

Вывести чётные и нечётные элементы - C++
ЗДАСТВУЙТЕ ! не могу понять в чём ошибка,вроде всё правильно... &quot;в матрице а четные элементы разделить на 4,а к нечетным прибавить...

Чётные и нечётные номера элементов массивов - C++
задача: в одномерном массиве состоящем из n целых элементов вычислить: 1)произведение элементов массива с четными номерами 2)сумму...

Отсортировать чётные элементы по возрастанию, а нечётные по убыванию - C++
Вот условие(могу кое где ошибаться в правильности постановки задачи) Составить одномерный массив, в котором бы выводилось 20(или более)...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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