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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
dima170892
0 / 0 / 0
Регистрация: 16.03.2010
Сообщений: 11
#1

Найти скалярное произведение - C++

14.09.2010, 10:08. Просмотров 1997. Ответов 13
Метки нет (Все метки)

неправильное оформление
ДОБРООГО ДНЯ ВСИМ КТО МОЖЕ МЕНИ ДОПОМОГТИ В РИШЕНІ ДАНОЇ ЗАДАЧИ
НЕХАЙ ДАНА МАТРИЦЯ N*N ВСІ ЕЛЕММЕНТИ ЯКОЇ РІЗНІ ЗНАЙДІТЬ СКАЛЯРНИЙ ДОБУТОК РЯДКА З НАЙБИЛЬШИМ ЕЛЕМЕНТОМ МАТРИЦІ І СТОПЦЯ ЗНАЙМЕНШИМ ЕДЕМЕНТОМ .N ВОДИТЬСЯ С КЛАВИАТУРИ ЕЛЕМЕНТИ МАТРИЦІ ГЕНЕРУЮТЬСЯ ВИПАДКОВІМ ЧИНОМ


Пусть дана матрица N*N, все элементы которой разные. Найти скалярное произведение ряда с самым большим элементом матрицу и строки с наименьшим элементом. N - вводится с клавиатуры, элементы матрицы генерируются случайным образом.

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

Найти скалярное произведение векторов - C++
Даны два вектора x, y есть Rn. Найти скалярное произведение векторов.

Найти скалярное произведение векторов - C++
Помогите пожалуйста, у самой никак не получается, надо написать программу на С++. Даны координаты двух n-мерных векторов A(a1; a2;..; an)...

Найти скалярное произведение векторов - C++
нужно написать две программы 1) нахождение скалярного произведения векторов 2) вычисление...

Найти скалярное и векторное произведение векторов - C++
Вот программка для операций над векторами, но почему-то не хочет работать, посмотрите плиз: #include <stdio.h> #include <iostream.h>...

Найти скалярное произведение двух n-мерных векторов - C++
У меня вообще не понимаю. И ничего не получился! Задача СИ : Написать программу, которая находит скалярное произведение двух n-мерных...

Даны векторы AN={ ai }i=1,N и BN={ bi }i=1,N . Найти их скалярное произведение по формуле: - C++
Помогите пожалуйста с задачей: Даны векторы AN={ ai }i=1,N и BN={ bi }i=1,N . Найти их скалярное произведение по формуле:

13
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
14.09.2010, 12:26 #2
какого еще ряда?
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
14.09.2010, 13:25 #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream.h>
 
int main()
{
    int mas[100][100], res[100];
    int n, max, min, col, row;
    cout<<"Введите N: ";
    cin>>n;
    srand(time(NULL));
 
 // Заполнение массива
    cout<<"Исходный массив:\n";
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
            cout<<(mas[i][j]=rand()%100)<<'\t';
        cout<<'\n';
    }
 
    min=max=mas[0][0];
 
 //Поиск наиб. и наим.
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
        {
            if (mas[i][j]>max)
            {
                max=mas[i][j];
                row=i;
            }
            if (mas[i][j]<min)
            {
                min=mas[i][j];
                col=j;
            }
        }
 
    cout<<"max = "<<max<<" min = "<<min<<'\n';
    cout<<"Строка= "<<row<<" Столб = "<<col<<'\n';
 
    // Умножение
    cout<<"Результат:\n";
    for(int i=0; i<n; i++)
    {
        cout<<(res[i]=mas[row][i]*mas[i][col])<<'\t';
 
    }
    cout<<endl;
    system("pause");
}
Сделано, правда не в "студии".
0
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.09.2010, 15:03 #4
dihlofos
Ты забыл подключить библиотеку ctime или time.h,в болие старых версиях компилятора!
0
dima170892
0 / 0 / 0
Регистрация: 16.03.2010
Сообщений: 11
15.09.2010, 00:53  [ТС] #5
dihlofos а в чем??
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
15.09.2010, 07:15 #6
dima170892
Это в билдере, хотя особой разницы нет. В студии почти не работал, наверное как-то так (заодно косячок поправил):

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
#include <stdafx.h>
#include "iostream"
#include <time.h>
 
