Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44

Вектор и матрица

03.06.2010, 03:36. Показов 1390. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, помогите пожалуйста)

вот в чем проблема: надо составить ф-ю вычисления среднего арифметического вектора, а затем преобразовать матрицу следующим образом: заменить все диагональные элементы средним арифметическим.
т.е. найти ср. а. в каждой строке матрицы и заменить
к примеру, если матрица 3Х3 то в первой строке будет заменяться первый элемент, во второй второй и в третьей третий соответственно.

Если к примеру, первая строка выглядит так: 1 2 3 складываем все элементы, получаем 6 делим на 3 получаем 2, и затем заменяем первый на второй. Т. е. получаем 2 2 3
Как - то так)

очень прошу, помогите! язык желательно не ООП
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2010, 03:36
Ответы с готовыми решениями:

Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E единичная матрица порядка n
Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E-единичная матрица порядка n. Помогите...

матрица на вектор, вроде правильно, а вектор на матрицу? посмотрите пожалуйста?
#include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; int main() { ...

Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.
Привет. Не могу разобратся, вот задание: Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.

14
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 10:26
Смотрите, так?
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
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <numeric>
 
int main()
{
    const int SIZE=5;
    int MAS[SIZE][SIZE];
    // fill and output
    srand(time(NULL));
    std::cout << "Start matrix:\n";
    for (int i=0; i<SIZE; i++) {
        for (int j=0; j<SIZE; j++) {
            MAS[i][j]=rand()%50+1;
            std::cout << std::setw(3) << MAS[i][j]; }
        std::cout << std::endl; }
    //change
    int average=0;
    for (int i=0; i<SIZE; i++)
        for (int j=0; j<SIZE; j++) {
            average=std::accumulate (MAS[i], MAS[i]+SIZE, 0) / SIZE; // find average
            std::swap (MAS[i][i], average); } // заменили.
    //output
    std::cout << "Finish matrix:\n";
    for (int i=0; i<SIZE; i++) {
        for (int j=0; j<SIZE; j++)
            std::cout << std::setw(3) << MAS[i][j];
        std::cout << std::endl; }
 
    system ("pause");
    return 0;
}
1
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
03.06.2010, 23:00  [ТС]
neske, спасибо Вам большое, он все дело в том, что у меня C++ не хочет читать модуль iostream не именно в вашей программе, а вообще... Читает он у меня только стандартный stdio.h. Может быть, Вы подскажите мне как из ООП переделать в стандартный язык? В любом случае спасибо за помощь.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 23:11
ToyS, это не ООП )
Вот это вы хотели?

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
#include <stdio.h>
#include <iomanip>
#include <algorithm>
#include <numeric>
 
int main()
{
    const int SIZE=5;
    int MAS[SIZE][SIZE];
    // fill and output
    srand(time(NULL));
    printf ("Start matrix:\n");
    for (int i=0; i<SIZE; i++) {
        for (int j=0; j<SIZE; j++) {
            MAS[i][j]=rand()%50+1;
            printf ("  %d", MAS[i][j]); }
        printf ("\n"); }
    //change
    int average=0;
    for (int i=0; i<SIZE; i++)
        for (int j=0; j<SIZE; j++) {
            average=std::accumulate (MAS[i], MAS[i]+SIZE, 0) / SIZE; // find average
            std::swap (MAS[i][i], average); } // заменили.
    //output
    printf ("Finish matrix:\n");
    for (int i=0; i<SIZE; i++) {
        for (int j=0; j<SIZE; j++)
            printf ("  %d", MAS[i][j]);
        printf ("\n"); }
 
    system ("pause");
    return 0;
}
0
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
03.06.2010, 23:30  [ТС]
neske, согласна ООП скорее для билдера используется)

но ведь если поменять первый модуль с iostream на stdio.h то тогда некоторые операции не будут считываться т.к. они относятся только к модулю iostream. К примеру:
Code
1
2
average=std::accumulate (MAS[i], MAS[i]+SIZE, 0) / SIZE; // find average
            std::swap (MAS[i][i], average);
и таких модулей как
#include <algorithm>
#include <numeric>
в стандартной библиотеке по-моему тоже нет.

Вы, уж, меня простите, но от программирования я далека)
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 23:50
К библиотеке iostream в данной программе относятся только потоки ввода/вывода, то есть cout/cin.

А такие стандартные шаблоны, как accumulate, swap относятся к библиотекам numeric, algorithm соответственно.
Я все-таки до сих пор не понял, что требуется (;

Добавлено через 14 минут
Так, внимательно посмотрел что писал.. 21 строчку можно удалить вообще.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
03.06.2010, 23:57
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
#include <stdlib.h>
#include <stdio.h>
 
#define SIZE 5
 
int main()
{
   int i = 0, j = 0;
   int avg = 0;
   int matrix[SIZE][SIZE];  
 
   /* fill */
   for(i = 0; i < SIZE; ++i)
      for(j = 0; j < SIZE; ++j)
         matrix[i][j] = rand() % 9;
 
   /* output */
   for(i = 0; i < SIZE; ++i) {
      for(j = 0; j < SIZE; ++j)
         printf("%d ", matrix[i][j]);
      printf("\n");
   }
 
   /* change */
   for(i = 0; i < SIZE; ++i)
   {
      avg = 0;
      for(j = 0; j < SIZE; ++j)
         avg += matrix[i][j];
 
      matrix[i][i] = avg / SIZE;
   }
 
   /* output */
   printf("\n");
   for(i = 0; i < SIZE; ++i) {
      for(j = 0; j < SIZE; ++j)
         printf("%d ", matrix[i][j]);
      printf("\n");
   }
 
   /* end main */
   system("pause");
}
Добавлено через 1 минуту
Цитата Сообщение от neske Посмотреть сообщение
C++
1
2
3
4
for (int i=0; i<SIZE; i++)
 for (int j=0; j<SIZE; j++) {
 average=std::accumulate (MAS[i], MAS[i]+SIZE, 0) / SIZE; // find average
 std::swap (MAS[i][i], average); } // заменили.
цикл по j не нужен.
зачем здесь свопинг применять? почему не просто приравнять?
C++
1
MAS[i][i] = average
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от neske Посмотреть сообщение
Так, внимательно посмотрел что писал.. 21 строчку можно удалить вообще.
не заметил :)

2
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
03.06.2010, 23:58  [ТС]
спасибо за маленький экскурс в C++ )

но почему же тогда такие модули как:

C++
1
2
3
#include <iomanip>
#include <algorithm>
#include <numeric>
программа не хочет воспринимать?

т.е. Вы не поняли задание? Ну, если выражаться "дешево и сердито"), то оно выглядит так:

Составить функцию вычисления среднего арифметического элементов вектора. Используя её, преобразовать квадратную матрицу следующим образом: диагональные элементы матрицы заменить средними арифметическими значениями соответствующих строк.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.06.2010, 00:00
fasked, да, ты прав, swap и правда ни к чему. Невнимательно прочитал задание, думал нужно обменять
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.06.2010, 00:01
ToyS, посмотрите мой вариант, написано на Си.
Цитата Сообщение от ToyS Посмотреть сообщение
но почему же тогда такие модули как:
возможно у вас старый компилятор, каким пользуетесь?
Цитата Сообщение от ToyS Посмотреть сообщение
Ну, если выражаться "дешево и сердито"
как ни странно "дешево и сердито" выглядит куда понятнее.
а neske просто видимо забыл разделить найденную сумму на количество элементов
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.06.2010, 00:04
C++
1
average=std::accumulate (MAS[i], MAS[i]+SIZE, 0) / SIZE; // find average
Не забыл !))
1
04.06.2010, 00:08

Не по теме:

Цитата Сообщение от neske Посмотреть сообщение
Не забыл !))
Извини, не заметил :)

0
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
04.06.2010, 00:58  [ТС]
fasked, спасибо большое! только матрица не квадратная получается. И еще мне не очень понятно как же изначально выглядит матрица(без замены), если мы сразу же получаем конечный результат?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
04.06.2010, 01:18
Цитата Сообщение от ToyS Посмотреть сообщение
fasked, спасибо большое! только матрица не квадратная получается. И еще мне не очень понятно как же изначально выглядит матрица(без замены), если мы сразу же получаем конечный результат?
как же так. вот пример результата работы:
Code
1
2
3
4
5
6
7
8
9
10
11
5 8 7 4 8
1 3 0 7 2
8 2 7 6 7
5 7 8 3 0
0 6 5 0 4
 
6 8 7 4 8
1 2 0 7 2
8 2 6 6 7
5 7 8 4 0
0 6 5 0 3
первые пять строк (до разделения пустой строкой) - это первоначальная матрица, следующие пять строк (после пустой строки) - это результирующая матрица
0
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
04.06.2010, 23:47  [ТС]
fasked, я понимаю, что так должен выглядеть конечный результат, но у меня по странным стечением обстоятельств, он выглядит так:

Code
1
2
3
4
5
6
7
8
9
10
11
7
4
1
2
0
 
2 4 2 1 1
7 5 7 7 4 
4 5 4 1 6 
1 3 0 2 0 
2 4 8 8 4
и еще вопрос: где же здесь собственно сама функция? ^^
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2010, 23:47
Помогаю со студенческими работами здесь

Почему матрица на вектор умножается быстрее чем вектор на матрицу?
Почему матрица на вектор умножается быстрее чем вектор на матрицу?

Даны квадратная матрица A порядка n и вектор b c n элементами. Получить вектор: A^2b
Даны квадратная матрица A порядка n и вектор b c n элементами. Получить вектор: A^2b. Помогите пожалуйста, у самого никак не получается:((

Вычислить вектор P=A^n*X, где A-матрица, X-вектор
Требовалось написать программу с использование функций, при компиляции ошибка segmentation fault #include &lt;iostream&gt; ...

Создать классы "Вектор" и "Матрица", реализовать умножение матрицы на вектор
Создать классы «Вектор (Строка, столбец)» и «Матрица». Реализовать умножение матрицы на вектор. я задал класс матриц,а как мне задать...

Дана матрица A и вектор B порядка N. Поулчить вектор С, i-ый элемент которого..
Уважаемые форумчане) Помогите написать пожалуйста =) Дана матрица A и вектор B порядка N. Поулчить вектор С, i-ый элемент...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru