Алгоритмический язык Pascal. Программа "Телефонный справочник"

АЛЬМЕТЬЕВСКИЙ ГОСУДАРСТВЕННЫЙ

НЕФТЯНОЙ ИНСТИТУТ

Кафедра информатики





















Алгоритмический язык Pascal. Программа «Телефонный справочник»





























2007


Содержание



Введение

Задание

Блок-схема

Листинг программы

Описание основных модулей и операторов

Литература

Приложение




Введение



Важнейшая роль в развитии современного общества в конце XX века принадлежит информатизации. По характеру и значению для будущего человеческой цивилизации процесс информатизации можно сравнить с переходом, человечества от аграрного общества к индустриальному. Подобно тому, как изобретение механического двигателя открыло эру комплексной механизации и автоматизации физического труда, изобретение ЭВМ сделало то же самое в отношении труда умственного.

Процесс информатизации характеризуется использованием информации в качестве общественного продукта, обеспечивающего интенсификацию всех сфер экономики, ускорение научно-технического прогресса, интеллектуализацию основных видов человеческой деятельности и демократизацию общества. В результате внедрения новых информационных технологий значительно изменяются общественно-экономические структуры, формируется гибкое динамическое общество, способное к активной самооценке и выбору целей развития, быстрой и адекватной реакции на изменение внешней и внутренней среды.

Основой информатизации является использование электронно-вычислительной техники для сбора, накопления, обработки и передачи информации. ЭВМ-комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач.

Чтобы компьютер выполнил решение какой-либо задачи, ему необходимо получить от человека инструкции, как её решать. Набор таких инструкций для компьютера, направленный на решение конкретной задачи, называется компьютерной программой,

Современные компьютеры не настолько совершенны, чтобы понимать программы, записанные на каком-либо употребляемом человеке языке- русском, английском, японском. Команды, предназначенные для ЭВМ необходимо записать в понятной ей форме. С этой целью применяются языки программирования - искусственные языки, алфавит, словарный запас и структура которых удобны человеку и понятны компьютеру.

В самом общем смысле языком программирования называется фиксированная система обозначений и правил для описания алгоритмов и структур данных. Языки программирования имеют как бы два лица. Одно из них обращено к человеку, а другое адресовано к ЭВМ, которая должна понимать команды.

Исходя из этого все языки программирования делятся на языки низкого (ассемблер), высокого (Паскаль, Бейсик, Си, Фортран) и сверхвысокого (Алгол-67, Пролог) уровня.

Язык программирования Паскаль (назван в честь выдающегося французского математика и философа Блеза Паскаля (1623-1662)), разработан в 1968-1971 годах Никлаусом Виртом, профессором, директором Института информатики Швейцарской высшей политехнической школы. Язык Паскаль, созданный первоначально для обучения программирования как систематической дисциплине, скоро стал широко использоваться для разработки программных средств в профессиональном программировании.

Широкой популярностью Паскаля среди программистов способствовали следующие причины:

Благодаря своей компактности, удачному первоначальному описанию Паскаль оказался достаточно, лёгким для изучения

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

•	Язык программирования Паскаль позволяет чётко реализовать идеи структурного программирования и структурной организации данных.

•	Язык программирования Паскаль сыграл большую роль в развитии методов аналитического доказательства правильности программ и позволил реально перейти от методов отладки программ к системам автоматической проверки правильности программ.

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

•	Использование в Паскале простых и гибких структур управления: ветвлений, циклов.

Так как текст, записанный на Паскале программы не понятен компьютеру, то требуется перевести его на машинный язык. Такой перевод программы с языка программирования на язык машинных кодов называется трансляцией, а выполняется он специальными трансляторами.

Существуют три вида трансляторов: интерпретаторы, компиляторы и ассемблеры.

Любой транслятор решает следующие основные задачи:

Анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки.

Генерирует выходную программу.

Распределяет память для выходной программы. Разработка программы на Паскале включает в себя следующие действия: ввод и редактированию теста программы на языке программирования Паскаль, её трансляцию, отладку. Для выполнения каждого этапа применяются специальные средства.

Для повышения качества и скорости разработки программ в середине 80-х годов была создана система программирования Турбо Паскаль. Слово Турбо в название системы программирования - это отражение торговой марки фирмы-изготовителя Вorland International, Inc (США).




Задание



Написать программу, которая позволяет найти нужные сведения в телефонном справочнике (а:\phone.txt). Программа должна запрашивать фамилию человека и выводить его телефон. Если в справочнике есть одинаковые фамилии, то программа должна вывести список всех людей, имеющих эти фамилии. 




Блок-схема





Начало

R,B,A,T,Y,D,M,I,k,z

Name=’A:\phone.txt

Vid

Case Vid of

Count

Vid=1,

Count,1

A,Y,T

Name=A:\phone.txt

Not Eof (Bookfile)

A,Y,T

S

Not Eof (Bookfile)

Bookfile,Work

S=a

A,Y,T

Z=1

Z=0

‘Данных нет’


