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

Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Tabula
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 6
26.12.2012, 02:32     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат #1
Добрый день.
Прошу помочь решить вот такую вот задачку:

"есть два массива, в которых границы задает пользователь. Например, один массив {3, 13, 23, 33 .....n} другой {9, 19, 29 ....m} причем шаг между числами в массивах задает пользователь. В нашем случае сейчас 10. А может быть в одном 10, а в другом 5 или еще как-то.
надо сначала первый элемент массива 1 умножить на все элементы массива 2 и вывести результат, потом второй элемент массива 1 умножить на каждый элемент массива 2 и вывести результат и так до n-го элемента.
То есть ответ примерно выглядит так:
Для элемента 3 новый массив: 27, 57, 87 .....3*m
Для 13 новый массив: 117, 247, 377 .... 13*m
Для n новый массив : n*9, n*19, n*29.....n*m

и отдельно вывести когда все ответы вместе, т.н. 27,57, 87,117,147,177,207,237,247,267 и т.д."

Я только начала изучать С++ и этот форум для меня большое подспорье. Почитала многие темы. Какие-то вещи (типа как задать массив с определенным шагом по элементам внутри я почитала. Отдельно как умножить число на массив понимаю. А вот как все в одном решении и как вообще построить логику решения конкретно этой задачи - не понимаю. Буду признательна, если кто-то поможет и при описании решения построчно напишет // комментарии.

Спасибо за помощь.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 02:32     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат
Посмотрите здесь:

C++ Если последний элемент массива положителен, то все элементы массива увеличить на квадрат его максимального элемента
C++ Разделить элементы массива на первый элемент
Разделить все элементы массива на его первый элемент C++
Почленно умножить первый коэффицент массива на все коэффиценты другого массива C++
Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
26.12.2012, 02:41     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//1
for (i=0; i<n; i++){
    for (j=0; j<m; j++) {
        //или
        // c[j]=a[i]*b[j];
        printf("%4d",a[i]*b[j]); //printf("%4d",c[j]);
    }
    printf("\n");
}
//2
for (i=0; i<n; i++)
    for (j=0; j<m; j++) {
        printf("%4d",a[i]*b[j]);
    }
Tabula
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 6
26.12.2012, 03:23  [ТС]     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат #3
Чтобы ввести начальный и конечный элемент массива и установить в нем шаг может подойти этот код:

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 <conio.h>
using namespace std;
 
/*int a,b,flag,interval; // определяем необходимые переменные
int main(void)
{
    int i; //счетчик
    
for(flag=0;flag<1;flag) // переменная для проверки хотим ли мы завершить программу
  {
        {
            cout<<"Wwedi a"; cin>>a; //Начальное значение
            cout<<"Wwedi b"; cin>>b; //Конечное значение
            cout<<"Wwedi interval"; cin>>interval;// Определяем интервал
 
        }
 
    if(a>b) {for(i=a;i>=b;i-=interval) {cout<<i<<" ";} cout<<"n";}
    if(a<b) {for(i=a;i<=b;i+=interval) {cout<<i<<" ";} cout<<"n";}
    cout<<"\n";
    cout<<"povtorit' ? 0=da ";
    cout<<"\n";
    cin>>flag;
  }
return 0;
}

А как при этом объединить то что написали Вы и то что я привела выше? В том то и дело, что "склейку" я никак понять не могу. Сорри - учу язык по выходным и в течении недели по книгам и форумам, так как работаю. Вот где-то и что-то пока не совсем "догоняю". Совсем еще зеленый новичок - всего 13 уроков было.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
26.12.2012, 13:21     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат #4
Разбирайтесь
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
#include <iostream>
#include <iomanip> // for setw()
using namespace std;
int main(void)
{
//  int i; //счетчик
//  int a,b,flag=0,interval; // определяем необходимые переменные
//  int *a, *b, *c; // указатели на целое, будем их использовать как массивы
//------------------------ вот этогенерирует нужные вам числа
//  do {
//      cout<<"Wwedi a";
//      cin>>a; //Начальное значение
//      cout<<"Wwedi b";
//      cin>>b; //Конечное значение
//      cout<<"Wwedi interval";
//      cin>>interval;// Определяем интервал
//      //  }
//      if(a>b) {
//          for(i=a; i>=b; i-=interval) {
//              cout<<i<<" ";
//          }
//          cout<<"\n";
//      }
//      if(a<b) {
//          for(i=a; i<=b; i+=interval) {
//              cout<<i<<" ";
//          }
//          cout<<"\n";
//      }
//      cout<<"\n";
//      cout<<"povtorit' ? 1-da, 0 - exit ";
//      cout<<"\n";
//      cin>>flag;
//  } while (flag);
//.// -------------- вот этогенерирует нужные вам числа
//
    int flag=0,
        a=0,
        b=0,
        interval=0,
        *ma,
        *mb,
        // *mc,
        i=0,
        j=0,
        n=0,
        m=0,
        t=0;
    do { // 2 раза вводим данные и формируем значения n, m
        cout<<"Wwedi a: ";
        cin>>a; //Начальное значение
        cout<<"Wwedi b: ";
        cin>>b; //Конечное значение
        cout<<"Wwedi interval: ";
        cin>>interval;// Определяем интервал
        if (flag==0) { // заполняем первый массив
            n=(b-a)/interval;
            ma=new int[n]; // динамические массивы
            if (a<b) t=a;
            else {
                t=b;
                interval=-interval;
            };
            for (i=0; i<n; i++) {
                ma[i]=t;
                t+=interval;
                cout << setw(4) << ma[i];
            }
            cout<< endl;
        } else { // заполняем второй массив
            m=(b-a)/interval;
            mb=new int[m]; // динамические массивы
            if (a<b) t=a;
            else {
                t=b;
                interval=-interval;
            };
            for (i=0; i<m; i++) {
                mb[i]=t;
                t+=interval;
                cout << setw(4) << mb[i];
            }
            cout<< endl;
        }
    } while (++flag<2);
    // динамические массивы
    //mc=new int[m];
//1
    cout << "-------------------------1"<< endl;
    for (i=0; i<n; i++) {
        for (j=0; j<m; j++) {
            //или
            // mc[j]=ma[i]*mb[j];
            cout<<setw(4)<<ma[i]*mb[j]; //printf("%4d",c[j]);
        }
        cout<<("\n"); // cout << endl
    }
    //2
    cout << "-------------------------2"<< endl;
    for (i=0; i<n; i++)
        for (j=0; j<m; j++) {
            cout<<setw(4)<<ma[i]*mb[j];
        }
    delete []ma;
    delete []mb;
    //delete[]mc;
    return 0;
}
Добавлено через 1 час 41 минуту
можно немного доделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (flag==0) { // заполняем первый массив
            n=abs((a<b)?(b-a)/interval:(a-b)/interval)+1; //!!!!!
            ma=new int[n]; // динамические массивы
            if (a<b) t=a;
            else {
                t=b;
                interval=(a<0)?interval:-interval; //!!!!!
            };
            for (i=0; i<n; i++) {
                ma[i]=t;
                t+=interval;
                cout << setw(4) << ma[i];
            }
            cout<< endl;
        } else...
Tabula
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 6
26.12.2012, 13:41  [ТС]     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат #5
где-то ошибка..я пробую понять где, но пока не идет....Для примера посчитала себе на листочке и с ним сверяюсь.

Вот берем первый массив от 3 до 300 с шагом 10, т.е. {3, 13, 23, 33, 43,53.....293} и для начала 3 умножаем на все числа второго массива, который от 9 до 300 с шагом 10 {9,19,29,39,49,59.....299} = {27,57,87,117,147,177,207,237,267,297....897}

Потом берем второе число из первого массива - 13 и умножаем на все числа второго массива и получаем {117, 247, 377, 507, 637, 767,897.....}

Потом берем третье число первого массива 23 и умножаем на все числа второго {207, 437,667, 897, 1127, 1357,...}

и т.д.


Если потом объединить данные от первого, второго и третьего (и прочьих) результатов, то получаем
{27,57,87,117,147,177,207,237,247,267,297....}, то есть 117 - в итоговый вариант попадает, т.к. это и 3*39 и 13*9
207 добавляется так как 23*9
247 добавляется так как это 13*19,
297 добавляется так как 33*9 - вообще из варианта когда 33 умножаем на все числа второго массива

Вот у меня эта проверка никак не проходит. Да и вообще каша какая-то. Всякие простые задачки из книги получаются. Эта никак не идет. Сейчас пробую с Вашим кодом понять как сделать так чтобы заработало и дало в итоге требуемый результат....пока не идет
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
26.12.2012, 14:55     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат #6
Если нужно по порядку, читайте тему про сортировкк массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mc=new int[n*m]();
cout << "-------------------------2"<< endl;
    k=0;
    for (i=0; i<n; ++i) {
        for (j=0; j<m; ++j) {
            t=ma[i]*mb[j];
            if (i==0&&j==0) {
                mc[k]=t;
            } else {
                flag=1;
                for (int z=k-1; z>=0; --z)
                    if (mc[z]==t) flag=0;
            }
            if (flag) {
                mc[k]=t;
                k++;
            }
        }
    }
//cout<<setw(6)<<mc[j];
    for (i=0; i<k; i++)
        cout<<setw(6)<<mc[i];
Добавлено через 1 минуту
разбирайтесь и тренируйтесь, удачи.
Yandex
Объявления
26.12.2012, 14:55     Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат
Ответ Создать тему
Опции темы

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