Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Пример решения задачи с использованием функции



Задача. Составьте программу вычисления факториалов Fn=n!, Fm=m!, Fnm=(n-m)!. Вычисление факториала оформить в виде функции с параметрами. Факториал n! представляет собой произведение n чисел натурального ряда: 1*2*3*...*n.

Программа решения задачи имеет вид:

PROGRAM FUNC;

VAR

FN,FM,FNM:INTEGER;

N,M:INTEGER;

(* ФУНКЦИЯ FAKT *)

FUNCTION FACT(K:INTEGER):INTEGER; { начало описания функции }

VAR

P,I:INTEGER; {Раздел описания локальных переменных}

BEGIN { начало операторной части функции }

P:=1;

FOR I:=1 TO K DO

P:=P*I;

FACT:=P;

END; { конец описания функции }

(* ОСНОВНАЯ ПРОГРАММА *)

BEGIN

WRITE('ВВЕДИТЕ ЗНАЧЕНИЯ N,M: ');

READ(N,M); {Ввод данных с клавиатуры}

FN:=FACT(N); {обращение к функции }

FM:=FACT(M); {обращение к функции }

FNM:=FACT(N-M); {обращение к функции }

WRITELN('FN=',FN:5); {Вывод результата }

WRITELN('FM=',FM:5); {Вывод результата }

WRITELN('FNM=',FNM:5); {Вывод результата }

END. {Конец программы}

ПРИ ИСПОЛЬЗОВАНИИ ПОДПРОГРАММ БЕЗ ПАРАМЕТРОВ:

1. Глобальные переменные объявленные в основной части программы доступны во всех процедурах программы.

2. Локальные переменные объявленные в подпрограммах доступны только в данной подпрограмме и внутренних подпрограммах, но не доступны в основной части программы.

 


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №11

HАИМЕНОВАНИЕ:Работа с файлами

1.ЦЕЛЬ РАБОТЫ: Научится использовать фаилы.

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delpkhi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 Составьте программу, которая создает файл, состоящий из 10 значений типа integer. Прочитайте файл и вычислите сумму его элементов.

5.2 Составьте программу, которая создает файл, состоящий из неопределенного количества значений типа integer. Для ввода используйте цикл, выход из цикла — значение 999. После записи выведите файл на экран.

5.3 Составьте программу, которая создает файл из элементов типа Char с помощью цикла while. Признак выхода из цикла — буква 'z'. Скопируйте созданный файл в другой файл и выведите его на экран.

5.4 Составьте программу, которая создает файл, состоящий из пяти значений типа real. Выведите файл на экран.

5.5 Составьте программу, которая создает файл, состоящий из N значений типа integer. Прочитайте файл и выведите только четные элементы. Тип record не используйте.

5.6 Составьте программу, которая создает файл из элементов типа Char с помощью цикла while. Признак выхода из цикла — буква 'z'. Выведите его содержимое на экран.

5.7 Составьте программу, которая построчно выводит содержимое текстового файла на экран, печатает на бумаге.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Что такое файл.

8.2 Какие типы файлов применяются в TP?

8.3 Основные функции для работы с файлами.

8.4 Основные правила использования файлов в программах

8.5 Назовите общие и отличительные черты типизированного и текстового файла.

8.6 Зачем используется специальная файловая переменная? Как устанавливается соответствие файловой переменной файлу во внешней памяти?

8.7 Что общего у процедуры Reset и Rewrite и чем они отличаются?

8.8 Какие отличия существуют в использовании процедуры Reset при открытии различных типов файлов (текстовых, типизированных)?

8.9 Зачем применяется процедура Close?

 

ПРИЛОЖЕНИЕ:

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

Целесообразность применения файлов диктуется следующими причинами.

1. Ввод больших объемов данных, подлежащих обработке, утомителен и требуeт большого времени. Гораздо удобнее создать отдельный файл данных, который и может быть подготовлен заранее и, самое главное, применяться неоднократно.

2. Файл данных может быть подготовлен другой программой, становясь, таким образом, связующим звеном между двумя разными задачами, а также средством связи программы с внешней средой.

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

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

В любой момент времени программе доступен только один элемент файла, на который ссылается текущий указатель(указатель обработки). Часто позицию размещения доступного элемента называют текущей позицией.

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

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

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

Компилятор Паскаля поддерживает три типа файлов: текстовые, типизированные, нетипизированные.

Средства обработки файлов

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

а) при записи файла

ASSIGN (F1, TXT, DAN);

REWRITE (F1);

WRITELN (F1, N);

CLOSE (F1);

а) при чтении файла

ASSIGN (F1, TXT, DAN);

RESET (F1);

WRITELN (F1, N);

CLOSE (F1);

F1 – Вспомогательная файловая переменная.

N – Вспомогательная переменная для записи (чтение текста из файла).

Где:

ASSIGN – Логическое подключение из файла TXT, DAN к F1.

REWRITE (F1) {RESET (F1):} – Открытие файла для записи {чтения} текста.

