Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск max элемента в Матрице 
:(
    Опции темы
Ares
Дата 12.6.2005, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2005

Репутация: нет
Всего: нет



Помогите словестно-математически описать текст программы!
Назначение и ОДЗ переменных!
Код

procedure TForm1.Button3Click(Sender: TObject);
var
i,j,k,n,m,max: Integer;
begin
for i:=1 to StringGrid1.RowCount do
for j:=1 to StringGrid1.ColCount do
mas[i,j]:=StrToInt(Form1.StringGrid1.Cells[j-1,i-1]);
if (StringGrid1.RowCount mod 2)=0 then m:=round(StringGrid1.RowCount/2)
else m:=round(StringGrid1.RowCount/2)+1;
k:=StringGrid1.RowCount+1;
n:=0;
max:=StrToInt(StringGrid1.cells[0,0]);
for j:=1 to m do begin
k:=k-1;
n:=n+1;
for i:=n to k do
if mas[i,j]>max then max:=mas[i,j];
end;

k:=0;
n:=StringGrid1.RowCount+1;
for j:=StringGrid1.RowCount downto m do begin
k:=k+1;
n:=n-1;
for i:=k to n do
if mas[i,j]>max then max:=mas[i,j];
end;
label4.Caption:=IntToStr(max);
end;

smile
PM MAIL   Вверх
Негодяй
Дата 12.6.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Порядочный
***


Профиль
Группа: Завсегдатай
Сообщений: 1513
Регистрация: 13.2.2005
Где: Kazakhstan, Almat y

Репутация: нет
Всего: 32



Цитата(Ares @ 12.6.2005, 20:53)
Помогите словестно-математически описать текст программы!

это как?

integer - целые переменные
i,j - у тебя в программе для того чтобы можно было сделать цикл
max - для присвоения максимального значения в матрице
Цитата
StringGrid1.RowCount

RowCount - количество столбцов
Цитата
StringGrid1.ColCount

ColCount - кол-во строк
Цитата
(StringGrid1.RowCount mod 2)=

mod - возвращает остаток от деления


Это сообщение отредактировал(а) Негодяй - 12.6.2005, 21:54
PM MAIL   Вверх
Ares
Дата 13.6.2005, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2005

Репутация: нет
Всего: нет



То есть, описати полностью от начала до конца как работает программа! smile
PM MAIL   Вверх
Ares
Дата 13.6.2005, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2005

Репутация: нет
Всего: нет



А k,n,m что за элементы smile
PM MAIL   Вверх
Payne
Дата 13.6.2005, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Детектив
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 6.4.2005
Где: Петербург

Репутация: 4
Всего: 10



Так ты эту программулину не сам писал, признавайся smile ? Иначе ты бы знал, для чего вся эта байда предназначена.

Код

procedure TForm1.Button3Click(Sender: TObject); //данная процедура выполняется после щелчка на Button3
var
  i, j: Integer; //две переменные, используемые в качестве счетчиков циклов
  k, n, m: Integer; //испльзуются для поиска макс. элемента
  max: Integer; //макс. элемент
  mas: array [1..50, 1..50] of Integer; //у тебя в проге не была объявлена сама матрица. Я делаю ее элементы целыми числами
begin
  
  {цикл заполнения массива}
  for i := 1 to StringGrid1.RowCount do
  for j := 1 to StringGrid1.ColCount do
  mas [i,j] := StrToInt (Form1.StringGrid1.Cells [j-1,i-1]);

  {здесь вычисляется m, которая будет равна половине количества строк в StringGride}
  if (StringGrid1.RowCount mod 2) = 0
    then m := round (StringGrid1.RowCount / 2) else m := round (StringGrid1.RowCount / 2) + 1;

  max := StrToInt (StringGrid1.cells [0,0]); //в начале будет считаться, что макс. элемент находится в ячейке [0,0] StringGrid'а
  
  k := StringGrid1.RowCount + 1; //переменной k присваивается значение, на 1 большее количества строк StringGrid'а
  n := 0;
  
  {начинаем поиск макс. элемента}
  {цикл 1}
  for j := 1 to m do
  begin
    k := k - 1;
    n := n + 1;
    for i := n to k do if mas[i,j] > max then max := mas [i,j];
  end;

  k := 0;
  n := StringGrid1.RowCount + 1;
  
  {цикл 2}
  for j := StringGrid1.RowCount downto m do
  begin
    k := k + 1;
    n := n - 1;
    for i := k to n do if mas [i,j] > max then max := mas [i,j];
  end;
  label4.Caption := IntToStr (max); //вывод в label4 значения максимального элемента матрицы
end;

Итак, первым в проге происходит заполнение массива. Переменная i считает строки, j - столбцы. После каждой итерации mas [i,j] присваивается значение, записанное в StringGrid1.Cells [j-1, i-1]. j-1 и i-1 потому, что отсчет ячеек StringGrid'а начинается с нуля.
После этого вычисляется m по нехитрой формуле: если количество строк таблицы StringGrid делится на 2 без остатка, то m будет равно половине количества строк, если же нет, то округленному значению количества строк, деленного на 2, плюс единица. Надеюсь, не очень запутанно.
Затем переменной max, которая изображает максимальный элемент массива, присваивается значение, которое записано в верхней левой ячейке StringGrid'а.
Инициализируются переменные n и k, которые будут отвечать за поиск. В циклах поиска их значения будут изменяться таким образом, что в программа будет "сканировать" не все элементы.
Она словно разбивает по диагоналям матрицу, и {цикл 1} сканирует треугольник, образованный диагоналями слева, а {цикл 2} - треугольник, образованный диагоналями справа.
Далее цикл поиска. Счетчик j увеличивается только до m, т.е. где-то до половины строк таблицы. Только вот я так понимаю, что матрица - квадратная, потому что про ColCount там ничего не говорится, то есть считается, что ColCount равно RowCount. Так вот, строки увеличиваются от 1 до m, а столбцы. Меняются так: после первой итерации сканируются столбцы от 1 до RowCount (т.к. n=1, k=RowCount - смотри как они изменяются в цикле), после второй - от 2 до RowCount - 1. Получается, что сканирование проходит такой треугольник, о котором говорилось выше, слева (не знаю, на фиг это в твоей проге, но так она сделана...). В {цикле 2} то же самое, только счет там ведется по нисходящей от RowCount до m. Но так как m здесь играет роль столбцов, то получается, что сканируется треугольник справа.
После этого выводится значение макс. элемента на label4.
Вот, собсно, и все - если возникнут вопросы (я то наверное не совсем понятно объяснил), спрашивай.

Это сообщение отредактировал(а) Payne - 13.6.2005, 10:01
PM MAIL WWW ICQ Skype   Вверх
Ares
Дата 13.6.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2005

Репутация: нет
Всего: нет



Да ты прав smile ! На то обстоятельства были smile За лето надеюсь изучу делфи! Ты сам посуди реально ли учиться на киберфаке без компа smile
Спасибо тебе smile smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.