Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Tabula
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 6
#1

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

26.12.2012, 02:32. Просмотров 2464. Ответов 5
Метки нет (Все метки)

Добрый день.
Прошу помочь решить вот такую вот задачку:

"есть два массива, в которых границы задает пользователь. Например, один массив {3, 13, 23, 33 .....n} другой {9, 19, 29 ....m} причем шаг между числами в массивах задает пользователь. В нашем случае сейчас 10. А может быть в одном 10, а в другом 5 или еще как-то.
http://www.cyberforum.ru/cpp-beginners/thread1123965.html
надо сначала первый элемент массива 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 и т.д."

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

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

Все элементы массива уменьшить на 20, затем умножить на последний элемент и увеличить на число B
Помогите написать полный код на C++. Дан массив. Все его элементы: а)...

Найти минимальный элемент массива, умножить на него все отрицательные элементы, стоящие слева
Вообщем условие такое: Среди отрицательных элементов массива найти минимальный,...

Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными номерами, во второ
Удалить из массива целых чисел все нули. Сформировать два новых массива. В...

Разделить все элементы массива на его первый элемент
Задание. Сделать это задание: Дан массив целых чисел. а) Разделить все...

Все отрицательные элементы заданного массива L (11) разделить на максимальный элемент этого массива. Вывести максимальный элемент, начальный и преобра
Помогите составить программу на С++

5
vua72
417 / 417 / 166
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
26.12.2012, 02:41 #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]);
    }
1
Tabula
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 6
26.12.2012, 03:23  [ТС] #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 уроков было.
0
vua72
417 / 417 / 166
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
26.12.2012, 13:21 #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...
0
Tabula
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 6
26.12.2012, 13:41  [ТС] #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 умножаем на все числа второго массива

Вот у меня эта проверка никак не проходит. Да и вообще каша какая-то. Всякие простые задачки из книги получаются. Эта никак не идет. Сейчас пробую с Вашим кодом понять как сделать так чтобы заработало и дало в итоге требуемый результат....пока не идет
0
vua72
417 / 417 / 166
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
26.12.2012, 14:55 #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 минуту
разбирайтесь и тренируйтесь, удачи.
1
26.12.2012, 14:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 14:55
Привет! Вот еще темы с решениями:

Разделить все элементы одномерного массива с четными номерами на первый элемент
разделить все элементы одномерного массива с четными номерами на первый...

Сформировать и вывести на экран новый массив, который будет содержать вначале все элементы массива A(0), затем все элементы массива B(4)
Здравствуйте! Помогите написать парочку программ... 3. Даны массивы A(0) и...

Функции обработки массива (определить произведение элементов массива, заменить модулем все элементы массива, уничтожить элемент с заданным значением)
Вот задания,не могу сделать ни одного из них,буду благодарен за помощь. ...

Вывести элементы массива на промежутке [ a,b ], вычислить количество элементов массива, заменить все положительные элементы
В одномерном массиве, состоящем из n вещественных элементов, – вывести на...


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

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

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