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

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

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2013, 22:01   #1
sipsmail
Новичок
Джуниор
 
Регистрация: 14.11.2013
Сообщений: 3
По умолчанию Работа с сравнением тхт фаилов

Задача : (Переписать на Си) Массив длины 15 заполнен строками, упорядоченными по алфавиту без повторов: список зарегистрированных посетителей сайта, поступивших абитуриентов, названий книг и т.п. (можно загружать в массив готовый список из отдельного текстового файла, например sorted_list.txt)
Во втором текстовом файле (test.txt) содержится перемешанный набор строк с повторениями, в том числе все строки, записанные в массив, а также новые строки.
Считывая по одной строке из файла test.txt, нужно выполнить поиск каждой строки в массиве, по результатам которого вывести на экран номер ее позиции в массиве и количество ее сравнений с содержимым ячеек массива, произведенных в ходе поиска.
Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск. Пользователь должен иметь возможность выбора метода.
В выводе построить график зависимости количества сравнений строки с содержимым ячеек массива от номера ее позиции в массиве для каждого метода. Подсчитать и привести в выводе среднее число сравнений по всем строкам для каждого метода.
Код на паскале :
Код:
type 
starray=array[1..15] of string;
var
i:integer;
m:char; 
a:starray;
sl:text;
{Алгоритм бинарного поиска}
procedure b (s:starray);
var
n,k,c,i:integer; 
st:string; 
t:text;
begin
assign(t,'test.txt');
reset(t);
while not eof(t) do
begin
i:=1;
readln(t, st);
n:=1; k:=15; c:=(n+k) div 2;
{Алгоритм сравнения строк, чтобы находилась первая строка, округление в меньшую сторону и в большую для нахождения последней строки}
while (st<>s[c]) and (c>n)and (c<k)do
begin
i:=i+1;
if s[c]>st then
begin
k:=c;
c:=(n+k) div 2;
end
else
begin
n:=c;
c:=(n+k) div 2 + (n+k) mod 2;
end;
end;
if st=s[c]
then writeln (st,' строка найдена количество сравнений: ', i)
else writeln (st,' строка не найдена количество сравнений: ', i);
end;
end;
{Алгоритм поиска перебором}
procedure p (s:starray);
var
i:integer;
t:text;
st:string;
begin
assign (t,'test.txt');
reset(t);
while not eof(t) do
begin
readln(t, st);
i:=1;
while (i<15) and (st<>s[i]) do
i:=i+1;
if st=s[i]
then writeln (st,' строка найдена количество сравнений: ', i)
else writeln (st,' строка не найдена количество сравнений: ', i);
end;
end;
{Основная программа}
begin
writeln ('Выберите способ поиска, "B" - бинарный поиск, "P" - поиск перебором');
assign(sl,'sorted_list.txt');
reset(sl);
readln(m);
for i:=1 to 15 do
readln(sl, a[i]);
if m='P'
then
p (a)
else 
b (a);
end.
Помогите переписать на Си(желательно со схожим алгоритмом).



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.11.2013 в 22:45.
sipsmail вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с тхт файлами Delphi loginn333 Общие вопросы Delphi 11 10.09.2011 22:24
Написать программу, преобразующую файл АВС.ТХТ в файл 123.ТХТ [Паскаль] Djoker Помощь студентам 1 12.12.2010 19:45
Исходник. Работа с .тхт dimafe6 Помощь студентам 0 28.01.2010 17:37
Работа с каталогом тхт файлов. littlecoder Общие вопросы Delphi 4 17.12.2008 22:47