using namespace std; 
 
 
int main()
{
    setlocale(0,"Rus");
        int mas[100][100], res[100];
        int n, max, min, col=0, row=0;
        cout<<"Введите N: ";
        cin>>n;
        srand(time(NULL));
 
 // Заполнение массива
        cout<<"Исходный массив:\n";
        for(int i=0; i<n; i++)
        {
                for(int j=0; j<n; j++)
                        cout<<(mas[i][j]=rand()%100)<<'\t';
                cout<<'\n';
        }
 
        min=max=mas[0][0];
        
 
 //Поиск наиб. и наим.
        for(int i=0; i<n; i++)
                for(int j=0; j<n; j++)
                {
                        if (mas[i][j]>max)
                        {
                                max=mas[i][j];
                                row=i;
                        }
                        if (mas[i][j]<min)
                        {
                                min=mas[i][j];
                                col=j;
                        }
                }
 
        cout<<"max = "<<max<<" min = "<<min<<'\n';
        cout<<"Строка= "<<row<<" Столб = "<<col<<'\n';
 
        // Умножение
        cout<<"Результат:\n";
        for(int i=0; i<n; i++)
        {
                cout<<(res[i]=mas[row][i]*mas[i][col])<<'\t';
 
        }
        cout<<endl;
        system("pause");
}
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2010, 14:04 #7
dihlofos, а если мне нужна матрица 101x101, ваши действия? Исправляйте ошибку


Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
#include "iostream"
так подключаются ваши файлы, а не ваши вот так
C++
1
#include <iostream>


dihlofos, где возврат значения? У вас main возвращает тип int, но вы ничего не возвращаете


Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
2
for(int i=0; i<n; i++)
    for(int j=0; j<n; j++)
Объявлять переменную в цикле не хорошо. К тому же студия будет ругаться на многократное объявление переменных i и j


Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
2
3
4
for(int i=0; i<n; i++)
{
    cout<<(res[i]=mas[row][i]*mas[i][col])<<'\t';
}
Лучше разнести на 2 цикла, все равно быстродействие не повысится
1
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
15.09.2010, 18:59 #8
M128K145, спасибо, что поправили. Давайте по порядку, только больно не бейте

Если нужен массив больше, ладно, можно сделать динамический. После ввода n:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Исходный
                int **mas=new int*[n];
        for(int i=0;i<n;i++)
            mas[i]=new int[n];
 
// Полученный
                int *res=new int[n];
 
..........
 
// Удалить по завершению обработки
                for (int i=0;i<n;i++)
            delete []mas[i];
        delete []mas;
        delete []res;
Сделал статическим, полагая что раз задачка на массивы, ТС возможно не дошёл до изучения указателей.

Насчёт includ'ов, разницу знаю, просто смутила студия, ругающаяся на #include <iostream.h>, а без .h заработала как со скобками, так и с кавычками!

Возврат значения создался автоматом, а я его стёр и даже не заметил, хоть бы warning какой-нибудь выдавало... Вобщем ступил я, в конце надо дописать:
C++
1
return 0;
Насчёт i и j в циклах, раньше если честно никогда так не делал. Но постоянно вижу коды именно с такими конструкциями. Студия кстати не ругается. Переменная же вроде живёт только в пределах цикла? Так вызов её после цикла приведёт к ошибке. Или я ошибаюсь?
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2010, 19:29 #9
Цитата Сообщение от dihlofos Посмотреть сообщение
Если нужен массив больше, ладно, можно сделать динамический
Не ладно, а во-первых вы делаете программу более универсальной, а во-вторых вы экономите память.


Цитата Сообщение от dihlofos Посмотреть сообщение
Студия кстати не ругается. Переменная же вроде живёт только в пределах цикла?
У вас студия случайно не 6.0? Иначе должна ругаться. На j не будет, а вот на i - должна. Плюс вы на создании переменной тратите много времени.

ЗЫ. надеюсь в следующем вашем посте увидеть окончательный вариант кода
1
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
15.09.2010, 19:40 #10
Проверял на 2008 студии, всё было нормально. И в билдере тоже. Ни к j, ни к i никаких претензий.
Вот, вроде всё учёл:

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
#include <stdafx.h>
#include <iostream>
#include <time.h>
 
