При открытии файла желательно использовать функцию — КиберПедия 

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

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

При открытии файла желательно использовать функцию

2017-11-17 302
При открытии файла желательно использовать функцию 0.00 из 5.00 0 оценок
Заказать работу

Задание

1. Составьте блок-схему алгоритма и программу решения задачи Коши методом Эйлера (задание взять у преподавателя, ведущего занятие).

2. Составьте блок-схему алгоритма и программу решения задачи Коши методом Рунге–Кутта.

3. Решить дифференциальные уравнения с помощью пакета MathСad.

 

Контрольные вопросы

1. Сформулируйте задачу Коши.

2. Опишите метод решения задачи Коши методом Эйлера и его геометрический смысл.

3. Какие преимущества и недостатки метода Эйлера?

4. Опишите метод Рунге–Кутта для решения задачи Коши.

5. Какие преимущества и недостатки метода Рунге–Кутта?

6. Как решить дифференциальные уравнения с помощью пакета Mathcad?

 

Лабораторная работа №15

Задание

1. Составьте блок-схему алгоритма и программу решения задачи (задание взять у преподавателя, ведущего занятие).

2. Решить задачу с помощью пакета Mathcad.

 

Контрольные вопросы

1. Сформулируйте задачу.

2. Опишите методы поиска корней алгебраических и трансцендентных уравнений и их геометрический смысл.

3. Какие преимущества и недостатки методов?

4. Какие преимущества и недостатки методов?

5. Как решить задачу с помощью пакета MathСad?

 

Лабораторная работа №16

СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ (MS ACCESS)

 

Цель: научиться разрабатывать базы данных с использованием СУБД MS ACCESS;

 

Задание:

1. Создайте таблицу базы данных (исходные данные согласуйте с преподавателем).

2. Создайте межтабличные связи.

3. Создайте запрос на выборку, основанный на связанных таблицах; сформируйте структуру запроса путем выбора базовых таблиц и полей, а также сформулируйте условие отбора.

4. Создайте запрос «с параметром».

5. Создайте итоговый запрос.

 

Пример:

Разработать базу данных (БД) для выполнения сборки ПК из готовых компонентов, основанную на двух таблицах комплектующих. Одна таблица содержит данные, которые могут отображаться для клиентов при согласовании спецификации изделия, — в ней указаны розничные цены на компоненты. Вторая таблица предназначена для анализа результатов деятельности предприятия — в ней содержатся оптовые цены на компоненты и краткая информация о поставщиках (клиенты предприятия не имеют доступа к данным этой таблицы).

Создание базовых таблиц

1. Запустите программу MS Access (Пуск / Программы / Microsoft Access).

2. Включите переключатель Новая база данных в окне MS Access и щелкните на кнопке ОК.

3. Создайте папку на диске D: в окне Файл новой базы данных, присвойте файлу имя: Комплектующие и щелкните на кнопке Создать. Откроется окно новой базы — Комплектующие: база данных.

4. Откройте панель Таблицы.

5. Дважды щелкните на значке Создание таблицы в режиме конструктора — откроется бланк создания структуры таблицы.

6. Введите для первой таблицы следующие поля:

Имя поля Тип поля
Компонент Текстовый
Модель Текстовый
Основной параметр Числовой
Цена Числовой

7. Щелкните на поле Цена. В нижней части бланка задайте свойство Число десятичных знаков, равным 2.

8. Задайте ключевое поле для связи с будущей таблицей поставщиков. Т.к. ни одно поле не является «уникальным», используйте комбинацию полей Компонент и Модель. Выделите оба поля в верхней части бланка (с нажатой клавишей SHIFT). Щелчком правой кнопки мыши откройте контекстное меню и выберите в нем пункт Ключевое поле.

9. Закройте окно Конструктора. При закрытии окна присвойте таблице имя Комплектующие.

10. Создайте таблицу Поставщики, повторив действия пунктов 5 – 9, со следующими полями.

Имя поля Тип поля
Компонент Текстовый
Модель Текстовый
Цена оптовая Числовой
Поставщик Текстовый
Телефон Текстовый
Адрес Текстовый
Примечание Поле MEMO

Ключевое поле можно не задавать.

11. Откройте в окне Комплектующие: база данных по очереди созданные таблицы и заполните их экспериментальным содержанием (10…15 записей).

 

