Вопрос №1.Цель, предмет и задачи изучения дисциплины.

Цель: научиться решать задачи на ЭВМ с использованием методов и технологий программирования на основе принципов модульности, структурированности и нисходящего проектирования на базе языков программирования Pascal и C++, с использованием библиотечным процедур.

Предмет дисциплины:

1. Алгоритмизация

2. Языки программирования

3. IDE (средство для разработки программы)

4. Технология методики разработки и отладки программ

Задачи. Необходимо знать и уметь.

Знать: этапы разработки программы, автоматизация конструктора языка программирования. Встроенный редактор турбооболчки.

Уметь:

1. Увидеть, понять, поставить задачу и определить цель.

2. Уметь анализировать задачу и определять трудности

3. Проводить дикомпозицию решаемой задачи, разбить на части, разработать алгортим.

4. Уметь записать алгоритм на языке программирования

5. Уметь устанавливать конфигурацию IDE (турбо-оболочки)

6. Ввести отладку в виртуальной системе и в турбо-оболочке

7. Интерпритировать полученные результаты

 

Вопрос №2. Структура ПО ЭВМ.

Вопрос №3. Технология выполнения программ на языке Турбо Паскаль в IDE.

Введем условные обозначения:

^ - ctrl

# - shift

@ -alt

Вопрос №4. Принципы алгоритмизации и программирования.

Алгоритмизация.

1. Этапы решения задач на ЭВМ

2. Алгоритм, сущность, свойство алгоритма.

3. Граф-схема алгоритма.

4. Элементарная структура алгоритма (?)

5. Принципы алгоритмизация программирования.

Вопрос №5. Этапы решения задач на ЭВМ.

1. Определить цель и средства (технологии, ПО, деньги)

2. Постановка задачи (входные данные, выходные данные, ее функции)

Функции делятся на : ввод, обработка, вывод

3. Метод решения задачи или подзадачи

Выбор или разработка

Выбираем, чтобы быстрее работало, но и меньше занимало памяти, но

4. Выбор, разработка стр. данных (данные, связи между ними)

Список(последовательный доступ), массив(прямой доступ)

5. Алгоритмизация (разработка алгоритмов)

Разработать последовательность действий для получения результатов

Как решить эту задачу вне зависимости от языка программирования

6. Запись алгоритма на языке программирования (кодирование)

7. Ввод программы на ЭВМ

8. Трансляция, отладка

9. Выполнение программы

Пункты 7-9 – технология работы IDE

10. Потребление результата (анализ результата)

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

От ЭВМ – рабочее ПО.

Вопрос №6. Алгоритм. Сущность, свойства.

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

Свойства:

1) Массовость

2) Определенность (однозначность)

3) Дискретность (последовательность элементарных шагов)

4) Результативность

5) Конечность

Сущность Алгоритма – формирование (?) определенных входных данных, результатов и установление формальных связей между ними.

Язык ГСА. ГСА – графическое изображение логической структуры алгоритма.

- процесс

- решение

- данные

- подготовка (цикла)

Основные элементарные структуры алгоритмов.

1. Структура следования

 

 

 

2. Структура решения

 


3. Структура цикла

 

 


 

Еще существует две структуры цикла. Это схема цикла с предусловием. Есть еще с постусловием и с параметром.

Есть также структура выбора (на языке Паскаль – это case <> of)

Вопрос №7. Методы преобразования алгоритмов.

Необходимы, чтобы преобразовывать неструктурированные алгоритмы в структурированные.

1. Дублирование кодов

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

Если часть дублирования большая или очень часто вызывается, то необходимо оформить ее в виде подпрограммы.

2. Введение булевой переменной(для циклов)

Пример программы:

Program TestA2;

Var A:array[1..10] of real

S:Real;

i:{1..11}Byte;

Povtor: Boolean;

Begin

{ввод массива А}

S:=0;i:=1;

Povtor:=True;

While Povtor do

If A[i]<0 then Povtor:=FALSE

Else

Begin

S:=S+A[i];

i:=i+1;

if I>10 then Povtor:=FALSE;

end;

writeln(S)

end.

3. Использование переменной состояния (подходит для любых алгоритмов)

Алгоритм применения переменной состояния