using namespace std; 
 
 
int main()
{
        setlocale(0,"Rus");
        int n, max, min, col=0, row=0;
    int i,j;
 
        cout<<"Введите N: ";
        cin>>n;
        srand(time(NULL));
 
    int **mas=new int*[n];
        for(int i=0;i<n;i++)
        mas[i]=new int[n];
 
    int *res=new int[n];
 
    // Заполнение массива
        cout<<"Исходный массив:\n";
        for(i=0; i<n; i++)
        {
                for(j=0; j<n; j++)
                        cout<<(mas[i][j]=rand()%100)<<'\t';
                cout<<'\n';
        }
 
        min=max=mas[0][0];
                
 
    //Поиск наиб. и наим.
        for(i=0; i<n; i++)
                for(j=0; j<n; j++)
                {
                        if (mas[i][j]>max)
                        {
                                max=mas[i][j];
                                row=i;
                        }
                        if (mas[i][j]<min)
                        {
                                min=mas[i][j];
                                col=j;
                        }
                }
 
        cout<<"max = "<<max<<" min = "<<min<<'\n';
        cout<<"Строка= "<<row<<" Столб = "<<col<<'\n';
 
        // Умножение
        cout<<"Результат:\n";
        for(i=0; i<n; i++)
        {
                cout<<(res[i]=mas[row][i]*mas[i][col])<<'\t';
 
        }
 
    for (i=0;i<n;i++)
        delete []mas[i];
        delete []mas;
 
        delete []res;
 
        cout<<endl;
        system("pause");
    return 0;
}
1
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.09.2010, 19:52 #11
Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
if (mas[i][j]>max)
{
    max=mas[i][j];
    row=i;
}
if (mas[i][j]<min)
{
    min=mas[i][j];
    col=j;
}
лучше переписать так
C++
1
2
3
4
5
6
7
8
9
10
11
if (mas[i][j]>max)
{
    max=mas[i][j];
    row=i;
}
else
    if (mas[i][j]<min)
    {
        min=mas[i][j];
        col=j;
    }
В этом случае не выполняется лишняя проверка



Цитата Сообщение от M128K145 Посмотреть сообщение
Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
2
3
4
for(int i=0; i<n; i++)
{
    cout<<(res[i]=mas[row][i]*mas[i][col])<<'\t';
}
Лучше разнести на 2 цикла, все равно быстродействие не повысится
Добавлю сюда еще один блок из вашего кода
Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
2
3
4
5
6
for(i=0; i<n; i++)
{
    for(j=0; j<n; j++)
        cout<<(mas[i][j]=rand()%100)<<'\t';
    cout<<'\n';
}
Также быстродействие не повышается, а читабельность ухудшается
1
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
15.09.2010, 20:02 #12
Цитата Сообщение от M128K145 Посмотреть сообщение
Также быстродействие не повышается, а читабельность ухудшается
Ваша правда, и моя тупая привычка.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.09.2010, 22:07 #13
Цитата Сообщение от M128K145 Посмотреть сообщение
Объявлять переменную в цикле не хорошо. К тому же студия будет ругаться на многократное объявление переменных i и j
Данные переменные живут только в пределах цикла, проблем никаких не будет.
Цитата Сообщение от M128K145 Посмотреть сообщение
У вас main возвращает тип int, но вы ничего не возвращаете
Это не страшно, по стандарту если поток выполения дошел до конца функции main и не встретил return'а, то будет возвращен 0. Но все же лучше явно возвращать код завершения из main'a.
Цитата Сообщение от M128K145 Посмотреть сообщение
Плюс вы на создании переменной тратите много времени.
Это спорный вопрос, ограничение области видимости порою важнее мизерных затрат на создание объектов встроенных типов.
1
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
16.09.2010, 08:48 #14
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Это спорный вопрос, ограничение области видимости порою важнее мизерных затрат на создание объектов встроенных типов.
CyBOSSeR, но учитывая то, для чего планируется использовать переменную j, то ограничение видимости тут не при чем и поэтому лучше в сишном стиле вынести объявление переменных i и j в начало main.

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Данные переменные живут только в пределах цикла, проблем никаких не будет.
Но в какой-то MS'овской IDE(не помню точно в какой) они точно будут
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 08:48
Привет! Вот еще темы с ответами:

Найти скалярное произведение матрицы строки на столбец - C++
Дана матрица А размерности (n*n).Найти скалярное произведение строки ,в котором находится минимальный элемент матрицы на столбец с...

Даны 2 матрицы. Проверить условие. Найти скалярное произведение. - C++
Доброго времени суток. Прошу помощи в написании программы. Задача: Даны 2 матрицы. Для каждой проверить условие: есть столбец...

Даны два одномерных массива А и B. Найти их скалярное произведение. - C++
Даны два одномерных массива А и B. Найти их скалярное произведение.через С++ если можно к строчкам коментарии написать.

Найти пару векторов из заданного набора имеющую минимальное скалярное произведение - C++
Даны p различных векторов одинаковой размерности N: a^((1))={〖a^((1))〗_n }= , и a^((2))={〖a^((2))〗_n }=,..,a^((p))={〖a^((p))〗_n...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
16.09.2010, 08:48
Ответ Создать тему
Опции темы

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