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

Напечатать элементы индекса - C++

Восстановить пароль Регистрация
 
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 18:34     Напечатать элементы индекса #1
Дан целочисленный массив с количеством элементов n. Напечатать те его элементы, индексы которых являются степенями двойки (1,2,4,8,16...)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2013, 18:34     Напечатать элементы индекса
Посмотрите здесь:

Напечатать элементы массива в виде двух параллельных столбцов C++
C++ Файлы:Напечатать все элементы типизированного файла
C++ Бинарные деревья. Напечатать все элементы дерева Т по уровням
C++ Найти наименьшие элементы в каждой матрице и напечатать их номера
В данном линейном целочисленном массиве каждый элемент с четным индексом увеличить на значение индекса, с нечетным — уменьшить на значение индекса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zig_Stas
8 / 8 / 1
Регистрация: 26.10.2013
Сообщений: 55
29.10.2013, 19:06     Напечатать элементы индекса #2
Цитата Сообщение от Владиславик Посмотреть сообщение
Дан целочисленный массив с количеством элементов n. Напечатать те его элементы, индексы которых являются степенями двойки (1,2,4,8,16...)
Какой массив должен быть? Динамический может быть?
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
29.10.2013, 19:11     Напечатать элементы индекса #3
Цитата Сообщение от Владиславик Посмотреть сообщение
Дан целочисленный массив с количеством элементов n. Напечатать те его элементы, индексы которых являются степенями двойки (1,2,4,8,16...)
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
#include <iostream>
#include <locale>
 
using namespace std;
 
bool Pow2(int k) {           //Проверка индекса на степень двойки.
    int m=1;
  while(m<=k) {
      if(k==m) return true;
      m*=2;
  }
  return false;
}
 
int main() { 
    std::locale::global(std::locale(""));
  const int N = 10;
  int  a[N]={1,2,3,4,5,6,7,8,9,10};   //Создание статического массива с 10 элементами.
  for (int i=0; i<N;i++)              //Вывод массива.
    cout<<a[i]<<" "; 
    cout<<endl;
    cout<<"Элементы, индексы которых являются степенями двойки  = "<<endl;
    for (int i=0;i<N;i++)              //Вывод элементов,индексы которых являются степенями двойки.
        if(Pow2(i)) cout<<a[i]<<" ";      
 system("pause");
  return 0;
}
Zig_Stas
8 / 8 / 1
Регистрация: 26.10.2013
Сообщений: 55
29.10.2013, 19:15     Напечатать элементы индекса #4
Цитата Сообщение от DmitryM5 Посмотреть сообщение
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
#include <iostream>
#include <locale>
 
using namespace std;
 
bool Pow2(int k) {           //Проверка индекса на степень двойки.
    int m=1;
  while(m<=k) {
      if(k==m) return true;
      m*=2;
  }
  return false;
}
 
int main() { 
    std::locale::global(std::locale(""));
  const int N = 10;
  int  a[N]={1,2,3,4,5,6,7,8,9,10};   //Создание статического массива с 10 элементами.
  for (int i=0; i<N;i++)              //Вывод массива.
    cout<<a[i]<<" "; 
    cout<<endl;
    cout<<"Элементы, индексы которых являются степенями двойки  = "<<endl;
    for (int i=0;i<N;i++)              //Вывод элементов,индексы которых являются степенями двойки.
        if(Pow2(i)) cout<<a[i]<<" ";      
 system("pause");
  return 0;
}
Я думаю, друг, ему нужно на самом простом языке с использованием setlocale и стандартного пространства имен
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 19:32  [ТС]     Напечатать элементы индекса #5
DmitryM5, Zig_Stas, спасибо вам парни большое. Мне первый раз ответили по теме Побольше бы таких ребят. Спасибо..
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
29.10.2013, 19:37     Напечатать элементы индекса #6
Цитата Сообщение от Владиславик Посмотреть сообщение
DmitryM5, Zig_Stas, спасибо вам парни большое. Мне первый раз ответили по теме Побольше бы таких ребят. Спасибо..
Все конечно хорошо,но пытайтесь писать свой код.Пусть он будет со 100-ми ошибками ,глупыми алгоритмами, или вообще словами.Но вам подскажут и укажут все.
Ну а содрав чужой код вы не научитесь программировать.
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 19:42  [ТС]     Напечатать элементы индекса #7
DmitryM5, я стараюсь, у меня мало что получается. Но, я стараюсь!

