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

Матрица. Построить логический вектор.

05.05.2012, 20:06. Показов 3159. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите решить задачку второго курса на языке С++...
Дана квадратная матрица размерности nxn. необходимо построить логический вектор, каждый элемент которого равен true, если в строке существует элемент, который делит весь массив на две части с одинаковой суммой элементов в каждой

есть эта задачка на языке Delphi, c++ не знаю... может кто нибудь ее преобразовать в С++, ну или написать ее самому, буду премного благодарен.

вот сам код на делфи

Delphi
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
program str105n17;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  windows;
const n=4;
Type  str=array[1..n] of integer;
      massiv=array[1..n] of str;
 
function f(var stroka:str):boolean;
var i,k:integer;
    sum1,sum2:integer;
begin
 f:=false;
 k:=2; 
 repeat
  sum1:=0;sum2:=0;
  for i:=1 to k-1 do sum1:=sum1+stroka[i];
  for i:=k+1 to n do sum2:=sum2+stroka[i];
  if sum1=sum2 then f:=true;
  k:=k+1;
 until (sum1=sum2) or (k>=n);
end;
 
procedure create_matr (var m:massiv);
 var i,j:integer;
 begin
  for i:=1 to n do
  for j:=1 to n do
  //m[i][j]:=random(10);
  read(m[i][j]);
  readln;
 end;
 
procedure write_matr (var m:massiv);
var i,j:integer;
begin
for i:=1 to n do
  begin
    for j:=1 to n do
    write(m[i,j]:4);
    writeln;
  end;
end;
var a:massiv;
    v:array[1..n] of boolean;
    stolbec:str;
    i,j:integer;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
writeln('Введите элементы матрицы размером ',n,'x',n);
create_matr(a);
writeln('Матрица A:');
write_matr(a);
writeln('Результаты по строкам:');
for i:=1 to n do
   begin
    v[i]:=f(a[i]);
    write(v[i],' ');
   end;
writeln;
writeln('Результаты по столбцам:');
for j:=1 to n do
 begin
  for i:=1 to n do
  stolbec[i]:=a[i,j];
  v[j]:=f(stolbec);
  write(v[j],' ');
 end;
readln;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2012, 20:06
Ответы с готовыми решениями:

Дана матрица. Построить вектор!
Дана матрица А(nxn). Построить вектор, каждый элемент которого равен количеству равных элементов в соответствующей строке матрицы А....

Дана матрица по ней построить вектор b по правилу
Дана матрица по ней построить вектор b , Эллемента которого определены b I : номеру первого Эллемента I той строки , который является...

Матрица А(7,7). Построить вектор b(7) из элементов главной диагонали
Матрица А(7,7). Построить вектор b(7) из элементов главной диагонали. Поделить элементы нового вектора на сумму минимального и...

5
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
06.05.2012, 01:36
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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cassert>
 
 
template<typename T>
std::vector<bool> f(std::vector<std::vector<T>> const& matrix) {
    std::vector<bool> result(matrix.size(), false);
    
    auto resultIt = std::begin(result);
    for (auto matrixIt = std::begin(matrix); matrixIt != std::end(matrix); ++matrixIt, ++resultIt) {
        for (auto rowBeginIt = std::begin(*matrixIt), rowEndIt = std::end(*matrixIt), rowIt = std::begin(*matrixIt);
                rowIt != rowEndIt;
                ++rowIt) {
            if (std::accumulate(rowBeginIt, rowIt, T()) == std::accumulate(std::next(rowIt), rowEndIt, T())) {
                *resultIt = true;
                break;
            }
        }
    }
    
    return result;
}
 
 
int main() {
    std::vector<std::vector<int>> matrix = {
        { 1,  2,  4,  3,  4,  3 },
        { 4,  5,  6, -9,  0,  0 },
        { 7,  8,  9, 10, -9, -8 },
        { 8,  0, -3,  3, 19, 22 },
        { 8, -9,  7, 13,-16,  5 },
        { 6, 13, -8, 66,-77,100 }
    };
    std::vector<bool> expected = {
        true,
        false,
        false,
        false,
        true,
        true
    };
    
    auto result = f(matrix);
    
    std::cout << std::boolalpha;
    std::copy(std::begin(result), std::end(result), std::ostream_iterator<bool>(std::cout, "\n"));
    
    assert(result == expected);
}
Добавлено через 20 минут
Если нет поддержки нового стандарта:
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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <numeric>
 
 
template<typename T>
std::vector<bool> f(std::vector<std::vector<T> > const& matrix) {
    typedef typename std::vector<std::vector<T> >::const_iterator  matrix_iterator;
    typedef typename std::vector<T>::const_iterator                row_iterator;
    typedef std::vector<bool>::iterator                            result_iterator;
    
    std::vector<bool> result(matrix.size(), false);
    
    result_iterator resultIt = result.begin();
    for (matrix_iterator matrixIt = matrix.begin(); matrixIt != matrix.end(); ++matrixIt, ++resultIt) {
        for (row_iterator rowBeginIt = matrixIt->begin(), rowEndIt = matrixIt->end(), rowIt = matrixIt->begin();
                rowIt != rowEndIt;
                ++rowIt) {
            if (std::accumulate(rowBeginIt, rowIt, T()) == std::accumulate(rowIt + 1, rowEndIt, T())) {
                *resultIt = true;
                break;
            }
        }
    }
    
    return result;
}
 
 
int main() {
    std::size_t n;
    std::cout << "n? ";
    std::cin >> n;
    std::vector<std::vector<int> > matrix(n, std::vector<int>(n));
    for (std::size_t i = 0; i != n; ++i) {
        for (std::size_t j = 0; j != n; ++j) {
            std::cout << "[" << i << "][" << j << "]? ";
            std::cin >> matrix[i][j];
        }
    }
        
    std::vector<bool> result = f(matrix);
    
    std::cout << std::boolalpha;
    std::copy(result.begin(), result.end(), std::ostream_iterator<bool>(std::cout, "\n"));
}
1
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
07.05.2012, 02:48
Если что, есть более оптимальное решение.
0
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 4
31.05.2012, 19:30
gray fox
напиши более оптимальное
0
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 17
31.05.2012, 21:51  [ТС]
gray_fox, спасибо кстати за те решения, очень помог
от души
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
01.06.2012, 21:38
Цитата Сообщение от qwertyyy Посмотреть сообщение
gray fox
напиши более оптимальное
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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <cassert>
 
 
template<typename T>
std::vector<bool> f(std::vector<std::vector<T>> const& matrix) {
    std::vector<bool> result(matrix.size(), false);
    
    auto resultIt = std::begin(result);
    for (auto matrixIt = std::begin(matrix); matrixIt != std::end(matrix); ++matrixIt, ++resultIt) {
        assert(matrixIt->size() > 1);
        
        auto rowIt = std::begin(*matrixIt);
        T lhs = T();
        T rhs = std::accumulate(std::next(rowIt), std::end(*matrixIt), T());
                
        do {
           if (lhs == rhs) {
              *resultIt = true;
              break;
           }
           
           lhs += *rowIt;
           rhs -= *++rowIt;
        } while (rowIt != std::end(*matrixIt));
    }
    
    return result;
}
 
 
int main() {
    std::vector<std::vector<int>> matrix = {
        { 1,  2,  4,  3,  4,  3 },
        { 4,  5,  6, -9,  0,  0 },
        { 7,  8,  9, 10, -9, -8 },
        { 8,  0, -3,  3, 19, 22 },
        { 8, -9,  7, 13,-16,  5 },
        { 6, 13, -8, 66,-77,100 }
    };
    std::vector<bool> expected = {
        true,
        false,
        false,
        false,
        true,
        true
    };
    
    auto result = f(matrix);
    
    std::cout << std::boolalpha;
    std::copy(std::begin(result), std::end(result), std::ostream_iterator<bool>(std::cout, "\n"));
    
    assert(result == expected);
}
http://liveworkspace.org/code/... ec267a392f
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2012, 21:38
Помогаю со студенческими работами здесь

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

Задана прямоугольная матрица А. Построить вектор В, элементы которого равны разностям наибольших и наименьших значений элементов строк
Задана прямоугольная матрица А. Построить вектор В, элементы которого равны разностям наибольших и наименьших значений элементов строк. На...

Сформировать по вещественной квадратной матрице логический вектор
Составить программу формирования по вещественной квадратной матрице А = { aij }, i =1/n, j =1/m логического вектора В = { bi}, i =1/n ...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru