Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
-6 / 1 / 1
Регистрация: 09.03.2017
Сообщений: 122
1

Вещественная матрица. Построение массива

25.01.2020, 22:55. Показов 526. Ответов 9

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане, хочу попросить у вас помощи в решении непростой для меня задачи.
Дана вещественная матрица A размером п×n. Построить массив B, каждый элемент которого принимает значение true, если в строке матрицы A существует элемент, делящий ее на две части с одинаковой суммой элементов в каждой.
Матрица загружается из текстового файла.

С одной задачей я вроде справился, матрица загружается из текстового файла а вот с другой не могу, вроде суть немного улавливаю, что массив B - одномерный. Количество элементов в нём равно количеству строк в матрице А.
Далее абсолютно ничего понять не могу...

Код:

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    n:integer; //переменная для хранения количества строчек и столбцов
 
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
 
 
 
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
 
var
 
 
 
  f1:TextFile;
  i,j,k:integer;
begin
  Assignfile(f1, 'f1.txt');
  Reset(f1);
  ReadLn(f1, n);
  StringGrid1.ColCount:=n+1;
  StringGrid1.RowCount:=n+1;
    For i:=1 to n do
      For j:=1 to n do
         begin
           Read (f1, k);
           StringGrid1.Cells[i,j]:=IntToStr(k);
         end
  // Перебор матрицы А
 
 
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
 
end.
Добавлено через 2 часа 34 минуты
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
75
76
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    z:integer; //ïåðåìåííàÿ äëÿ õðàíåíèÿ êîëè÷åñòâà ñòðî÷åê è ñòîëáöîâ
 
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
 
 
 
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
  const
    N = 100;
 
var
     A : array[1..N, 1..N] of Extended;
     B : array[1..N] of Boolean;
     SumL, SumR      : Extended;
 
  f1:TextFile;
  I,J,k:integer;
  L, R: Integer;
  SameValue: Boolean;
begin
  Assignfile(f1, 'f1.txt');
  Reset(f1);
  ReadLn(f1, z);
  StringGrid1.ColCount:=z+1;
  StringGrid1.RowCount:=z+1;
  //Перебор строк матрицы А.
    For I:=1 to z do
  
      B[I]:=False;
      For J:=2 to N - 1 do begin
 
      //Подсчёт суммы левой половины строки.
       SumL:=0;
       for L:=1 to J - 1 do begin
        SumL := SumL + A[I,L];
        end;
        //Подсчёт суммы правой половины строки.
        SumR:=0;
        for R:=J + 1 to N do begin
          SumR:=SumR + A[I, R];
          end;
 
 
 
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  begin
  Close;
  end;
end.

Что-то вроде пытался сделать, теперь вообще в stringGrid ничего не выводит.........
Как возможно реализовать данную задачу??? Подскажите пожалуйста (
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2020, 22:55
Ответы с готовыми решениями:

Вещественная матрица
Дана вещественная матрица размерности m*n. Расположить все элементы матрицы по убавлению. Обход...

Вещественная матрица
Дана вещественная матрица размером N*M. Найти общую сумму элементов только тех столбцов которые...

Вещественная матрица A(n*m)
Пусть дана вещественная матрица A(n*m). в каждой строке переместите в конец строки все элементы, у...

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

9
Заблокирован
26.01.2020, 01:07 2
Цитата Сообщение от Андреевич15 Посмотреть сообщение
Дана вещественная матрица A размером п×n. Построить массив B, каждый элемент которого принимает значение true, если в строке матрицы A существует элемент, делящий ее на две части с одинаковой суммой элементов в каждой.
Эээээээээээээээ...
Кликните здесь для просмотра всего текста



Это как? Пример нарисуй.
0
-6 / 1 / 1
Регистрация: 09.03.2017
Сообщений: 122
26.01.2020, 01:59  [ТС] 3
Нашел вроде объяснение этой задаче:
Это означает, что массив B - одномерный. Количество элементов в нём равно количеству строк в матрице А. Далее надо запустить цикл, перебирающий в матрице А последовательно строку за строкой. Если в очередной строке (в I-й строке) мартицы А найдётся J-й элемент (J - это номер столбца), такой что: A[I, 1] + A[I, 2] + ... + A[I, J-1] = A[I, J+1] + A[I, J+2] + ... A[I, N-1] + A[i, N] то: B[I] := True иначе: B[I] := False.
Но алгоритм решения до меня не доходит, дальше сделанного сдвинутся не могу....
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,255
26.01.2020, 02:47 4
Цитата Сообщение от Андреевич15 Посмотреть сообщение
Но алгоритм решения до меня не доходит
Алгоритм уже дошел, раз даже формулу написал. И код во втором фрагменте вроде правильный. Осталось только сравнить SumL и SumR на равенство и если равно, то присвоить B[I]:=True; и перейти к следующей итерации цикла по строкам с помощью процедуры Continue.
Вот только вещественные числа в данной задаче использовать не рекомендую. Только целые!
1
-6 / 1 / 1
Регистрация: 09.03.2017
Сообщений: 122
26.01.2020, 03:47  [ТС] 5
Добавлено через 7 минут
Delphi
1
2
3
4
5
6
7
 for R := J + 1 to N do begin
        SumR := SumR + A[I, R];
      end;
          if SumL>=SumR then begin
        B[I] := True;
 
      end;
Все, вроде норм. поправил

Добавлено через 2 минуты
А итерацию лучше в этом же обработчике событий (procedure TForm1.FormActivate(Sender: TObject) делать, или в
ButtonClick перенести?
Снова в StringGrid матрица не появляется.....

Добавлено через 4 минуты
Людиии!!!!! Как матрицу снова вывести в StringGrid ???? Будьте так любезны, подскажите пожалуйста!!!!!

Добавлено через 35 секунд
northener, Как матрицу снова вывести в StringGrid ???? Будьте так любезны, подскажите пожалуйста!!!!!
0
-6 / 1 / 1
Регистрация: 09.03.2017
Сообщений: 122
26.01.2020, 10:38  [ТС] 6
Уважаемые форумчане, хочу попросить у вас помощи в решении непростой для меня задачи.
Дана вещественная матрица A размером п×n. Построить массив B, каждый элемент которого принимает значение true, если в строке матрицы A существует элемент, делящий ее на две части с одинаковой суммой элементов в каждой.
Матрица загружается из текстового файла.
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
 
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
  const
    N = 100;
 
var
     A : array[1..N, 1..N] of Extended;
     B : array[1..N] of Boolean;
     SumL, SumR      : Extended;
 
  f1:TextFile;
  I,J,k:integer;
  L, R: Integer;
  SameValue: Boolean;
begin
  Assignfile(f1, 'f1.txt');
  Reset(f1);
  ReadLn(f1, z);
  StringGrid1.ColCount:=z+1;
  StringGrid1.RowCount:=z+1;
  //Перебор строк матрицы А.
    For I:=1 to z do
  
      B[I]:=False;
      For J:=2 to N - 1 do begin
 
      //Подсчёт суммы левой половины строки.
       SumL:=0;
       for L:=1 to J - 1 do begin
        SumL := SumL + A[I,L];
        end;
        //Подсчёт суммы правой половины строки.
        SumR:=0;
        for R:=J + 1 to N do begin
          SumR:=SumR + A[I, R];
          end;
 
 if SumL>=SumR then begin
        B[I] := True;
 
      end;
 
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  begin
  Close;
  end;
end.
Как сделать итерацию цикла по строкам и
Как матрицу снова вывести в StringGrid ????
Итерацию лучше в этом же обработчике событий (procedure TForm1.FormActivate(Sender: TObject) делать, или в
ButtonClick перенести?
Будьте так любезны, подскажите пожалуйста!!!!!
Сравнение вроде провел, дальше уже мозги разрывается.... Помогите, если не трудно.
0
403 / 132 / 27
Регистрация: 04.08.2018
Сообщений: 585
26.01.2020, 11:51 7
Цитата Сообщение от Андреевич15 Посмотреть сообщение
Построить массив B, каждый элемент которого принимает значение true, если в строке матрицы A существует элемент, делящий ее на две части с одинаковой суммой элементов в каждой.
В задании точно так написано? Для меня это белиберда. Если каждый элемент принимает одно и то же значение, то зачем нужен массив? Как можно одним элементом разделить матрицу на две части? Матрицу на две части может разделить одномерный массив, но не один элемент.
0
-6 / 1 / 1
Регистрация: 09.03.2017
Сообщений: 122
26.01.2020, 12:34  [ТС] 8
Вещественная матрица. Построение массива
0
403 / 132 / 27
Регистрация: 04.08.2018
Сообщений: 585
26.01.2020, 13:08 9
Андреевич15, по второй части, где делит нормально, я не внимательно прочитал. Получается, что элемент делит строку на две части. А массив "B" вроде должен сохранять значение для каждой строки. В задании должно быть не "каждый элемент которого", а "соответствующий элемент которого".

Добавлено через 23 минуты
Цитата Сообщение от Андреевич15 Посмотреть сообщение
Сравнение вроде провел
Этот код вообще компилируется? Если z это целое число, то в нём вообще только первый элемент из файла.
Delphi
23
For I:=1 to z do
Тут получается полная ерунда. Количество итераций зависит от первого элемента в матрице.
0
-6 / 1 / 1
Регистрация: 09.03.2017
Сообщений: 122
26.01.2020, 13:33  [ТС] 10
А как нужно сделать? Помогите пожалуйста.
0
26.01.2020, 13:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2020, 13:33
Помогаю со студенческими работами здесь

Дана вещественная матрица размером. Упорядочить ее строки по неубыванию их первых элементов
Дана вещественная матрица размером. Упорядочить ее строки по неубыванию их первых элементов.

Дана вещественная матрица размером. Упорядочить ее строки по неубыванию их первых элементов
Выдает ошибку,как исправить?? var a:array of array of real; x,y:byte; implementation ...

Дана вещественная матрица размером. Упорядочить ее строки по неубыванию их первых элементов
Помогите заменить динамический массив на статический var a:array of array of real; ...

Дана квадратная вещественная матрица размерности n x n. Найти количество нулевых элементов, стоящих
Дана квадратная вещественная матрица размерности n x n. Найти количество нулевых элементов,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru