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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2012, 15:47   #1
Alexbmgn
Пользователь
 
Регистрация: 08.01.2011
Сообщений: 33
По умолчанию Более детальное разложение на процедуры (функции) !

Я разложил на процедуры части кода задачи. Вообще нивкакую голова не хочет понимать, как еще более раскласть на процедуры. Прошу кто может напишите возможное более детальное разложение на процедуры, именно этого кода (который безусловно далеко не самый оптимизированный, но данном этапе моего осознания более понятный)!

Код:
//Заданы два целых числа N, M. Определить, больше ли сумма простых делителей
//числа N, произведения составных делителей числа M.

uses crt;
var n,i,kol,pro,m,j,sum,delit:integer;
                           flag:boolean;

procedure prov_n(var n:integer);
begin
repeat
writeln('Введите первое число');
readln(n);
if n=1 then writeln('0 и 1 нельзя вводить ', 'сумма простых делителей этого числа= ',sum)
       else if n=0 then writeln('0 и 1 нельяз вводить ', 'сумма простых делителей этого числа= ',sum);
until n>1;
end;



procedure delit_sum(var n,sum:integer);
var i,delit:integer;
flag:boolean;
begin
for i:=2 to n-1 do
   if n mod i=0 then begin
              flag:=true;
              delit:=2;
              while flag and (delit<=i div 2) do
                      if i mod delit=0 then flag:=false
                                       else delit:=delit+1;
             if flag then sum:=sum+i;
end;
writeln('сумма простых делителей этого числа= ',sum);
end;


procedure prov_m(var m:integer);
begin
repeat
writeln('Введите второе число');
readln(m);
if m=1 then writeln('0 и 1 нельзя вводить ', 'сумма простых делителей этого числа= ',sum)
       else if m=0 then writeln('0 и 1 нельяз вводить ', 'сумма простых делителей этого числа= ',sum);
until m>1;
end;


procedure delit_pro(var m,pro:integer);
var delit,i,kol:integer;
flag:boolean;
begin
flag:=true;
delit:=2;

for i:=2 to m-1 do

if m mod i=0 then begin
kol:=kol+1;
while flag and (delit<=i div 2) do
      if i mod delit=0 then
                        begin
                        flag:=false;
                        pro:=pro*i;
                        end
                        else
                        delit:=delit+1;

end;
if kol=0 then pro:=0;
writeln('произведение составных делителей этого числа= ',pro);
end;

procedure rez(var sum,pro:integer);
begin
writeln;
if sum>pro then writeln('сумма простых делителей первого числа равная ',sum, ' > ', ' произведения составных делителей второго числа равного ', Pro)
         else if sum<pro then writeln('сумма простых делителей первого числа равная ',sum, ' < ', ' произведения составных делителей второго числа равного ', Pro)
                         else writeln('сумма простых делителей первого числа равная ',sum, ' = ', ' произведению составных делителей второго числа равного ', Pro);
end;


begin
pro:=1;
prov_n(n);
delit_sum(n,sum);
prov_m(m);
delit_pro(m,pro);
rez(sum,pro);
end.

Последний раз редактировалось ACE Valery; 16.01.2012 в 18:58.
Alexbmgn вне форума Ответить с цитированием
Старый 16.01.2012, 16:17   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
var n,i,kol,pro,m,j,sum,delit:integer;
 flag:boolean;

 procedure prov_n(var n:integer);
 begin
 repeat
 writeln('Введите первое число');
 readln(n);
 if n=1 then writeln('0 и 1 нельзя вводить ', 'сумма простых делителей этого числа= ',sum)
 else if n=0 then writeln('0 и 1 нельяз вводить ', 'сумма простых делителей этого числа= ',sum);
 until n>1;
 end;



 procedure delit_sum(var n,sum:integer);
 var i,delit:integer;
 flag:boolean;
 begin
 for i:=2 to n-1 do
 if n mod i=0 then begin
 flag:=true;
 delit:=2;
 while flag and (delit<=i div 2) do
 if i mod delit=0 then flag:=false
 else delit:=delit+1;
 if flag then sum:=sum+i;
 end;
 writeln('сумма простых делителей этого числа= ',sum);
 end;


 procedure prov_m(var m:integer);
 begin
 repeat
 writeln('Введите второе число');
 readln(m);
 if m=1 then writeln('0 и 1 нельзя вводить ', 'сумма простых делителей этого числа= ',sum)
 else if m=0 then writeln('0 и 1 нельяз вводить ', 'сумма простых делителей этого числа= ',sum);
 until m>1;
 end;


 procedure delit_pro(var m,pro:integer);
 var delit,i,kol:integer;
 flag:boolean;
 begin
 flag:=true;
 delit:=2;

 for i:=2 to m-1 do

 if m mod i=0 then begin
 kol:=kol+1;
 while flag and (delit<=i div 2) do
 if i mod delit=0 then
 begin
 flag:=false;
 pro:=pro*i;
 end
 else
 delit:=delit+1;

 end;
 if kol=0 then pro:=0;
 writeln('произведение составных делителей этого числа= ',pro);
 end;

 procedure rez(var sum,pro:integer);
 begin
 writeln;
 if sum>pro then writeln('сумма простых делителей первого числа равная ',sum, ' > ', ' произведения составных делителей второго числа равного ', Pro)
 else if sum<pro then writeln('сумма простых делителей первого числа равная ',sum, ' < ', ' произведения составных делителей второго числа равного ', Pro)
 else writeln('сумма простых делителей первого числа равная ',sum, ' = ', ' произведению составных делителей второго числа равного ', Pro);
 end;

 procedure START;
 begin
 pro:=1;
 prov_n(n);
 delit_sum(n,sum);
 prov_m(m);
 delit_pro(m,pro);
 rez(sum,pro);
 end;

 Begin
 START;
 readln;
Дальше некуда, я думаю.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение функции andrew932006 Помощь студентам 0 19.12.2011 11:53
Разложение функции stepanov_ivan Помощь студентам 0 25.10.2010 09:08
Разложение функции в ряд Тейлора (Pascal) berdeman Паскаль, Turbo Pascal, PascalABC.NET 3 04.05.2010 21:03
Разложение функции, Ряд Тейлора. Andrag Помощь студентам 6 22.01.2010 14:41