Разработка Windows-приложения для демонстрации алгоритмов по работе с числовой и текстовой информацией

Автор: Пользователь скрыл имя, 07 Апреля 2012 в 19:41, курсовая работа

Описание работы

Создать текстовый файл из строк (предложений).
Каждое предложение стоит из слов, которые отделяются друг от друга пробелами, в слове могут быть любые символы, кроме пробелов
Прочитать текстовый файл, в каждом предложении выделить слова и занести их в одномерный массив, состоящий из слов, предварительно поменяв местами первый и последний символы каждого слова. Алгоритм выделения слов оформить в виде подпрограммы.
Отсортировать полученный массив в алфавитном порядке по в

Содержание

Описание работы с программой 4
Последовательность выполнения заданий: 4
Программный код 5
Для задания 1 5
Для задания 2 5
Для задания 3 6
Для задания 4 6
Для задания 5 и 6 7
Для задания 7 8
Процедура выделения слов из предложения и процедура замены первого и последнего символа слова 8
Код модуля Unit1 9
Блок-схема выделения массива слов из строки 17

Работа содержит 1 файл

kursovik.doc

— 136.00 Кб (Скачать)


 

Московский государственный университет экономики, статистики и информатики

 

 

 

 

 

 

 

 

Курсовая работа

 

Дисциплина: Информатика и программирование

 

Тема: «Разработка Windows-приложения для демонстрации алгоритмов по работе с числовой и текстовой информацией»

 

Группа ПИЭ-13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнил:

Студент:.

Проверил:

Преподаватель Маевский В.К.

 

 

 

 

 

 

 

Ярославль 2011г.

 

Содержание

 

 



 

Задание              3

Описание работы с программой              4

Последовательность выполнения заданий:              4

Программный код              5

Для задания 1              5

Для задания 2              5

Для задания 3              6

Для задания 4              6

Для задания 5 и 6              7

Для задания 7              8

Процедура выделения слов из предложения и процедура замены первого и последнего символа слова              8

Код модуля Unit1              9

Блок-схема выделения массива слов из строки              17

 



 

 

 



 

Задание

  1. Создать текстовый файл из строк (предложений).
    1. Каждое предложение стоит из слов, которые отделяются друг от друга пробелами, в слове могут быть любые символы, кроме пробелов
    2. Прочитать текстовый файл, в каждом предложении выделить слова и занести их в одномерный массив, состоящий из слов, предварительно поменяв местами первый и последний символы каждого слова. Алгоритм выделения слов оформить в виде подпрограммы.
    3. Отсортировать полученный массив в алфавитном порядке по возрастанию методом пузырька
    4. Организовать бинарный поиск нужного элемента массива
    5. Отсортированный массив разместить в динамической памяти в очередь. Алгоритм вставки элемента в очередь организовать в виде подпрограммы.
    6. Организовать поиск и корректировку найденного элемента в очереди.
    7. Организовать вывод и удаление элементов очереди. Алгоритм удаления элементов очереди организовать в виде подпрограммы

Описание работы с программой

 

 

 

 

 

Рис. 1. Главная форма

Последовательность выполнения заданий:

 

  1. Задание 1. После запуска программы ввожу в соответствующие окна на рис1 имя файла, предложения из слов для записи  в файл и нажимаю кнопку «Выполнить 1»
  2. Задание 2. Нажимаю кнопку «Выполнить 2». Появляются результат (значения одномерного массива слов)и сообщение («Файл открыт» или «Файл не открыт»)
  3. Задание 3. Нажимаю кнопку «Выполнить 3». Появляется результат:  упорядоченный массив  слов.
  4. Задание 4. ввожу значение для поиска(слово) Нажимаю кнопку «Выполнить 4». Появляется результат поиска: сообщение « Найден элемент с номером…» или «Нет значения».
  5. Задания 5,6. Ввожу значение для поиска (слово) и значение для корректировки (новое слово). Нажимаю кнопку «Выполнить 5,6».Появляется результат поиска: «Найден искомый элемент» или «Поиск неудачный»
  6. Задание 7. Нажимаю кнопку «Выполнить 7». Появляется результат: значения элементов очереди, начиная с головы очереди.

Программный код

 

Для задания 1

procedure TForm1.Button3Click(Sender: TObject);//Chtenie iz Memo i zapis v FILe

