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

Тема в разделе "Delphi - Базы данных", создана пользователем NIRIUS, 26 ноя 2006.

Статус темы:
Закрыта.
  1. NIRIUS

    NIRIUS Гость

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

    Вывести на экран все простые чила, не превосходящие числа М.
    Вот код моей программы:
    Вместо числа М у меня число Х.
    Код (Text):
    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 вывести в поле мемо.
     
  2. Barmutik

    Barmutik Гость

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

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

    Программа вообще работает ? :(
     
  3. NIRIUS

    NIRIUS Гость

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


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

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

    Barmutik Гость

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

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

    NIRIUS Гость

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

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

    Код (Text):
    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.
     
  6. Barmutik

    Barmutik Гость

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

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

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

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

    Хотя зачем здесь вообще массив мне не понятно :)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей