- •Общие сведения об эвм
- •1. Общая функциональная схема эвм
- •2. Языки программирования
- •3. Этапы решения задач на эвм
- •4. Понятие алгоритма и его свойства
- •5. Графическое описание алгоритмов. Схемы алгоритмов
- •Блоки для изображения схем алгоритмов и программ
- •6. Типы алгоритмов
- •7. Ос эвм. Понятие о файловой системе
- •Имя.Расширение
- •8. Команды ms dos
- •Программирование на языке Паскаль
- •1. Структура программы на языке паскаль
- •2. Описание данных
- •2.1. Константы
- •2.2. Переменные
- •3. Комментарии
- •4. Операторы языка паскаль
- •5. Операторы обработки данных
- •5.1. Операторы ввода
- •5.2. Операторы вывода
- •5.3. Вычисление по формулам. Оператор присваивания
- •6. Линейные программы
- •7. Управляющие операторы
- •7.1. Разветвляющиеся алгоритмы. Оператор if (если)
- •7.2. Пример разветвляющейся программы
- •7.3. Оператор case
- •8. Циклические алгоритмы и программы
- •8.1. Общая схема цикла
- •8.2. Циклы со счетчиком
- •8.3. Итерационные циклы
- •8.3.1. Оператор цикла с пост-условием
- •8.3.2. Оператор цикла с пред-условием
- •Описание данных
- •9. Типы данных, используемых в паскале
- •9.1. Представление данных в эвм
- •9.2. Стандартные функции Паскаля и Турбо Паскаля
- •9.3. Булевские переменные и выражения
- •9.4. Функции для работы с символами
- •Функции языка Паскаль
- •9.5. Массивы
- •10. Примеры программ обработки массивов
- •11. Особенности алгоритмов и программ с накапливанием
- •12. Алгоритм нахождения минимума и максимума
- •13. Задача сортировки
- •14. Обработка многомерных массивов
- •15. Программы обработки строк символов (текстов)
- •15.1. Простейшие алгоритмы и программы обработки строк
- •15.2. Анализ символов в строке
- •16. Типовые программы обработки строк
- •16.1. Выделение слов из текста (слова разделены одним пробелом)
- •16.2. Выделение слов из текста (слова разделены несколькими пробелами)
- •16.3. Некоторые типовые алгоритмы и программы обработки массивов строк (слов из текстов)
- •17. Алгоритмы поиска
- •17.1. Алгоритм линейного поиска
- •17.2. Алгоритм дихотомического поиска
- •Процедуры, функции и модули в паскале
- •18.1. Процедуры
- •18.1.1. Пример программы с процедурой
- •18.1.2. Расположение процедур в программе
- •18.2. Функции
- •18.2.1. Пример программы с функцией
- •18.3. Внешние процедуры и функции
- •18.3.1. Модули пользователей
- •19. Итерационные циклы
- •19.1. Приближенное вычисление функций
- •19.2. Решение уравнений приближенными методами
- •19.2.1. Метод деления отрезка пополам
- •19.2.2. Метод Ньютона
- •19.2.3. Метод прохождения отрезка с переменным шагом
- •19.3. Вычисление определенных интегралов
- •19.3.1. Метод прямоугольников
- •19.3.2. Метод трапеций
- •20. Дополнительные сведения о ТипАх данных, применяемЫх в Паскале
- •20.1. Перечисляемый тип
- •20.2. Интервальный тип
- •20.3. Множества
- •20.3.1. Примеры программ с использованием множеств
- •Алгоритм
- •20.4. Записи
- •20.4.1. Примеры программ обработки записей
- •Алгоритм
- •Оператор_1;
- •21. Файлы и наборы данных
- •Assign(имя_файла, имя_нд);
- •21.1. Текстовые файлы
- •21.1.1. Создание текстового файла
- •21.1.2. Работа с существующим текстовым файлом
- •21.2. Типизированные файлы
- •21.2.1. Последовательная обработка типизированных файлов
- •21.2.2. Использование прямого доступа к записям типизированного файла
- •21.2.3. Упорядочение записей в файле
- •Алгоритм
- •21.2.4. Удаление записей из файла
- •21.2.5. Вставка записей в файл
- •22. Динамическое распределение памяти. Указатели и списки
- •22.1. Использование указателей. Списки
- •22.2. Очереди
- •22.2.1. Очередь типа lifo
- •22.2.2. Очередь fifo
- •23. Стандартные модули Турбо Паскаля
- •23.1. Модуль Crt
- •23.1.1. Работа с клавиатурой и звуком
- •23.1.2. Управление цветом
- •23.1.3. Создание окон и позиционирование курсора
- •23.1.4. Построение графика в текстовом режиме
- •23.1.5. Алгоритм и программа представления меню средствами Турбо Паскаля
- •23.2. Модуль dos
- •23.3. Модуль Graph
- •23.3.1. Инициирование графического режима
- •1) Процедура InitGraph(Var grDr,grMd:integer;path:string);
- •23.3.2. Вывод точек на экран
- •23.3.3. Вывод текста (надписей) в графическом режиме
- •1) SetTextStyle(Шрифт, Направление:Word; Размер:1..10);
- •23.3.4. Построение графических изображений
- •1) SetLineStyle(Тип_линии, Образец, Толщина : Word);
- •23.3.5. Запоминание и вывод изображений
- •24. Рекомендации по оформлению текста программ
- •Библиографический список
- •Оглавление
21.2. Типизированные файлы
Характерные особенности типизированных файлов:
1) файл может состоять из записей любого типа;
2) данные передаются из него или в него целыми записями (а не символами или строками)
3) при создании файла записи в нем автоматически нумеруются, причем номер первой из них равен 0.
В разделе Var файл описывается так:
Var
Имя : File Of Тип_Записей;
где Тип_Записей – скалярный (число, символ) или сложный (массив, тип Record и др.).
Пример. Type
Anketa = Record
Fam,Im,Ot : String[10];
Numz : Integer;
O : Array[1..5] Of Integer;
End;
Var
FilAnk : file of Anketa;
Dan : File Of Real;
Fl : File Of Char;
Rank : Anketa;
X : Real;
Операции чтения и записи для типизированных файлов записываются в следующем виде:
Read(Файл, Список_ввода);
Write(Файл, Список_вывода);
Пример. Write(FilAnk,Rank);
21.2.1. Последовательная обработка типизированных файлов
Пример 1. Программа обработки файла, содержащего данные простого типа. При исследовании некоторого технического объекта замерены его параметры Xi и записаны в набор данных StatDan в виде вещественных чисел. Вычислить их среднее значение Mx и стандартное отклонение по формулам:
Алгоритм для этой задачи будет следующий.
Открыть файл
Подсчитать среднее значение Mx и стандартное отклонение .
Закончить.
Уточняем алгоритм.
1.1. Связать файл из программы с набором StatDan.
1.2. Открыть файл для чтения.
2.1. Mx := 0.
2.2. := 0.
2.3. N := 0.
2.4. Пока не конец файла выполнить
2.4.1. Считать из файла число.
2.4.2. Mx := Mx + число.
2.4.3. := + х2
2.4.4. N := N + 1.
2.5. Вычислить Mx и .
2.6. Вывести Mx и .
2.7. Закрыть файл.
3. Закончить.
Программа, реализующая этот алгоритм, может быть такой:
Program Stat;
Var
F : File Of Real;
X,M,S : Real;
N : Integer;
Begin
Assign(F,’StatDan’);{ Здесь имя набора задано в виде}
Reset(F); { строковой константы StatDan}
S := 0;
M := 0;
N := 0;
While not Eof(F) do
Begin
Read(F,X);
N := N+1;
M := M+x;
S := S+Sqr(X);
end;
M := M/N;
S := Sqrt(S-Sqr(M))/ N;
Writeln(’Количество измерений - ’,N);
Writeln(’Среднее: ’,M:8:3,’ Отклонение: ’,S:8:3);
end.
Пример 2. Последовательное создание типизированного файла, содержащего данные сложного типа
Как отмечалось выше, к таким данным можно отнести массивы и записи Паскаля. Наиболее типичными являются файлы, содержащие данные типа Record.
Задача. Сформировать и вывести на экран файл, представляющий собой ведомость успеваемости студентов 1 курса ФАИТ. Данные об одном студенте имеют структуру вида:
Фамилия, Имя, Отчество, номер зачетки, оценки по 5 предметам.
Количество студентов (n) и сведения о них вводятся с клавиатуры. Программа для решения поставленной задачи может быть такой.
Program Sozd_Fil;
Const
M=5; { Количество оценок }
Type
Stud=Record
Fam, Im, Ot : String[10];
NumZ : LongInt;
Otm : Array[1..M] Of Integer;
End;
Var
Vedom : File Of Stud;
A : Stud;
FilName : String; { имя набора данных }
j,i,n : Integer;
Begin
Writeln(’Введите имя набора данных’);
Readln(FilName);
Assign(Vedom,FilName);
Rewrite(Vedom); {Открытие файла для записи}
Writeln(’Введите количество студентов’);
Readln(n);
Writeln (’Вводите сведения о каждом студенте’);
For i:=1 to n do
Begin
With A do
Begin
Write(’Фамилия: ’);
ReadLn(Fam);
Write(’Имя: ’);
ReadLn(Im);
Write(’Отчество: ’);
ReadLn(Ot);
Write(’Номер зачетки: ’);
ReadLn(Numz);
WriteLn(’Введите оценки по одной:’);
For J := 1 to 5 do
Begin
WriteLn(’Введите ’,J,’ -ю оценку’);
ReadLn(Otm[j]);
End;
End;
Write(Vedom,A); {Запись в файл переписывается целиком}
End;
Close(Vedom);
Writeln (’Конец работы. Нажмите клавишу ENTER’);
ReadLn;
End.
Пример 3. Последовательная обработка файла Vedom
Задача. Вывести на экран сведения о неуспевающих студентах из файла Vedom предыдущего примера. Соответствующая программа будет иметь следующий вид.
Program Count_2;
Const
M=5;
Dl=10;
Type
Stud = Record
Fam, Im, Ot : String[Dl];
Numz : LongInt;
Otm : Array[1..M] Of Integer;
End;
Var
Vedom : File Of Stud;
FilName : String;{имя набора данных}
A : Stud;
i,j,kdv,K2 : Integer;
Begin
Writeln(’Введите имя набора данных’);
Readln(FilName);
Assign(Vedom,FilName);
Reset (Vedom); {открытие файла, 1-я запись - в буфере}
kdv := 0;
I := 0;
Writeln(’Список фамилий и номеров зачеток неуспевающих студентов’);
While Not Eof(Vedom) Do
Begin
K2 := 0;
Read(Vedom,A);
I := i+1;
With A Do
Begin
For j := 1 To M Do
If Otm[j] < 3 Then
K2 := K2+1;
If K2 > 0 Then
Begin
kdv := kdv+1;
Writeln(Fam:15,Numz:8);
End;
End;{Whith}
End;{While}
Writeln(’Проверено ’,i,’ студентов.’);
Writeln(’Из них неуспевающих ’,kdv,’ человек’);
WriteLn(’Нажмите Enter’);
Readln;
End.