WRITE (F1, N) {READ (F1, N):} – Запись(чтение) текста в файл на магнитный диск.

CLOSE (F1) – Закрытие файла.

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

Задача. Постановка задачи: Составить программу формирования файла F, состоящего из целых чисел. Программа показывает работу с файловой переменной F и внешним файлом DAT.TXT. В файл заносятся N= 6 записей, каждая из которых представляет собой целое число.

Программа решения задачи имеет вид:

PROGRAM ZAP_TIP; {Имя программы}

VAR {Раздел описания переменных}

F:FILE OF INTEGER;

X,I:INTEGER;

begin

ASSIGN(F,'DAT.TXT');{подключение файла 'DAT.TXT' к файловой переменной F}

REWRITE(F); {открытие файла на запись}

WRITELN(' ВВЕДИТЕ 6 ЦЕЛЫХ ЧИСЕЛ '); {Вывод сообщения}

FOR I:=1 TO 6 DO {цикл для ввода данных}

BEGIN

READ(X); {чтение с клавиатуры}

WRITE(F,X); {запись на магнитный диск в файл}

END; {конец цикла}

CLOSE(F); {закрытие файла}

END. {Конец программы}

Задача . Постановка задачи: Составить программу чтения файла F, состоящего из целых чисел. Программа выполняет работу с файловой переменной F и внешним файлом DAT.TXT. Из файла выводятся целые числа.

Программа решения задачи имеет вид:

program CTEN_TIP; {Имя программы}

VAR {Раздел описания переменных}

F:FILE OF INTEGER;

X,I:INTEGER;

BEGIN {начало операторной части программы}

WRITELN('ЧТЕНИЕ ТИПИЗИРОВАННОГО ФАЙЛА'); {Вывод сообщения}

ASSIGN(F,'DAT.TXT'); {подключение файла 'DAT.TXT' к файловой переменной F}

RESET(F); { открытие файла для чтения}

WHILE NOT EOF (F) DO {цикл для чтения данных с магнитного диска на экран}

BEGIN

READ(F,X); {чтение данных из файла в переменную}

WRITE(X,' '); {вывод данных из переменной на экран}

END;

CLOSE(F); { закрытие файла}

END. {Конец программы}

Задача. Постановка задачи: Составить программу, ввода текстового файла с именем 'TEX.TXT', представляющий собой список необходимой техники. Сделать так, чтобы в каждой строке файла записывалось одно наименование. При вводе каждого наименования начинать с новой строки. На экран вывести из файла 'TEX.TXT' список техники. Каждое наименование вывести с новой строки.

Программа решения задачи имеет вид:

PROGRAM VV_TEX; {Имя программы}

VAR{Раздел описания переменных}

SP:TEXT;

C:CHAR;

I,N:INTEGER;

BEGIN

ASSIGN(SP,'TEX.TXT');{подключение файла 'TEX.TXT' к файловой переменной F}

REWRITE(SP); {открытие файла на запись}

WRITE('ВВЕДИТЕ КОЛИЧЕСТВО СТРОК В СПИСКЕ:'); {Вывод сообщения}

READLN(N); {вод значений переменной N с клавиатуры}

WRITELN('ВВЕДИТЕ НАИМЕНОВАНИЕ ТЕХНИКИ ',N:1,' НАИМЕНОВАНИЙ');

FOR I:=1 TO N DO {цикл для ввода строк текста с клавиатуры в файл}

BEGIN

WHILE NOT EOLN DO {цикл для ввода одной строки текста в файл}

BEGIN

READ(C); {ввод текста в переменную C}

WRITE(SP,C); {запись текста из переменной в файл}

END; {конец внутреннего цикла}

READLN;

WRITELN(SP); {запись в файл }

END; {конец внешнего цикла}

CLOSE(SP); { закрытие фала}

WRITELN('СПИСОК ТЕХНИКИ'); {Вывод сообщения}

RESET(SP); {открытие файла на чтение}

WHILE NOT EOF (SP) DO {внешний цикл чтения строк}

BEGIN

WHILE NOT EOLN(SP) DO {Внутренний цикл чтения одной строки}

BEGIN

READ(SP,C); {чтение во вспомогательнуюпеременную}

WRITE(C) {вывод на экран}

END; {конец внутреннего цикла}

READLN(SP); {чтение из файла }

WRITELN; {переход на новую строку}

END {конец внешнего цикла}

END. {конец файла}

 

 

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №12

HАИМЕНОВАНИЕ:Динамические структуры данных

1.ЦЕЛЬ РАБОТЫ: Научится использовать динамические структуры данных

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

 

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1Сформировать список строк и а) сохранить его в текстовом файле; б) сохранить его в обратном порядке в текстовом файле. Использовать рекурсию.

5.2Сформировать список строк из текстового файла.

5.3Написать функцию, которая вычисляет среднее арифметическое элементов непустого списка.

5.4Написать процедуру присоединения списка L2 к списку L1.

5.5 Написать функцию, которая создает список L2, являющийся копией списка L1, начинающегося с данного узла.

