Вопрос №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) A≡a, 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.