1. Все элементы неструктурированной схемы пронумерованы

2. Вводится переменная целого типа (н-р Sost:=1)

3. Si-> Si+Sost:=next N2

4. Элемент решения заменяется состоянием

5. Исходная схема разбивается на элементарные операции

Н-р.

While sost<>o do

Case sost of

1:..

2:…

……

End;

Уменьшается количество ошибок, для любого алгоритма, программа отлаживается наглядно

Пример:

While sost<>0 do

Case sost of

1: if p1 then sost:=3 else sost:=2;

2: begin s1; sost:=4; end;

3:if p2 then sost:=5 else sost:=4;

4:if p3 then sost:=0 else sost:=2;

5:begin s2;sost:=0; end;

End;

 

Вопрос №8. Основные приемы разработки алгоритмов.

1) Нахождение конечных сумм и произведений

Сумма:

Sum:=0;

For i:=1 to N do

 

Sum:sum+A[i];

Произведение:

P:=1;

For i:=1 to N do P:=P*A[i];

Но это используется, когда надо отдельно посчитать произведение.

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

Fact:=1;

Readln(N);

For i:=1 to N do

Fact:=Fact*I;

Writeln(Fact);

 

2) Вычисление бесконечных сумм и произведений.

Это нужно знать!:

А) Возведение в степень заменяется последовательным умножением

Б) Числитель и знаменатель считаются вместе, не по отдельности

В) используются операционные методы

Г)конец цикла определяется по относительной величине (погрешности):

Example. Найти с определенной погрешностью

Program qq; uses crt;

Var n:Integer;

A,S,x,Eps:Real;

Begin

Clrscr;

Writeln(‘введите x,Eps’);Readln(x,Eps);

S:=0;A:=1;n:=0;

Repeat

S:=S+A;

N:=n+2;

A:=A*(-x*x)/(n*(n-1));

Until ABS(-x*x/n*(n*(n-1))<Eps; {a/s<Eps}

Writeln(S);

End.

3) Вычисление полинома (многочлена)

 

4) Поиск минимума, максимума

 

Алгоритм

 

Вопрос №9. Общая структура цикла и получение из нее структур циклов на языке Турбо Паскаль

Цикл – это повторяющиеся части вычислений действия с индивидуальными данными.

Существует три структуры цикла:

1) цикл с предусловием

2) с постусловием

3) с параметром.

Начнем рассматривать с первого пункта, с цикла с предусловием:

1.

 

 

 


На языке Паскаль эта структура имеет вид

While <условие правдиво> do <>

2. Цикл с постусловием

 

 

 


 


 

На языке Паскаль:

Repeat

<>

Until <условие ложно>

Выполняется в отличие от цикла while как минимум один раз. Выполняется до тех пор, пока условие не станет истинно, в отличие от while, где выполняется ПОКА истинно

3. Цикл с параметром.

P=H,K,шаг

 


На языке Паскаль:

For i:=<начальное значение> to <конечное значение> do <>

 

 

Вопрос №10. Пример. ГСА преобразования символьной записи целого числа без знака в целый тип данных.

Н
Ввод
N=длина(S)
Chislo=0
I=1,s,1
Chislo=chislo*10+(ord(s[i])-ord(‘0’))
вывод
К

 


Вопрос №11. Основной цикл работы ПЭВМ: алгоритм и интерпритация на языке Турбо Паскаль.

 

Вопрос №12. Основные понятия и обозначения языка Паскаль

Алфавит: A..Z(a..z) Aa, 0..9, знаки +,-,;,…

Ключевые слова: begin, end,…

Лексика:

Комментарии {..} (*..*)

Слова (идентификатор), буква+буква/цифра. Может быть любой длины, но различается лишь первые 63 символа в слове.

Слова:

1) ключевые (зарезервированные)

2) стандартные (предопределенные)

3) пользовательские (слова или имена)

Числа записываются в десятичной системе счисления. Но можно и в 16ной.

 

Вопрос №13. Классификация языков программирования. Трансляторы. Компоненты языка программирования.

Язык – набор символов и правил, устанавливающих спсооб комбинации символов в осмыслении слова и предложения. Языки бывают естественные и искуственные.

