Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2014, 12:50   #1
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
Восклицание Написать программу на Delphi по задаче...

В данной действительной квадратной матрице порядка n найти сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент единственный.
Johny58 вне форума Ответить с цитированием
Старый 21.12.2014, 14:20   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

1. Сначала надо найти этот элемент(определить номер строки и столбца в которой он находится).
2. Затем в цикле уже по столбцам cлаживать значение элементов.
Вот что-то подобное, для VCL.
Код:
function GetSumm(Mass: array of array of Integer; N: Integer): Integer; //параметры функции: твой массив и его размер
var 
min: integer; //значение минима
x,y: integer; //координаты минимального(x-номер столбца, y- номер строки)
i,k: integer; //cчетчики для циклов
begin
min:=Mass[0,0]; //присваиваем наименьший, вдруг первый и есть наименьший
x:=0;
y:=0;
//теперь ищем "настоящий минимум"
for i:=0 to N-1 do //ищем по столбцам
begin
for k:=0 to N-1 do //по строке 
begin
if Mass[k,i]<min then begin min:=Mass[k,i]; x:=k; y:=i; end;
end;
end;
//нашли
//теперь можно найти и сумму
for i:=0 to N-1 do 
begin
Result:=Result + Mass[x,i];
end;
//вот и всё. Если я правильно расчитал
end;
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 21.12.2014, 14:53   #3
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
1. Сначала надо найти этот элемент(определить номер строки и столбца в которой он находится).
2. Затем в цикле уже по столбцам cлаживать значение элементов.
Вот что-то подобное, для VCL.
Код:
function GetSumm(Mass: array of array of Integer; N: Integer): Integer; //параметры функции: твой массив и его размер
var 
min: integer; //значение минима
x,y: integer; //координаты минимального(x-номер столбца, y- номер строки)
i,k: integer; //cчетчики для циклов
begin
min:=Mass[0,0]; //присваиваем наименьший, вдруг первый и есть наименьший
x:=0;
y:=0;
//теперь ищем "настоящий минимум"
for i:=0 to N-1 do //ищем по столбцам
begin
for k:=0 to N-1 do //по строке 
begin
if Mass[k,i]<min then begin min:=Mass[k,i]; x:=k; y:=i; end;
end;
end;
//нашли
//теперь можно найти и сумму
for i:=0 to N-1 do 
begin
Result:=Result + Mass[x,i];
end;
//вот и всё. Если я правильно расчитал
end;
Можно через двумерный массив ввести, без использования функций GetSumm(Mass: array of array of Integer; N: Integer)?
Johny58 вне форума Ответить с цитированием
Старый 21.12.2014, 14:55   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Можно через двумерный массив ввести, без использования функций GetSumm(Mass: array of array of Integer; N: Integer)?
Можно, вводите! И я б запоминал только индексы, значение то тут в принципе не нужно, а понадобится его по индексам вытащить можно!
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 21.12.2014, 15:18   #5
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Можно, вводите! И я б запоминал только индексы, значение то тут в принципе не нужно, а понадобится его по индексам вытащить можно!
Ввел через StringGrid, но теперь типы не совпадают
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
n=3;
var
 Mass: array[0..n,0..n] of integer;
 min: integer;
 x,y,result: integer;
 i,k: integer;
begin
min:=strtoint(StringGrid1.Cells[0,0]);
x:=0;
y:=0;
  for i:=0 to N-1 do
    begin
      for k:=0 to N-1 do
        begin
          if StringGrid1.Cells[k,i]<min
          then
            begin min:=StringGrid1.Cells[k,i];
            x:=k;
            y:=i;
            end;
    end;
        end;
          for i:=0 to N-1 do
            begin
              Result:=Result + StringGrid1.Cells[x,i];
            end;
end;
end.
Johny58 вне форума Ответить с цитированием
Старый 21.12.2014, 16:27   #6
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
Восклицание Собственно, код получился, но почему эта ошибка, после запуска рассчетов уже в программе?

Собственно, код получился, но почему эта ошибка, после запуска рассчетов уже в программе?
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
n=3;
var
 Mass: array[0..n,0..n] of integer;
 min: integer;
 x,y,result: integer;
 i,k: integer;
begin
min:=strtoint(StringGrid1.Cells[0,0]);
x:=0;
y:=0;
for i:=0 to N-1 do
  for k:=0 to N-1 do
    if strtoint(StringGrid1.Cells[k,i])<min then
      begin
      min:=strtoint(StringGrid1.Cells[k,i]);
      x:=k;
      y:=i;
      end;
for i:=0 to N-1 do
  Result:=Result + strtoint(StringGrid1.Cells[x,i]);
end;
end.
Изображения
Тип файла: jpg 2014-12-21 16-21-06 Скриншот экрана.jpg (9.8 Кб, 116 просмотров)

Последний раз редактировалось Johny58; 21.12.2014 в 16:30.
Johny58 вне форума Ответить с цитированием
Старый 21.12.2014, 17:55   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Потому что пустая строка is not a valid integer value
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.12.2014, 17:59   #8
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
Вопрос

Цитата:
Сообщение от Аватар Посмотреть сообщение
Потому что пустая строка is not a valid integer value
Никак не могу найти эту пустую строку, не подскажите, где она?
Johny58 вне форума Ответить с цитированием
Старый 21.12.2014, 18:36   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Подскажу - в какой-то ячейке грида. Бряк в начало метода и пошагово ищи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.12.2014, 20:29   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

strtoint(StringGrid1.Cells[Ё, Ж]) заменить везде на StrToIntDef(StringGrid1.Cells[Ё, Ж], 0)
тогда при проблеме конвертирования любой строки в число вернётся просто 0
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать программу на Delphi lavee Фриланс 1 15.02.2012 21:55
как написать программу по этой задаче? Olgaandsasha Общие вопросы C/C++ 1 24.10.2011 19:06
Написать программу для перевода из 16-ричной системы счисления в 10-тичную, использовать процедурую(написать Delphi) BLADIMIR Помощь студентам 3 07.09.2011 16:35