Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2013, 21:29   #1
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
Вопрос Поиск и вставка элемента в массив.[Delphi]

поиск бинарный.работает. если элемент не найден то не работает программа вообще.и в мемо2 массив не записывается либо записывается только первое число.

ps.как сделать чтобы при переносе кода с комментами там где надо была кириллица а не каракули?, при программировании в VBA та же проблема

Код:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm4 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Memo2: TMemo;
    Label3: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm4.Button2Click(Sender: TObject);
begin
Form4.Close;
Form1.Close;
end;

procedure TForm4.Button1Click(Sender: TObject);
const n=5;
var x: array[1..n] of integer;
      p: integer; k:1..n;      //èñêîìûé ýëåìåíò è íîìåð ýëå-òà p â ìàññèâå õ
      found: boolean;
      i:integer;
      l,r:integer;
      pr:integer;
      m:integer; // ñåðåäèíà
begin
found:=false;
l:=1; r:=n;
p:=StrToInt(Edit1.Text);

  for i :=l to r-1 do            //Çàïîëíåíèå ìàññèâà èç ìåìî
  x[i]:=StrToInt(Memo1.Lines[i]);

    for i :=l to r-1 do  begin
     While (l<r)and(found=false) do begin
     m:=(l+r) div 2;
      If x[m]=p then begin
      found:=true; k:=m; end
       else begin
       If p<x[m] then r:=m-1
       else l:=m+1;
      end;
     end;
    end;


r:=n;
x[n]:=p;
  If found = true then
  Label3.Caption:='Íàéäåí'+'  Íîìåð='+IntToStr(k)
   else begin
   Label3.Caption:='Íå íàéäåí';

 {for i:=1 do n do
  for i :=r downto 1 do  begin
   if x[i-1]>p then begin
   pr:=x[i-1];
   x[i-1]:=p;
   x[i]:=pr;
   end;
  end;}
   end;

    for i :=1 to n-1 do
   Memo2.Lines[i]:=IntToStr(x[i]);
end;

end.
MariaD вне форума Ответить с цитированием
Старый 26.04.2013, 22:11   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x, i, left, right, mid: integer;
  a: array of integer;
begin
  left := 0;
  right := Memo1.Lines.Count;
  if right = 0 then
  begin
    Label1.Caption := 'Пусто';
    exit;
  end;
  x := strtoint(Edit1.Text);
  setlength(a, right);
  for i := 0 to right - 1 do
    a[i] := strtoint(Memo1.Lines[i]);
  if a[0] > x then
    Label1.Caption := 'Не найден (предполагаемое место 0)'
  else if a[right - 1] < x then
    Label1.Caption := 'Не найден (предполагаемое место ' + inttostr(right) + ')'
  else
  begin
    while left < right do
    begin
      mid := left + (right - left) div 2;
      if x <= a[mid] then
        right := mid
      else
        left := mid + 1;
    end;
    if a[right] = x then
      Label1.Caption := 'Найден (место ' + inttostr(right) + ')'
    else
      Label1.Caption := 'Не найден (предполагаемое место ' + inttostr(right)
        + ')';
  end;
  setlength(a, 0);
end;
Попробуйте копировать и вставлять текст с включенной русской раскладкой.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка элемента в массив Rait-spider Общие вопросы C/C++ 12 03.11.2012 16:20
Одномерный массив(поиск элемента) BLackJackxxx Паскаль, Turbo Pascal, PascalABC.NET 3 29.04.2011 16:16
Одномерный массив. Вставка элемента. Stwl3 Паскаль, Turbo Pascal, PascalABC.NET 3 09.01.2011 22:52
Вставка элемента в массив Yulya Помощь студентам 2 31.03.2009 10:34
Вставка элемента в массив Игорь777 Помощь студентам 1 04.12.2008 18:57