var

i,n:integer;

s:string;

begin

filN:=edit1.text;

assignfile(f,FilN);

rewrite(f);

    n:=memo1.Lines.Count;

    for i:=1 to n do

    begin

     s:=memo1.Lines.Strings[i-1];

     writeln(f,s);

         end;

         closefile(f);

end;

 

Для задания 2

procedure TForm1.Button4Click(Sender: TObject);// Massiv slov iz FILE

var

i,j,k:integer;

s:string;

f:textfile;

z:masslov;

sl:slovo;

begin

Assignfile(f,filN);

{$i-}

reset(f);

{$i+}

if ioresult=0 then

begin

label7.Caption:='Файл открыт';

  n:=0;

while not(eof(f)) do

begin

readln(f,s);

Sslova(s,k,z);

for i:=1 to k do

    begin

    n:=n+1;

    d[n]:=z[i];

    end;

    end;

closefile(f);

StringGrid1.RowCount:=n;

StringGrid2.RowCount:=n;

StringGrid5.RowCount:=n;

for i:=1 to n do

  StringGrid1.Cells[0,i-1]:=d[i];

  edit7.Text:=inttostr(n);

end

else

label7.Caption:='Файл не открыт';

end;

 

Для задания 3

 

procedure TForm1.Button7Click(Sender: TObject); // Upor Massiva Slov

VAR

i,k,c:INTEGER;

b:array[1..nm] of integer;

bs:masslov;

cs:slovo;

cc:char;

begin

for i:=1 to n do

bs[i]:=stringgrid1.cells[0,i-1];

for i:=1 to n do

  begin

  cs:=bs[i];

  cc:=cs[1];

  b[i]:=ord(cc);

  end;

    for k:=1 to n-1 do

    for i:=n downto k+1 do

      if b[i] < b[i-1] then

      begin

      c:=b[i]; cs:=bs[i];

      b[i]:=b[i-1]; bs[i]:=bs[i-1];

      b[i-1]:=c; bs[i-1]:=cs;

     end;

     d:=bs;

for i:=1 to n do

stringgrid2.cells[0,i-1]:=d[i];

end;

 

Для задания 4

procedure TForm1.Button8Click(Sender: TObject);//POISK ELEM Massiva slov

var

i,j,k,x:integer;

bs:masslov;

xs:slovo;

begin

xs:=edit2.Text;

for i:=1 to n do

bs[i]:=stringgrid2.cells[0,i-1];

  k:=0;

for i:=1 to n do

  if bs[i]=xs then k:=i;

if k=0 then  edit3.Text:='Нет значения'

else edit3.Text:='Найден элемент с номером '+inttostr(k);

end;

 

Для задания 5 и 6

procedure TForm1.Button9Click(Sender: TObject);

var

value,i : integer;

p: tptr;

procedure addel (val: slovo);

begin

new(p);

p^.inf:=val;

p^.link:=nil;

if endq=nil {если создается первый элемент очереди}

then begq:=p

else endq^.link:=p; {если создается очередной элемент очереди}

endq:=p;

end;

begin {основная программа}

{Начальная установка указателей}

begq:=nil;

  endq:=nil;

{Создание очереди}

for i:=1 to n do

addel(stringgrid2.cells[0,i-1]);

{Поиск элементов в очереди}

p:=begq;

while p<>nil do

if p^.inf=edit4.text then

begin

edit5.Text:='Найден искомый элемент' ;

{корректировка найденного элемента}

p^.inf:=edit6.Text;

exit

end

else

begin

edit5.Text:='Поиск неудачный';

p:=p^.link;

end;

end;

 

 

Для задания 7

 

procedure TForm1.Button10Click(Sender: TObject);

var

i : integer;

value:slovo;

procedure getdelel(var val : slovo);

var

P : tptr;

b:array[1..nm] of integer;

begin

val:=begq^.inf;

p:=begq;

begq:=p^.link;

if begq = nil {если удаляется последний элемент очереди}

then endq:=nil;

dispose(p)

end;

begin

{Удаление очереди с распечаткой значений ее элементов}

i:=1;

while begq<>nil do

begin

getdelel (value);

stringgrid5.cells[0,i-1]:=value;

i:=i+1;

end;

end;

 