Создание межтабличных связей

1. Откройте в окне Комплектующие: база данных панель Таблицы. На ней должны присутствовать значки созданных таблиц Комплектующие и Поставщики. Выберите на панели инструментов кнопку Схема данных (или команды строки меню: Сервис / Схема данных). Одновременно откроются окно Схема данных и диалоговое окно Добавление таблицы.

2. Выберите щелчком на кнопке Добавить таблицы Комплектующие и Поставщики - в окне Схема данных откроются списки полей этих таблиц.

3. Выделите при нажатой клавише SHIFT в таблице Комплектующие два поля — Компонент и Модель.

4. Перетащите эти поля на список полей таблицы Поставщики. При отпускании кнопки мыши автоматически откроется диалоговое окно Изменение связей.

5. Выберите на правой панели окна Изменение связей поля Компонент и Модель таблицы Поставщики, включаемые в связь. Не устанавливайте флажок Обеспечение целостности данных (в данном задании не требуется).

6. Закройте окно Изменение связей и в окне Схема данных рассмотрите образовавшуюся связь. Убедитесь в том, что линию связи можно выделить щелчком левой кнопки мыши, а щелчком правой кнопки мыши открывается контекстное меню, позволяющее разорвать связь или отредактировать ее.

7. Закройте окно Схема данных.

 

Создание запроса на выборку

Создание запроса на выборку жестких дисков, имеющих емкость не менее x Гбайт при цене менее z у.е. Результирующая таблица должна содержать также адрес поставщика и номер его телефона.

1. Откройте панель Запросы в окне Комплектующие: база данных. Дважды щелкните на значке Создание запроса в режиме Конструктора — откроется бланк запроса по образцу и диалоговое окно Добавление таблицы.

2. Выберите таблицу Поставщики в окне Добавление таблицы и щелкните на кнопке Добавить. Закройте окно Добавление таблицы.

3. Выберите в списке полей таблицы Поставщики поля, включаемые в результирующую таблицу: Компонент, Модель, Цена оптовая, Поставщик, Телефон, с помощью двойных щелчков на именах полей.

4. Задайте условие отбора для поля Компонент. Введите в соответствующую строку: Жесткий диск. Из таблицы будут выбраны только жесткие диски.

5. Задайте условие отбора для поля Цена оптовая. Введите в соответствующую строку: < z. Из таблицы будут выбираться только изделия с ценой менее z условных единиц.

6. Задайте условие отбора по емкости жесткого диска. В таблице Поставщики такого поля нет, но есть поле Модель, которое однозначно определяет параметры изделия. Т.к. по полю Модель установлена связь с таблицей Комплектующие, то можно ввести в запрос поле Основной параметр, взяв его из другой таблицы.

Добавьте список полей таблицы Комплектующие в верхнюю часть бланка запроса по образцу. Для этого щелкните правой кнопкой мыши в верхней области бланка и в открывшемся контекстном меню выберите пункт Добавить таблицу — откроется окно Добавление таблицы. Выберите в нем таблицу Комплектующие.

7. Введите в бланк запроса по образцу поле Основной параметр двойным щелчком на нем в списке полей таблицы Комплектующие.

8. Введите условие >х в строку Условие отбора столбца Основной параметр (емкость диска более х Гбайт).

9. Закройте бланк запроса по образцу. Введите при его закрытии имя - Выбор комплектующих.

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

 

Создание запросов «с параметром»

Критерии отбора данных вводятся на этапе запуска запроса.

1. Откройте панель Запросы в окне Комплектующие: база данных. Дважды щелкните на значке Создание запроса в режиме Конструктора — откроется бланк запроса по образцу.

2. Создайте запрос на выборку, основанный на таблице Поставщики, в который войдут следующие поля: Компонент; Модель; Цена оптовая; Поставщик; Телефон (см. Создание запроса на выборку).

3. Введите: Процессор в строку Условие отбора поля Компонент.

4. Заполнить строку Условие отбора для поля Цена оптовая надо таким образом, чтобы при запуске запроса предлагалось ввести нужное значение. Текст должен быть заключен в квадратные скобки. Если необходимо отобрать процессоры, цена которых больше 100 единиц, то необходимо написать: >100. Если нужны процессоры дешевле 80 единиц, то необходимо написать <80. Если хотите дать возможность выбора, то должны написать: < [Введите максимальную цену].