Языки программирования:

1. Низкий уровень

Машинозависимые. Нужно знать структуры ЭВМ, для каждой машины свой язык, языки символьного кодирования (язык Ассемблера)

2. Высокий (машинонезависимый)

Процедурноориентированные языки (алгоритмичные языки), проблемноориентированные языки, естественные языки.

Трансляторы(переводят с языка программирования в машинный язык *.exe)

1) Ассемблер (.ASM->.exe)

2) Макроассеблер (asm->exe)

3) компилятор (.pas->.exe)

4) генератор

Весь исходящий модуль преобразовывается в .exe. (транслятор компиляторного типа). Тратит меньше времени

Исходящий модуль выполняется по строкам выполняет исходящий текст. Транслятор-интепритатор (тратит больше времени)

 

Вопрос №14.

Тип данных определяет:

1. структуры данных

2. диапазон изменения данных этого типа

3. операции, которые можно делать

4. функции над данными этого типа

Основные типы(классификация типов)

1.целый

2.вещественный

3.символьный

4.перечисленный

Типы Данных:

1)Простые:

a) Ординальные

Целые(ShortInt(1byte),Integer(2byte),LongInt(4b),Byte(1b),word(2b))

Символьный (char(1b))

Булевский (Boolean)

Перечисленный(one, two, three), могут быть ограениченными типами – 1..10, ‘d’..’f’

b) Вещественный

Real(6b),

Single(4b),Double(8b), Extended (10b), comp(8b) – для подклучения данных типов необходимо прописать {$N+}

2) сложные

a) Ссылочный тип(указательный тип) ^тип|Pointer -1byte

b) Строки (string)(255 символов)

c) Регулярный тип(массив) array

d) Комбинированный тип (записи record)

e) Множества (set of)

f) Файлы file text

g) Объекты (object)

 

Boolean

Структура данных: Занимает ½ байта

Значения: True/False

Операции: логические: NOT,OR,AND,XOR

>,<,<=,<>,>=,,=

Функции:

Function odd(N:целые):Boolean

True, если N – четное, else FALSE

Function Eoln (var text):Boolean;

If конец строки then true else false

 

Целый тип данных

1) ShortInt -1byte (-128..+127)

2)Integer 2byte

3) LongInt

MaxInt,MaxLongInt (константы, благодаря которым можно узнать максимальное значения Integer и LongInt)

4)byte 1byte (0.255)

5) word 2byte (0..65тыс)

3) операции +,-,*,div, mod (н-р: 20 div 7 ->2)

Операции отношения - >,<,>=,<=,<>,= :Boolean

Операции сдвига SHL (<-), SHR(->)

Н-р: N SHL 2 = N*2^2

Логические операции над целыми: NOT,OR,AND,XOR – над битами, для проверки одного бита

4)Функции ABS(n)- модуль n

SQR(n)- n^2

Round(x:вещественное)-округлить х

Trunc(х:вещественное)Жотбрасивыание дробной части

 

Вещественный тип

Real(6byte)

Расширенный вещественный тип (необходимо для его работы включить {$N+})

Single 4b

Double 8b

Extended 10b

Comp 8b

Real +-y.<10 цифр>E+-pp

+-y.<14 цифр>E+-pppp – расширенные типы

3) +,-,*,/

Операции отношения - >,<,>=,<=,<>,= :Boolean

На равенство проверяется не очень точно

4) функции

Арифметические ABS(x),SQR(x),SQRT(x)

Тригонометрические sin(x), cos(x), pi, arctg(x), ln(x), exp(x)=e^x

Int(x) – выделение целой части

Frac(x)- выделение дробной части

 

Символьный тип (char)

Занчения: символы с кодом от 0..255

Операции отношения(сравниваются коды символов)

Фукнции: ord(ch:char):byte – код ch

Chr(код:byte):char – возращает символ с кодом

Chr(0)..chr(255)- диапозон char

 

Перечисленный и огранниченный тип

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

type

colors = (red, white, blue);

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

 

Общий вид:

a: min..max;

здесь a – переменная, min – левая граница, max – правая граница подмножества (диапазона). Границы диапазона разделяются двумя точками.

Регулярный тип (массив)

Объявляется:

