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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Ququruza
0 / 0 / 0
Регистрация: 10.09.2009
Сообщений: 8
#1

Заполнение массива числами в диалоговом режиме - C++

10.09.2009, 12:02. Просмотров 1482. Ответов 13
Метки нет (Все метки)

Указать индексы и напечатать элементы целочисленного массива X[10], сумма цыфр которых равна заданному числу M(если такие эллементы есть). Число М программа должна запрашивать в диалоговом режиме. Написать функции
-Заполнение массива числами в диалоговом режиме.
-Вывода одномерного массива.
-Определение, равна ли сумма числа заданному числу M.

P.S.я чайница и заранее благодарю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.09.2009, 12:31     Заполнение массива числами в диалоговом режиме #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
37
38
39
40
#include <iostream>
using namespace std;
 
int main ()
{
    setlocale (LC_ALL, ".1251");
    int a [10];
    int i, j, n, m, s;
    bool f = false;
 
    cout << "Введите размерность\n";
    cin >> n;
    cout << "Введите массив\n";
    for (i = 0; i < n; i++)
        cin >> a [i];
    cout << "Введите число\n";
    cin >> m;
    s = 0;
 
    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
        {
            s += a [j];
            if (s == m)
            {
                f = true;
                break;
            }
        }
        if (f)
            break;
        s = 0;
    }
    if (s != 0)
        cout << s << endl;
    else
        cout << "Из элементов массива нельзя составить число\n";
    return 0;
}
Если нужны индексы, то можно завести ещё один массив для хранения индексов.

Добавлено через 2 минуты
Цитата Сообщение от Ququruza Посмотреть сообщение
-Вывода одномерного массива.
Может быть, ввода?
Ququruza
0 / 0 / 0
Регистрация: 10.09.2009
Сообщений: 8
10.09.2009, 12:34  [ТС]     Заполнение массива числами в диалоговом режиме #3
у меня почему-то написано "вывода"
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
10.09.2009, 12:39     Заполнение массива числами в диалоговом режиме #4
C++
1
2
3
        cout << "\nВведенный массив\n";
        for (i = 0; i < n; i++)
                cout << a [i] << ' ';