5. Закройте запрос, сохранив его под именем Выбор комплектующих.

6. Откройте панель Запросы в окне Комплектующие: база данных и запустите запрос Выбор комплектующих — на экране появится диалоговое окно Введите значение параметра.

7. Введите какое-либо число и щелкните на кнопке ОК. По результатам запроса будет сформирована итоговая таблица с учетом содержания в таблице Поставщики.

 

Создание итогового запроса

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

Предположим, что собирают компьютеры трех классов; «Элитный», «Деловой» и «Экономичный». Несмотря на то что архитектура у всех компьютеров близка, их компоненты заметно отличаются по цене и техническим параметрам. Соответственно, имеются значительные отличия в цене этих трех моделей. Задача — подготовить итоговый отчет, с помощью которого можно определять цену каждой из модели компьютеров и динамично ее отслеживать при изменении входящих компонентов или их поставщиков.

1. Откройте панель Таблицы в окне Комплектующие: база данных. Выберите таблицу Комплектующие.

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

3. Вставьте новое поле в начало структуры таблицы: выделите первое поле (Компонент) и нажмите клавишу INSERT.

4. Введите имя нового поля — Класс и определите его тип — Текстовый.

5. Закройте окно Конструктора, подтвердите необходимость изменить структуру таблицы.

6. Откройте таблицу Комплектующие и заполните ее содержанием, введя для каждого класса данные по следующим изделиям: Материнская плата; Процессор; Оперативная память; Жесткий диск; Корпус; Дисковод CD-ROM; Дисковод гибких дисков; Видеоадаптер; Звуковая карта; Клавиатура; Мышь.

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

7. Закройте таблицу Комплектующие.

8. Откройте панель Запросы щелчком на кнопке окна Комплектующие: база данных.

9. Выполните двойной щелчок на значке Создание запроса в режиме конструктора и затем выберите таблицу Комплектующие, на основе которой будет разрабатываться итоговый запрос. Закройте окно Добавление таблицы.

10. Введите в бланк запроса по образцу следующие поля таблицы Комплектующие: Класс, Компонент, Цена.

11. Включите сортировку по возрастанию для поля Класс и сортировку по убыванию для поля Цена.

12. Щелкните на кнопке Групповые операции на панели инструментов или Вид / Групповые операции строки меню для создания в нижней части бланка строки Групповые операции. На ее основе создаются итоговые вычисления. Все поля, отобранные для запроса, получают в этой строке значение Группировка.

13. Оставьте в строке Групповые операции значение Группировка для поля, по которому производится группировка записей (в данном случае — Класс). Щелкните для остальных полей в этой строке — появится кнопка раскрывающегося списка, из которого можно выбрать итоговую функцию для расчета значений в данном поле.

14. Выберите итоговую функцию Sum для поля Цена, чтобы определить стоимость изделия как суммы стоимостей комплектующих.

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

16. Закройте бланк запроса по образцу и дайте ему имя: Расчет стоимости изделия.

Запустите запрос и убедитесь, что он правильно работает.

 

Контрольные вопросы

1. Как создать таблицу базы данных?

2. Как создать межтабличные связи?

3. Как создать запрос на выборку?

4. Как создать запрос «с параметром»?

5. Как создать итоговый запрос?

 

ЛИТЕРАТУРА

1. Информатика: Базовый курс / С.В. Симонович и др. – СПб.: Питер, 2002. – 640 с.: ил.

2. Дьяконов В. П. Руководство по применению системы MathCad. — Смоленск: СФМЭИ, 1991 г. — 114 с.

3. Дьяконов В. П. Автоматизация математических расчетов с помощью системы MathCad. — Мир ПК., 1991 г. — 43 с.

4. Крушевский А.В., Беликов Н.И., Тищенко В.Д. и др. Вычислительная техника в инженерных и экономических расчетах. - Киев: Вища шк., 1985.- 295с.

5. Послед Б.С. Access 2002. Приложения баз данных. Лекции и упражнения. – СПб: ООО «ДиаСофтЮП», 2002. – 656 с.

6. Дьяконов В.П. Справочник по алгоритмам на языке Pascal для персональных ЭВМ: Справочник. - М.: Наука, 1987.-240с.

При открытии файла желательно использовать функцию