Добавлено через 1 минуту
DmitryM5, конечно же не по теме, но, ты можешь мне помочь разобрать еще одну программу? У меня есть код, но наш преподаватель к нему придрался и сказал, что он не корректный?
Zig_Stas
8 / 8 / 1
Регистрация: 26.10.2013
Сообщений: 55
29.10.2013, 19:44     Напечатать элементы индекса #8
Цитата Сообщение от Владиславик Посмотреть сообщение
DmitryM5, я стараюсь, у меня мало что получается. Но, я стараюсь!

Добавлено через 1 минуту
DmitryM5, конечно же не по теме, но, ты можешь мне помочь разобрать еще одну программу? У меня есть код, но наш преподаватель к нему придрался и сказал, что он не корректный?
Кидай, поглядим, что за код такой вредный
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 19:45  [ТС]     Напечатать элементы индекса #9
Zig_Stas, тогда я скину в эту тему, или создать новую?
Zig_Stas
8 / 8 / 1
Регистрация: 26.10.2013
Сообщений: 55
29.10.2013, 19:57     Напечатать элементы индекса #10
Цитата Сообщение от Владиславик Посмотреть сообщение
Zig_Stas, тогда я скину в эту тему, или создать новую?
ДА в эту с кинь и все=)
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 19:58  [ТС]     Напечатать элементы индекса #11
DmitryM5, Zig_Stas, хорошо, обсудим тогда в этой теме. Вообщем сначала задача.
[Написать программу, определяющую сумму n-значных чисел, содержащих только нечетные цифры. Определить так же, сколько четных цифр в найденной сумме. ].
Сам код
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <ctime>//Нужно для генерации n - значных чисел
using namespace std;
 
int getRandVal(int n);
 
 
 
int * splitValue(int val, int &n, bool bGetArray);
 
bool isValueConsistOnlyNoOddNumbers(int val);
 
int main()
{
    int i;
    int m;
    int n;
    int sum;
    int cnt;
   
    int *arr = NULL;//Указатель на массив с n-значн числами
    while(true)
    {
        system("cls");
        cout<<"Enter number values in array : ";cin>>m;
        cout<<"Enter n digits in values     : ";cin>>n;
        arr = new int[m];
        cout<<"Generated array of values\n";
        for(i = 0; i < m; i++)
            cout<<(arr[i] = getRandVal(n))<<endl;
        cout<<"Values in array with only odd numbers\n";
        for(sum = (cnt = (i = 0)); i < m; i++)
        {
            if(isValueConsistOnlyNoOddNumbers(arr[i]))
            {
                cout<<arr[i]<<endl;
                sum = sum + arr[i];
                cnt = cnt + 1;
            }
        }
        delete [] arr;
        if(!cnt)
            cout<<"array not contain values which consist"
                <<" only from no-odd numbers\n";
        else
        {
            cout<<"sum of values which consist"
                <<" only from no-odd numbers is "
                <<sum<<endl;
          
            arr = splitValue(sum, n, true);
            for(cnt = (i = 0); i < n; i++)
            {
                if(!isValueConsistOnlyNoOddNumbers(arr[i]))
                    cnt = cnt + 1;
            }
            cout<<"given sum contains from "<<cnt<<" odditive numbers\n";
            delete [] arr;
        }
        system("pause");
    }
    return 0;
}
 