Имя массива:array[тип Index] of <тип компонента>

Index – любой ординальный, кроме LONGINT

Заполняется циклом, обычно циклом с параметром, выводится аналогично

 

Комбинированный тип(запись)

Объединяет разные типы в одну запись

Пример: запись для хранения даты и способы хранения дат в программе, если необходимо сравнения дат.

Type Tdate=record

Day:1..31;

Month:1..12;

Year:Integer;

Var Date:array[1..N] of TDate

 

Комбинированный тип с вариантами

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

 

type Effect=Record

Nomer: Integer;

Case Proverka: Boolean of

FALSE: (PrinimalRanee: Boolean);

TRUE : (GolovBol,Lihoradka,Toshnota: Boolean)

end;

var Nekto: Effect;

 

Множественный тип данных

Множественный тип данных Паскаля напоминает перечислимый тип данных. Вместе с тем множественный тип данных – набор элементов не организованных в порядке следования.

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

 

В качестве базовых типов могут использоваться:

 

перечислимые типы;

символьный;

байтовый;

диапазонные на основе вышеперечисленных.

Такие ограничения связаны с формой представления множественного типа данных в Паскале и могут быть сведены к тому, чтобы функция ord() для используемого базового типа лежала в пределах от 0 до 255.

Type <имя_типа>= set of <базовый_тип>

С множественными типами Паскаля можно выполнять действия объединения(+), исключения(-) и пересечения(*).

Файловый тип данных

Файлы – последовательность компонентов одного типа. В TP мб 3 типа файлов:

1.file – нетипированный файл

2.file of <тип компонента>(любой но не файл)

3.text (текстовые файлы – символы, организованные в строки)

Работа с файлами

1. var F:file of <тип компонента>

2. assign(f:file;filename:string)

3.открыть на чтение или на запись

Reset(var f:file)-открыть на чтение

Rewrite(var f:file) – открыть на запись

По умолчанию контроль ввода вывода {$I+}

IORESULT – выводит код ошибки ввода-вывода.

Запись в файл или чтение из него.

Чтение read(f:file,<переменная типа компонента>)

Запись write(f,exp:<тип компонента>)

Запись всегда идет в конец файла

Существуют функциия проверяющая закрыт файл или нет EOF(F)-boolean

Закрытие файла:

Процедура CLOSE(f).

Файлы закрываются по отдельности. Сразу в одной close несколько файлов писать нельзя.

Текстовые файлы.

Необходима использовать процедуру для проверки конца строки: EOLN(var F:text)

Чтение read, запись write

При использовании writeln или readln курсор чтение или запись автоматически переводится на следующую строчку.

Текстовые файлы для взаимодействия с диском имеют буфер 128 байт.

Для уменьшения времени работы программы существует процедура: settextbuf(имя файла, буфер). Она пишется после assign, но до reset. Задает объем буфера.

 

Строковый тип данных.

Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.

 

Вопрос №15. Структура программ и подпрограмм.

Структура описания программ и подпрограмм

[<заголовок>]

<раздел описаний>

begin

<тело программы>

End.

Раздел описаний:

<раздел меток > - label

<раздел констант> const

<раздел типов> type

<раздел переменных> var

<раздел процедур и функций> procedure/function

В ТР порядок любой, но имя должно быть определенно до его использования.

Разделы могут повторятся.

Раздел описания меток и констант.

Метка – любой идентификатор, в целях совместимости со стандартом допускается использование в качестве метки целого без знака в диапазоне (от 0 до 9999).

 

Любой оператор в программе м.б. помечен меткой. Метка располагается перед оператором и отделяется от него двоеточием. Оператор может иметь несколько меток. Применение меток дает возможность изменять естественный порядок выполнения операторов. Все метки д.б. описаны в разделе описания меток.

 

LABEL LB1, LB2, R8;

 

Раздел описания констант.

Const <имя>=<константа>;

Но может быть и выражение пример

Const с=ord(‘9’)-ord(‘0’)+1;

Типированные константы.

Const <имя>:Тип=значение.

Пример

Found:Boolean=true;

Const NEWYEAR:record

D:Byte;

M:Byte;

Y:Integer;

End=

(1,1,2012)

 

