• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Массив и поле Мемо

  • Автор темы NIRIUS
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

NIRIUS

В программинге чуть выше ламера)
Решаю такую задачу на делфи:

Вывести на экран все простые чила, не превосходящие числа М.
Вот код моей программы:
Вместо числа М у меня число Х.
Код:
procedure TfmExample.Button1Click(Sender: TObject);
type
znach = array of integer;
Var mass: znach;
z,i,t,i1,x,s: integer;

begin
x:= ABS(x);\\ 
x:= StrToInt (Edit1.Text);


For i:=1 to pred (x)
do
if ((x mod i)=0) then s:=s+1;
s:=0;
for z:= 1 to x
do
If (s=2) then mass[z]:= i;


for i1:=1 to i do
Begin
t:=mass[i1];
Memo1.Lines.Add(IntToStr(t));
end;

end;

end.

По идее логика работает нормально, но не могу сделать так, чтоб бы все значения массива mass вывести в поле мемо.
 
B

Barmutik

Извиняюсь за выражение.. но какая-то ерунда написана ...

Обращаетесь к эелементам динамического массива .. при этом он не инициализируется нигде, ипользуется переменая I после цикла...

Программа вообще работает ? :(
 
N

NIRIUS

Может мне прокоменнтировать все действия? Чтоб отвечающим был понятна моя реализация.


Что есть не инициализируется?

Переменная i используется повторно для того, чтобы все значения массива выписывались вплоть значения i ( последнее значение i - последний номер числа, до которого шел предыдущий цикл.)
 
B

Barmutik

Давайте пройдём по шагам .. если Вы хотите сами разобраться то можем разобратьхоть до каждой строчки...

Вот сраз вопрос .. массив mass .. Вы обращаетесь к его эелементам .. а где его инициализация .. где установка длины у этого динамического массива?
 
N

NIRIUS

Конечно хочу! :) пока не разберусь, не успокоюсь :)

Вот моя логика выполнения этого задания. Я получаю число Х, далее делаю проверку всех чисел от 0 (ноль не входит), до числа Х(икс не входит). Полученные числа записываю в массив mass, потом переношу все значения массива в поле мемо.
Какими свойствами обладают простые числа? Одни делатся ТОЛЬКО на себя или на 1. Поэтому за основу беру такой алгоритм проверки: я перебираю каждое число от 0 до Х, проверяю, делится ли он на предыдущие чесла. Если деление целочисленное (остаток равен 0), то включается счетчик s, к значению которого добавляется 1. В результате проверки у простого числа счетчик s должен быть строго равен 2 (делится без остатка только на два числа). Если счетчик s=2,тогда значение, переменной, которое сейчас проверяется вводится в массив mass под порядковым номером.
После проверки всех чисел от 0 до Х, все простые числа находятся в массиве mass и выводятся на экран в поле мемо.

Код:
procedure TfmExample.Button1Click(Sender: TObject);
type
znach = array of integer; \\ зарание размер матрицы не известен, поэтому берутся все значения типа integer
Var mass: znach;
z,i,t,i1,x,s,m: integer;

begin
x:= ABS(x);\\ для того, чтобы введенное число не было отрицательным, да и как я понял по условию задачи, то в область значений не входят отрицательные числа, т.к их бесконечно много.
x:= StrToInt (Edit1.Text);


For i:=1 to pred (x)\\ цикл: перебирать значения от 1 до предыдущего значения х, т.к само число х мне не нужно, тольк те, которые находятся до него.
do
if ((x mod i)=0) then s:=s+1;
s:=0;
for z:= 1 to x\\ сегодня пересмотрел программку и понял, наполнение массива работает не правильно,а именно: не знаю как определить номер последнего элемента массива. не знаю что еще придумать =( 
do
If (s=2) then mass[z]:= i;


for i1:=1 to i do \\ вследствии неправильности верхнего алгоритма, этот алгоритм тоже неверен.
Begin
t:=mass[i1];
Memo1.Lines.Add(IntToStr(t));
end;

end;

end.
 
B

Barmutik

Мне импонирует Ваша настойчивость...

Только вот всё немного не так ..

type
znach = array of integer; \\ зарание размер матрицы не известен, поэтому берутся все значения типа integer

Это значит несколько другое .. а не то что Вы написали .. данная запись говоирт о том что Вы объявли тип znach, который представляет из себя динамический массив в котором в роли элементов выступают значения типа Integer

Исходя из неверного понимания этого момента далее по коду видно что программа работает абсолютно не корректно.. вернее она вообще не должна работать...так что изучите функции работы с динамическими массивами и можно будет вернуться к обсуждению Вашей задачи...

Хотя зачем здесь вообще массив мне не понятно :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!