int getRandVal(int n)
{
    int val = 0;
    int nDigits = 0;
    
    while(nDigits != n)
        splitValue((val = rand()%RAND_MAX), nDigits, false);
    return val;
}
 
int * splitValue(int val, int &n, bool bGetArray)
{
    int * arr = NULL;//Указатель на массив с разрядами числа val
    if(val < 0)
        val *= -1;//Знак числа нам не нужен
   
    int i, buf = val;
    for(n = 0; 0 < buf; n++)
        buf = buf / 10;
   
    if(bGetArray)
    {
        arr = new int[n];
        for(i = 0; 0 < val; i++)
        {
           
            arr[i] = val % 10;
            val    = val / 10;
        }
    }
Конечно же код не полностью мой, но есть исправления.
По сути этот код подходит по условию задачи.
Но, преподаватель придрался к следующему:
-Код не правильно подсчитывает сумму. Т.е если она считает сумму двух нечетных чисел, то должна выводить количество четных цифр в найденной сумме.
-Так же, она сказала, что массивы тут совсем не нужны. Получается, по теории, надо вводить следующую последовательность действий:
1. Если я ввожу цифру 2, то считаются цифры от 10 до 99, т.е двузначные.
2. Если я ввожу цифру 3, то считаются цифры от 100 до 999, т.е трехзначные и т.д (Так же с еденичкой)
Эта программа считает немного по другому..
Помогите переработать код, что бы программа выполняла условие задачи.
Zig_Stas
8 / 8 / 1
Регистрация: 26.10.2013
Сообщений: 55
29.10.2013, 20:12     Напечатать элементы индекса #12
Цитата Сообщение от Владиславик Посмотреть сообщение
DmitryM5, Zig_Stas, хорошо, обсудим тогда в этой теме. Вообщем сначала задача.
[Написать программу, определяющую сумму n-значных чисел, содержащих только нечетные цифры. Определить так же, сколько четных цифр в найденной сумме. ].
Сам код
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <ctime>//Нужно для генерации n - значных чисел
using namespace std;
 
int getRandVal(int n);
 
 
 
int * splitValue(int val, int &n, bool bGetArray);
 
bool isValueConsistOnlyNoOddNumbers(int val);
 
int main()
{
    int i;
    int m;
    int n;
    int sum;
    int cnt;
   
    int *arr = NULL;//Указатель на массив с n-значн числами
    while(true)
    {
        system("cls");
        cout<<"Enter number values in array : ";cin>>m;
        cout<<"Enter n digits in values     : ";cin>>n;
        arr = new int[m];
        cout<<"Generated array of values\n";
        for(i = 0; i < m; i++)
            cout<<(arr[i] = getRandVal(n))<<endl;
        cout<<"Values in array with only odd numbers\n";
        for(sum = (cnt = (i = 0)); i < m; i++)
        {
            if(isValueConsistOnlyNoOddNumbers(arr[i]))
            {
                cout<<arr[i]<<endl;
                sum = sum + arr[i];
                cnt = cnt + 1;
            }
        }
        delete [] arr;
        if(!cnt)
            cout<<"array not contain values which consist"
                <<" only from no-odd numbers\n";
        else
        {
            cout<<"sum of values which consist"
                <<" only from no-odd numbers is "
                <<sum<<endl;
          
            arr = splitValue(sum, n, true);
            for(cnt = (i = 0); i < n; i++)
            {
                if(!isValueConsistOnlyNoOddNumbers(arr[i]))
                    cnt = cnt + 1;
            }
            cout<<"given sum contains from "<<cnt<<" odditive numbers\n";
            delete [] arr;
        }
        system("pause");
    }
    return 0;
}
 
int getRandVal(int n)
{
    int val = 0;
    int nDigits = 0;
    
    while(nDigits != n)
        splitValue((val = rand()%RAND_MAX), nDigits, false);
    return val;
}
 
int * splitValue(int val, int &n, bool bGetArray)
{
    int * arr = NULL;//Указатель на массив с разрядами числа val
    if(val < 0)
        val *= -1;//Знак числа нам не нужен
   
    int i, buf = val;
    for(n = 0; 0 < buf; n++)
        buf = buf / 10;
   
    if(bGetArray)
    {
        arr = new int[n];
        for(i = 0; 0 < val; i++)
        {
           
            arr[i] = val % 10;
            val    = val / 10;
        }
    }
Конечно же код не полностью мой, но есть исправления.
По сути этот код подходит по условию задачи.
Но, преподаватель придрался к следующему:
-Код не правильно подсчитывает сумму. Т.е если она считает сумму двух нечетных чисел, то должна выводить количество четных цифр в найденной сумме.
-Так же, она сказала, что массивы тут совсем не нужны. Получается, по теории, надо вводить следующую последовательность действий:
1. Если я ввожу цифру 2, то считаются цифры от 10 до 99, т.е двузначные.
2. Если я ввожу цифру 3, то считаются цифры от 100 до 999, т.е трехзначные и т.д (Так же с еденичкой)
Эта программа считает немного по другому..
Помогите переработать код, что бы программа выполняла условие задачи.
Насчет массивов она абсолютно права. У Вас подсчет суммы нечетных должен идти просто по циклу, где начало цикла есть pow(10,n-1), а конец pow(10,n)-1. Т.е. если нужны 3-х значные, то компилятор 10*10=100 - начало, а 10*10*10-1=999 - конец цикла.
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 20:42  [ТС]     Напечатать элементы индекса #13
Zig_Stas, спасибо. Но можно мне код программы? Знаю, что требую много. Я пока что не очень разбираюсь в языке С++. Пожалуйста.

Добавлено через 17 минут
Zig_Stas, не пропадайте пожалуйста.

Добавлено через 10 минут
DmitryM5, не пропадайте пожалуйста
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
29.10.2013, 21:57     Напечатать элементы индекса #14
Цитата Сообщение от Владиславик Посмотреть сообщение
Zig_Stas, спасибо. Но можно мне код программы? Знаю, что требую много. Я пока что не очень разбираюсь в языке С++. Пожалуйста.

Добавлено через 17 минут
Zig_Stas, не пропадайте пожалуйста.

Добавлено через 10 минут
DmitryM5, не пропадайте пожалуйста
Как я понял задание:
Допустим есть n значное(5 значное число) из нечетных цифр 13579.
Я должен вывести сумму цифр,т.е 25 и вывести так же количество четных цифр в сумме, т.е 1.
Это верно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 22:34     Напечатать элементы индекса
Еще ссылки по теме:

C++ Напечатать все не отрицательные и не превышающие 100 элементы массива
Напечатать элементы массива в виде двух паралельных столбцов C++
Напечатать элементы массива в виде двух параллельных столбцов C++

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

Или воспользуйтесь поиском по форуму:
Владиславик
-131 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 139
29.10.2013, 22:34  [ТС]     Напечатать элементы индекса #15
DmitryM5, получается, задача на С++ должна работать следующим образом.
Я ввожу число (К примеру 25). Из этого числа программа должна считать сумму только нечетного чисел)
На втором шаге программа должна подсчитать в найденной сумме нечетных чисел число четных цифр.
Т.е если я ввел скажем 3-> программа считать от 100 до 999 сумму нечетных чисел-> из этой суммы (к примеру 5632) программа считает количество четных чисел (Пример 6 и 2, это четные числа в найденной сумме 5632).
-
Вроде по такой схеме программа должна работать.

Добавлено через 18 минут
DmitryM5, Дмитрий, не теряйтесь пожалуйста)
Yandex
Объявления
29.10.2013, 22:34     Напечатать элементы индекса
Ответ Создать тему
Опции темы

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