Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

одномерные массивы


sergik ©   (2006-01-23 22:32:00) 

Задана последовательность N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются простыми числами.

Ну прсотые числа это я знаю 1,2,3,5,7,11,13,17, т.е. те которые делятся на себя, на единицу и не делятся на другие числа. А как это все задать может кто в курсе? Помогите, если есть возможность


Johnmen   (2006-01-24 16:57:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1136989131&n=3


gdaujk   (2006-01-24 16:45:00) [2]

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: доверяй, но проверяй... Или семь раз доверься, один раз проверся.


gdaujk   (2006-01-24 16:29:00) [3]

MBo ©   (24.01.06 16:06) [8]

Автора бы той статейки сюда... Поспорили бы вы... А я, дурак, посмотрел бы :-))

PS: М-да... "Всё смешалось в доме Облонских" (С) Лев Толстой...


MBo   (2006-01-24 16:06:00) [4]

>Как это понимать?
Понимать, увы, так, что автор не читал описание языка Pascal и не удосужился проверить.


gdaujk   (2006-01-24 15:49:00) [5]

Ой, там же написано: "Запрещается перепечатка данной статьи или ее части без согласования с автором" :-))


gdaujk   (2006-01-24 15:46:00) [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: сорри за офтоп...


MBo   (2006-01-24 15:37:00) [7]

>ибо trunc(sqrt(k)) вычисляется в каждом круге цикла.
ты плохое читал. Это неверно.


gdaujk   (2006-01-24 15:34:00) [8]

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;


SergP.   (2006-01-24 14:12:00) [9]


> Как проверить, что число k простое? Надо в цикле i= 1 to
> k делить это число
> на  i. Если при всех i кроме 1,k число делится с остатком
> - то это простое число.


проще будет если в цикле
for i=2 to trunc(sqrt(k)) do ...


Sha   (2006-01-24 13:15:00) [10]

Если задача учебная, то самостоятельно разобраться с этим будет полезно:

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;


digital   (2006-01-23 23:47:00) [11]

1.Ввести все числа в массив.
2.действовать по алгоритму:
Перебрать все числа с 1 по N, и если число-простое, то суммировать его с остальными простыми числами.
---------
Как проверить, что число k простое? Надо в цикле i= 1 to k делить это число
на  i. Если при всех i кроме 1,k число делится с остатком - то это простое число.


Наверх

Титульная страница Поиск, карта сайта Написать письмо