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

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Помогите написать программу (http://www.tehnari.ru/f43/t78688/)

konstantin.shef 25.09.2012 09:17

Помогите написать программу
 
Здраствуйте, погите пожалуйста нужно написать програму "Дана непустая последовательность натуральных чисел за которой следует 0. Вычеслить сумму тех, из их порядковый номер которых простое число."

Vladimir_S 25.09.2012 09:48

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

Сообщение от konstantin.shef (Сообщение 796170)
Здраствуйте, погите пожалуйста нужно написать програму "Дана непустая последовательность натуральных чисел за которой следует 0. Вычеслить сумму тех, из их порядковый номер которых простое число."

:telepat: Вложение 98154

konstantin.shef 26.09.2012 13:57

Pascal ABC

Vladimir_S 26.09.2012 14:53

Цитата:

Сообщение от konstantin.shef (Сообщение 796654)
Pascal ABC

Ну, тогда-то что...
Код:

VAR
 i,A,S:Integer;
 q:Boolean;

Function Test(J:Integer):Boolean;
Var
 m:Integer;
 b:Boolean;
begin
 m:=(J div 2)+1;
 b:=true;
 Repeat
  Dec(m);
  If (J mod m)=0 then b:=false;
 Until (b=false) or (m=2);
 Test:=b;
end;

Begin
 i:=0;
 S:=0;
 Writeln('Numbers:');
 Repeat
  q:=false;
  Inc(i);
  Write('Next number ');
  If (i<4) or ((i>=4) and (Test(i))) then q:=true;
  If q then write('(prime position ',i,') ');
  Readln(A);
  If (A>0) and q then Inc(S,A);
 Until A=0;
 Writeln;
 Writeln('Sum= ',S);
 Readln
End.


konstantin.shef 26.09.2012 16:58

Спасибо большое:tehnari_ru_203:

Vladimir_S 26.09.2012 17:13

Цитата:

Сообщение от konstantin.shef (Сообщение 796697)
Спасибо большое:tehnari_ru_203:

Да не за что...

konstantin.shef 02.10.2012 08:45

Помогите разобрать програму на паскале
 
Здраствуйте, погите пожалуйста разобрать програму "Дана непустая последовательность натуральных чисел за которой следует 0. Вычеслить сумму тех, из их порядковый номер которых простое число."

VAR
i,A,S:Integer;
q:Boolean;

Function Test(J:Integer):Boolean;
Var
m:Integer;
b:Boolean;
begin
m:=(J div 2)+1;
b:=true;
Repeat
Dec(m);
If (J mod m)=0 then b:=false;
Until (b=false) or (m=2);
Test:=b;
end;

Begin
i:=0;
S:=0;
Writeln('Numbers:');
Repeat
q:=false;
Inc(i);
Write('Next number ');
If (i<4) or ((i>=4) and (Test(i))) then q:=true;
If q then write('(prime position ',i,') ');
Readln(A);
If (A>0) and q then Inc(S,A);
Until A=0;
Writeln;
Writeln('Sum= ',S);
Readln
End.

Vladimir_S 02.10.2012 10:37

Открыл старую тему и переместил вопрос туда. (Тема была закрыта, чтобы отвадить любителей подбрасывать свои задачки в чужие темы). Объясняю.
Булева функция Test(J) возвращает true, если аргумент (J) - простое число, и false в противном случае. Проверка проводится "в лоб": вычисляются остатки от деления J на все числа, начиная с J/2 и до 2, и если хоть один остаток оказывается нулевым, то проверка прерывается и функция получает значение false.
Дальше - всё просто: искомой сумме и стартовому номеру вводимого числа присваиваются начальные значения S=0 и i=0, дальше организуется цикл ввода Repeat..Until, прерывающийся при введении А=0, в котором проверяется, является ли номер вводимого числа простым. Если является, то булевой переменной-флажку q присваивается значение true, в противном случае - false. Простым считается номер либо меньший 4 (т.е. 1, 2 и 3), либо, если он больше 3, то прошедший тестирование с помощью функции Test(i). Если q=true, то выдается сообщение "prime position", т.е. номер очередного вводимого А - простое число, и это А прибавляется к сумме (на всякий случай там еще "отсекаются" отрицательные числа). Далее осталось только выдать полученную сумму на экран и остановить выполнение программы до нажатия клавиши "Enter", что делается оператором Readln. Вроде как и всё.

konstantin.shef 02.10.2012 19:21

спасибо:tehnari_ru_203::tehnari_ru_203::tehnari_ru _203:

konstantin.shef 22.10.2012 16:47

Доброго времени суток.

Препод забраковал прогу, требует без использования функции, как быть?


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

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