Листинг программы



program kurs;

uses Crt;

type

RB=record	Запись сведений

A,T,Y: string[10]; 

end; 

var 

D,M,i,k,z: integer; Sr,Sr0,max:real;

BookFile: file of RB; Переменная для файла с записями RecBook

Work: RB; Переменная для доступа к записям

Vid: Byte;

End_Menu:boolean;

Name,s: string[50];

procedure AddRec;	Добавление записи в файл

begin

writeln('Ввод записи №',FilePos(BookFile)+1);

with Work do

begin

Write('Введите фамилию:');

Readln(A);

Write('Введите имя:');

Readln(Y);

Write('Введите телефон (32-22-12):');

Readln(T);

Write(BookFile, Work); end;

end;

procedure Create_Supplementing_library; Создание нового файла

var

Ind, Count:integer; begin Name:='A:\phone.txt';

Assign(BookFile, Name);	Открыть новый файл для записи

Rewrite(BookFile);

Writeln('Создание записей файла ', Name);

Write('Введите количество телефонов на станции: ');

Readln(Count);

for Ind:=1 to count do

AddRec;

Writeln('Создание файла данных библиотеки завершена');

Writeln('Файл данных имеет ', FileSize(BookFile), ' записи'); close(BookFile);

end;

procedure OutputRec;

begin

With Work do

writeln(A,' ',Y,'	',T);

end;

procedure OutputAllRec;

begin

clrscr;

Name:='A:\phone.txt';

Assign(BookFile, Name);

Reset(BookFile); clrscr; Seek(BookFile, 0);

Writeln(' Фамилия	Телефон');

writeln;

while (not Eof(BookFile)) do begin

With Work do begin

Read(BookFile, Work);

Outputrec; end; 

end;end;

procedure FindTel; 

begin 

clrscr; 

Name:='A:\phone.txt'; 

Assign(BookFile, Name); 

Reset(BookFile); 

writeln('Введите фамилию'); 

readln(s); 

clrscr; 

Seek(BookFile, 0);

Writeln(' Фамилия	Телефон');

writeln;

while (not Eof(BookFile)) do begin

With Work do begin

Read(BookFile, Work);

if s=a then begin Outputrec;z:=1;end;

end;

end;

if z=0 then writeln('В справочнике данных о ',s,'е нет');

end;

begin

ClrScr;

End_Menu:=False; repeat textcolor(7); 

Writeln('Выберите вид работы:'); 

Writeln(' 1- создать новый файл данных'); 

Writeln(' 2- вывод всей картотеки'); 

Writeln(' 3- поиск телефона по фамилии'); 

Writeln(' 0- завершение работы:'); 

Write('Ваш выбор:'); 

Readln(Vid);

case Vid of 

1:Create_Supplementing_library; 

2:OutputAllRec; 

3:FindTel; 

0:End_Menu:=True; 

end;

writeln;

Writeln('Для продолжения нажмите Enter'); 

Readln;

ClrScr;

until End_Menu;

end.



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



Программа начинается стандартной строкой:

Program;

Далее следует описательная часть программы. Она состоит из нескольких разделов:

Процедура assign (ФайловаяПеременная, ИмяФайла) предшествует другим процедурам, т. к. ставит в соответствие физическому файлу на внешнем устройстве логический файл — файловую переменную, к которой впоследствии будут обращаться все другие файловые процедуры (связывает их). ИмяФайла должно представлять собой выражение строкового типа. Дальнейшие операции с переменной ФайловаяПеременная будут выполняться над физическим файлом ИмяФайла. Это полное имя внешнего файла, удовлетворяющее требованиям операционной системы MS-DOS. Процедуру assign недопустимо использовать для открытого файла. Прежде чем использовать файловую переменную повторно, необходимо закрыть файл с помощью процедуры close. После вызова assign связь файловой переменной с внешним файлом существует до тех пор, пока не будет выполнен другой assign для данной файловой переменной. Следовательно, файл можно повторно открыть без дополнительного использования процедуры assign даже после закрытия close.

Процедура reset (ФайловаяПеременная) открывает существующий файл на чтение (открывает входной файл) и ставит указатель на начало первого элемента файла. При отсутствии внешнего файла с указанным именем возникает сообщение об ошибке Error I: File not found (Ошибка 2: Файл не найден). Если при чтении файла возникнет необходимость вернуть указатель в его начало, достаточно будет просто применить процедуру reset к этому файлу еще раз.

Функция ioresult проверяет существование файла на диске. По умолчанию при всех обращениях к стандартным функциям и процедурам ввода/вывода, используемым при работе с файлами, автоматически производится проверка на наличие ошибок. Программист должен предусмотреть возможность ввода неверных исходных данных пользователем программы, например, имени файла, предназначенного для чтения. Это приведет к завершению работы программы, что нежелательно, особенно при вводе больших объемов данных. Использование директивы компилятора и стандартной функции ioresult в цикле repeat позволит программе корректно обработать эту исключительную ситуацию.