5.6Написать функцию, которая подсчитывает количество вхождений ключа в списке.

5.7Написать функцию, которая удаляет из списка все вхождения ключа.

5.8Многочлен задан своими коэффициентами, которые хранятся в форме списка. Написать функции:

– Equal(p, q), проверяющую на равенство многочлены p и q;

– Summa(p, q, r), которая строит многочлен r = p + q.

5.9Вычислить значение многочлена в целочисленной точке x. Коэффициенты вводятся с клавиатуры и динамически размещаются в памяти.

5.10Сформировать список целых чисел и упорядочить их по неубыванию.

5.11Сформировать два списка, отсортировать их объединить в один, не нарушая порядка.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

 

 

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 Что такое указатели? Какие значения они могут принимать? Какие операции возможны над указателями?

8.2 Что представляют собой динамические структуры данных? Для чего они используются? Чем отличаются от данных статического типа?

8.3 Какие стандартные процедуры существуют в языке Pascal для работы с указателями?

8.4 Зачем различать типы указателей?

8.5 Какие операции требуется выполнить для вставки и удаления элемента списка?

8.6 Сколько элементов может содержать список?

8.7 Можно ли для построения списка обойтись одной переменной?

 

ПРИЛОЖЕНИЕ:

Для работы с динамическими структурами данных используются указатели. Указатели представляют собой специальный тип данных. Они принимают значения, равные адресам размещения в оперативной памяти соответствующих динамических переменных.

Списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом. На самый первый элемент (голову списка) имеется отдельный указатель.

Из определения следует, что каждый элемент списка содержит поле данных (оно может иметь сложную структуру) и поле ссылки на следующий элемент. После ссылки последнего элемента должно содержать пустой указатель (nil).

Число элементов связанного списка может расти или уменьшаться в зависимости от того, сколько данных мы хотим хранить в нем. Чтобы добавить новый элемент в список, необходимо:

1. Получить память для него;

2. Поместить туда информацию;

3. Добавить элемент в конец списка (или начало).

Элемент списка состоит из разнотипных частей (хранимая информация и указатель), и его естественно представить записью. Перед описанием самой записи описывают указатель на нее:

Type { описание списка из целых чисел }

PList = ^TList;

TList = record

Inf : Integer;

Next : PList;

end;

Создание списка.

Задача. Сформировать список, содержащий целые числа 3, 5, 1, 9.

Определим запись типа TList с полями, содержащими характеристики данных – значения очередного элемента и адреса следующего за ним элемента

PList = ^TList;

TList = record

Data : Integer;

Next : PList;

end;

Чтобы список существовал, надо определить указатель на его начало. Опишем переменные.

Var

Head, x : PList;

Создадим первый элемент: New(Head); { выделяем место в памяти для переменной Head } Head^.Next := nil; { указатель на следующий элемент пуст (такого элемента нет) } Head^.Data := 3; { заполняем информационное поле первого элемента }

Продолжим формирование списка, для этого нужно добавить элемент в конец списка.

Введем вспомогательную переменную указательного типа, которая будет хранить адрес последнего элемента списка: x := Head; {сейчас последний элемент списка совпадает с его началом}

New(x^.Next); { выделим области памяти для следующего (2-го) элемента и поместим его адрес в адресную часть предыдущего (1-го) элемента }

x := x^.Next ; { переменная x принимает значение адреса выделенной области. Таким образом осуществляется переход к следующему (2-ому) элементу списка }

x^.Data := 5; { значение этого элемента } x^.Next := nil; {следующего значения нет }

Остальные числа заносятся аналогично: New(x^.Next); { выделим области памяти для следующего элемента } x := x^.Next ; { переход к следующему (3-му) элементу списка } x^.Data := 1; { значение этого элемента } x^.Next := nil; {следующего значения нет } New(x^.Next); { выделим области памяти для следующего элемента } x := x^.Next ; { переход к следующему (4-му) элементу списка } x^.Data := 9; { значение этого элемента } x^.Next := nil; {следующего значения нет }

Замечание. Как видно из примера, отличным является только создание первого (Head) элемента – головы списка. Все остальные действия полностью аналогичны и их естественно выполнять в цикле.

Присоединение нового элемента к голове списка производится аналогично: ……………….. New(x); { ввод значения элемента x^.Data := … } x^.Next := Head; Head := x; ………………..

В этом случае последний введенный элемент окажется в списке первым, а первый – последним.

Просмотр списка.

Просмотр элементов списка осуществляется последовательно, начиная с его начала. Указатель List последовательно ссылается на первый, второй и т. д. элементы списка до тех пор, пока весь список не будет пройден. При этом с каждым элементом списка выполняется некоторая операция– например, печать элемента. Начальное значение List – адрес первого элемента списка (Head). Digit – значение удаляемого элемента.

List := Head;

While List^.Next <> nil do

begin

WriteLn(List^.Data);

List := List^.Next; { переход к следующему элементу; аналог для массива i:=i+1 }

end;



Просмотров 1084

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!