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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2007, 17:53   #1
melville
 
Регистрация: 12.02.2007
Сообщений: 4
По умолчанию мин,макс,нод,нок на делфи

Здравствуйте.
Задали написать прогу, на входе два числа. Форма,а в форме четыре кнопки (min,max,nod,nok) и и три окна: два для ввода чисел, одно для результата. На выходе: прога должна распознать минимальное из чисел, максимальное, наименьший общий делить и наименьшее общее кратное.
С мином и максом я справился. С НОДом и НОКом ситуация сложная. Не работает, не компилируется.
Может кто-то уже писал подобное? Не поделитесь исходниками?
нод
нок
melville вне форума Ответить с цитированием
Старый 12.02.2007, 19:48   #2
Time
Пользователь
 
Регистрация: 09.02.2007
Сообщений: 32
По умолчанию

Это можно сделать "в лоб"!
Для наименьшего общего делителя:
Перебираем в цикле все натуральные числа начиная с 2 до найденного значения максимального включительно и проверяем делятся ли наши два числа на эти числа, пока не найдём число, которое делится и на то и на другое. Оно и будет общим делителем. Если такого числа не найдётся, то общих делителей кроме 1 нет.
Для наименьшего общего кратного: Перебираем все натуральные числа, опять же в цикле, начиная с максимального и до тех пор пока не найдём такое, которое делится на оба исходных числа. Это будет наименьший общий делитель.
Time have not meaning, mind - this is main...
Time вне форума Ответить с цитированием
Старый 12.02.2007, 22:05   #3
melville
 
Регистрация: 12.02.2007
Сообщений: 4
По умолчанию

у меня нет необходимости вводить цикл, у меня всего два числа (вводимых пользователем). Короче, вот код, но вывод не работает правильно. Подскажите как сделать вывод всего того, чтоу меня получилось, а?
п.с. с делфи я первый день знаком

Код:
unit Unit1;
interface
uses
  SysUtils, Windows, Messages, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math, ExtCtrls;
type
  TForm1 = class(TForm)
    Num1: TEdit;
    Num2: TEdit;
    min: TButton;
    max: TButton;
    NOD: TButton;
    NOK: TButton;
    Label1: TLabel;
    procedure NODClick(Sender: TObject);
    procedure NOKClick(Sender: TObject);
    procedure minClick(Sender: TObject);
    procedure maxClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,NOD,NOK,Num1,Num2 : Integer;
    Label1 : Integer;
    R1 : Integer;
    R2 : Integer;

implementation
{$R *.dfm}

procedure TForm1.NODClick(Sender: TObject);
var
  NOD, Num1, Num2, D, I : Integer;
begin
if Num1*Num2 = 0 then NOD:= Num1+Num2
  else
    begin
      D:= 1;
      I:= 1;
      repeat
        I:= I+1;
        if (Num1 mod I = 0) and (Num2 mod I = 0) then
          begin
            Num1:= Trunc(Num1/I);
            Num2:= Trunc(Num2/I);
            D:= D*I;
            I:= 1;
          end;
      until (Num1 <= I) or (Num2 <= I);
      NOD:= D;
    end;
end;

procedure TForm1.NOKClick(Sender: TObject);
var
  NOK, Num1, Num2, I, K : Integer;
begin
 if Num1*Num2 = 0 then NOK:= Num1+Num2
  else
    begin
      K:= Num1*Num2;
      I:= 1;
      repeat
        I:= I+1;
        if (Num1 mod I = 0) and (Num2 mod I = 0) then
          begin
            Num1:= Trunc(Num1/I);
            Num2:= Trunc(Num2/I);
            K:= Trunc(K/I);
            I:= 1;
          end;
      until (Num1 <= I) or (Num2 <= I);
      NOK:= K;
    end;
end;

procedure TForm1.minClick(Sender: TObject);
var
  Num1, Num2, a, b : Integer;
begin
   if Num1>Num2 then
      Label1.Caption:=IntToStr(Num2)
   else
      Label1.Caption:=IntToStr(Num1);
end;

procedure TForm1.maxClick(Sender: TObject);
var
  Num1, Num2, a, b : Integer;
begin
   if Num1>Num2 then
      Label1.Caption:=IntToStr(Num1)
   else
    Label1.Caption:=IntToStr(Num2);
end;

end.
melville вне форума Ответить с цитированием
Старый 12.02.2007, 23:22   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Зачем так сложно? Вот классическое решение на паскале:

Код:
var a, b, HOD, HOK, m:integer;
begin
writeln('ввод 2 чисел');
readln(a,b);
m:=a*b;
while a<>b do
if a>b then a:=a-b
else b:=b-a;
HOD:=a;
HOK:=round(m/HOD);
writeln('HOD= ', HOD);
writeln('HOK= ', HOK);
end.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 12.02.2007, 23:29   #5
melville
 
Регистрация: 12.02.2007
Сообщений: 4
По умолчанию

спасибо, но требуют написать на Делфи с использованием формы. Даже не VB Нельзя)
melville вне форума Ответить с цитированием
Старый 12.02.2007, 23:47   #6
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Проект, как и обещал. Только вот как вложение прикрепить не получилось. Прямая ссылка:
http://getfile.biz/62079
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 13.02.2007 в 00:05.
AVer вне форума Ответить с цитированием
Старый 13.02.2007, 01:24   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Только вот как вложение прикрепить не получилось
У меня тоже такое было. Оказывается все, что когда-то мной выкладывалось, за мной и числится, а существует ограничение, что-то чуть больше мега. Затер старые вложения и все ок.
Пардон, что не в тему. Можно удалить (съесть) после прочтения.
mihali4 вне форума Ответить с цитированием
Старый 14.02.2007, 00:07   #8
melville
 
Регистрация: 12.02.2007
Сообщений: 4
По умолчанию

AVer cпасибо огромное!
melville вне форума Ответить с цитированием
Старый 10.11.2009, 00:20   #9
Sun :)
 
Регистрация: 30.09.2009
Сообщений: 4
По умолчанию

Помогите пожалуйста решить эту задачу с помощью рекурсии.
Вот что у меня получилось без рекурсии:

Procedure Nodk(m0,n0:word; var D,K:word);
Var m,n:word;
begin
m:=m0; n:=n0;
d:= n mod m;
While d <> 0 do
Begin
n:=m;
m:=d;
d:=n mod m;
end;
D:=m;
K:=(n0 div d)*m0 ;
End;
Sun :) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поск макс. потоков в графах Юль_кА Фриланс 2 09.06.2008 13:31
Ограничение формул МИН и МАКС Bu$ter Microsoft Office Excel 2 29.05.2008 09:21
Деревья. макс высота Fuaran8989 Помощь студентам 4 27.05.2008 09:32
Функция МАКС aslanbek Общие вопросы Delphi 2 15.03.2008 14:06