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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2014, 16:53   #1
Argontarg
Пользователь
 
Регистрация: 21.01.2014
Сообщений: 40
По умолчанию Здравствуйте! Работа с массивом! Нужно найти кратные 3 и 5 и сравнить их количество друг с другом!

Здравствуйте! Работа с массивом! Нужно найти кратные 3 и 5 и сравнить их количество друг с другом!

Т.е. вводим через edit массив к примеру 5 на 5. Далее при нажатии кнопки программа должна найти числа в массиве кратные 3 и кратные 5 и дальше уже в label1 и label2 вывести их сравнение, т.е в 1-й label к примеру выводится общее число чисел кратных 3, во второй 5-ти. Подскажите реализацию данной задачи?
Argontarg вне форума Ответить с цитированием
Старый 03.02.2014, 17:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю вводить массив так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var  a:array[1..5,1..5] of integer; i,j:integer;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=Low(a); j:=low(a[i]);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if key=#13 then begin
    a[i,j]:=StrToIntDef(TEdit(Sender).Text,0);
    inc(j);
    if j>High(a[i]) then begin
      inc(i);
      if i>High(a) begin
         ShowMessage('ввод массива окончен');
         i:=Low(a);
      end;
      j:=low(a[i]);
    end;
  end;
end;

end.
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2014, 17:01   #3
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Общий совет. Для нахождения кратных чисел воспользуйтесь признаками делимости.
Признак делимости на 5. Последняя цифра числа или 0 или 5.
Признак делимости на 3. Сумма всех цифр числа делится на 3. Пример можно посмотреть здесь: Признаки делимости на 3, 6 и 9.
Streletz вне форума Ответить с цитированием
Старый 03.02.2014, 17:14   #4
Argontarg
Пользователь
 
Регистрация: 21.01.2014
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Предлагаю вводить массив так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var  a:array[1..5,1..5] of integer; i,j:integer;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=Low(a); j:=low(a[i]);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if key=#13 then begin
    a[i,j]:=StrToIntDef(TEdit(Sender).Text,0);
    inc(j);
    if j>High(a[i]) then begin
      inc(i);
      if i>High(a) begin
         ShowMessage('ввод массива окончен');
         i:=Low(a);
      end;
      j:=low(a[i]);
    end;
  end;
end;

end.
Идея ясна?
Вроде как ясно, но что означает i:=Low(a); j:=low(a[i]); ?

Последний раз редактировалось Argontarg; 03.02.2014 в 17:35.
Argontarg вне форума Ответить с цитированием
Старый 03.02.2014, 17:27   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Небольшой а?
Малый )
Читай хелп по этим функциям - это для определения индексов массива.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2014, 17:34   #6
Argontarg
Пользователь
 
Регистрация: 21.01.2014
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Малый )
Читай хелп по этим функциям - это для определения индексов массива.
Ясно) ок) Спасибо)
Argontarg вне форума Ответить с цитированием
Старый 03.02.2014, 20:09   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Общий совет. Для нахождения кратных чисел воспользуйтесь признаками делимости.
Признак делимости на 5. Последняя цифра числа или 0 или 5.
Признак делимости на 3. Сумма всех цифр числа делится на 3. Пример можно посмотреть здесь: Признаки делимости на 3, 6 и 9.
Зачем???!!
В случае устного счёта, ладно, допускаю Ваш подход, но в случае вычислительной задачи
код
Код:
if (N mod 5) = 0 then // число делится на 5
if (N mod 3) = 0 then // число делится на 3
более чем подходит!
всё это имхо, разумеется!

p.s. про простоту/наглядность/надёжность и универсальность я уже и не говорю.
представьте, например, что вместо 3 и 5 даны числа 11 и 13, 19 и 21, или 89 и 257
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.02.2014, 11:24   #8
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Зачем???!!
В случае устного счёта, ладно, допускаю Ваш подход, но в случае вычислительной задачи
код
Код:
if (N mod 5) = 0 then // число делится на 5
if (N mod 3) = 0 then // число делится на 3
более чем подходит!
всё это имхо, разумеется!

p.s. про простоту/наглядность/надёжность и универсальность я уже и не говорю.
представьте, например, что вместо 3 и 5 даны числа 11 и 13, 19 и 21, или 89 и 257
Можно ещё с помощью функции frac. Хотя, учитывая особенности машинного представления вещественных чисел, в данном случае становится актуальным вопрос точности.
На самом деле очень часто задачу можно решить более чем 1 способом. Какой из них лучше, ИМХО чаще всего определяется исходя из сути и контекста задачи. Истинной сути и истинного контекста никто, кроме ТС, не знает, если он конечно не выложит полностью проект и/или ТЗ.
Поэтому ИМХО, в общем случае, все подходы имеют равное право на существование.
Streletz вне форума Ответить с цитированием
Старый 04.02.2014, 11:29   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Streletz, есть еще понятие эффективности алгоритма. Можно вообще найти все делители и проверить, а попадает ли в них 3 или 5. Эффективно? Или придумать способ с использованием интегрального или дифференциального исчисления, который будет работать. Так что алгоритм с mod имеет больше всего прав на существование по причине максимальной эффективности. И ни каких равных прав
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 11:40   #10
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Так что алгоритм с mod имеет больше всего прав на существование по причине максимальной эффективности.
Если вопрос вычислительной эффективности алгоритма критичен безусловно. Но это уже ИМХО не общий случай, а конкретный контекст задачи.
Streletz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти количество положительных и кратные 7 элементов массива. только простым способом. Паскаль D1SK Помощь студентам 1 06.12.2011 22:04
неработают 2 скрипта, не работают друг с другом Bardak2 JavaScript, Ajax 0 23.11.2011 17:41
поменять адреса указателей друг с другом dasvex Помощь студентам 8 08.09.2011 20:08
Задача на работу с двумерным массивом.Найти количество прямоугольников. anta Общие вопросы C/C++ 6 05.01.2009 15:23
Паскаль. найти все числа кратные трем и посчитать их количество __k1ll3r__ Помощь студентам 6 02.04.2008 16:37