Вот вывод. Вставь его между 15 и 16 строками
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
10.09.2009, 13:41     Заполнение массива числами в диалоговом режиме #5
Цитата Сообщение от qwert Посмотреть сообщение
int a [10];
...
cout << "Введите размерность\n";
cin >> n;
cout << "Введите массив\n";
for (i = 0; i < n; i++)
cin >> a [i];
А если n > 10, размер массива a при вводе a[10], a[11], a[12]... автоматически увеличиваться будет? Да и зачем его размер менять, если задано:
Цитата Сообщение от Ququruza Посмотреть сообщение
Указать индексы и напечатать элементы целочисленного массива X[10]...
Ququruza
0 / 0 / 0
Регистрация: 10.09.2009
Сообщений: 8
10.09.2009, 14:01  [ТС]     Заполнение массива числами в диалоговом режиме #6
Я вас не понимаю) так что получается, решено не верно?:*(
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
10.09.2009, 14:27     Заполнение массива числами в диалоговом режиме #7
Цитата Сообщение от Ququruza Посмотреть сообщение
Я вас не понимаю) так что получается, решено не верно?:*(
Ну я же спрашивал, а не говорил, что всё плохо
Вот Вам ещё вариант, добавьте только, что там для вывода русских букв в виндовской консоли надо...
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
#include <iostream>
#include <iomanip>
 
/* Указать индексы и напечатать элементы целочисленного массива X[10], сумма цифр которых равна заданному числу M */
 
#define XSIZE 10
 
using namespace std;
 
/* Возвращает сумму цифр числа number */
int digits_summ(int number);
 
int main(){
    int x[XSIZE];
    int m, i;
    
    /* заполнение массива */
    for ( i = 0; i < XSIZE; i++ ) {
        cout << "Введите элемент Х[" << i << "] ";
        cin >> x[i];
    }
    
    cout << "Введите число М ";
    cin >> m;
    
    cout << "Значения элементов массива:" << endl;
    cout << "Индекс " << "Значение" << endl;
    for ( i = 0; i < XSIZE; i++ )
        cout << left << setw(7) << i << x[i] << endl;
    
    cout << "Элементы массива с суммой цифр равной " << m << endl;
    cout << "Индекс " << "Значение" << endl;
    for ( i = 0; i < XSIZE; i++ )
        if ( digits_summ(x[i]) == m )
            cout << left << setw(7) << i << x[i] << endl;
    
    return(0);
}
 
int digits_summ(int number){
    int sum = 0;
    if ( number < 0 )
        number *= -1;
    while ( number ) {
        sum += number % 10;
        number /= 10;
    }
    return(sum);
}
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2009, 14:35     Заполнение массива числами в диалоговом режиме #8
Вот то как я реализовал, думаю как раз по заданию,
Если делать массив статическим, то можно не поключать
windows.h, а массив прописать как int mass[10] вместо
int * mass = (int *)malloc(sizeof(int));
+ убрать строчки

Вот они :
C++
1
2
3
4
5
6
7
8
9
10
int * mass = (int *)malloc(sizeof(int));
 
//Увеличиваям блок памяти для массива как раз под число элементов
mass = (int *)realloc((void *)mass,nElements*sizeof(int));
 
//Уменьшаем блок памяти до 1-го элемента
//  mass = (int *)realloc((void *)mass,sizeof(int));
 
    //Если выходим из программы то чистим память
//  free((void *)mass);
Всё будет и в этом случае работать
Если массив будет статический , т.е. int mass[10], то помним
что число єлемнтов nElements должно быть <= 10!!!


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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <windows.h>  //Прототипы malloc и free
#include <iostream.h> 
//>Для отображения русского текста
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
//<
#include <math.h>    //Подключаем математические функции
 
//Размерность массива может быть любой
//и в программе нужно использовать динамический массив
//выделяем память под массив, 
int * mass = (int *)malloc(sizeof(int));
//в дальнейшем размер массива можно будет изменять 
//функцией realloc
 
//int mass[10]; //на случай статического массива
 
 
//Функция для ввода элементов массива
void input(int nElements, int * mass);
//Функция для вывода элементов массива
void output(int nElements, int * mass);
//Функция возвращает сумму составляющих цифр числа digit
int getsum(int digit);
 
void main()
{
    cout<<"Введите кол-во элементов в массиве\r\n";
    int nElements;cin>>nElements;
    //Увеличиваям блок памяти для массива как раз под число элементов
    mass = (int *)realloc((void *)mass,nElements*sizeof(int));
 
    //Вводим массив
    input(nElements, mass);
    //Выводим массив
//  output(nElements, mass);
 
    cout<<"Введите число M\r\n";
    int M;cin>>M;
 
    cout<<"Элементы с сумой составляющих цифр равной "<<M<<"\r\n";
    for(int i = 0; i < nElements; i++)
    {
        if(getsum(mass[i]) == M)
            cout<<"mass["<<i<<"] = "<<mass[i]<<"\r\n";
    }
 
    //Уменьшаем блок памяти до 1-го элемента
    mass = (int *)realloc((void *)mass,sizeof(int));
    cout<<"Нажмите 1 чтобы произвести новый ввод массива\r\n";
    cin>>M;
    if(M == 1)
        main();
    //Если выходим из программы то чистим память
    free((void *)mass);
}
 
void input(int nElements, int * mass)
{
    cout<<"\tВведите элементы массива\r\n";
    for (int i = 0; i < nElements; i++)
    {
        cout<<"mass["<<i<<"] = ";
        cin>>mass[i];
    }
}
 
void output(int nElements, int * mass)
{
    cout<<"\tЭлементы массива\r\n";
    for (int i = 0; i < nElements; i++)
        cout<<"mass["<<i<<"] = "<<mass[i]<<"\r\n";
}
 
int getsum(int digit)
{
    //Работаем только с положительныыми числами
    //если исходное число было отрицательным 
    //то умножим его на -1
    if(digit < 0)
        digit *= -1;
 
    int sum = 0;
    if(-1 < digit && digit < 9)
        sum += digit;
    else
    {
        int iPOW = 1;
        div_t iBUF;
        do
        {
            //Функция div(a,b)
            //возвращает целую (qoute) и дробную (rem) часть от деления
            //числа a на число b
            iBUF = div(digit,pow(10,iPOW));
            sum += (iBUF.rem)/pow(10,iPOW - 1);
            iPOW++; 
            digit -= sum;
        }
        while(0 < digit);
    }
    return sum;
}
void output(int nElements, int * mass)
{
    cout<<"\tЭлементы массива\r\n";
    for (int i = 0; i < nElements; i++)
        cout<<"mass["<<i<<"] = "<<mass[i]<<"\r\n";
}
 
int getsum(int digit)
{
    //Работаем только с положительныыми числами
    //если исходное число было отрицательным 
    //то умножим его на -1
    if(digit < 0)
        digit *= -1;
 
    int sum = 0;
    if(-1 < digit && digit < 9)
        sum += digit;
    else
    {
        int iPOW = 1;
        div_t iBUF;
        do
        {
            //Функция div(a,b)
            //возвращает целую (qoute) и дробную (rem) часть от деления
            //числа a на число b
            iBUF = div(digit,pow(10,iPOW));
            sum += (iBUF.rem)/pow(10,iPOW - 1);
            iPOW++; 
            digit -= sum;
        }
        while(0 < digit);
    }
    return sum;
}
Миниатюры
Заполнение массива числами в диалоговом режиме  
firefox1913
 Аватар для firefox1913
27 / 27 / 2
Регистрация: 01.07.2009
Сообщений: 58
10.09.2009, 14:56     Заполнение массива числами в диалоговом режиме #9
может так пойдет
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
#include <iostream>
 
inline void vivod(int index1,int *mas,int index2)
{
    std::cout<< mas[index2]<<" ";
  for(int i=0; i <= index1; i++)
      std::cout<< mas[i] <<"  ";
  std::cout<<"\n";
}
void find(int *mas, int n,int M)
{
   int summa=0;
    for(int j=0; j < n; j++)
    {
      summa=mas[j];
      for(int i=0; i < n; i++)
      {
        summa+=mas[i];
        if(summa==M){ vivod(i,mas,j); break; }
      }
    }
}
int main()
{
    int m,n,i;
        
    std::cout<<" m := "; std::cin>>m;
    std::cout<<"vvedite n : "; std::cin>>n;
    int *mas=new int[n];
 
    std::cout<<" vedite massiv \n";
 
    for(i=0; i < n; i++)
        std::cin>>mas[i];
 
    find(mas,n,m);
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2009, 15:31     Заполнение массива числами в диалоговом режиме #10
По просьбам трудящихся выкладываю проект, запускаем файл с расширением dsw, всё откомпилено в VisualStudio 6.0 и 100% работоспособно!!!
Вложения
Тип файла: rar test_158.rar (6.9 Кб, 30 просмотров)
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.09.2009, 16:39     Заполнение массива числами в диалоговом режиме #11
Цитата Сообщение от easybudda Посмотреть сообщение
А если n > 10, размер массива a при вводе a[10], a[11], a[12]... автоматически увеличиваться будет? Да и зачем его размер менять, если задано:
Думаю, в данном случае проверки на правильность ввода делать не обязательно.

easybudda, твой код не работает вообще. Он не выполняет поставленной задачи. Он только вводит и выводит массив.
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
10.09.2009, 16:50     Заполнение массива числами в диалоговом режиме #12
Цитата Сообщение от qwert Посмотреть сообщение
Думаю, в данном случае проверки на правильность ввода делать не обязательно.

easybudda, твой код не работает вообще. Он не выполняет поставленной задачи. Он только вводит и выводит массив.
Да ну?!
Заполнение массива числами в диалоговом режиме

Вы бы задачу внимательнее прочитали!

Не по теме:

Да и на брудершафт я с Вами не пил...

.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.09.2009, 17:22     Заполнение массива числами в диалоговом режиме #13
Я понимаю задание так: не те элементы по отдельности, сумма цифр которых равна M, а сумма разных элементов. Например, число: 6
массив: 1 2 3 7 5
1 + 2 + 3 = 6
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2009, 14:06     Заполнение массива числами в диалоговом режиме
Еще ссылки по теме:

Заполнение массива случайными числами C++
Заполнение массива числами Фибоначчи C++
C++ Заполнение двухмерного массива числами от 1 до 9
Заполнение массива рандомными числами C++
Заполнение массива натуральными числами C++

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.09.2009, 14:06     Заполнение массива числами в диалоговом режиме #14
2qwert:
Смотрим условие.
-Определение, равна ли сумма числа заданному числу M.
Раз проверяется сумма цифра КОНКРЕТНОГО числа на равенство M, то все-таки нужно проверять каждое число по отдельности, а не суммировать разные, как ты хочешь.
Yandex
Объявления
11.09.2009, 14:06     Заполнение массива числами в диалоговом режиме
Ответ Создать тему
Опции темы

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