ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.04.2025

Просмотров: 1467

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Федеральное агенство по образованию российской федерации

1. Основные категории и понятия информатики

1.2. Информация: структура, форма, измерение

2. Техническое и программное обеспечение пэвм

2.1. Структура аппаратных средств пэвм

2.2. Программное обеспечение пэвм

3. Основы алгоритмизации

3.2.Формы представления алгоритмов

3.2.1. Алгоритм линейной структуры.

3.2.2. Алгоритм разветвляющейся структуры.

Да нет да да Рис 3.11

3.2.3. Алгоритмы циклической структуры.

4.2. Структура программы на языке Паскаль

4.3. Скалярные стандартные типы данных

4.4. Скалярные, пользовательские типы данных

5. Структурные типы данных

5.3. Записи

5.4. Записи с вариантами

5.6.Файлы

6. Операции над данными скалярных типов. Выражения

7. Операторы языка Паскаль

7.1. Простые операторы

7.2. Структурные операторы

8. Примеры программ на языке Паскаль

8.1. Пример 1. Арифметические выражения. Оператор присваивания

8.3. Пример 3. Программа обработки одномерного массива

8.4. Пример 4. Программа обработки двумерного массива

True False True False False

8.5. Пример 5. Программа обработки символьных строк

8.6. Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла

9.Разработка программ сложной структуры

9.1. Процедуры и функции

9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные

9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры

9.4. Использование процедур и функций

True False Рис. 9.4

9.5. Массивы – параметры процедур и функций

True False True False Рис. 9.7

True False True False True False Рис 9.9

9.6. Рекурсивные процедуры и функции

True False Рис. 9.10 True False

True False Рис. 9.12

9.7. Модули

10. Динамические структуры данных

10.2. Объявление и создание динамических структур данных. Указатели

Приложение. Контрольные вопросы

Литература

Задание. Определить наибольший общий делитель двух целых чисел.

Постановка задачи.

Входные данные:

A,B– целые, положительные числа.

Выходные данные:

Nod– наибольший общий делительAиB.

Метод решения: рекурсивный алгоритм Евклида.

Алгоритм. Выдача наибольшего общего делителя двух целых чисел.

Входные данные.

СКАЛЯР A,B– целые, положительные числа.

Выходные данные.

СКАЛЯР Nod– целое число.

Начало

A:=0

B:=0

ЦИКЛ_ПОКА(A<=0 ИЛИB<=0)

Вывод(‘Input A,B : ’)

ввод(A,B)

КОНЕЦ_ЦИКЛА

Findnod(A,B,Nod)

Вывод(‘Nod(A,B)= ’,Nod)

Конец

Алгоритм. Процедура определения наибольшего общего делителя двух целых чисел (findnod).

Входные данные.

СКАЛЯР A,B– целые, положительные числа.

Выходные данные.

СКАЛЯР Nod– целое число.

Промежуточные данные.

СКАЛЯР R– целое число. {остаток от деления }

Начало

ЕСЛИ (A mod B <>0)

R:= A mod B

A:=B

B:= R

Findnod(A,B,Nod)

ИНАЧЕ

Nod:=B

КОНЕЦ_ЕСЛИ

Конец

Блок - схема программы


True False Рис. 9.12

Блок-схема процедуры findnod.

True

False

Рис. 9.13

Программа на языке Паскаль, использующая процедуру.

Program Exam7;

Var

A, B, Nod: integer;

procedure findnod (A, B: integer; Var Nod: integer);

Var R: integer;

Begin

If A mod B <>0 do

Begin

R:= A mod B;

A:=B; B:=R;

Findnod(A,B,Nod);

End

Else

Nod:=B;

End;

Begin A:=0; B:=0;

While (A<=0) or (B<=0) do begin

Writeln('Input A,B <>0 :');

Readln(A,B);

End;

findnod(A,B,Nod);

Writeln('Nod(A,B) = ',Nod);

Readln;

End.

Результаты тестирования.

1. Исходные данные:

A=84

B=36

Результат: Nod(A,B)=12

  1. Тестовый пример 2:

A=84

B=56

Результат: Nod(A,B)=28

Результаты, выданные программой.

  1. Тестовый пример1

InputA,B<>0 :

84

36

Nod(A,B) = 12

  1. Тестовый пример 2

InputA,B<>0 :

84

56

Nod(A,B) = 28

Программа на языке Паскаль, использующая функцию.

Program Exam11;

Var

A, B, Nod: integer;

Function findnod (A, B: integer): integer;

Var R: integer;

Begin

R:=1;

While R<>0 do

Begin

R:=A mod B;

A:=B; B:=R;

End;

findnod :=A;

End;

Begin A:=0; B:=0;


While (A<=0) or (B<=0) do begin

Writeln('Input A,B <>0 :');

Readln(A,B);

End;

Nod := findnod(A,B);

Writeln('Nod(A,B) = ',Nod);

Readln;

End.

Результаты тестирования.

  1. Тестовый пример 1

Исходные данные:

A=84

B=36

Результат: Nod(A,B)=12

  1. Тестовый пример 2

