Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Belaya_metodichka_po_EVM

.pdf
Скачиваний:
76
Добавлен:
17.05.2015
Размер:
1.14 Mб
Скачать

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

1.AssignFile(var f : textfile; Name:String) ,где Name - правильно по-

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

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

2.Reset(var f:text) - открывает файл для чтения.

3.Rewrite(var f:text) - открывает файл для записи.

4.Append(var f:text) - открывает файл для записи в конец файла. Процедуры reset и append выполняются только для существующих файлов, процедура rewrite - для любых файлов, но если файл существует, он будет уничтожен и создан заново. Чтение из файла и запись в файл выполняются процедурами read[ln] и write[ln], но перед списком ввода или вывода задается файловая переменная:

5.Read[ln](var f:text; список ввода).

6.Write[ln](var f:text;список вывода).

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

7.Eoln(var f:text):boolean - возвращает true, если при чтении достигнут конец строки.

8.Eof(var f:text):boolean - возвращает true, если при чтении достигнут конец файла.

9.Seekeoln(var f:text):boolean - возвращает true, если в строке боль-

ше нет ничего, кроме пробелов.

10.Seekeof(var f:text):boolean - возвращает true, если в файле нет больше ничего, кроме пробелов.

Функция eoln пригодится вам, если вы читаете из текстового файла символы; функция eof - если вы читаете символы или строки, а функции seekeoln

иseekeof необходимы при вводе чисел из текстового файла.

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

Форма будет иметь вид:

41

Рис. 8

Разместим на форме и изменим некоторые свойства следующих компонентов:

Компонент

Свойство

Значение

Form

 

Name

frmSimpleEditor

 

 

Caption

Простой редактор

OpenDialog

(компонент

Name

dlgOpenFile

закладки Dialogs)

 

 

SaveDialog

( компонент

Name

dlgSaveFile

закладки Dialogs)

 

 

Label

 

Name

lblComment

 

 

Caption

Введите текст и затем выберите

 

 

 

File->Save

Memo

 

Name

memOutput

 

 

Lines

<Пустая строка>

 

 

ScrollBars

ssBoth

MainMenu

 

Name

MMnuEditor

 

 

Items

<см ниже>

При работе с компонентом MainMenu (MMnuEditor) необходимо активизировать свойство Items; создать пункт главного меню File, изменив для него свойства Name=muiFile и Caption=File, затем в расположенных ниже контурных окошках поочередно ввести подпункты главного меню:

Name Caption pmu1New New pmu1Open Open pmu1Line1 - pmu1Save Save pmu1Line2 - pmu1Exit Exit

42

Далее создать пункт главного меню Help, изменив для него свойства Name= muiHelp и Caption= Help. У него будет лишь один подпункт About...

(Name= pmu2About и Caption= About... )

Создадим обработчики событий по выбору определенного пункта меню. procedure TfrmSimpleEditor.pmu1OpenClick(Sender: TObject);

var

f: TextFile; fName, buf: String;

begin lblComment.Visible:=False; MemOutPut.Clear; MemOutPut.Visible:=True;

if not dlgOpenFile.Execute // если выбор файла в диалоговом

// окне не произведен

then

exit;// завершает выполнение процедуры и передает // управление в точку вызова

fName := dlgOpenFile.FileName; // имя файла frmSimpleEditor.Caption := fName; AssignFile(f, fName); // инициализация файла

try // try...except служит для обработки исключений

Reset(f); except

on EInOutError do // в случае ошибки ввода-вывода begin

ShowMessage('Ошибка доступа к файлу '+ fName);

exit;

end;

end;

while not EOF(f) do begin

readln(f, buf); MemOutPut.Lines.Add(buf); end;

CloseFile(f);

end;

43

procedure TfrmSimpleEditor.pmu1SaveClick(Sender: TObject); var

f: TextFile; fName: String; i: integer; begin

lblComment.Visible:=False;

if not dlgSaveFile.Execute // если выбор файла в диалоговом // окне не произведен

then exit;

