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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2011, 12:30   #1
Delphi_user
Новичок
Джуниор
 
Регистрация: 16.10.2011
Сообщений: 1
Восклицание Последовательность Хемминга. Одна Проблема. Важно!

Добрый день, уважаемые программисты.

Есть задача:
Код:
Последовательность Хэмминга образуют натуральные числа, не имеющие других простых делителей, кроме 2, 3 и 5. Найти первый элемент, больший данного числа М, а также номер этого элемента в последовательности;
Задачу решил:
Код:

uses
  SysUtils;


{
Функция для определения простоты делителя
Дано: k - натуральное число, простоту которого нужно определить,
формальный параметр-переменная
Найти: result - результат функции, истина или ложь, т.е.
просто делитель или нет
Дополнительно: i-счетчик цикла
}
function Prost(k:integer):boolean;{определение простого числа}
var i:integer;
      begin
        Prost:=true;
        for i:=2 to round(sqrt(k))do{от двух до корня из числа}
        if k mod i=0 then{если на что-то делится}
            begin
                  result:=false;{не простое}
            end;

       end;


{
Функция определяет принадлежность числа к последовательности Хемминга
Дано: k - натуральное число, "кандидат" в последовательность Хемминга,
формальный параметр-переменная
Найти: result - результат функции, истинна или ложь, т.е. принадлежность
числа к последовательности Хемминга
Дополнительно: i - счетчик цикла
}
function Hemming(k:integer):boolean;
var i:integer;
    begin
        Hemming:=true;
        for i:=7 to k div 2 do{от 7(меньшее допустимое)до середины числа}
        if Prost(i) and (i<>2) and (i<>3) and (i<>5) and(k mod i=0) then
        {если простое и на него можно делить}
              begin
                  result:=false;{не Хемминг}
              end;
              
    end;

var m,n,a:integer;
      begin
            write('m=');
            readln(m);
            a:=1; //  элемент
            n:=1; // номер элемента

            repeat

                    inc(a);
  {если число делится на 2,3,5 и больше ни на одно простое}
  if (((a mod 2=0)or(a mod 3=0)or(a mod 5=0)) and Hemming(a)=true)
          then
               begin
               inc(n);{увеличиваем номер элемента в последовательности}
               write(a,' ');{выводим последовательность}
               end;

            until (a>m);

            writeln;
            writeln('perviy el-t bolshiy m=',a);
            writeln('nomer el-ta=',n);
            readln;
end.
но есть проблема... Последовательность выводится правильно, выводится число больше заданного М, но это число не принадлежит последовательности Хемминга.

Проблема видимо в условии выхода из цикла, оно неполное, но как правильно дополнить это условие - я не пойму. Пробовал проверку истинности функции и т.д., не получается.

ВАЖНО! Программа должна быть реализована с использованием цикла, функций или процедур, никаких массивов.

Надеюсь на вашу помощь.
Delphi_user вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Последовательность хемминга valis Помощь студентам 5 20.10.2010 15:39
2 сайта одна проблема grafgrial PHP 11 15.10.2010 22:20
код Хемминга pinch000 Общие вопросы C/C++ 1 19.12.2009 20:41
Еще одна проблема с непонятным файлом в реестре DeKot Безопасность, Шифрование 10 08.06.2009 00:04
ещё одна проблема с программой на Си osichev Помощь студентам 1 07.06.2009 21:40