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

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

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

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

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

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

P.S.я чайница и заранее благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2009, 12:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение массива числами в диалоговом режиме (C++):

Заполнение массива числами - C++
Здравствуйте, есть набор чисел (3, 3.5, 4 ,4.5, 5) требуется заполнить массив который заполняется случаными образом этими числами....

Заполнение массива случайными числами - C++
Извините за наиглупейший вопрос, но я забыл как задавать диапазон случайных чисел при заполнеии массива:wall:. Будьте добры, освежите мне...

Заполнение двухмерного массива числами от 1 до 9 - C++
дан массив a надо по функции rand заполнить матриц числами от 1 до 9 и подсчитать сколько строк в нем есть в которых все числа от 1...

Заполнение массива числами Фибоначчи - C++
Ряд чисел Фибоначчи задается следующим образом: первые два числа равны 1 ( F 1 = F 2 = 1 ), а каждое следующее равно сумму двух предыдущих:...

Заполнение динамического массива числами от -50 до 50! - C++
Плиз помогите Заполненить динамический массив числами от -50 до 50!буду очень признателен

Заполнение массива случайными числами - C++
Здравствуйте. Необходимо заполнить два массива случайными числами. Проблема состоит в том, что массивы заполняются одинаковыми...

13
.::.DIMA.::.
143 / 143 / 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 Посмотреть сообщение
-Вывода одномерного массива.
Может быть, ввода?
1
Ququruza
0 / 0 / 0
Регистрация: 10.09.2009
Сообщений: 8
10.09.2009, 12:34  [ТС] #3
у меня почему-то написано "вывода"
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
10.09.2009, 12:39 #4
C++
1
2
3
        cout << "\nВведенный массив\n";
        for (i = 0; i < n; i++)
                cout << a [i] << ' ';
Вот вывод. Вставь его между 15 и 16 строками
1
easybudda
Модератор
Эксперт CЭксперт С++
9677 / 5627 / 953
Регистрация: 25.07.2009
Сообщений: 10,801
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]...
0
Ququruza
0 / 0 / 0
Регистрация: 10.09.2009
Сообщений: 8
10.09.2009, 14:01  [ТС] #6
Я вас не понимаю) так что получается, решено не верно?:*(
0
easybudda
Модератор
Эксперт CЭксперт С++
9677 / 5627 / 953
Регистрация: 25.07.2009
Сообщений: 10,801
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);
}
1
-=ЮрА=-
Заблокирован
Автор 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;
}
1
Миниатюры
Заполнение массива числами в диалоговом режиме  
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;
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2009, 15:31 #10
По просьбам трудящихся выкладываю проект, запускаем файл с расширением dsw, всё откомпилено в VisualStudio 6.0 и 100% работоспособно!!!
1
Вложения
Тип файла: rar test_158.rar (6.9 Кб, 30 просмотров)
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.09.2009, 16:39 #11
Цитата Сообщение от easybudda Посмотреть сообщение
А если n > 10, размер массива a при вводе a[10], a[11], a[12]... автоматически увеличиваться будет? Да и зачем его размер менять, если задано:
Думаю, в данном случае проверки на правильность ввода делать не обязательно.

easybudda, твой код не работает вообще. Он не выполняет поставленной задачи. Он только вводит и выводит массив.
0
easybudda
Модератор
Эксперт CЭксперт С++
9677 / 5627 / 953
Регистрация: 25.07.2009
Сообщений: 10,801
10.09.2009, 16:50 #12
Цитата Сообщение от qwert Посмотреть сообщение
Думаю, в данном случае проверки на правильность ввода делать не обязательно.

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

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

Не по теме:

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

0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.09.2009, 17:22 #13
Я понимаю задание так: не те элементы по отдельности, сумма цифр которых равна M, а сумма разных элементов. Например, число: 6
массив: 1 2 3 7 5
1 + 2 + 3 = 6
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.09.2009, 14:06 #14
2qwert:
Смотрим условие.
-Определение, равна ли сумма числа заданному числу M.
Раз проверяется сумма цифра КОНКРЕТНОГО числа на равенство M, то все-таки нужно проверять каждое число по отдельности, а не суммировать разные, как ты хочешь.
0
11.09.2009, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2009, 14:06
Привет! Вот еще темы с ответами:

Заполнение массива случайными числами - C++
Доброго времени суток. Перейду сразу к сути: Надо построить массив из 5000 целых случайных чисел и отсортировать его сортировкой Шелла, ...

Заполнение массива рандомными числами - C++
Здравствуйте! Нужно заполнить массив float рандомными числами от 0.3 до 0.9 #define MIN 0.3 #define MAX 0.9 int...

Заполнение массива тремя числами - C++
Как поставить проверку на ввод чисел? Что бы матрицу NxM можно было заполнить только тремя цифрами (1,0,-1) Как это на Си будет...

Заполнение массива натуральными числами - C++
Напишите программу, которая заполняет массив первыми N натуральными числами и выводит его. Входные данные Входная строка содержит...


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

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

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