fName := dlgSaveFile.FileName; AssignFile(f, fName);

Rewrite(f);

for i:=0 to memOutput.Lines.Count do writeln(f, memOutput.Lines[i]);

CloseFile(f);

MessageDlg('Данные ЗАПИСАНЫ в файл ',mtInformation,[mbOk],0); end;

procedure TfrmSimpleEditor.pmu2AboutClick(Sender: TObject); begin

lblComment.Visible:=False;

Application.MessageBox('Это простой редактор, версия 0.01', 'О программе...', MB_OK);

end;

procedure TfrmSimpleEditor.pmu1NewClick(Sender: TObject); begin

MemOutPut.Visible:=True;

lblComment.Visible:=True;

end;

procedure TfrmSimpleEditor.pmu1ExitClick(Sender: TObject); begin

Halt; // завершение работы приложения

44

end;

Лабораторнаяработа№11 Работастекстовымифайлами

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

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

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

3.Дан файл, содержащий текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то сколько раз.

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

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

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

7.Дан файл, содержащий произвольный текст. Проверить, правильно ли в нем расставлены круглые скобки (т. е. находится ли правее каждой открывающейся скобки закрывающаяся и левее закрывающейся — открывающаяся).

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

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

10.Дан файл, содержащий текст на русском языке и некоторые два слова. Определить, сколько раз они встречаются в тексте и сколько из них — непосредственно друг за другом.

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

12.Дан файл, содержащий текст и арифметические выражения вида a b , где - один из знаков +, -, *, /. Выписать все арифметиче-

ские выражения и вычислить их значения.

13.Даны файл, содержащий текст на русском языке, и некоторые буквы. Найти слово, содержащее наибольшее количество указанных букв.

14.Даны файл, содержащий текст на русском языке, и некоторая буква. Подсчитать, сколько слов начинается с указанной буквы.

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

16.Дан файл, содержащий текст, включающий русские и английские слова. Подсчитать, каких букв в тексте больше — русских или латинских.

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

18.Дан файл, содержащий зашифрованный русский текст. Каждая буква заменяется на следующую за ней (буква я заменяется на а). Получить в новом файле расшифровку данного текста.

19.Даны два текстовых файла f1 и f2 . Файл f1 содержит произволь-

ный текст. Слова в тексте разделены пробелами и знаками препинания. Файл f2 содержит не более 30 слов, которые разделены запятыми. Эти слова образуют пары: каждое второе является синонимом первого. Заменить в файле f1 те слова, которые можно, их синонимами. Результат поместить в новый файл.

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

21.Даны текстовый файл и некоторое слово. Напечатать те строки файла, которые содержат данное слово.

22.Дан текстовый файл. Напечатать в алфавитном порядке все слова из данного файла, имеющие заданную длину n .

23.Текстовый файл содержит запись многочлена некоторой степени с одной переменной x , коэффициенты многочлена — целые. Напри-

мер, 5x^ 4 3x^3 15x^2 4. Указать степень многочлена, его коэффициенты. Дописать в указанный файл таблицу значений этого многочлена на данном отрезке a,b .

45

46

24.Дан файл, содержащий текст на русском языке. Подсчитать количество слов, начинающихся и заканчивающихся на одну и ту же букву.

Записи

Задача. Разработать приложение, определяющую дату завтрашнего дня. Чтобы определить дату завтрашнего дня, надо знать не только дату сегодняшнего дня, но и число дней данного месяца (так как если это последний день месяца, то завтра будет первый день следующего), кроме того, надо знать, високосный год или нет (от этого зависит число дней февраля). Заметим, что если это не последний день месяца, то завтра будет тот же год, тот же месяц, а число увеличится на 1. Если это последний день месяца, то если это не декабрь, то завтра будет тот же год, но первое число следующего месяца; если это декабрь, то завтра наступит следующий год, первый месяц и первое число.

Форма будет иметь вид:

Рис.9

Фрагмент кода: {*************************************************************** **}

type year=1500..2000; month=1..12; day=1..31; data=Record

y: year; m: month; d: day; End; {data}

function Leap(yy: year): boolean; {функция, определяющая, високосный год

47

или нет}

begin {год называется високосным, если его номер делится на 4, но если это год столетия, то номер столетия не делится на 4, то есть не делится на 400}

Leap:=(yy mod 4=0) and (yy mod 400 <> 0); end; {Leap}

function Dmonth(mm: month; yy: year): day; {функция определения количе-

ства дней данного месяца в данном году} begin

case mm of

1,3,5,7,8,10,12: Dmonth:=31; 4,6,9,11: Dmonth:=30;

2: if Leap(yy) then Dmonth:=29 else Dmonth:=28;

end;

end; {Dmonth}

procedure Tomorrow(td: data; var nd: data); {процедура определения завтрашней даты}

begin {если это не последний день месяца} if td.d<>Dmonth(td.m, td.y)

then

with nd do begin

d:=td.d+1;

m:=td.m;

y:=td.y;

end

else {если это последний день месяца} if td.m=12

then {если это декабрь}

with nd do begin d:=1; m:=1; y:=td.y+1; end else {если это не декабрь}

with nd do begin d:=1; m:=td.m+1; y:=td.y; end; end; {Tomorrow}

procedure TForm1.BitBtn1Click(Sender: TObject); var

dat, next: data; begin

48

lblResult.Caption:=''; dat.d:=StrToInt(edt_Day.Text); dat.m:=StrToInt(edt_Month.Text); dat.y:=StrToInt(edt_Year.Text); Tomorrow(dat,next);

lblResult.Caption:='Завтра будет '+IntToStr(next.d)+'.'+ IntToStr(next.m)+'.'+IntToStr(next.y);

end;

{***************************************************************

**}

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

Записи

1.Распечатать список студентов, фамилии которых начинаются на указанную пользователем букву, с указанием даты их рождения.

2.Из данного списка спортсменов предоставить сведения о тех из них, кто занимается плаванием. Указать возраст, сколько лет они занимаются спортом.

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

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

5.Из ассортимента конфет, выпускаемых кондитерской фабрикой, выбрать те, стоимость которых находится в диапазоне, указанном пользователем (например, от 50 до 100р за 1 кг). Указать срок хранения.

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

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

8.Распечатать фамилии студентов группы, которые не получили ни одной тройки за последнюю сессию. Каков их средний балл?

9.Распечатать фамилии детей данного детского сада, которые родились в определенном месяце; указать их возраст и группу.

49

10.Распечатать список тех учителей школы, которые преподают математику и информатику, указать стаж их работы и недельную нагрузку.

11.Распечатать анкетные данные студентов, участвовавших в олимпиаде по математике и набравших не менее 50%.

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

13.По данным сведениям об студентах группы определить среднюю массу юношей и средний рост девушек. Кто из студентов группы самый высокий?

14.Дан фрагмент результатов переписи населения. Напечатать фамилии, имена и подсчитать общее число жителей, родившихся после

1990 г.

15.До момента принема в ВУЗы по результатам ЕГЭ, при поступлении в институты лица, получившие оценку «неудовлетворительно» на первом экзамене, ко второму экзамену не допускались. Считая фамилии абитуриентов и их оценки после первого экзамена исходными данными, составить список абитуриентов, допущенных ко второму экзамену.

16.Составить программу назначения стипендии студентам по результатам сессии, используя следующие правила:

1)если все оценки 5, назначается повышенная стипендия;

2)если все оценки 4 и 5, назначается обычная стипендия;

3)если есть оценка 3, стипендия не назначается.

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

17.В таблице хранятся следующие данные об студенах: фамилия, имя, отчество, рост. Вычислить средний рост студентов, рост самого высокого и самого низкого студента. Сколько студентов могут заниматься в баскетбольной секции, если рост баскетболиста должен быть больше 170 см?

18.На аптечном складе хранятся лекарства. Сведения о лекарствах содержатся в специальной ведомости: наименование лекарственного препарата; количество; цена; дата производства; срок хранения (в месяцах). Выяснить, сколько стоит самый дорогой и самый дешевый препарат; сколько препаратов хранится на складе; какие пре-

