Текущий архив: 2006.02.12;
Скачать: CL | DM;
Внизодномерные массивы Найти похожие ветки
← →
sergik (2006-01-23 22:32) [0]Задана последовательность N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются простыми числами.
Ну прсотые числа это я знаю 1,2,3,5,7,11,13,17, т.е. те которые делятся на себя, на единицу и не делятся на другие числа. А как это все задать может кто в курсе? Помогите, если есть возможность
← →
digital (2006-01-23 23:47) [1]1.Ввести все числа в массив.
2.действовать по алгоритму:
Перебрать все числа с 1 по N, и если число-простое, то суммировать его с остальными простыми числами.
---------
Как проверить, что число k простое? Надо в цикле i= 1 to k делить это число
на i. Если при всех i кроме 1,k число делится с остатком - то это простое число.
← →
Sha © (2006-01-24 13:15) [2]Если задача учебная, то самостоятельно разобраться с этим будет полезно:
uses
Math;
procedure Tfrm.Button1Click(Sender: TObject);
const
count=8;
var
a: array of real;
sum: real;
i, j: integer;
begin;
Randomize;
SetLength(a,count);
for i:=0 to count-1 do a[i]:=Random;
sum:=0;
if count>0 then sum:=a[0];
for i:=2 to count do
if not IsNAN(a[i-1]) then begin;
sum:=sum+a[i-1];
j:=i+i;
while j<=count do begin;
a[j-1]:=NAN;
j:=j+i;
end;
end;
ShowMessage(FloatToStr(sum));
end;
← →
SergP. (2006-01-24 14:12) [3]
> Как проверить, что число k простое? Надо в цикле i= 1 to
> k делить это число
> на i. Если при всех i кроме 1,k число делится с остатком
> - то это простое число.
проще будет если в цикле
for i=2 to trunc(sqrt(k)) do ...
← →
gdaujk © (2006-01-24 15:34) [4]SergP. (24.01.06 14:12) [3]
Где-то читал, что конструкции типа:for i=2 to trunc(sqrt(k)) do ...
замедляют (может и несущественно) работу программы, ибо trunc(sqrt(k)) вычисляется в каждом круге цикла. Лучше сделать:
var
Count: Integer;
begin
...
Count := Trunc(Sqrt(k));
for i := 2 to Count do
...
end;
← →
MBo © (2006-01-24 15:37) [5]>ибо trunc(sqrt(k)) вычисляется в каждом круге цикла.
ты плохое читал. Это неверно.
← →
gdaujk © (2006-01-24 15:46) [6]MBo © (24.01.06 15:37) [5]
...и я даже нашёл источник:
http://www.delphimaster.ru/articles/optimization.html
Вынесение инвариантного кода за пределы цикла – не выносится. Наиболее распространенный недочет – условие цикла записывается как:
for i:=0 to memo1.lines.count – 1 do...
Delphi будет при каждой итерации вызывать метод count, вычитать из результата 1 и потом уже сверять. Настоятельно рекомендуется переписывать подобный код какlin := .lines.count – 1;
for i:=0 to lin do...
Как это понимать?
PS: сорри за офтоп...
← →
gdaujk © (2006-01-24 15:49) [7]Ой, там же написано: "Запрещается перепечатка данной статьи или ее части без согласования с автором" :-))
← →
MBo © (2006-01-24 16:06) [8]>Как это понимать?
Понимать, увы, так, что автор не читал описание языка Pascal и не удосужился проверить.
← →
gdaujk © (2006-01-24 16:29) [9]MBo © (24.01.06 16:06) [8]
Автора бы той статейки сюда... Поспорили бы вы... А я, дурак, посмотрел бы :-))
PS: М-да... "Всё смешалось в доме Облонских" (С) Лев Толстой...
← →
gdaujk © (2006-01-24 16:45) [10]MBo © (24.01.06 16:06) [8]
Ваша правда. Проделал следующие:var
I, Count: Integer;
begin
Count := 10;
for I := 0 to Count - 1 do
Count := Count - 1;
Label1.Caption := IntToStr(Count);
end;
Проходов 10, Count в конце концов равняется 1. А можно объяснить в краце, что происходит: выделяется дополнительная переменная, или ещё что?
PS: доверяй, но проверяй... Или семь раз доверься, один раз проверся.
← →
Johnmen © (2006-01-24 16:57) [11]http://delphimaster.net/view/15-1136989131/
Страницы: 1 вся ветка
Текущий архив: 2006.02.12;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.037 c