Исходные данные:

A=84

B=56

Результат: Nod(A,B)=28

Результаты, выданные программой.

Тестовый пример1

InputA,B<>0 :

84

36

Nod(A,B) = 12

Тестовый пример 2

InputA,B<>0 :

84

56

Nod(A,B) = 28

9.7. Модули

Одним из слабых мест механизма подпрограмм в BorlandPascal7.0 является то, что они встроены в тело программы. Подпрограммы нельзя отдельно компилировать, отлаживать и использовать другими программами. Для того, чтобы можно было подпрограммы отдельно компилировать и вызывать многими программами, необходимо использовать модули.

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

Модуль имеет свой заголовок:

Unit<имя модуля>;

и два раздела: интерфейсную часть (interface) и исполняемую часть (implementation).

Общая структура модуля имеет следующий вид:

Unit<имя модуля>;

Interface

<объявления видимых объектов модуля: типов, констант, переменных, заголовков подпрограмм >

implementation

<описания скрытых объектов: процедур и функций>

begin

<операторы инициализации модуля6>

end.

Интерфейсная часть может включать следующие компоненты:

Interface

Uses<список используемых модулей >;

<раздел объявления констант (Const)>

<раздел объявления типов (Type) >

<раздел объявления переменных (Var)>

<раздел заголовков процедур и функций>.

Список используемых модулей содержит имена стандартных модулей, кроме модуля System, такие как Crt, Graph, Overlay, Dos, и имена модулей, созданных пользователем. Имена в списке разделяются запятыми.

В разделе реализации (implementation) содержатся описания процедур и функций, заголовки которых объявлены в интерфейсной части. Кроме того, в исполнительной части могут быть объявлены типы, константы, переменные, которые используются в подпрограммах, но должны быть недоступны пользователю. В конце текста модуля всегда записывает ключевое слово “end” с точкой.


Традиционные правила области действия глобальных и локальных переменных для модулей не выполняются. Языковая конструкция Unit (модуль) была специально включена в систему Borland Pascal для того, чтобы исключить влияние глобальных переменных, объявленных в главной программе, на описания подпрограмм, входящих в модули, которые эта программа использует.

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

Unit globals;

Interface

Const L=100;

Type Tvector = array[1..L] of integer;

Implementation

End.

В этом случае исполнительная часть implementationявляется пустой.

Рассмотрим пример модуля, содержащего процедуры и функции обработки одномерного массива, тип которого задан в модуле Globals. Этот модуль имеет имяVectorи включает следующие подпрограммы:

  • function Vect_Max(Vect:TVector; N:byte): byte; - возвращает индекс максимального элемента массива из N элементов;

  • function Vect_Min(Vect:TVector; N:byte): byte; - возвращает индекс минимального элемента массива;

  • procedure Print_Vect(Vect:TVector; N:byte); - выдает все элементы массива на экран;

  • procedure Vect_Inverse(Var Vect:TVector; i1,i2:byte); - меняет местами максимальный и минимальный элементы одномерного массива.

Кроме того, модуль Vector использует модуль глобальных описаний globals.

Текст модуля Vector.

unit Vector;

interface

Uses globals;

function Vect_Max(Vect:TVector; N:byte): byte;

function Vect_Min(Vect:TVector; N:byte): byte;

procedure Print_Vect(Vect:TVector; N:byte);

procedure Vect_Inverse(Var Vect:TVector; i1,i2:byte);

implementation

function Vect_Max(Vect:TVector; N:byte): byte;

Var Max:integer;

im,i: integer;

begin

Max:=Vect[1]; im:=1;

for i:=1 to N do

if Max<Vect[i] then begin

Max:=Vect[i]; im:=i;

end;

Vect_Max:=im;

end;

function Vect_Min(Vect:TVector; N:byte): byte;

Var Min:integer;

im,i: integer;

begin

Min:=Vect[1]; im:=1;

for i:=1 to N do

if Min>Vect[i] then begin

Min:=Vect[i]; im:=i;

end;

Vect_Min:=im;

end;

procedure Print_Vect(Vect:TVector; N:byte);

Var i: integer;

begin

writeln;

for i:=1 to N do write(Vect[i],' ');

end;

procedure Vect_Inverse(Var Vect:TVector; i1,i2:byte);

Var t: integer;

begin

t:=Vect[i1]; Vect[i1]:=Vect[i2]; Vect[i2]:=t;

end;

end.

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

Program Main;

Uses globals,vector;

Var A: TVector;

i,N:byte;

n1,n2:byte;

begin

writeln;

writeln(' Input N<=100');

readln(N);

writeln(' Input array A of N elements :');

for i:=1 to N do read(A[i]);

n1:=Vect_Max(A,N);


n2:=Vect_Min(A,N);

Vect_Inverse(A,n1,n2);

Print_Vect(A,N);

Readln;

end.

Тестовый пример. Результаты, выданные программой Main.

Input N<=100

10

Input array A of N elements :

1 2 3 4 5 64 7 8 9 19

64 2 3 4 5 1 7 8 9 19