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

Определить количество столбцов в квадратной матрице, содержащих хотя бы один нулевой элемент

27.06.2013, 10:11. Показов 1229. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите дописать прогу. нужно определить количество столбцов в квадратной матрице, содержащих хотя бы один нулевой элемент( оформить в виде функции). все идеи кончились
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ExtCtrls, Spin;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Memo1: TMemo;
    SpinEdit1: TSpinEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
 
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  n:integer;
  a:array of array of integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
randomize;
n:=SpinEdit1.Value;
setlength(a,n,n);
with StringGrid1 do
 begin
  ColCount:=n;
  RowCount:=n;
 
 end;
for i:=0 to n-1 do
for j:=0 to n-1 do
 begin
  a[i,j]:=-25+random(25);
  StringGrid1.Cells[j,i]:=IntToStr(a[i,j]);
 end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var j,z,mins,sum:integer;
begin
mins:=abs(a[0,0]);
for z:=n-1 downto -n+1 do
 begin
  sum:=0;
  for j:=0 to n-1 do
  if (j-z in [0..n-1]) then  sum:=sum+abs(a[j-z,n-j-1]);
  Memo1.Lines.Add(IntToStr(n-z)+' = '+IntToStr(sum));
  if sum<mins then mins:=sum;
 end;
Memo1.Lines.Add('максимальная сумма модулй'+IntToStr(mins));
 
end;
 
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2013, 10:11
Ответы с готовыми решениями:

Определить количество столбцов, содержащих хотя бы один нулевой элемент.
Помогите, пожалуйста!:help: Дана целочисленная прямоугольная матрица. Определить количество...

Определить количество строк матрицы, содержащих хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить: 1) Количество строк, содержащих хотя бы один...

В прямоугольной матрице определить количество столбцов, содержащих хотя бы один нулевой элемент
 Дана целочисленная прямоугольная матрица. Определить количество столбцов, содержащих хотя бы один...

В заданной целочисленной прямоугольной матрице определить количество столбцов, содержащих хотя бы один нулевой элемент
c++ дана целочисленная прямоугольная матрица. вывести ее на экран и определить количество столбцов,...

10
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
27.06.2013, 12:41 2
Извени, пишу с мобильного..нету возможности протестить..
Что бы считать нулевые елементы столбиков, тебе нужно пройтись по матрице как то так
Взять твой цикл и поменять местами a[j,i] может и ошибаюсь или
Delphi
1
2
3
4
5
6
For j:= 0 to n-1 do
For i:= 0 to n-1 do
Begin
If a[i,j] = 0 then inc(count);
End;
Memo1.lines.add(inttostr(count));
0
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
27.06.2013, 12:55 3
@BabyGluk,
Цитата Сообщение от cool2ra Посмотреть сообщение
количество столбцов в квадратной матрице, содержащих хотя бы один нулевой элемент
, а вы нашли все нулевые элементы, лучше так, где j - столбец, i - строка, break завершит выполнение проверки текущего столбца при первом появлении 0:
Delphi
1
2
3
4
5
6
7
8
For j:= 0 to n-1 do
   For i:= 0 to n-1 do
       If a[j,i] = 0 then 
         begin
         inc(count);
         break;
         End;
Memo1.lines.add(inttostr(count));
2
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
27.06.2013, 13:03 4
Вы правы, наверное когда читал, пропустил ..
0
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 20
27.06.2013, 13:40  [ТС] 5
я щас по другому уже сделал, но там ошибока в вычислении(точнее походу вообще не вычисляет)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function kolvo(kol,h:integer):integer;
var i,j:integer; temp:set of byte;
begin
kol:=0;
for i:=1 to n do
for j:=1 to n do
begin
if (a[i,j] = 0) and not(j in temp) then
        begin
          temp:=temp+[j];
          h:=1;
          kol:=kol+1;
        end
 
 end;
end;
при выводе выдаёт 10-ти значное число, откуда он его берёт ума не приложу

Добавлено через 18 минут
впрчем как и в вашем коде, кидаю весь текст
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
77
78
79
80
81
82
83
84
85
86
87
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ExtCtrls, Spin;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Memo1: TMemo;
    SpinEdit1: TSpinEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
 
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  n:integer;
  a:array of array  of integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
randomize;
n:=SpinEdit1.Value;
setlength(a,n,n);
with StringGrid1 do
 begin
  ColCount:=n;
  RowCount:=n;
 end;
