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

Вектор и матрица - C++

Восстановить пароль Регистрация
 
ToyS
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
03.06.2010, 03:36     Вектор и матрица #1
Ребят, помогите пожалуйста)

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

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

очень прошу, помогите! язык желательно не ООП
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.06.2010, 10:26     Вектор и матрица #2
Смотрите, так?
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;
}
ToyS
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
03.06.2010, 23:00  [ТС]     Вектор и матрица #3
neske, спасибо Вам большое, он все дело в том, что у меня C++ не хочет читать модуль iostream не именно в вашей программе, а вообще... Читает он у меня только стандартный stdio.h. Может быть, Вы подскажите мне как из ООП переделать в стандартный язык? В любом случае спасибо за помощь.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.06.2010, 23:11     Вектор и матрица #4
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;
}
ToyS
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
03.06.2010, 23:30  [ТС]     Вектор и матрица #5
neske, согласна ООП скорее для билдера используется)

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

Вы, уж, меня простите, но от программирования я далека)
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
03.06.2010, 23:50     Вектор и матрица #6
К библиотеке iostream в данной программе относятся только потоки ввода/вывода, то есть cout/cin.

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

Добавлено через 14 минут
Так, внимательно посмотрел что писал.. 21 строчку можно удалить вообще.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.06.2010, 23:57     Вектор и матрица #7
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 строчку можно удалить вообще.
не заметил

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

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

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

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

Составить функцию вычисления среднего арифметического элементов вектора. Используя её, преобразовать квадратную матрицу следующим образом: диагональные элементы матрицы заменить средними арифметическими значениями соответствующих строк.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
04.06.2010, 00:00     Вектор и матрица #9
fasked, да, ты прав, swap и правда ни к чему. Невнимательно прочитал задание, думал нужно обменять
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.06.2010, 00:01     Вектор и матрица #10
ToyS, посмотрите мой вариант, написано на Си.
Цитата Сообщение от ToyS Посмотреть сообщение
но почему же тогда такие модули как:
возможно у вас старый компилятор, каким пользуетесь?
Цитата Сообщение от ToyS Посмотреть сообщение
Ну, если выражаться "дешево и сердито"
как ни странно "дешево и сердито" выглядит куда понятнее.
а neske просто видимо забыл разделить найденную сумму на количество элементов
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
04.06.2010, 00:04     Вектор и матрица #11
C++
1
average=std::accumulate (MAS[i], MAS[i]+SIZE, 0) / SIZE; // find average
Не забыл !))
fasked
04.06.2010, 00:08
  #12

Не по теме:

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

ToyS
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
04.06.2010, 00:58  [ТС]     Вектор и матрица #13
fasked, спасибо большое! только матрица не квадратная получается. И еще мне не очень понятно как же изначально выглядит матрица(без замены), если мы сразу же получаем конечный результат?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.06.2010, 01:18     Вектор и матрица #14
Цитата Сообщение от ToyS Посмотреть сообщение
fasked, спасибо большое! только матрица не квадратная получается. И еще мне не очень понятно как же изначально выглядит матрица(без замены), если мы сразу же получаем конечный результат?
как же так. вот пример результата работы:
Код
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
первые пять строк (до разделения пустой строкой) - это первоначальная матрица, следующие пять строк (после пустой строки) - это результирующая матрица
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2010, 23:47     Вектор и матрица
Еще ссылки по теме:

C++ Матрица А(7,7). Построить вектор b(7) из элементов главной диагонали
C++ Задана матрица размером N*N и вектор размерности N
C++ Дана матрица A m×n. Сформировать вектор B из m элементов

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

Или воспользуйтесь поиском по форуму:
ToyS
 Аватар для ToyS
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 44
04.06.2010, 23:47  [ТС]     Вектор и матрица #15
fasked, я понимаю, что так должен выглядеть конечный результат, но у меня по странным стечением обстоятельств, он выглядит так:

Код
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
и еще вопрос: где же здесь собственно сама функция? ^^
Yandex
Объявления
04.06.2010, 23:47     Вектор и матрица
Ответ Создать тему
Опции темы

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