FileExists(<имя файла>);

где <имя файла> – это символьная строка, содержащая имя файла на внешнем запоминающем устройстве. Если файл существует, то функция возвращает true, если нет – false.

Текстовый файл – последовательность символов, сгруппированных в строки произвольной длины, где каждая строка заканчивается символом конца строки – EOLN (символ перевода каретки CR (#13), за которым, возможно, следует символ перевода строки LF (#10)). Заканчивается файл символом конца файла EOF (end-of-file, #26).

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

rеаd(f,х,у,z); {прочитать из файла, связанного с файловой переменной f, значения переменных х,у,z}

readln(f,а); {прочитать из файла, связанного с файловой переменной f, значение в переменную а и перейти к следующей строке}.

Вывод данных в произвольный текстовый файл производится процедурами write и writeln, у которых первой в списке параметров указана соответствующая файловая переменная.

Например,

write(fi,'s=',s) {осуществляет вывод в файл, связанный с файловой переменной fi, символьной строки 's=' и значение переменной s}.

Процедура writeln (fi); выводит пустую строку в файл, связанный с файловой переменной fi.

Пример.

Составить программу для нахождения суммы двух одинаковых квадратных матриц произвольного размера. Ввод исходных данных осуществить из текстового файла inp.txt. Результаты вывести в файл result.tхt.

Решение

Для создания текстового файла inp.txt, содержащего размер матриц n, а также сами матрицы а и b, можно использовать любой текстовый редактор. Используемые файлы inp.txt и result.txt размещены в одной папке с исполняемым файлом программы. Поэтому в процедурах AssignFile указаны только имена файлов без пути доступа к ним.

Программа

program pl; {$APPTYPE CONSOLE} uses SysUtils; type mas=array of array of integer; var а,b,c:mas; gl,g2,n,i,j:integer; fl,f2:TextFile; begin AssignFile(fl,'inp.txt'); AssignFile(f2,'result.txt'); Reset(fl); Rewrite(f2); readln(fl,n); SetLength(a,n,n); SetLength(b,n,n); SetLength(c,n,n); gl:= 0; g2:= n-1; for i:= gl to g2 do begin for j:= gl to g2 do read(fl,a[i,j]); readln(fl); end; for i:= gl to g2 do begin for j:= g1 to g2 do read(fl,b[i,j]); readln(fl) end; CloseFile(fl); for i:= gl to g2 do for j:= g1 to g2 do c[i,j]:= a[i,j]+b[i,j]; writeln(f2,'Result array'); for i:= g1 to g2 do begin for j:= gl to g2 do write(f2,c[i,j]:2); writeln(f2) end; CloseFile(f2); writeln('Program terminated'); readln end.  

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

function Eof [(var F: FileText)]: Boolean;

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

function Eoln [(var F: FileText)]: Boolean;

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

function SeekEof [(var F: FileText) ]: Boolean;

действует аналогично Eof, но пробелы, знаки табуляции и маркеры конца строки EOLN пропускаются.

function SeekEoln [(var F: FileText)]: Boolean;

действует аналогично Eoln, но пробелы и знаки табуляции пропускаются.

Используя функции Eof и Eoln, можно организовать ввод массивов.

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

……………………

I:=0;

while not(eof(fa)) do

begin

j:= 0;

while not(eoln(fa)) do

begin

read(fa,a[i,j]);

j:= j+1;

end;

readln(fa);

i = i+1;

end;

……………………

Если текстовый файл содержит символьное представление числовых данных, то вместо функций Eof и Eoln лучше использовать SeekEof и SeekEoln.

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

Для чтения данных из типизированного файла применяется процедура read. Для записи в типизированный файл используется процедура write. При использовании процедуры read или write, указатель файла перемещается к следующему по порядку элементу файла. Процедуры readln и writeln, используемые для текстовых файлов, для типизированных файлов не применяются.

Для организации прямого доступа к данным типизированного файла используют стандартные подпрограммы

procedure Seek (var F; N: Longint);

перемещает текущую позицию (указатель) в типизированном файле, связанном с файловой переменной F к требуемому компоненту с номером N. Нумерация компонентов в файле начинается с нуля.

function FilePos(var F): Longint;

возвращает номер текущего компонента в файле, связанном с файловой переменной F.

function FileSize(var F): Integer;

возвращает количество компонентов в файле, связанном с файловой переменной F.

Пример. Составить программу, которая:

1. Вводит с клавиатуры элементы целочисленной матрицы A(3x3) и записывает их в типизированный файл fl.dat.

2. Выводит на экран третью строку матрицы А из файла fl.dat.

Решение

Нумерация элементов двумерного массива в файле идет слева направо, сверху вниз. Учитывая то, что нумерация начинается с нуля, элемент матрицы А[2,1] будет являться шестым компонентом в файле.

Программа

program pl; {$APPTYPE CONSOLE} uses SysUtils; var а:array [1..3,1..3] of integer; f:file of integer; i,j:integer; begin program pl; {$APPTYPE CONSOLE} uses SysUtils; var а:array [1..3,1..3] of integer; f:file of integer; i,j:integer; begin for j:= 1 to 3 do read(a[i,j]); readln end; for i:= 1 to 3 do for j:= 1 to 3 do write(f,a[i,j]); seek(f,6); writeln('Result:'); for j:= 1 to 3 do begin read(f,a[3, j]); write(a[3,j]:2); end; CloseFile(f); readln end.

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

В процедурах Reset и Rewrite для нетипизированных файлов указывается дополнительный параметр RecSize, чтобы задать размер записи, использующейся при передаче файла:

procedure Reset (var F: File [; RecSize: Word]);

procedure Rewrite (var F: File [; RecSize: Word]);

Длина записи RecSize измеряется в байтах и может быть задана произвольным целым числом – от 1 байта до 2 Мбайт. Если параметр не указан, то принимаемая по умолчанию длина записи равна 128 байтам.

Вместо процедур Read и Write используются процедуры, позволяющие пересылать данные с высокой скоростью:

procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);

procedure BlockWrite(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);

где F – имя файловой переменной, связанной с нетипизированным файлом, Buf – переменная, в которую помещаются данные при чтении из файла и из которой извлекаются данные при записи в файл. Переменная Buf должна иметь длину, равную Count * RecSize байт. Count – параметр целого типа, указывающий, какое количество записей необходимо прочитать или записать за одно обращение к файлу. Необязательный параметр AmtTransferred содержит количество реально прочитанных или записанных записей.

Для файлов всех типов могут использоваться процедуры и функции:

procedure ChDir(S: string);

изменяет текущую папку на папку, указанную в символьной строке S.

function DeleteFile(const FileName: string): Boolean;

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

procedure GetDir(D: Byte; var S: string);

возвращает текущую папку в папку, определенную параметром А, на диске, определенном параметром D:

Значение параметра D Папка
  текущая папка
  А

procedure MkDir(S: string);

создает новую папку, имя которой указано в символьной строке S.

procedure Rename(var F; Newname:string);

переименовывает файл, связанный с файловой переменной F. Новое имя файла задается в переменной Newname.

procedure RmDir(S: string);

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

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

На странице Dialogs Палитры компонентов содержатся следующие компоненты, реализующие стандартные диалоги для работы с файлами:

· OреnDiаlоg – выбор открываемого файла;

· SaveDialog – выбор сохраняемого файла;

· OреnРiсtureDialog – выбор открываемого графического файла;

· SavePictureDialog – выбор сохраняемого графического файла;

· PrintDialog – вывод на принтер;

Основные свойства компонентов OpenDialog и SaveDialog:

· FileName типа String – указывает имя и полный путь файла, выбранного в диалоге. Имя файла отображается в строке редактирования с названием имя файла и является результатом диалога;

· Title типа String – задает заголовок окна. Если свойство Title не установлено, то по умолчанию используется заголовок Open для OpenDialog и заголовок Save – для SaveDialog;

· InitialDir типа String – определяет каталог, содержимое которого отображается при вызове окна диалога. Если каталог не задан, то отображается содержимое текущего каталога;

· DefaultExt типа String – задает расширение, автоматически подставляемое к имени файла, если пользователем расширение имени не указано;

· Options типа TOpenOptions – настройка параметров, управляющих внешним видом и функциональными возможностями диалога;

· Filter типа String – задает маски имен файлов, отображаемых в раскрывающемся списке под названием Files of type. В окне диалога видны имена файлов, которые совпадают с указанной маской. По умолчанию значением Filter является пустая строка, что соответствует отображению имен файлов всех типов;

· FilterIndex типа Integer – указывает, какая из масок фильтра отображается в списке. По умолчанию свойство FilterIndex имеет значение 1 и используется первая маска.

Фильтр – это последовательность значений, разделенных знаком |. Каждое значение состоит из описания и маски, также разделенных знаком |. Описание представляет собой обычный текст, поясняющий пользователю данную маску. Маска является шаблоном отображаемых файлов и состоит из имени и расширения. Если для одного описания приводится несколько масок, то они разделяются знаком;. Фильтр обычно формируется при проектировании приложения. Редактор фильтра (Filter Editor) вызывается через свойство Filter Инспектора объектов.

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

OpenDialog1.Filter:='Текстовые файлы| *.txt;*.doс|Все файлы| *.*';

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

OpenDialog1.Filter:= 'Текстовые файлы *.txt;*.doc|*.txt;*.doc' + '|Все файлы *.*|*.*';

Для вызова любого стандартного диалога используется метод Execute тип Boolean. При закрытии диалога кнопкой Open или Save (Открыть или Сохранить) функция Execute возвращает значение True, а при отмене диалога – значение False. После закрытия стандартного диалога он через свои свойства возвращает значения, выбранные или установленные в процессе диалога.

Пример использования стандартного диалога OpenDialog:

procedure TForm1.Button2Click(Sender: TObject); {нажатие на кнопку Button2}

begin

if OpenDialog1.Execute then {при отмене диалога открытие файла не происходит}

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

end;

Пример сохранения графического образа в файл:

На форме Form1 расположено меню с двумя пунктами Save и SaveAs, компонент SaveDialog и компонент Image1 для хранения графического образа. Если вызывается пункт Save, то проверяется, был ли уже создан файл для данного графического образа. Если был создан, то образ сохраняется. Если файл не был создан, вызывается метод SaveAs, который открывает окно SaveDialog1 и запрашивает имя файла для графического образа, после этого управление передается методу Save.

var Form1: TForm1;

CurrentFile:String;

implementation

{$R *.DFM}

procedure TForm1.Save1Click (Sender: TObject)

begin

if CurrentFile <> ' ' then

Image1.Picture.SaveToFile(CurrentFile) {файл уже существует}

else SaveAs1Click(Sender);{иначе нужно ввести имя файла}

end;

ргосеdurе ТFоrm1.SaveAs1Click(Sender: TObject);

begin

if SaveDialog1.Execute then { Получить имя файла }

begin

СurrentFile:= SaveDialog1.FileName;

{сохранить файл с именем, заданным пользователем}

Save1Click(Sender); {вызов метода сохранения файла}

end;

еnd;

Компоненты OpenPictureDialog и SavePictureDialog вызывают стандартные диалоги открытия и сохранения графических файлов. Эти стандартные диалоги отличаются от OpenDialog и SaveDialog видом окон и установленными значениями свойства Filter.

 

Задание

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

 

Пример

Найти максимальный элемент матрицы.

Решение

Ввод/вывод элементов матрицы в файл осуществляется поэлементно для каждой строки. Для отображения элементов матрицы использован компонент StringGrid. Поиск максимального элемента матрицы осуществляется по алгоритму, показанному на рис.8.1. Внешний вид спроектированной формы показан на рис.8.2.


 

 
 

Свойства компонентов, размещенных на форме:

 

Object Form1: TForm1 Left = 239 Top = 107 Width = 456 Height = 378 Caption = ’Лабораторная работа' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 16 Top = 16 Width = 48 Height = 13 Caption = 'Столбцов' object Label2: TLabel Left = 24 Top = 48 Width = 30 Height = 13 Caption = 'Строк' object Label3: TLabel Left = 9 Top = 99 Width = 171 Height = 13 Caption = 'Максимальный элемент таблицы' object X_StringGrid: TStringGrid Tag = 1 Left = 8 Top = 136 Width = 433 Height = 209 ColCount = 8 DefaultColWidth = 50 DefaultRowHeight = 23 FixedCols = 0 RowCount = 8 FixedRows = 0 Options = [goVertLine, goHorzLine, goDrawFocusSelected, goEditing, goTabs, goAlwaysShowEditor] ScrollBars = ssNone TabOrder = 0 object X_Button: TButton Left = 248 Top = 16 Width = 73 Height = 33 Caption = 'Открыть' TabOrder = 1 OnClick = X_ButtonClick object Col_Edit: TEdit Left = 80 Top = 8 Width = 57 Height = 21 TabOrder = 2 Text = '8' OnExit = Col_EditExit object Row_Edit: TEdit Left = 80 Top = 40 Width = 57 Height = 21 TabOrder = 3 Text = '8' OnExit = Row_EditExit object Button1: TButton Left = 152 Top = 16 Width = 75 Height = 33 Caption = 'Сохранить' TabOrder = 4 OnClick = Button1Click object Button2: TButton Left = 336 Top = 16 Width = 73 Height = 33 Caption = 'Выход' TabOrder = 5 OnClick = Button2Click object Max_Edit: TEdit Left = 192 Top = 96 Width = 121 Height = 21 TabOrder = 6 Text = '0'
object Button3: Tbutton Left = 344 Top = 96 Width = 89 Height = 25 Caption = 'Найти' TabOrder = 7 OnClick = Button3Click object X_OpenDialog: TOpenDialog Filter = '*.dat|*.dat' Left = 272 Top = 56 object X_SaveDialog: TSaveDialog Filter = '*.dat|*.dat' Left = 184 Top = 56

Текст программы

unit Lab_file;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

X_StringGrid: TStringGrid;

X_Button: TButton;

X_OpenDialog: TOpenDialog;

Col_Edit: TEdit;

Label1: TLabel;

Label2: TLabel;

Row_Edit: TEdit;

Button1: TButton;

X_SaveDialog: TSaveDialog;

Button2: TButton;

Max_Edit: TEdit;

Label3: TLabel;

Button3: TButton;

procedure X_ButtonClick(Sender: TObject);

procedure Row_EditExit(Sender: TObject);

procedure Col_EditExit(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

function Max:real;

public

{ Public declarations }

end;

 

var Form1: TForm1;

 

implementation

{$R *.DFM}

 

function TForm1.Max:real; // Процедура поиска максимального элемента массива

var i,j,im,jm,p:integer;

m,n:real;

begin

im:=0;jm:=0;

with X_StringGrid do

begin

Val(Cells[im,jm],m,i);

for i:=0 to ColCount do

begin

for j:=0 to RowCount do

begin

Val(Cells[i,j],n,p);

if m<=n then

begin

m:=n;

im:=i;

jm:=j;

end;

end;

end;

end;

Max:=m;

end;

 

procedure TForm1.Row_EditExit(Sender: TObject); //процедура изменения высоты строк

begin

with X_StringGrid do

begin

RowCount:=StrToInt(Row_Edit.Text);

DefaultRowHeight:=round(Height/(StrToInt(Row_Edit.Text)+1));

end;

end;

 

procedure TForm1.Col_EditExit(Sender: TObject); //процедура изменения ширины столбцов

begin

with X_StringGrid do

begin

ColCount:=StrToInt(Col_Edit.Text);

DefaultColWidth:=round(Width/(StrToInt(Col_Edit.Text)+1));

end;

end;

 

procedure TForm1.Button1Click(Sender: TObject); // процедура записи массива в файл

var Fl:TextFile;

i,j:integer;

begin

if X_SaveDialog.Execute then

begin

AssignFile(fl,X_SaveDialog.FileName+'.dat');

Rewrite(fl);

with X_StringGrid do

for i:=0 to RowCount do

begin

for j:=0 to ColCount do

write(fl,Cells[j,i]+' ');

writeln(fl);

end;

CloseFile(fl);

end;

end;

 

procedure TForm1.X_ButtonClick(Sender: TObject); // процедура чтения массива из файла

var Fl:TextFile;

i,j:integer;

s:char;

a:real;

begin

if X_OpenDialog.Execute then

begin

AssignFile(fl,X_OpenDialog.FileName);

Reset(fl);

j:=0;

while not(SeekEof(fl)) do

begin

i:=0;

while not(SeekEoln(fl)) do

begin

read(fl,a);

X_StringGrid.Cells[i,j]:=FloatToStr(a);

i:=i+1;

end;

readln(fl);

j:=j+1;

end;

CloseFile(fl);

Col_Edit.Text:=IntToStr(i);

Row_Edit.Text:=IntToStr(j);

Row_EditExit(Sender);

Col_EditExit(Sender);

end;

end;

 

procedure TForm1.Button2Click(Sender: TObject); // процедура выхода из программы

begin

Application.Terminate;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

// процедура на нажатие кнопки «Найти»

begin

Max_Edit.Text:=FloatToStrF(Max,ffGeneral,4,2);

end;

 

end.

Контрольные вопросы

1. Что такое файл и в каких случаях его удобно использовать?

2. Какие типы файлов и как они описываются в Object Pascal?

3. Описать способ ввода/вывода файловых данных?

4. Какие диалоги используются при работе с файлами?

5. Описать разработанную программу.

 

Лабораторная работа №9

ПОСТРОЕНИЕ И ПЕЧАТЬ ДИАГРАММ

 

Цель работы:

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

 

Общие сведения

Для построения диаграмм предназначен компонент TChart.

Компонент TChart представляет собой библиотеку процедур построения диаграмм, написанных с использованием VCL. Компонент TChart выведен из класса TPanel и поэтому наследует его свойства.

Для добавления диаграммы к приложению необходимо разместить компонент TChart на форму и при необходимости изменить размеры диаграммы. Диаграмму также можно добавить с помощью команды File | New (Файл | Создать) и пиктограммы TeeChart Wizard, расположенной во вкладке Business (Бизнес) диалогового окна New Application (Создать приложение).

Редактор диаграмм и рядов предоставляет доступ к большинству свойств диаграммы и ряда и имеет две основные вкладки: Chart (Диаграмма), которая предоставляет доступ к свойствам диаграмм и упрощает добавление ряда к диаграмме, и Series (Ряд), которая позволяет изменять свойства ряда.

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

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

for i:= 0 to TotalPointCount do

Series1.Add(SomeData[i], Strin [i+1], clTeeColor);

Первый аргумент метода Add() содержит координату Y добавляемого значения (в данном случае элемент массива); второй – подпись для соответствующей точки диаграммы, а третий – ее цвет (константа clTeeColor присваивает данному значению цвет, используемый по умолчанию).

Метод АddXY () используется для добавления данных в график. Форма этого метода совпадает с формой метода Аdd() за исключением дополнительного аргумента, который представляет собой массив значений X.

Пример проектирования диаграммы:

На форме Form1 размещены компоненты Chart и BitBtn1. Для Chart установлен ряд Series1.

procedure TForm1.BitBtn1Click(Sender: TObject);

const TotalPointCount=10;

XData:array [1..TotalPointCount] of real = (0,1,2,3,4,5,6,7,8,9);

YData:array [1..TotalPointCount] of real = (0,1,2,3,4,5,6,7,8,9);

Strin:array [1..TotalPointCount] of char = ('0','1','2','3','4','5','6','7','8','9');

var i:integer;

begin

for i:= 1 to TotalPointCount do

Series1.AddXY(XData[i], YData[i], Strin [i+1], clTeeColor);

end;

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

В компоненте TChart предусмотрено несколько собственных методов печати, которые генерируют диаграммы гораздо более высокого качества, чем метод печати формы. Самым простым из них является метод Print.

Chart1.Print;

При выполнении этой строки программы диаграмма будет напечатана с использованием полных значений ширины и высоты печатной страницы при разрешении экрана, действующего по умолчанию. Однако печать при таком разрешении экрана часто не подходит для приложений, включающих диаграммы. Поэтому нужно изменить это разрешение, а следовательно, и качество печатаемых диаграмм. Компонент TChart имеет динамическое свойство PrintResolution, которое можно установить равным целому значению в диапазоне – 100 ¸ 0, где 100 означает, что диаграмма печатается при максимальном разрешении принтера, а 0 – при установленном разрешении экрана.

Chart1.PrintResolution = PrintResScroll.Position;

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

При проектировании диаграммы можно заранее определить принтер и осуществить его настройки и предварительный просмотр печатываемой диаграммы. Для этого в окне Edition Chart необходимо зайти на вкладку General и выбрать Print Preview.

 

Задание

 

Построить и распечатать график функции

f(x) Хнач Хкон f (x) Хнач Хкон f (x) Хнач Хкон f (x) Хнач Хкон
  cos(x)       (2-x)/2 -3     2-x2 -2     x-cos(x)    

Поделиться с друзьями:

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.352 с.