Процедура rewrite (ФайловаяПеременная) создает и открывает новый (выходной) файл для последующей записи данных. После ее успешного выполнения файл готов к записи в него первого элемента.

Обратите внимание — использование rewrite требует особой аккуратности. Если внешний файл с указанным именем уже существует, то он удаляется, и на его месте создается новый пустой файл с тем же именем. Для предотвращения потери информации на практике необходимо создавать резервные копии файлов, над которыми могут производиться опасные действия. Обычно им назначается расширение bak.

Процедура close (ФайловаяПеременная). Используя процедуру close, программист должен закрыть файл, после того как в программе будет завершена его обработка. В противном случае может произойти потеря данных. При закрытии внешний файл обновляется, его автоматически завершает символ конца файла. Впоследствии ФайловаяПеременная может быть связана с другим (или вновь с тем же самым) физическим файлом.

Процедура rename (ФайловаяПеременная, ИмяФайла) используется ДЛЯ ТОГО, чтобы переименовать неоткрытый внешний файл любого типа. Новое имя задается строкой ИмяФайла.

Процедура erase (ФайловаяПеременная) удаляет неоткрытый внешний файл любого типа, задаваемый параметром ФайловаяПеременная.

Обратите внимание — процедуры rename и erase нельзя использовать для открытых файлов. Их необходимо предварительно закрыть. Если файл не существует, возникает ошибка выполнения программы.

Логическая функция eof (ФайловаяПеременная) выполняет проверку, достигнут ли конец файла (End Of File) при чтении из него данных Функция возвращает true, если конец файла обнаружен, и указатель текущей позиции находится в конце файла за его последним символомю Это значит, что последний элемент в файле уже прочитан, или файл по еле открытия оказался пуст. В противном случае функция возвращает – false.

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

Процедуры:

Getdir Определяет текущий каталог на заданном диске

chdir Меняет текущий каталог

Mkdir Создает подкаталог

Rmdir Удаляет пустой подкаталог

Settextbuf Назначает для текстового файла буфер ввода/вывода

Flush Очищает буфер текстового файла, открытого для вывода (модуль dos)

Fsplit Разделяет имя файла на путь, имя и расширение (модуль dos)

Getfattr Возвращает атрибуты файла (модуль dos)

Getftime Возвращает дату и время последней записи файла (модуль dos)

Setf time Назначает новую дату и время последней записи файла (модуль dos)

Setfattr Устанавливает атрибуты файла (модуль dos)

Функции:

Filesize Возвращает текущий размер файла {не используется с текстовыми

файлами)

Diskfree Возвращает число свободных байтов на заданном диске (модуль dos)

Disksize Возвращает общий объем дисковой памяти на диске (модуль dos) Fexpand Расширяет имя файла до полностью определенного (модуль dos)

Findfirst Ищет в заданном каталоге первый элемент, совпадающий с заданным именем файла и его атрибутами (модуль dos, f indnext — следующий)

Fsearch Ищет файл в списке каталогов (модуль dos)

Функции проверки конца строки и файла:

• кроме использования функции eof, принимающей значение true, если файл исчерпан, при работе с текстовыми файлами необходимо уметь проверять также и конец строки. Для контроля используется функция еоln (ФайловаяПеременкая), принимающая значение true, если указатель текущей позиции находится на маркере конца строки (CR/LF), иначе – false. Если eof – true, то и eoln – true;

• функция sеекеоln (ФайловаяПеременная) аналогична функции eoln, НО пропускает пробелы и позиции табуляции перед проверкой на конец строки. Функцию можно использовать только для открытых текстовых файлов;

• функция seekeof (Файловгяпеременная) аналогична eof, но пропускает пробелы, позиции табуляции и маркеры конца строки перед проверкой на конец файла. Функцию можно использовать только для открытых текстовых файлов.

if <условие> then <оператор 1> else <оператор 2> условный оператор.

Если после then и else нужно использовать несколько операторов то эти операторы надо заключать в операторные скобки - begin <опер 1>; <опер 2 >… end.

Бывает полный и неполный - не содержит ветви else. 

В конструкции While... do условие выхода удовлетворяется, если выражение, определяющее условие выхода, ложно. Пока это условие истинно, будет выполняться оператор стоящий после do. Если после do нужно использовать несколько операторов то эти операторы надо заключать в операторные скобки - begin <опер 1>; <опер 2> … end.




Список используемой литературы



Турбо Паскаль 7.0 “BHV” 1996.

В.В. Фаронов. Турбо Паскаль 7.0 Начальный курс. Учебное пособие. Издательство “Нолидж” 1997.

В.В. Фаронов. Турбо Паскаль 7.0 Практика программирования. Учебное пособие. Издательство “Нолидж” 1997

А.И. Марченко, Л.А.Марченко. Программирование в среде Турбо Паскаль 7.0. Киев “ВЕК+” 1999.

Иванов А.Ф., Садриева Л.М. Методическое руководство по подготовке и защите курсовых работ по дисциплине “Информатика”. АлНИ, 2002.


Приложение









15