Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa_lab2.docx
Скачиваний:
3
Добавлен:
25.11.2019
Размер:
349.35 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное

учреждение высшего профессионального образования

«Ижевский государственный технический университет имени М.Т. Калашникова»

Факультет «Информатика и вычислительная техника»

Кафедра АСОИУ

ОТЧЕТ

по лабораторной работе №2

по дисциплине «Информатика»

на тему «Поиск слова в таблице»

Выполнил:

Студент группы Б01-782-1

Иванов А. В.

Проверил:

Ст. преподаватель кафедры АСОиУ

Соловьева А. Н.

Ижевск 2012

  1. Постановка задачи:

В текстовом файле (*.txt) содержится набор строк (больше 15) с повторениями (список поступивших абитуриентов; список недавних посетителей сайта; список песен, выбранных радиослушателями и т.п.). Считывая из файла по одной строке, необходимо заполнить ими массив строк длины 15 так, чтобы он не содержал повторов.

  1. Программа должна считывать строки из файла, проверять их наличие в массиве и при отрицательном результате добавлять их в свободные ячейки.

  1. Для проверки наличия строк в массиве использовать один из трех методов: метод перебора, бинарный поиск и хеширование. Пользователь должен иметь возможность выбора метода.

  1. Каждый из трех методов поиска должен быть выделен в отдельную процедуру (функцию).

  1. Для каждой очередной строки выполнять подсчет количества сравнений с содержимым ячеек массива и выводить его на экран.

  1. Для каждого метода поиска построить график зависимости числа сравнений при поиске строки от степени заполнения массива для каждого алгоритма. Подсчитать и привести в выводах среднее числоcравнений по всем строкам для каждого из трех методов.

  1. Блок-схемы

  1. Блок-схема основной программы приведена на рисунке 2.1.

Рисунок 2.1 – Блок схема основной программы

  1. Блок-схема процедуры perebor приведена на рисунке 2.2

Рисунок 2.2 – Блок-схема процедуры perebor

  1. Блок-схема процедуры bin представлена на рисунке 2.3

Рисунок 2.3 – Блок-схема процедуры bin

  1. Блок-схема процедуры hesh приведена на рисунке 2.4

Рисунок 2.4 – Блок-схема процедуры hesh

  1. Исходный код

var t:text;

a:array [0..16] of string;

b,c,d:string;

i,j,l,k,m,min,max,p,h:integer;

procedure perebor;

begin

readln(t,a[1]);

i:=2;

While not eof(t) do

begin

readln(t,b);

j:=1;

k:=0;

l:=0;

While (j<i) and (k=0) do

begin

If b=a[j] then k:=1;

l:=l+1;

j:=j+1;

end;

If k=0 then begin a[i]:=b; i:=i+1; end;

writeln(i-1,' ',l);

end;

end;

procedure bin;

begin

readln(t,a[1]);

i:=2;

While not eof(t) do

begin

readln(t,b);

min:=1;

max:=i-1;

j:=i div 2;

l:=0;

k:=0;

While (l=0) and (min<>max) do

begin

If a[j]=b then begin l:=1; writeln(i-1,' ',k+1); end else

If b>a[j] then begin min:=j+1; j:=(max+min) div 2; end else begin max:=j-1; j:=(max+min) div 2; end;

k:=k+1;

end;

If (min=max) then If a[min]=b then begin l:=1; writeln(i-1,' ',k+1); end else begin If b>a[min] then if a[min+1]='' then a[min+1]:=b else begin

c:=a[min+1];

a[min+1]:=b;

for p:=min+2 to i do

begin

d:=a[p];

a[p]:=c;

c:=d;

end;

end

else begin

c:=a[min];

a[min]:=b;

for p:=min+1 to i do

begin

d:=a[p];

a[p]:=c;

c:=d;

end;

end;

writeln(i-1,' ',k+1);

end;

If l=0 then i:=i+1;

end;

end;

procedure hesh;

begin

i:=1;

While not eof(t) do

begin

readln(t,b);

h:=0;

for j:=1 to length(b) do

h:=h+ord(b[j]);

h:=h mod 16;

if h=0 then h:=1;

k:=1;

l:=0;

If a[h]='' then begin a[h]:=b; writeln(i-1,' ',k); i:=i+1; end else If a[h]<> b then while (l<14) do

begin

h:=(h+1) mod 16;

if h=0 then h:=1;

If a[h]='' then begin a[h]:=b; l:=14; writeln(i-1,' ',k); i:=i+1; end else if a[h]=b then begin writeln(i-1,' ',k+1); l:=14; end;

l:=l+1;

k:=k+1;

end

else writeln(i-1,' ',k);

end;

end;

begin

assign(t,'input.in');

reset(t);

read(m);

If m=1 then perebor else if m=2 then bin else hesh;

close(t);

for j:=1 to i do

writeln(a[j]);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]