for i:=0 to n-1 do
for j:=0 to n-1 do
 begin
  a[i,j]:=-25+random(25);
  StringGrid1.Cells[i,j]:=IntToStr(a[i,j]);
 end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var j,z,max,sum,kol,count:integer;
begin
max:=abs(a[0,0]);
for z:=n-1 downto 1-n do
 begin
  sum:=0;
  for j:=0 to n-1 do
  if (j-z in [0..n-1]) then  sum:=sum+abs(a[j-z,n-j-1]);
  Memo1.Lines.Add(IntToStr(n-z)+' = '+IntToStr(sum));
  if sum>max then max:=sum;
 end;
Memo1.Lines.Add('Ìàêñèìàëüíàÿ ñóììà ìîäóëåé íà äèàãîíàëÿõ, ïàðàëëåëüíûõ ïîáî÷íîé='+IntToStr(max));
 edit1.Text:=IntToStr(kol);
 Memo1.lines.add(inttostr(count));
end;
 
function kolvo(kol,h:integer):integer;
var i,j:integer; count:byte;// не знаю, правильно ли я с каунтом поступил...первый раз с ним дело имею
begin
count:=0
For j:= 0 to n-1 do
   For i:= 0 to n-1 do
       If a[j,i] = 0 then 
         begin
         inc(count);
         break;
         End;
 
 end;
end.
извеняюсь за тупость
0
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
27.06.2013, 14:08 6
попробуйте функцию так описать:
Delphi
1
2
3
4
private
function kolvo(n:integer):integer;    
{ Private declarations }
public
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function TForm1.kolvo(n:integer):integer;//n=высота матрицы(так как квадратноя - высота = ширина)
var i,j:integer;
begin
result:=0;// значение которое возвращает функция
For j:= 0 to n-1 do
   For i:= 0 to n-1 do
       If a[j,i] = 0 then 
         begin
         inc(result);
         break;
         End;
 end;
ну и вызывать ее где-нибудь в программе:
Delphi
1
ShowMessage('Кол-во столбцев содержащих минимум один нулевой элемент: '+inttostr(kolvo(n)));
1
0 / 0 / 0
Регистрация: 30.01.2013
Сообщений: 20
27.06.2013, 14:22  [ТС] 7
работает.
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
27.06.2013, 14:28 8
при выводе выдаёт 10-ти значное число, откуда он его берёт ума не приложу
Если добавить в конце "result:=kol;" должно работать.

Добавлено через 1 минуту
@cool2ra, @Ev1l
Вы считаете строки, а не столбцы
0
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
27.06.2013, 14:53 9

Не по теме:

@murderer, всегда их путаю, выписал по аналогии с стринг гридом у него первым параметром идет столбец, вторым строка...

Delphi
1
property Cells[ACol, ARow: Integer]



Добавлено через 23 минуты

Не по теме:

кстати, таки я считаю верно, в 3м посте я оговорил условие,

Цитата Сообщение от Ev1l Посмотреть сообщение
где j - столбец, i - строка
.у двумерного массива вообще индексы, хочешь row x col/хочешь col x row, это ТС все в перемешал :p
а по логике первый размер у нас задает массив линейный 1..10 а второй матрицу с кол-вом столбцев 1..10

0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
27.06.2013, 15:16 10
А точно - всё правильно.
0
Ev1l
27.06.2013, 15:27     Определить количество столбцов в квадратной матрице, содержащих хотя бы один нулевой элемент
  #11

Не по теме:

@cool2ra, кстати, подобные реверансы по-моему только запутают вас, выбирайте для себя один порядок размерности чтобы не перекручивать :)

Цитата Сообщение от cool2ra Посмотреть сообщение
StringGrid1.Cells[j,i]:=IntToStr(a[i,j]);

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2013, 15:27

Определить количество столбцов, содержащих хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить количество столбцов, содержащих хотя бы один...

Определить количество столбцов, содержащих хотя бы один нулевой элемент
Написать программу, содержащую пользовательскую функцию, решающую сформулированную ниже задачу. Во...

Определить количество столбцов, содержащих хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить:- количество столбцов, содержащих хотя бы один...

Определить количество столбцов, содержащих хотя бы один нулевой элемент
Дана целочисленная прямоугольная матрица. Определить: 1) количество столбцов, содержащих хотя бы...


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

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