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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2012, 19:18   #1
Dark Illusion
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 15
По умолчанию Переделать программу без использования mod

Здравствуйте. Помогите пожалуйста переделать занную программу, не используя mod. Условие: С помощью признака делимости на 9 проверьте, кратно ли данное натуральное число 9. Напишите рекурсивную процедуру.
Код:
Program R;
Uses
crt;
var
chisl:longint;

function prouzv(chislo:longint):longint;
begin
if chislo<>0 then
prouzv:=(chislo mod 10)+prouzv(chislo div 10)
else
prouzv:=0;
end;

begin
Writeln('VVedute chislo');
Write('Chislo = ');
readln(chisl);
chisl:=abs(chisl);
if prouzv(chisl) mod 9=0 then
Writeln('Chislo delutcia na 9')
else
Writeln('Chislo ne delutcia na 9');
readln
end.
Dark Illusion вне форума Ответить с цитированием
Старый 03.04.2012, 19:55   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Решение (моё) - УГ (что пришло в голову то и написал), зато как просил без mod'а.
Код:
var
   s : string;
   r, v : Real;
   i, t, c : Integer;

begin
     ReadLn (s);
     r := 0;
     for i := 1 to Length(s) do begin
         Val (Copy(s,i,1), t, c);
         r := r + t;
     end;

     v := Trunc (r / 9);
     if v * 9 = r then
        WriteLn ('YES')
     else
         WriteLn ('NO')
end.
Poma][a вне форума Ответить с цитированием
Старый 03.04.2012, 20:13   #3
Dark Illusion
Пользователь
 
Регистрация: 28.03.2012
Сообщений: 15
По умолчанию

А ты использовал признак делимости на 9?
Dark Illusion вне форума Ответить с цитированием
Старый 03.04.2012, 20:26   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

угу, ну ты програмку посмотри! там я по символьно со строки читаю цифирки (сумму цЫфр), потом проверяю если ты разделишь (с остатком) число на 9, потом отбросишь остаток и * на 9, и посмотришь такое же число? то ответ будет или YES (угу, делится) или NO (не делится)
Poma][a вне форума Ответить с цитированием
Старый 03.04.2012, 20:30   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Poma][a
Цитата:
Решение (моё) - УГ (что пришло в голову то и написал), зато как просил без mod'а.
но и без рекурсии!

Код:
function div9(n: integer): boolean;
var
  s: integer;
  j: integer;
  r: string;
begin
// применяем признак сходимости
  r:=inttostr(n);
  s:=0;
  for j:=1 to length(r) do
    s:=s+strtoint(r[j]);
// сумма цифр тоже делится (не делится)
   result:=dib9(s); // применяи рекурсию
end;
ВНИМАНИЕ! В коде есть один существенный недостаток. Нет выхода из рекурсии

надр нечто вроде
i
Код:
f (что-то проверить) then 
  result:=div9(s) // применить рекурсию
else 
  // есть возможность получить результат без рекурсии
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.04.2012 в 20:43.
evg_m вне форума Ответить с цитированием
Старый 03.04.2012, 20:32   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Да кстати у меня рекурсии нет, процедур и функция тоже....
Poma][a вне форума Ответить с цитированием
Старый 04.04.2012, 09:22   #7
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Код:
function mod_k(n:longint;k:longint):longint; // функция реализует mod
  begin
    mod_k:=round(frac(n/k)*k);
  end;
  
function sum_digit(n:longint):longint; // подсчитываем сумму цифр числа. рекурсия.
begin
  if n<10 then sum_digit:=mod_k(n,10)
   else sum_digit:=sum_digit(n div 10)+mod_k(n,10);
end;

var x:longint;
begin
  readln(x);
  if mod_k(sum_digit(x),9)=0 then write(':)') else write(':('); //проверяем делится ли сумма на 9
end.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Палиндром без использования массива Pingvinenok_Lolo Помощь студентам 17 13.11.2011 02:27
Linq без использования FrameWork 3.5 lildare C# (си шарп) 2 27.09.2011 20:07
Округление без использования функции Lerein Microsoft Office Excel 11 19.10.2010 11:17
TurboPascal:переделать программу без repeat-until ulala Помощь студентам 6 11.12.2009 13:34
Создание проекта без использования БД swiks PHP 7 17.06.2009 13:24