Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  ф
Language: PASCAL
Code:
const 
  n = 15;
  
type 
  TMyArray = array [1..n] of string; 
//Процедура поиска перебором  
procedure Perebor(s: string; a: TMyArray); 
var 
  i: integer; 
  k: integer; 
begin 
  i := 1; 
  k := 1; 
  while (i <= n) and (a[i] <> s) do 
  begin 
    i := i + 1; 
    k := k + 1; 
  end; 
  if (i > n) then
    writeln('Строка ', s, ' не найдена. Кол-во сравнений ', k - 1)
  else 
    writeln('Строка ', s, ' найдена в позиции ', i, '. Кол-во сравнений ', k);
end;
//Процедура бинарного поиска
procedure BinarnuyPoisk(s: string; a: TMyArray); 
var 
  l, k, r, centr: integer; 
begin 
  l := 1; {где l - левая граница}
  r := n; {где r - правая граница}
  k := 1; {где k - счетчик сравнений}
  centr := 0; {где centr  - индекс слова в середине списка}
  while (l <= r)  do 
  begin
    centr := (l + r) div 2;
    if s > a[centr] then 
      l := centr + 1
    else
      if s < a[centr] then
        r := centr - 1
      else 
        if s = a[centr] then
          break;
  k := k + 1; 
  end; 
  if (l > r) then
    writeln('Строка ', s, ' не найдена. Кол-во сравнений ', k - 1)
  else 
    writeln('Строка ', s, ' найдена в позиции ', centr, '. Кол-во сравнений ', k);
end;
 
var 
  sf, f: TextFile; 
  arr: TMyArray; 
  str, c: string; 
  i, j: integer; 
  d: byte;
 //Заполнение массива arr из файла sf 
 begin
    for i := 1 to n do 
    arr[i] := '';
    Assign(sf, 'sortlist.txt'); 
    Reset(sf); 
    i := 1;
    while not Eof(sf) and (i <= n) do 
    begin 
      Readln(sf, arr[i]); 
      i := i + 1; 
    end; 
    Close(sf);  
    //Сортировка массива arr
    begin
      for i := 1 to n-1 do
        for j := i+1 to n do
          if (arr[i] > arr[j]) then
          begin
            c := arr[i];
            arr[i] := arr[j];
            arr[j] := c;
          end; 
 end;          
begin
  Write('Для выполнения поиска перебором введите 1. Для выполнения бинарным поиском введите 2');
  Read(d);
  case d of
  1:
  begin
    //Поиск перебором в массиве arr строк из файла f 
    Assign(f, 'test.txt'); 
    Reset(f); 
    while not Eof(f) do 
    begin 
      readln(f, str);
      Perebor(str, arr); 
    end; 
    Close(f);
  end;
  2:
   begin
    //Бинарный поиск в массиве arr строк из файла f 
    Assign(f, 'test.txt'); 
    Reset(f);
    while not Eof(f) do 
     begin 
      readln(f, str);
      BinarnuyPoisk(str, arr); 
     end; 
      Close(f);
    end;
    3..999999999:
  writeln('Данное значение недопустимо');
  0:
  writeln('Данное значение недопустимо');
   end;
  end;
end.
Comments: