Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.056 c
1-1137230335
V-A-V
2006-01-14 12:18
2006.02.12
Импорт справочника товара в 1с


15-1137675762
ilya39
2006-01-19 16:02
2006.02.12
Замена символов


2-1138275086
MIXER
2006-01-26 14:31
2006.02.12
KeyPress


1-1137412552
Mishenka
2006-01-16 14:55
2006.02.12
Компонент потомок от TDataModule


2-1138183216
aviseral
2006-01-25 13:00
2006.02.12
Из Excel в DBGrid