вторник, 17 января 2012 г.

ТТП, Лекция 15


Лекция 15

Файлы

Файл – структура данных, представляющая собой последовательность элементов одного типа.
  

Объявление файла


f: text; { текстовый файл}

{ двоичные файлы }
data: file of real;
id: file of integer;

Связывание файловой переменной с файлом


assign(ФаиловаяПеременная, Файл);

assign(f, ‘a:\mydata.txt’);

Открытие файла

·        для чтения – reset
·        для добавления appaend
·        для обновления – rewrite

Чтение данных из файла

var
         f: text;      { файл }
         a,b: real;  { данные}
begin
assign(f,’c:\mydata.txt’)
resert(f)
readln(f, a);
readln(f, b);

close(f);
{ здесь обработка данных }
end.

Функция EOF


EOF(ФайловаяПеременная)

var
         f: text;      { файл }
         a,s: real;  { число, сумма чисел }
         n: integer; { количество чисел }
begin
n:=0;
assign(f,’c:\mydata.txt’);
resert(f);
while not EOF(f) do
   begin
       readln(f, a);
       s:=s+a;
       n:=n+1;
   end;       
close(f);

{ здесь обработка данных }
end.

Запись в файл

var
         f: text;
         a: real;
begin
          assign(f,’test.txt’);
         rewrite(f);
         repeat
                   write(‘->’);
                   readln(a);
                   writeln(f,a); {запись введенного числа в файл }
          until a=0;
end.

ТТП, Лекция 14


Лекция 14

Рекурсия

Рекурсивным называется объект, частично состоящий или определяемый при помощи самого себя.

Факториал

n! = 1 ´ 2 ´ 3 ´... ´ (n -1) ´ n
Приведенное выражение можно переписать так:
n! = n´ ((n-1) ´ (n-2) ´...´ 3 ´ 2 ´1) = n ´ (n-1)!

function factorial(k:integer):integer;
   begin
     if k = 1
         then factorial:=1
         else factorial:= k*factorial(k—1);
   end;


Использование рекурсии – задачи поиска и оптимизации.

Поиск пути на графе


1
2
3
4
5
6
7
1
0
1
1
1
0
0
0
2
1
0
0
0
0
0
0
3
1
0
0
1
0
0
1
4
1
0
1
0
0
1
0
5
0
0
0
0
0
1
1
6
0
0
0
1
1
0
1
7
0
0
1
0
1
1
0



Program poisk;
const
     N=7;{ кол-во вершин графа}
var
     map:array[1..N,1..N] of integer;{ Карта: map[i,j] не 0,
                                       если точки i и j соединены }
     road:array[1..N] of integer; { Маршрутномера точек карты }
     incl:array[1..N] of boolean; { incl[i]=TRUE, если точка }
                                  { с номером i включена в road }
     start,finish:integer;{ Начальная и конечная точки }
     i,j:integer;


procedure step(s,f,p:integer);{ s - точка, из которой делается шаг}
                              { f - точка, куда надо попасть (конечная) }
                              { p - номер искомой точки маршрута}
var
     c:integer;{ Номер точки, в которую делается очередной шаг }
begin
     if s=f then
       begin
          {Точки s и f совпали!}
          write('Маршрут: ');
          for i:=1 to p-1 do write(road[i],' ');
          writeln;
       end
     else
       begin
          { Выбираем очередную точку }
          for c:=1 to N do
             begin { Проверяем все вершины }
                    if(map[s,c]<>0)and(NOT incl[c])
                    { Точка соединена с текущей и не включена }
                    { в маршрут}
                    then
                       begin
                         road[p]:=c;   { Добавим точку в маршрут }
                         incl[c]:=TRUE;{ и пометим ее  }
                                       { как включенную }
                         step(c,f,p+1);
                         incl[c]:=FALSE;
                         road[p]:=0;
                       end;
               end;
       end;
end; { процедура step }

{ Основная программа }
begin
     { Инициализация массивов }
     for i:=1 to N do road[i]:=0;
     for i:=1 to N do incl[i]:=FALSE;
     for i:=1 to N do for j:=1 to N do map[i,j]:=0;
     { Ввод значений элементов карты }
     map[1,2]:=1; map[2,1]:=1;
     map[6,7]:=1; map[7,6]:=1;
     write('Введите через пробел номера начальной и конечной точек -> ');
     readln(start,finish);
     road[1]:=start;{ Внесем точку в маршрут }
     incl[start]:=TRUE;{ Пометим ее как включенную }

     step(start,finish,2);{Ищем вторую точку маршрута }

     writeln('Для завершения нажмите <Enter>');
     readln;
end.