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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 14:12   #1
pahanzona
Пользователь
 
Регистрация: 05.02.2011
Сообщений: 14
По умолчанию Программа с интервалами неправильно работает

Задание:

Подсчитать количество натуральных чисел, принадлежащих интервалу [a,b) ,
в которых младшая цифра нечетная, а старшая - кратная заданной.


Я написал программу, но при вводе любых a и b программа пишет 'Недопустимый интервал' и появляется ошибка. Кто знает, как исправить?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label3: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var M, N, H, L, a, b, c: integer;
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
M:=0;
if (a > 0)and(a < b)and(b < 100) then
  begin
  for N:= a to b do
    begin
    H:= N div 10;
    L:= N - H * 10;
    if (L mod 2 > 0)and(H mod c = 0) then M:=M+1
    else begin
    MessageDlg('Недопустимый интервал.', mtInformation, [mbOk], 0);
    end;
Label3.Caption:='Количество чисел : '+IntToStr(M);
  end;
  end;
  end;

end.
pahanzona вне форума Ответить с цитированием
Старый 11.03.2011, 15:43   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Ясен пень, при запуске такого кода будет ошибка деления на ноль (Division by Zero) в строке исходника:

Код:
if (L mod 2 > 0)and(H mod c = 0) then M:=M+1
т.к. переменная c никак не обрабатывается: ей ничего не присваивают, она встерчается первый раз во фрагменте, выделенным выше жирным.
Функции div и mod- фактически функции деления, а деление на непонятное (здесь- на взявшуюся внезапно переменную с, которая = НОЛЬ) не есть хорошо.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 11.03.2011, 16:09   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Подсчитать количество натуральных чисел, принадлежащих интервалу [a,b), в которых младшая цифра нечетная, а старшая - кратная заданной.
Код:
function num(a, b, c: Integer): Integer;
var
  n, H: Integer;
begin
  result := 0;
  if (0 < c) then begin
    //
    n := a;
    while (n < b) do begin
      //
      H := n;
      while (10 <= H) do
        H := H div 10;
      //
      if (1 = (n and 1)) and (0 = (H mod c)) then
        inc(result);
      //
      inc(n);
    end;
  end;
end;
как-то так, не проверял.

Цитата:
которая = НОЛЬ
найти 0 в стеке не так-то и легко, хотя и возможно )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неправильно работает запрос Lokos БД в Delphi 7 15.12.2010 06:49
почему на чужем ПК неправильно работает программа Coder01 Общие вопросы Delphi 10 24.08.2010 19:34
TextRect работает неправильно bbk_serg БД в Delphi 16 10.08.2010 21:11
Неправильно работает программа из книги Абеля. bullvinkle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.02.2009 10:56
Скрипт неправильно работает aleksa76 JavaScript, Ajax 4 21.05.2008 17:47