50

параты имеют срок хранения более 3 месяцев; сколько стоят все препараты, хранящиеся на складе.

19.В столовой предлагается N комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый дешевый и самый дорогой обед? Сколько калорий включает в себя самое калорийное блюдо?

20.Торговый склад производит уценку хранящейся продукции. Если продукция хранится на складе дольше n месяцев, то она уценивается в 2 раза, а если срок хранения превысил m (m < n) месяцев, но не достиг n, то — в 1,5 раза. Ведомость уценки товаров должна содержать следующую информацию: наименование товара, количество товара, цена товара до уценки, срок хранения товара, цена товара после уценки, общая стоимость товара до уценки, общая стоимость товаров после уценки. Выяснить максимальный и минимальный сроки хранения товаров на складе; максимальную и минимальную цену товаров до уценки и после уценки.

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

22.N студентов проходили тестирование, выполнив М тестов по како- му-либо предмету. Сколько очков набрал каждый студент по всем темам? Вычислить средний балл, полученный студентами, и разницу между лучшим результатом и средним баллом.

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

24.Описать переменную круг, в которой содержатся все данные для построения круга в декартовой системе координат.

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

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

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

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

27.Задан массив квадратных трехчленов, где каждый трехчлен имеет комплексные коэффициенты. Сформировать массив корней трех-

членов. Сформировать массив значений трехчленов в точке

хс di .

28.Дан массив записей, содержащих дату (число, месяц, год) и время (час, минута, секунда). Упорядочить этот массив в порядке «возрастания», т.е. от более ранних значений к более поздним.

29.Описать переменную расписание, содержащую день недели, количество пар в этот день, время начала и конца пары, название предмета, фамилию преподавателя. Вывести полную информацию о занятиях, относящихся к предметной области «Математический анализ».

30.В библиотеке имеются книги, газеты, журналы. Для каждого печатного издания указать название, год выпуска (для книги) или дату выпуска (для газет и журналов), автора (для книги) или состав редколлегии (для газет и журналов), объем. Вывести информацию об изданиях, вышедших в заданном году.

51

52

Списоклитературы:

Список литературы

48

1.Коробчинская О.Г., Файрузов М.Э. Программирование в Delphi. Разработка консольных приложений (учебное пособие). - РИО БашГУ, 2008. - 108с.

2.Коробчинская О.Г., Файрузов М.Э., Коробчинский А.В., Манапова А.Р. Программирование в Delphi. Разработка приложений Windows (учебное пособие). - РИО БашГУ, 2010. - 98с.

3.Культин Н.Б. Delphi в задачах и примерах. - СПб.: БХВПетербург, 2004. - 288с.:ил.

4.Митчелл К. Керман Программирование и отладка в Delphi. Учебный курс. : Пер. с англ. – М. : Издательский дом «Вильямс», 2002, 672с.

5.Могилев А.В., Пак Н.И., Хеннер Е.К. Практикум по информатике: Учеб. пособие для студ. высш. учеб. заведений. - М.: Издательский центр «Академия», 2005. - 608с.

6.Семакин И.Г., Шестаков А.П. Основы программирования. Учебник. - М.: Мастерство, 2002. - 432с.

Оглавление

Лабораторная работа №1. Программы линейной структуры

4

Лабораторная работа №2. Ветвления

6

Лабораторная работа №3. Простейшие циклы

9

Лабораторная работа №4. Вычисление суммы ряда

12

Лабораторная работа №5. Целочисленная арифметика

15

Лабораторная работа №6. Одномерные массивы

18

Лабораторная работа №7. Преобразование и построение массивов

22

Лабораторная работа №8. Операции с элементами массивов

24

Лабораторная работа №9. Обработка последовательностей символов29

Лабораторная работа №10. Использование подпрограмм

33

Лабораторная работа №11. Работа с текстовыми файлами

40

Лабораторная работа №12. Записи

44

53

54

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]