Процедура выделения слов из предложения и процедура замены первого и последнего символа слова

   Procedure Revers(var s:string);

     var

        c:char;

        n:integer;

        begin

       n:=length(s);

       c:=s[n];

       s[n]:=s[1];

       s[1]:=c;

        end;

 

   Procedure SSlova(s:string;var k:integer; var d:masslov);

    var

    i,n:integer;

    ss:string;

    c:char;

    flag:boolean;

    begin

   s:=s+' ';

    n:=length(s);

    k:=0;

    flag:=true;

     ss:='';

     for i:=1 to n do

      if flag then

         if s[i]=' ' then

          begin

      flag:=false;

        k:=k+1;

       d[k]:=ss;

         ss:='';

          end

            else ss:=ss+s[i]

             else

      if s[i]<>' ' then

      begin

        flag:=true;

         ss:=s[i];

      end;

       for i:=1 to k do

        begin

            ss:=d[i];

            revers(ss);

            d[i]:=ss;

        end;

            end;

Код модуля Unit1

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Grids, Menus;

 

type

  TForm1 = class(TForm)

    Button2: TButton;

    Label4: TLabel;

    Label5: TLabel;

    Edit1: TEdit;

    Button3: TButton;

    Button4: TButton;

    Label6: TLabel;

    Label7: TLabel;

    Label2: TLabel;

    Button7: TButton;

    StringGrid5: TStringGrid;

    Label9: TLabel;

    Label10: TLabel;

    Edit2: TEdit;

    Button8: TButton;

    Label11: TLabel;

    Edit3: TEdit;

    Button9: TButton;

    Label12: TLabel;

    Label13: TLabel;

    Edit4: TEdit;

    Label14: TLabel;

    Edit5: TEdit;

    Button10: TButton;

    Label15: TLabel;

    Edit6: TEdit;

    Label16: TLabel;

    Label17: TLabel;

    Label18: TLabel;

    Memo1: TMemo;

    StringGrid1: TStringGrid;

    StringGrid2: TStringGrid;

    Label1: TLabel;

    Edit7: TEdit;

    Label3: TLabel;

    procedure Button2Click(Sender: TObject);  //*

    procedure Button3Click(Sender: TObject);  //*

    procedure Button4Click(Sender: TObject);  //*

    procedure Button7Click(Sender: TObject);  //*

    procedure Button8Click(Sender: TObject);  //*

    procedure Button9Click(Sender: TObject);   //*

    procedure Button10Click(Sender: TObject);  //*

    procedure FormCreate(Sender: TObject);     //*

 

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

const nm=200; // nm -максимальное количество слов в массиве

   type

   slovo=string[12];

   masslov=array[1..nm] of slovo;

 

tptr=^telem;

telem=record

inf: slovo;

link : tptr;

end;

 

var

  Form1: TForm1;

  f:textfile;

  d:masslov;

  n:integer;//Chislo slov po FAKTU

  filN:string;//Stroka imeni FILE

var

begq,endq : tptr;

 

implementation

 

{$R *.dfm}

        Procedure Revers(var s:string);

     var

        c:char;

        n:integer;

        begin

       n:=length(s);

       c:=s[n];

       s[n]:=s[1];

       s[1]:=c;

        end;

 

   Procedure SSlova(s:string;var k:integer; var d:masslov);

    var

    i,n:integer;

    ss:string;

    c:char;

    flag:boolean;

    begin

   s:=s+' ';

    n:=length(s);

    k:=0;

    flag:=true;

     ss:='';

     for i:=1 to n do

      if flag then

         if s[i]=' ' then

          begin

      flag:=false;

        k:=k+1;

       d[k]:=ss;

         ss:='';

          end

            else ss:=ss+s[i]

             else

      if s[i]<>' ' then

      begin

        flag:=true;

         ss:=s[i];

      end;

       for i:=1 to k do

        begin

            ss:=d[i];

            revers(ss);

            d[i]:=ss;

        end;

            end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Close

end;

procedure TForm1.Button3Click(Sender: TObject);//Chtenie iz Memo i zapis v FILe

var

i,n:integer;

s:string;

begin

filN:=edit1.text;

assignfile(f,FilN);

rewrite(f);

    n:=memo1.Lines.Count;

    for i:=1 to n do

    begin

     s:=memo1.Lines.Strings[i-1];

     writeln(f,s);

         end;

         closefile(f);

