Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помощь в написании программы (http://www.tehnari.ru/f41/t98450/)

Эффект массы 20.09.2014 16:57

Помощь в написании программы
 
Составить программу для проверки, можно ли заданное натуральное число N представить в виде произведения двух простых чисел. Паскаль. Дальше нахождения простых чисел дело не пошло, не могу сообразить как ее писать. Паскаль авс. (Досрочный выход из цикла запрещают)
Код:

uses Crt;
var
i,k,n,s:integer;
begin
ClrScr;
Write('Введите число:');
Readln(n);
for i:=2 to n do begin
s:=0;
for k:=1 to i div 2 do begin
if i mod j=0 then inc(s);
end;
if s=1 then Writeln(i);
end;
begin
\\\\ then writeln('Можно')
else writeln('Нельзя');
end;
ReadKey;
end


Vladimir_S 20.09.2014 17:31

Ладно, посмотрю. Но попозже. Может быть, завтра, если сегодня не получится.
К тому же это у Вас не программа, а чушь какая-то. Ну вот что за переменная j? Откуда взялась? Даже не описана...

Эффект массы 20.09.2014 17:36

Немного изменил.
Код:

function prost(s: integer):integer;
var
  i,k,n:integer;
begin
    for i:=2 to n do begin
                      s:=0;
                      for k:=1 to i div 2 do begin
                                            if i mod s=0 then inc(s);
                                            end;
                      if s=1 then Writeln(i);
                      end;
end;

procedure poisk(n:integer);
var
  i: integer;

begin
    Writeln('Введите число:');
    Readln(n);
    i := 2;
    While N mod i > 0 do
                      if i = 2 then inc(i)
                                else inc(i, 2);
                                if prost(i) = prost(n div i)then writeln('можно')
                                                            else writeln('нельзя');
end;
end.


Vladimir_S 20.09.2014 19:22

Да... совсем Вы, сударь, не разобрались с написанием подпрограмм... Понимаете, в функции Prost s - это входной параметр, который Вы должны передать из внешнего тела программы. Заканчиваться же функция должна строкой типа
Prost:=...
А у Вас? В общем, мой Вам совет: не откладывая до конца семестра, прямо сейчас беритесь за книжки и разбирайтесь с азами программирования.

P.S. Да, а программу я, как и обещал, сделаю.

Vladimir_S 20.09.2014 19:45

Ну вот, пожалуйста:
Код:

Var
 N,i,j:Integer;
 D:Boolean;

Function Test_Prime(Q:Integer):Boolean;
var
 m:Integer;
 p:Boolean;
begin
 p:=true;
 m:=1;
 Repeat
  Inc(m);
  if (Q mod m)=0 then p:=false;
 Until not p or (m=(Q div 2));
 Test_Prime:=p;
end;

Begin
 Write('N = ');
 Readln(N);
 D:=false;
 i:=1;
 Repeat
  Inc(i);
  if (N mod i)=0 then
  begin
    j:=(N div i);
    if Test_Prime(i) and Test_Prime(j) then
    begin
      D:=true;
      Writeln('Yes: ',N,' = ',i,'*',j);
    end;
  end;
 Until D or (i=(N div 2));
 if not D then Writeln('No');
 Readln
End.


Эффект массы 21.09.2014 08:52

Спасибо большое, единственное, что программа на все цифры отвечает "нет"

Vladimir_S 21.09.2014 09:28

Вложений: 1
Цитата:

Сообщение от Эффект массы (Сообщение 1063617)
Спасибо большое, единственное, что программа на все цифры отвечает "нет"

Так.
Ну, прежде всего, еще и еще раз повторю: до тех пор, пока программа не будет мною тщательно оттестирована, я ее не выложу. Пожалуйста:
Вложение 197180
Почему не работает у Вас? Подозреваю, что дело в этом глючном богомерзком поделии по имени АВС, каковым не пользуюсь и не собираюсь.
Возможно, затык на логическом отрицании. Попробуйте заменить условия
not p
и
not D
на
not(p)
и
not(D)
или на
p=false
и
D=false.
Авось так сожрёт. Мой FreePascal кушает все варианты и не давится. Потому как нормальный транслятор.

Эффект массы 21.09.2014 18:38

Все, спасибо)


Часовой пояс GMT +4, время: 16:47.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.