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

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

Войти
Регистрация
Восстановить пароль
 
 
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
#1

Динамическая матрица: посчитать произведение элементов, кратных трем - C++

20.01.2010, 17:21. Просмотров 799. Ответов 15
Метки нет (Все метки)

Составить программу для подсчёта произведения элементов двумерной целочисленной таблицы В, состоящей из k строк и p столбцов, имеющих значения, кратные 3. Использовать динамический массив.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2010, 17:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическая матрица: посчитать произведение элементов, кратных трем (C++):

Вычислить произведение не кратных трем чисел массива - C++
вычислить произведение не кратных 3 чисел массива

Сформировать массив и посчитать сумму его элементов, кратных 3 и не кратных 5 - C++
Знаю, что много фигни написал, но уже не соображаю( Вот, собсна, сам код #include <stdio.h> void main() { int n,...

Вычислить произведение трёх элементов массива, кратных 3-ем и не кратных 2-ум - C++
HELP!! Господа программеры. В программировании вобще 0. Нужно вычислить произведение трёх элементов массива А, что кратны 3 и не кратны...

Сумма элементов в массиве кратных трем - C++
Написать функцию для нахождения в одномерном массиве количества элементов кратным трем

Найти количество элементов кратных трем - C++
Найти для каждой строки количество элементов, кратных трем, и самый большой из полученных результатов. 1) Использовать функции. 2) В...

Подсчитать число элементов матрицы, кратных трем - C++
Как составить такую программу: Подсчитать число элементов матрицы Q (5х7), кратных трем.

15
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
20.01.2010, 17:31 #2
C++
1
2
3
4
5
6
7
8
int **a;
a=new int*[k];
for(int i=0;i<k;i++)
   a[i]=new int[p]
int pr=1;
for(int i=0;i<k;i++)
   for(int j=0;j<p;j++)
      pr*=a[i][j]
Добавишь еще заполнение массива там...
1
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
20.01.2010, 18:46  [ТС] #3
Больше всего затрудняло, как в эту программу вставить условие, чтобы считало произведение значений кратные 3.
0
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
20.01.2010, 18:52 #4
в цикле вставляешь
C++
1
if(a[i][j]%3==0)
и считаешь произведение
0
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
20.01.2010, 19:21  [ТС] #5
Получилось, что-то вроде этого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream.h>
void main()
{int k,p;
cout<<"BBeguTe k u p:";
cin>>k>>p;
int **B;
B=new int*[k];
for(int i=0;i<k;i++)
   B[i]=new int[p];
int pr=1;
  for(int j=0;j<p;j++)
 
if (B[i][j]%3==0)
      pr*=B[i][j];
cout<<pr;
}
но чё-то не запускается
0
valeriikozlov
Эксперт С++
4680 / 2506 / 322
Регистрация: 18.08.2009
Сообщений: 4,550
20.01.2010, 19:40 #6
Цитата Сообщение от Danil-za Посмотреть сообщение
но чё-то не запускается
Желательно до строки 13 (где Вы используете значения массива B[][]) присвоить значения элементам массива B[][].
0
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
20.01.2010, 20:44  [ТС] #7
Подскажите, что о5 не так )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream.h>
void main()
{int k,p;
int **B;
B=new int*[k];
for(int i=0;i<k;i++)
   B[i]=new int[p];
int pr=1;
  for(int j=0;j<p;j++)
B[i][j]=rand()%10-5; // owu6Ka !!!
if (B[i][j]%3==0)
      pr*=B[i][j];
cout<<pr;
}
Добавлено через 45 минут
Тема ещё актуальна...
0
syd2010
23 / 37 / 1
Регистрация: 14.12.2009
Сообщений: 273
20.01.2010, 21:02 #8
C++
1
2
3
4
5
6
7
8
9
for (int i=0;i<k;i++)
for(int j=0;j<p;j++)
{
B[i][j]=rand()%10-5;
if (B[i][j]%3==0)
      pr*=B[i][j];
}
cout<< pr;
delete b[];
Добавлено через 1 минуту
не забываем освобождать выделенную память))
0
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
20.01.2010, 21:06  [ТС] #9
Цитата Сообщение от syd2010 Посмотреть сообщение
не забываем освобождать выделенную память))
Освободим после проверки

Добавлено через 3 минуты
Цитата Сообщение от syd2010 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
for (int i=0;i<k;i++)
for(int j=0;j<p;j++)
{
B[i][j]=rand()%10-5;
if (B[i][j]%3==0)
      pr*=B[i][j];
}
cout<< pr;
delete b[];
Добавлено через 1 минуту
не забываем освобождать выделенную память))
Не работает, напишите кто точно знает полностью рабочую задачу. Все варианты перепробовал.
0
valeriikozlov
Эксперт С++
4680 / 2506 / 322
Регистрация: 18.08.2009
Сообщений: 4,550
21.01.2010, 06:09 #10
Цитата Сообщение от Danil-za Посмотреть сообщение
Подскажите, что о5 не так )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream.h>
void main()
{int k,p;
int **B;
B=new int*[k];
for(int i=0;i<k;i++)
 B[i]=new int[p];
int pr=1;
 for(int j=0;j<p;j++)
B[i][j]=rand()%10-5; // owu6Ka !!!
if (B[i][j]%3==0)
 pr*=B[i][j];
cout<<pr;
}
Добавлено через 45 минут
Тема ещё актуальна...
Для того что бы работатала функция rand() необходимо подключить #include <stdlib.h>
Для того чтобы создавать двухмерный массив размером k*p необходимо сначало присвоить значения переменным k и p
Вот этот кусок кода поясню в комментариях отдельно:
C++
1
2
3
4
5
6
int pr=1;
 for(int j=0;j<p;j++)