Раздел описания типов и переменных.

Type <имя>=<тип>

Раздел переменных.

Var <имя>:тип;

Абсолютная переменная

Var имя:тип absolute <имя другой переменной тип>

 

Absolute позволяет рассматривать один и ту же память как разные типы данных.

Глобальные имена используются во всей программе, если только в каком-то внутреннем блоке непереобъявлены. Локальная переменная только лишь, где была объявлена.

Переменная доступна в том блоке, где она объявлена. Кроме внутренних блоков, где переобъявлена.

 

Вопрос №16. Операции на языке ТР.

 

Приоритет операции:

Если нет () то зависит от приоритета:

1) Функции

2) Одноместные операции (+,-,@,NOT)

3) Мультипликативные(*,div,/,mod,AND,shl,shr)

4) Аудитивные (+,-,OR,XOR)

5) Операции отношений

Вопрос №17. Операторы.

 

Операторы Паскаля

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

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

 

Оператор GOTO (безусловного перехода)

 

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

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

 

Пример:

Program Test;

Label lb1;

Var b:real;

Begin

Goto lb1;

For i:=1 to 4 do

Writeln(b);

Lb1:readln(b);

End.

 

Оператор присваивания. :=

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

 

Cоставной оператор (BEGIN END;).

 

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

 

Условный оператор IF

 

Позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие

 

Оператор выбора CASE

 

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

 

Таким образом, CASE предназначен для выбора одного из взаимоисключающих действий, необходимость появления которых возникает с одинаковой вероятностью. Ветка ELSE является необязательной, если она отсутствует, и значение переключателя не совпадает ни с одной из перечисленных констант, то весь оператор рассматривается, как пустой. Если для нескольких констант нужно выполнить один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно) сопроводив их одним оператором.

 

Оператор WHILE (с предусловием).

 

Этот структурный оператор задаёт повторяющееся выполнение операторов, входящих в него. Он может выполняться 0 и более раз.

While <истина> do <>

 

Цикл REPEAT UNTIL(с постусловием).

 

Организует многократное выполнение операторов, входящих в него. Последовательность действий, записанных между словами REPEAT UNTIL, выполнится по крайней мере один раз, так как условие выхода из цикла проверяется после выполнения очередного действия. Если выражение TRUE- цикл прекращается, если FALSE, цикл продолжается.

Repeat

<>

Until <false>

 

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

 

Цикл с параметром FOR DO

 

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

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

 

Начальное и конечное значение управляющей переменной вычисляются только один раз. Если в теле цикла стоит ТО, то начальное значение управляющей переменной должно быть меньше конечного, если DOWNTO – то наоборот.

 

Вопрос№18. Обработка массивов.

Массив – набор однотипных элентов, связанных набором целых чисел, называемых индексами.

Если индексы меняются с постоянным шагом, то массив называется прямоугольным

Пример. процедуры вывода таблицы символов.

При помощи цикла for

program chars;

procedure kodtable;

const n=255;

var i:byte;

ch:char;

begin

for i:=1 to n do begin

ch:=chr(i);

writeln(ch:3,i:4);

inc(i);

end;

end;

begin

kodtable;

readln

end.

При помощи цикла while

program chars;

procedure kodtable;

const n=255;

var i:byte;

ch:char;

begin

i:=0;

while i<=255

ch:=chr(i);

writeln(ch:3,i:4);

inc(i);

end;

end;

begin

kodtable;

readln

end.

При помощи цикла until

program chars;

procedure kodtable;

const n=255;

var i:byte;

ch:char;

begin

i:=1

repeat

ch:=chr(i);

writeln(ch:3,i:4);

inc(i);

until i>255;

end;

begin

kodtable;

readln

end.

Пример: Умножение матриц.

Пример. Процедура ввода-вывода двумерной матрицы

{Заполнение вводом с клавиатуры}

procedure qwer;

var i,j:Integer;

begin

writeln('Заполнение матрицы с клавиатуры');

for i:=1 to N do begin

for j:=1 to N do

read(matrix[i,j]);

readln;

end;

{вывод матрицы}

procedure vyvod;

begin

write('|':7);

for j:=1 to n do write(j:6);

writeln;

for j:=1 to n*8 do write('-');

writeln;

for i:=1 to N do begin

writeln('|':7);

write(i:6,'|');

for j:=1 to N do

write(round(matrix[i,j]):6);

writeln;

end;

end;

Пример. Поиск координат минимального числа в двумерном массиве с максимальном размером 10х10

program matrixXmatrix;

var a:array[1..10,1..10] of Integer;

i,j,minx,miny,min,n1,n2:Integer;

procedure poisk(n1,n2:Integer);

var i,j:Integer;

begin

min:=a[1,1];

minx:=1;miny:=1;

for i:=1 to n1 do

for j:=1 to n2 do begin

if a[i,j]<min then begin min:=a[i,j];minx:=j;miny:=i;end;

end;

end;

begin

writeln('Введите размеры матрицы);

readln(n1,n2);

writeln('Заполните матрицу');

for i:=1 to n1 do begin

for j:=1 to n2 do

read(a[i,j]);

readln;

end;

poisk(n1,n2);

writeln(‘координаты минимального элемента:’,minx:3,miny:3);

readln

end.

 

 

Вопрос №19. Пример обработки текстов.

Пример: создать файл с данными о студентах.

program tableStudentsofMyGroup;uses crt;

type

Person=record

Family:string;

mark:array[1..6] of Byte;

end;

var T1:text;

Student:array[1..20] of Person;

i,j,n:Integer;

begin

clrscr;

assign(t1,paramstr(1));rewrite(t1);

writeln('База Данных Студентов группы');

repeat

writeln('Введите число студентов в группе');

readln(n);

if (n>20) or (n<1) then writeln('Недопустимое количество');

until (n>=1) and (n<=20);

{Ввод данных}

for i:=1 to n do

with Student[i] do begin

write('Введите фамилию студента: '); readln(family);

write('Введите его оценки за прошлую сессию: ');

for j:=1 to 6 do

read(mark[j]);

readln;

end;

for i:=1 to n do

with Student[i] do begin

write(t1,family:20);

for j:=1 to 6 do

write(t1,mark[j]:3);

writeln;

end;

 

readln

end.

 

Пример: прочитать файл с данными о студентах и вывести фамилии на экран

program tableStudentsofMyGroup;uses crt;

const n=30;

type

Person=record

Family:string;

mark:array[1..6] of Byte;

end;

var T1:text;

Student:array[1..20] of Person;

i,j,n:Integer;

begin

clrscr;

writeln('База Данных Студентов группы');

assign(t1,paramstr(1));reset(t1);

until (n>=1) and (n<=20);

{Ввод данных}

n:=0;

while not eof(t1) do

with Student[i] do begin

read(t1,family);

for j:=1 to 6 do

read(t1,mark[j]);

readln;

end;

n:=n+1;

for i:=1 to n do

with Student[i] do begin

write(family:20);

for j:=1 to 6 do

write(mark[j]:3);

writeln;

end;

 

readln

end.

 

Пример: функция наличия файла на диске.

Это функция IORESULT. выводит код ошибки ввода-вывода. Если ошибки нет, то выводит 0.

Вопрос №20. Порядок обработки текстовых файлов.

Пример: копирование текстового файла по символам и по строкам. Отличия и ограничения.

Если копировать по строкам, то нужно помнить, что в одной строке для TP может быть максимум 255 символов.

Копирование по символам.

program copytext1;

var T1,T2:text;

ch:char;

begin

assign(T1,paramstr(1));reset(T1);

assign(T2,paramstr(2));rewrite(T2);

while not Eof(T1) do begin

while not eoln(T1) do begin

read(T1,ch);write(T2,ch);

end;

readln(T1);writeln(T2);

end;

end.

Копирование по строкам.

program copytext1;

var T1,T2:text;

s:string;

begin

assign(T1,paramstr(1));reset(T1);

assign(T2,paramstr(2));rewrite(T2);

while not Eof(T1) do begin

readln(T1,s);writeln(T2,s);

end;

end.

Удалить лишние пробелы между слов текстового файла используя булевские переменные.

program delpr1;

var T1,T2:text;

ch:char;

bool:boolean;

s:string;

begin

assign(T1,paramstr(1));reset(T1);

assign(T2,paramstr(2));rewrite(T2);

while not Eof(T1) do begin

bool:=true;

while not eoln(t1) do begin

while bool do begin

read(t1,ch);

if ch:=' ' then write(t2,ch) else bool:=false;

end;

write(t2,ch);

while ch<>' ' do

read(t1,ch);write(t2,ch);

write(t2,ch);

while ch=' ' do read(t1,ch);

end;

readln(t1);

writeln(t2);

end;

end.

Удалить лишние пробелы используя переменную состояния.

program delpr2;

var T1,T2:text;

ch:char;

Sost:1..3;

begin

assign(T1,paramstr(1));reset(T1);

assign(T2,paramstr(2));rewrite(T2);

while not Eof(T1) do begin

sost:=1;

while not eoln(T1) do

case sost of

1:begin

read(t1,ch);

if ch<>' ' then sost:=2;

write(t2,ch);

end;

2:begin

read(t1,ch);

if ch=' ' then sost:=3;

write(t2,ch)

end;

3:begin

read(t1,ch);

if ch<>' ' then begin sost:=2;write(t2,ch);end;

end;

end;

readln(T1);writeln(T2);

end;

end.

 

Вопрос №21. Стандартные файлы ввода-вывода.

Стандарными файлами ввода-вывода в ТР являются input, output.

Если происходит ввод с клавиатуры, то нужно писать просто read(<переменная>);

При вводе данных с клавиатуры и выводе на экран дисплея используются стандартные файлы с именами INPUT (ввод) и OUTPUT (вывод) их имена задаются по умолчанию.

Пример.

Program max;uses crt;

Var max,n,I,k:Integer;

Begin

Writeln(‘Введите диапазон чисел среди которых нужно произвести поиск’);

Readln(n);

Writeln(‘вводите числа в ряд’);

Read(k);

Max:=k;

For i:=2 to n do begin

Read(k);

If max<k then max:=k;

End;

Writeln(‘Максимальное число - ’,max);

readln

End.

Вопрос №22. Процедуры и функции ввода-вывода. Типы данных и форматы вывода.

---------T-------------------------------------------¦

Функция ¦ Описание ¦

+------------------+--------------------------------------------+

¦ Append ¦ Открывает существующий файл для добавле-¦

¦ ¦ ния. ¦

+------------------+--------------------------------------------+

¦ Assign ¦ Присваивает имя внешнего файла файловой пе-¦

¦ ¦ ременной. ¦

+------------------+--------------------------------------------+

¦ BlockRead ¦ Считывает из нетипизированного файла одну¦

¦ ¦ или более записей. ¦

+------------------+--------------------------------------------+

¦ BlockWrite ¦ Записывает в нетипизированный файл одну¦

¦ ¦ или более записей. ¦

+------------------+--------------------------------------------+

¦ ChDir ¦ Выполняет смену текущего каталога. ¦

+------------------+--------------------------------------------+

¦ Close ¦ Закрывает открытый файл. ¦

+------------------+--------------------------------------------+

¦ Erase ¦ Стирает внешний файл. ¦

+------------------+--------------------------------------------+

¦ Eоf ¦ Возвращает для файла состояние end-of-file¦

¦ ¦ (конец файла). ¦

+------------------+--------------------------------------------+

¦ FilePos ¦ Возвращает текущую позицию в файле. Для¦

¦ ¦ текстовых файлов не используется. ¦

+------------------+--------------------------------------------+

¦ FileSize ¦ Возвращает текущий размер файла. Для текс-¦

¦ ¦ товых файлов не используется. ¦

+------------------+--------------------------------------------+

¦ Flush ¦ Сбрасывает буфер текстового файла вывода. ¦

+------------------+--------------------------------------------+

¦ Getdir ¦ Возвращает текущий каталог на заданном дис-¦

¦ ¦ ке. ¦

+------------------+--------------------------------------------+

¦ IОResult ¦ Возвращает целое значение, являющееся сос-¦

¦ ¦ тоянием последней выполненной операции вво-¦

¦ ¦ да-вывода. ¦

+------------------+--------------------------------------------+

¦ MkDir ¦ Создает подкаталог. ¦

+------------------+--------------------------------------------+

¦ Read ¦ Считывает одно или более значений из файла¦

¦ ¦ в одну или более переменных. ¦

+------------------+--------------------------------------------+

¦ Readln ¦ Делает то же, что и Read, и выполняет про-¦

¦ ¦ пуск до начала следующей строки текстового¦

¦ ¦ файла. ¦

+------------------+--------------------------------------------+

¦ Rеnаме ¦ Переименовывает внешний файл. ¦

+------------------+--------------------------------------------+

¦ Rеset ¦ Открывает существующий файл. ¦

+------------------+--------------------------------------------+

¦ Rewritе ¦ Создает и открывает новый файл. ¦

+------------------+--------------------------------------------+

¦ RмDir ¦ Удаляет пустой подкаталог. ¦

+------------------+--------------------------------------------+

¦ Seek ¦ Перемещает текущую позицию в файле на за-¦

¦ ¦ данный элемент. Для текстовых файлов не ис-¦

¦ ¦ пользуется. ¦

+------------------+--------------------------------------------+

¦ SeekEof ¦ Возвращает для текстового файла состояние¦

¦ ¦ "конец файла". ¦

+------------------+--------------------------------------------+

¦ SeekEoln ¦ Возвращает для текстового файла состояние¦

¦ ¦ "конец строки". ¦

+------------------+--------------------------------------------+

¦ SetTextBuf ¦ Назначает для текстового файла буфер ввода-¦

¦ ¦ вывода. ¦

+------------------+--------------------------------------------+

¦ Truncate ¦ Усекает размер файла до текущей позиции.¦

¦ ¦ Для текстовых файлов не используется. ¦

+------------------+--------------------------------------------+

¦ Write ¦ Записывает в файл одно или более значений. ¦

+------------------+--------------------------------------------+

¦ Writeln ¦ Делает то же, что Write, но затем записы-¦

¦ ¦ вает в текстовый файл символ конца строки.

 

Вопрос №23. Организация и использование процедур в языке Паскаль.

Процедуры и функции – это подпрограммы, которые можно многократно вызывать.

Procedure name(список параметров:<тип>);

Function name(список параметров):имя типа

Функция вызывается по своему имени, как часть выражения.

Н-р: y=sin(x);

 

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

Пример. Моделирование RS-триггера.

RS-триггер[10][11], или SR-триггер — триггер, который сохраняет своё предыдущее состояние при нулевых входах и меняет своё выходное состояние при подаче на один из его входов единицы. (на всякий случай)

Procedure Trigger(R,S:Boolean;var q,noq,error:Boolean);

Begin

Error:=randS;

If not error then

If r then q:=false

Else

If s then q:=true;

Noq:=notq;

End;

Var r,s,q,notq,error:Boolean;

Begin

Q:=false;

Notq:=not q;

For r:=false to true do

For s:=false to true do begin

Trigger(r,s,q,notq,error);

If error then writeln(byte(R):3,byte(s):3,’Запрещено’);

Else writeln(ord(r):3,ord(s):3,ord(q):3);

End;

End.

 

Генерация случайных чисел.

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

 

Функция random генерирует случайное число в диапазоне от 0 (включительно) до единицы. Если в скобках указан аргумент, то от 0 до значения указанного в скобках (не включая само значение). Так выражение random (10), говорит о том, что будет получено любое число в диапазоне [0, 10). Если требуется получать значения в каком-либо другом диапазоне (не от нуля), то прибегают к математической хитрости. Например, чтобы получить случайное число от -100 до 100 достаточно записать такое выражение: random (200) – 100. В результате, сначала будет получено число из диапазона [0, 199], а затем из него будет вычтена сотня. И если случайное число было меньше 100, то результат выражения будет отрицательным.

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

Опережающее описание процедур и функций.

Это когда процедуры вызываются в других процедурах.

Пример.

Prodram TestForward;

Procedure Flop(N:Integer);Forward;

Procedure flip(N:Integer);

If N>0 then begin

Writeln(‘Flop’); flop(n-1);

End;

End;

Procedure flop(N:integer);

Begin

If n>0 then begin

Writeln(‘flop’);

Flip(n-1);

End;

End;

Begin

Flop(3);

End.