end;

 

procedure TForm1.Button4Click(Sender: TObject);// Massiv slov iz FILE

var

i,j,k:integer;

s:string;

f:textfile;

z:masslov;

sl:slovo;

begin

Assignfile(f,filN);

{$i-}

reset(f);

{$i+}

if ioresult=0 then

begin

label7.Caption:='Файл открыт';

  n:=0;

while not(eof(f)) do

begin

readln(f,s);

Sslova(s,k,z);

for i:=1 to k do

    begin

    n:=n+1;

    d[n]:=z[i];

    end;

    end;

closefile(f);

StringGrid1.RowCount:=n;

StringGrid2.RowCount:=n;

StringGrid5.RowCount:=n;

for i:=1 to n do

  StringGrid1.Cells[0,i-1]:=d[i];

  edit7.Text:=inttostr(n);

end

else

label7.Caption:='Файл не открыт';

end;

 

 

 

 

procedure TForm1.Button7Click(Sender: TObject); // Upor Massiva Slov

VAR

i,k,c:INTEGER;

b:array[1..nm] of integer;

bs:masslov;

cs:slovo;

cc:char;

begin

for i:=1 to n do

bs[i]:=stringgrid1.cells[0,i-1];

for i:=1 to n do

  begin

  cs:=bs[i];

  cc:=cs[1];

  b[i]:=ord(cc);

  end;

    for k:=1 to n-1 do

    for i:=n downto k+1 do

      if b[i] < b[i-1] then

      begin

      c:=b[i]; cs:=bs[i];

      b[i]:=b[i-1]; bs[i]:=bs[i-1];

      b[i-1]:=c; bs[i-1]:=cs;

     end;

     d:=bs;

for i:=1 to n do

stringgrid2.cells[0,i-1]:=d[i];

end;

 

procedure TForm1.Button8Click(Sender: TObject);//POISK ELEM Massiva slov

var

i,j,k,x:integer;

bs:masslov;

xs:slovo;

begin

xs:=edit2.Text;

for i:=1 to n do

bs[i]:=stringgrid2.cells[0,i-1];

  k:=0;

for i:=1 to n do

  if bs[i]=xs then k:=i;

if k=0 then  edit3.Text:='Нет значения'

else edit3.Text:='Найден элемент с номером '+inttostr(k);

end;

 

procedure TForm1.Button9Click(Sender: TObject);

var

value,i : integer;

p: tptr;

procedure addel (val: slovo);

begin

new(p);

p^.inf:=val;

p^.link:=nil;

if endq=nil {если создается первый элемент очереди}

then begq:=p

else endq^.link:=p; {если создается очередной элемент очереди}

endq:=p;

end;

begin {основная программа}

{Начальная установка указателей}

begq:=nil;

  endq:=nil;

{Создание очереди}

for i:=1 to n do

addel(stringgrid2.cells[0,i-1]);

{Поиск элементов в очереди}

p:=begq;

while p<>nil do

if p^.inf=edit4.text then

begin

edit5.Text:='Найден искомый элемент' ;

{корректировка найденного элемента}

p^.inf:=edit6.Text;

exit

end

else

begin

edit5.Text:='Поиск неудачный';

p:=p^.link;

end;

end;

 

procedure TForm1.Button10Click(Sender: TObject);

var

i : integer;

value:slovo;

procedure getdelel(var val : slovo);

var

P : tptr;

b:array[1..nm] of integer;

begin

val:=begq^.inf;

p:=begq;

begq:=p^.link;

if begq = nil {если удаляется последний элемент очереди}

then endq:=nil;

dispose(p)

end;

begin

{Удаление очереди с распечаткой значений ее элементов}

i:=1;

while begq<>nil do

begin

getdelel (value);

stringgrid5.cells[0,i-1]:=value;

i:=i+1;

end;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.Text:='';

stringgrid1.Rowcount:=6;

stringgrid2.Rowcount:=6;

stringgrid5.rowCount:=6;

 

end;

 

 

end.

 

 

 

Пример реализации приложения.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок-схема выделения массива слов из строки

 



Информация о работе Разработка Windows-приложения для демонстрации алгоритмов по работе с числовой и текстовой информацией