B[i][j]=rand()%10-5; // Чему в этом месте равно i ?
if (B[i][j]%3==0)// эта строка будет выполняться только один раз
 pr*=B[i][j];
cout<<pr;
В общем эта часть кода должна выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
int pr=1;
for(i=0; i<k; i++)
 for(int j=0;j<p;j++)
{
B[i][j]=rand()%10-5; // owu6Ka !!!
if (B[i][j]%3==0)
 pr*=B[i][j];
}
// в этом месте по желанию можно предусмотреть если pr останется равно 1.
cout<<pr;
0
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
21.01.2010, 16:13  [ТС] #11
valeriikozlov, у меня выходит ноль при любых значениях

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream.h>
#include<stdlib.h>
void main()
{int const k=5,p=3;
int **B;
B=new int*[k];
for(int i=0;i<k;i++)
   B[i]=new int[p];
int pr=1;
for(i=0; i<k; i++)
 for(int j=0;j<p;j++)
{
B[i][j]=rand()%10-5;
if (B[i][j]%3==0)
 pr*=B[i][j];
}
cout<<pr;
}
0
syd2010
23 / 37 / 1
Регистрация: 14.12.2009
Сообщений: 273
21.01.2010, 16:19 #12
у меня билдере она и без этого модуля прет
0
valeriikozlov
Эксперт С++
4680 / 2506 / 322
Регистрация: 18.08.2009
Сообщений: 4,550
21.01.2010, 16:37 #13
Danil-za,
Запустите Вашу программу вот так (там дописан только вывод на экран самих элементов массива, что бы было видно из-за чего происходит постоянный вывод нуля):
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
#include<iostream.h>
#include<stdlib.h>
void main()
{int const k=5,p=3;
int **B;
B=new int*[k];
for(int i=0;i<k;i++)
   B[i]=new int[p];
int pr=1;
for(i=0; i<k; i++)
 for(int j=0;j<p;j++)
{
B[i][j]=rand()%10-5;
if (B[i][j]%3==0)
 pr*=B[i][j];
}
cout<<pr;
// âûâîä Г§Г*Г*Г·ГҐГ*ГЁГ© Г¬Г*Г±Г±ГЁГўГ* Г*Г* ГЅГЄГ°Г*Г*
cout<<endl;
for(i=0; i<k; i++)
{
 for(int j=0;j<p;j++)
     cout<<B[i][j]<<"  ";
    cout<<endl;
}
}
Наверняка у Вас получается также как и у меня. Мы перебираем элементы массива по строчно. В середине массива имеются элементы массива кратные 3. Но также после этих элементов есть элемент(ы) равные нулю. Так вот если элемент массива равен нулю, то он тоже подходит под условие:
if (B[i][j]%3==0)
Соответственно pr умножается на этот элемент и становится равной нулю. Если хотите от этого избавится (исключить умножение на нули), то сделайте так:
if (B[i][j]%3==0 && B[i][j]!=0 )
Кстати можете заметить, что сколько раз Вы не запускаете программу, элементы массива всегда одинаковые избавится можно и от этого: http://www.cyberforum.ru/cpp-beginners/thread44753.html
1
Danil-za
3 / 3 / 0
Регистрация: 16.05.2009
Сообщений: 69
21.01.2010, 16:42  [ТС] #14
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Так вот если элемент массива равен нулю, то он тоже подходит под условие: Соответственно pr умножается на этот элемент и становится равной нулю. Если хотите от этого избавится (исключить умножение на нули)
А как подходит под условие, разве ноль кратен 3 ?
0
valeriikozlov
Эксперт С++
4680 / 2506 / 322
Регистрация: 18.08.2009
Сообщений: 4,550
21.01.2010, 16:45 #15
Цитата Сообщение от Danil-za Посмотреть сообщение
А как подходит под условие, разве ноль кратен 3 ?
Операция % находит целый остаток от деления, а это значит что:
5%3 даст в ответе 2
4%3 даст в ответе 1
3%3 даст в ответе 0
2%3 даст в ответе 2
1%3 даст в ответе 1
0%3 даст в ответе 0
1
21.01.2010, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2010, 16:45
Привет! Вот еще темы с ответами:

Определить сумму элементов массива, кратных трем - C++
Помогите девушке решить индивидуальные задачи по С++ ........help me please!!!! 1.Дан массив A(N).Определить сумму элементов массива A...

Вычислить среднее значение нечетных элементов кратных трем - C++
Определить, кратны ли трем нечетные элементы последовательность, и если кратны, то вычислить их среднее значение Добавлено через 24...

Функция нахождения в целочисленных массивах элементов кратных трем - C++
Условие-найти из целочисленных массивов А B C элементы кратные 3 Выскакивает вот такая проблема: invalid types float for array subscript...

Определить количество элементов массива, кратных трем и индекс последнего такого элемента - C++
Сформировать массив,содержащий 7 элементов,задав элементы с клавиатуры.Определить количество элементов,кратных 3 и индексы последнего...


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

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

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