Правила хорошего стиля программирования

Второй семестр

Вторая часть лабораторного практикума по программированию на языках высокого уровня выполняется с среде программирования Borland C++ Builder, использующей язык программирования C++.

Операционная система WINDOWS компании MICROSOFT представляет простой и удобный графический интерфейс пользователя ( Graphical User Interface – GUI), поэтому и приложения, работающие под управлением этой системы, также должны иметь удобный графический интерфейс. Для облегчения создания такого интерфейса C++ Builder предоставляет программисту палитру компонентов пользовательского интерфейса, чрезвычайно упрощающих разработку приложений и основанную на средствах объектно-ориентированного программирования. Таким образом в C++ Builder реализуется концепция RAD ( Rapid Application Development)  быстрой разработки приложений.

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

Form – форма, Label – надпись, Edit – поле ввода, Memo – область просмотра и редактирования многострочного текста, Button – кнопка, Image – изображение, CheckBox – флажок, RadioButton – переключатель, ListBox – список, ComboBox – поле со списком, MainMenu – главное меню, PopupMenu – всплывающее меню, StringGrid – таблица, Timer - таймер и другие.

Первая задача задания -простейшая обработка матриц целых или вещественных чисел с реализаций основных матричных операций. Основным компонентом C++ Builder для представления матриц в виде двумерной таблицы является компонент StringGrid.

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

Третья задача - это задача работу с датами, представляемыми комплексом из трех чисел, числа, месяца и года. При решении этих задач рекомендуется использовать набор библиотечных подпрограмм, предназначенных для работы с датами, такие как DateTimePicker, Calendar, MonthCalendar.

Четвертая задача – преобразование степенных многочленов. Здесь некоторый многочлен вида

задается набором коэффициентов {ai}, где i=0..n. Таким образом, задание многочлена есть определение его степени n и набора коэффициентов при каждой степени многочлена. Найти многочлен также означает определить описывающий его набор коэффициентов. Табулировать функцию, вычислять значение многочлена здесь не нужно. Рекомендуется данную задачу решить с использованием связных линейных списков  или компонента для хранения списков ListBox.

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

Варианты заданий

Необходимо решить 1,2,3,5, задачи в консоле. А по 4 задаче: а)написать курсовой проект, б) написать программу с использованием графического интерфейса.

Второй семестр

 

Задание № 2-1

1) Даны матрицы А и В размера M×N и K×L соответственно. Найти произведение матриц.

2) Дана действительная матрица А порядка М*К. Получить матрицу В, элементы которой Вij равны сумме элементов матрицы А, расположенных в области определяемой индексами i,j по рисунку.

3) Дана дата (число , месяц, год). Получить дату, соответствующую следующе-му дню.

4) Дан многочлен Р(х) степени N, действительные числа s и t. Получить многочлен (sх2+t)Р’(х), где Р’(х) – производная многочлена Р(х).

5) Чтобы зашифровать текст, записанный с помощью букв русского алфавита и знаков препинания, его переписывают, заменив каждую букву следующей за ней буквой через N позиций по алфавиту. После буквы Я должна следовать буква А и далее. Например, при N=3 А заменяется на Д, Ю заменяется на В. Написать программу для шифровки и расшифровки текста, хранящегося в текстовом файле. Расширения шифрованного и нешифрованного файлов должны отличаться.

6) Имеется N предметов, веса которых равны W1, W2, . . . , WN. Разделить эти предметы на две группы так, чтобы общие веса групп были максимально близки.

 

Задание № 2-2

1) Дана квадратная матрица А порядка N. Получить матрицу А2.

2) Дана действительная матрица А порядка М*К. Получить матрицу В, элементы которой Вij равны сумме элементов матрицы А, расположенных в области определяемой индексами i,j по рисунку.

3) Даны две даты (число, месяц, год). Найти количество дней, прошедших между этими двумя датами.

4) Дан многочлен Р(х) степени N, действительные числа s и t. Получить многочлен (sх+t)Р(х)+Р’(х), где Р’(х) – производная многочлена Р(х).

5) Дан замкнутый многоугольник координатами своих вершин. Определить, является ли этот многоугольник выпуклым.

6) Дано натуральное число М. Получить М расстановок 8 ферзей на шахматной доске, при которых ни один из ферзей не угрожает другому. Если М больше, чем общее число расстановок, то следует получить все возможные расстановки.

 

Задание № 2-3

1) Даны квадратные матрицы А и В порядка N. Получить матрицу АВ-ВА.

2) Дана действительная матрица А порядка М*К. Получить матрицу В, элементы которой Вij равны сумме элементов матрицы А, расположенных в области определяемой индексами i,j по рисунку.

3) Даны две даты (число, месяц, год). Найти количество полных лет, прошедших между этими двумя датами.

4) Дан многочлен Р(х) степени N, действительные числа s и t. Получить многочлен

5) «Исправление ошибок». Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательности нулей и единиц (или точек и тире). Из-за помех возможен ошибочный прием некоторых сигналов: нуль может быть воспринят как единица и наоборот. Для повышения надежности передачи сообщений применяют мажорирование, когда каждый сигнал троируется (например 101 преобразуется в 111000111). При расшифровке три последовательные цифры заменяются той цифрой, которая среди этой тройки встречается по крайней мере дважды. Написать программу шифровки и расшифровки мажорированных сообщений.

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

 

Задание № 2-4

1) Даны квадратные матрицы А, В и С порядка N. Получить матрицу (А+В)С.

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

3) Дана дата (число, месяц, год). Найти номер этого дня с начала года.

4) Дан многочлен Р(х) степени N, действительные числа s и t. Получить многочлен (sх+t)Р(х).

5) Шифровка текста с помощью решетки заключается в следующем. Решетка, т.е. квадрат из клетчатой бумаги размером 10х10 клеток, некоторые клетки в котором вырезаны, совмещается с целым квадратом 10х10 клеток, и через прорези на бумагу наносятся первые буквы текста. Затем решетка поворачивается на 90 градусов, и через прорези записываются следующие буквы. Это повторяется еще дважды. Таким образом на бумагу наносится 100 букв. Ключом является матрица [Aij] из нулей и единиц (нуль соответствует прорези), в которой один из элементов Aij, А10-i+1,j, A i,10-j+1, A 10-i+1,10-j+1 в точности равен нулю. Написать программу шифровки и расшифровки текста из 100 букв по заданной матрице-ключу.

6) Найти такую расстановку двенадцати коней на шахматной доске, при которой каждое поле будет находиться под ударом одного из них.

 

Задание № 2-5

1) Даны квадратная матрица порядка М, натуральное число N. Получить матрицу Е+А+А2+…+АN, где Е – единичная матрица порядка М.

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

3) «Вечный календарь». Дана дата (число, месяц, год). Определить день недели, на который падает указанная дата.

4) Дан многочлен Р(х) степени N, действительное число А. Получить его производную Р’(х).

5) В процессе лечебного голодания вес пациента за К дней снизился с А до       В кг. Было установлено, что ежедневные потери веса пропорциональны весу тела. Вычислить, чему был равен вес пациента в некоторый день голодания. Составить таблицу весов.

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

 

Задание № 2-6

1) Даны квадратная матрица А порядка М, натуральное число N, действительные числа Р0, Р1, …, РN. Получить матрицу РNAN+PN-1AN-1 +…+P1A+P0E, где Е – единичная матрица порядка М.

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

3) Даны дата (число, месяц, год) по юлианскому календарю. Получить эту дату по современному календарю.

4) Дан многочлен Р(х) степени N, действительное число А. Получить многочлен (х2+2Ах+3)Р(х).

5) Дан плоский многоугольник координатами своих вершин. Определить площадь этого многоугольника.

6) В данной последовательности действительных чисел длины N выбрать возрастающую подпоследовательность наибольшей длины.

 

Задание № 2-7

1) Дана матрица А размера M×N. Получить транспонированную матрицу А*.

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

3) Вычислить количество пятниц, приходящихся на 13 число заданного столетия.

4) Дан многочлен Р(х) степени N, действительное число А. Получить многочлен (х22)Р(х).

5) «Считалка». Даны натуральные числа M, N. Предполагается, что N человек встают в круг и получают номера от 1 до N, считая против часовой стрелки. Затем, начиная с первого, отсчитывается М-ый человек, который выходит из круга. Далее, начиная со следующего, снова отсчитывается М-ый человек до тех пор, пока не останется один. Определить его номер.

6) Дана последовательность символов, являющаяся математическим выражением с использованием скобок. Определить, является ли это скобочное выражение правильным.

 

Задание № 2-8

1) Дана матрица А размером M×N. Получить матрицу АА*, где А* - транспонированная матрица А.

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

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

4) Дан многочлен Р(х) степени N, действительное число А. Получить многочлен (х-А)Р(х).

5) Чтобы зашифровать текст из 121 буквы, его можно записать в квадратную матрицу порядка 11 по строкам, а затем прочитать по спирали, начиная с центра. Составить программу, шифрующую и расшифровывающую данный текст.

6) Имеется N городов. Некоторые из них соединены дорогами известной длины. Вся система дорог задана квадратной матрицей порядка N, элемент которой равен длине дороги или отрицательному числу, если дороги нет. Для заданных двух городов найти кратчайший маршрут.

 

Задание № 2-9

1) Дана квадратная матрица А порядка М. Получить матрицу 0.5(А+А*), где А* - транспонированная матрица А.

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

3) В некоторой библиотеке последний четверг каждого месяца – санитарный день. Дан номер года. Получить даты всех санитарных дней этого года.

4) Дан многочлен Р(х) степени N. Получить многочлен Р(х+1)-Р(х).

5) Выяснить , можно ли прямоугольник со сторонами А и В уместить в прямоугольнике со сторонами С и Д. Взаимная параллельность сторон не обязательна.

6) Построить все правильные скобочные выражения длины 10, т.е. те, которые содержат по 5 левых и 5 правых скобок.

 

Задание № 2-10

1) Дана квадратная матрица А порядка М. Получить матрицу 0.5(А-А*), где А* - транспонированная матрица А.

2) Дана действительная квадратная матрица порядка 2N. Получить новую матрицу, переставляя ее блоки размера N*N так, как это показано на следующем рисунке:

3) Дана дата (число, месяц, год). Найти, сколько дней осталось до конца года.

4) Дан многочлен Р(х) степени N. Получить многочлен Р2(х).

5) Дан замкнутый многоугольник координатами своих вершин (выпуклость многоугольника необязательна). Найти окружность максимального диаметра, вписанную в этот многоугольник.

6) «Задача о рюкзаке». Имеется N различных предметов, известны масса и стоимость каждого предмета. Определить, какие предметы надо положить в рюкзак, чтобы общий вес не превышал заданной границы, а общая стоимость была максимальной.

 

 

Задание № 2-11

1) Следом квадратной матрицы называется сумма элементов, расположенных на главной диагонали. Даны квадратная матрица А, натуральное число N. Вычислить следы матриц А, А2, …, АN.

2) Дана действительная квадратная матрица порядка 2N. Получить новую матрицу, переставляя ее блоки размером N×N. так как это показано на следующем рисунке:

3) Дана дата и день недели дня рождения. Определить, на какой день недели придется N-летие.

4) Даны действительные числа А0, .. АN. Получить многочлен N+1 степени     (x-A0)(x-A1)…(x-AN).

5) Дан замкнутый многоугольник координатами своих вершин (выпуклость многоугольника необязательна). Найти окружность минимального диаметра, описанную вокруг этого многоугольника.

6) Преобразовать выражение , составленное из цифр и знаков арифметических операций (сложения, вычитания, умножения и деления), в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции. Например, 3+4 -> 34+ ; (5-4)+2 -> 54-2+; 2*(3+4)*5 -> 234+*5*.

 

Задание № 2-12

1) Правая треугольная матрица А порядка N задана в виде последовательности (N+1)N/2 чисел : сначала идет N элементов первой строки, затем N-1 элементов второй строки , начиная со второго, и т.д. (в последней N-ой строке только N-й элемент). Найти вектор АВ, где В - вектор с N элементами.

2) Дана действительная квадратная матрица порядка 2N. Получить новую матрицу, переставляя ее блоки размера N×N так, как это показано на следующем рисунке

3) Дана дата (день, месяц, год). Проверить корректность этой даты.

4) Дан многочлен Р(х) степени N. Получить многочлен Р2(х)-Р(х-1).

5) Дана ломаная линия координатами своих вершин. Найти все точки самопересечений этой ломаной линии.

6) Даны натуральные числа А1..АN, отражающие результаты наблюдения за муравейником. Вначале отловили и пометили 100 муравьев. Затем, в течение N дней повторяли следующее: отлавливали по 100 муравьев, подсчитывали число помеченных Аi, помечались непомеченные, и все отпускались. Подсчитать (приблизительно) общее количество муравьев в муравейнике.

Задание № 2-13

1) Правые треугольные матрицы А и В порядка N заданы в виде последовательностей (N+1)N/2 чисел : сначала идет N элементов первой строки, затем N-1 элементов второй строки , начиная со второго, и т.д. (в последней N-ой строке только N-й элемент). Найти матрицу АВ.

2) Даны действительные числа Ai, количество которых равно N2. Получить квадратную матрицу порядка N, элементами которой являются числа Ai, расположенные по схеме, представленной на следующем рисунке:

3) Составить программу, переводящую десятичные числа в двоичные и обратно.

4) Дан многочлен Р(х) степени N. Даны действительные числа А и В. Получить многочлен АР2(х)-В.

5) Дан параллелепипед и две точки, лежащие на его гранях. Найти ломаную линию наименьшей длины, соединяющую эти точки и проходящую через грани параллелепипеда.

6) В стенке цилиндрического ведра просверлено N маленьких отверстий на уровнях Hi .. HN. Ведро доверху заполнено водой. Найти время, за которое уровень воды в ведре опустится до нижнего отверстия. Скорость вытекания воды через отверстие, находящееся на глубине х, равна .

 

Задание № 2-14

1) Правые треугольные матрицы А и В порядка N заданы в виде последовательностей (N+1)N/2 чисел : сначала идет N элементов первой строки, затем N-1 элементов второй строки , начиная со второго, и т.д. (в последней N-ой строке только N-й элемент. Найти матрицу А(Е+В2), где Е – единичная матрица порядка N.

2) Даны действительные числа Ai, количество которых равно N2. Получить квадратную матрицу порядка N, элементами которой являются числа Ai, распо-ложенные по схеме, представленной на следующем рисунке:

3) Составить программу, переводящую десятичные числа в шестнадцатиричные и обратно.

4) Дан многочлен Р(х) степени N. Даны действительные числа А и В. Получить многочлен АхР2(х)+В.

5) Реакция организма на лекарство через N часов после инъекции выражается показателем RN, равным RN=ARN-1+0.4N, где R0=1, а А –положительное число, характеризующее данный препарат. Определить, через сколько часов наступит максимальная реакция на организм. После скольких часов реакция организма понизится ниже 50% начального уровня.

6) Заяц бежит вдоль заданной прямой с некоторой скоростью. Собака, находившаяся вначале на расстоянии L от зайца, бежит все время в направлении зайца со своей скоростью, большей заяьчей. Найти время, когда собака настигнет зайца. Построить «кривую погони».

 

 

Задание № 2-15

1) Даны квадратная матрица А порядка N и вектор В с N элементами. Получить вектор АВ.

2) Даны действительные числа Ai, количество которых равно N2. Получить квадратную матрицу порядка N, элементами которой являются числа Ai, расположенные по схеме, представленной на следующем рисунке:

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

4) Дан многочлен Р(х) степени N. Даны действительные числа А и В. Получить многочлен (Ах+В)Р(х).

5) В стаде, состоящем из животных одного пола и возраста, рост животных колеблется от K до L. Пусть M и N – данные числа (K<=N<=M<=L). Определить, каких животных в стаде больше: с ростом, близким к N, или с ростом, близким к M.

6) Прямоугольное поле размером А×В освещено N рядами ламп, по M ламп в каждом ряду, расположенных на высоте H от поверхности поля. Определить освещенность произвольной точки поля при заданной мощности ламп.

 

Задание № 2-16

1) Даны квадратная матрица А порядка N и вектор В с N элементами. Получить вектор А2В.

2) Даны действительные числа Ai, количество которых равно N2. Получить квадратную матрицу порядка N, элементами которой являются числа Ai, расположенные по схеме, представленной на следующем рисунке:

3) Составить программу , помогающую в изучении математического маятника. Маятник должен двигаться на экране, совершая гармонические колебания со случайным периодом. Играющий должен указать длину нити на которой подвешен маятник. Ошибка не должна превышать N %.

4) Дан многочлен Р(х) степени N. Даны действительные числа А и В. Получить многочлен АР(х-1)-ВР(х+1).

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

6) Найти такую расстановку пяти ферзей на шахматной доске, при которой каждое поле будет находиться под ударом одного из них.

 

Задание № 2-17

1) Даны квадратная матрица А порядка N и вектор В с N элементами. Получить вектор (А-Е)В, где Е - единичный вектор порядка N.

2) Дана действительная квадратная матрица порядка N. При помощи перестановок двух строк или двух столбцов добиться того, чтобы элемент с наибольшим по модулю значением располагался в левом верхнем углу.

3) Написать программу, играющую в «крестики-нолики».

4) Последовательность многочленов определяется следующим образом: Н0(х)=1, Н1(х)=х, …

НК(х)=хНК-1(х)-(К-1)НК-2(х). Получить многочлен НN(х).

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

6) Найти такую расстановку восьми слонов на шахматной доске, при которой каждое поле будет находиться под ударом одного из них.

 

Задание № 2-18

1) Даны квадратная матрица А порядка N и векторы В и С с N элементами. Получить вектор А(В+С).

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

3) Составить программу для обучения устному счету. На каждом шаге предлагаются числа и арифметические действия, которые следует выполнить над этими числами.

4) Последовательность многочленов определяется следующим образом: Н0(х)=1, Н1(х)=х, … ,НК(х)=хНК-1(х)-(К-1)НК-2(х). Даны действительные числа А0..АN. Получить многочлен А0Н0(х)+…+АNНN(х).

5) Медианой множества, состоящего из четного числа точек на плоскости, называется прямая, соединяющая любые две точки множества, по обе стороны от которой лежит равное количество точек.

Дано множество точек на плоскости. Найти медианы.

6) Получить последовательность цифр 0, 1, 2, в которой нет одинаковых смежных участков любой длины.

 

Задание № 2-19

1) Даны квадратная матрица А порядка N и вектор В с N элементами, которые вычисляются по формуле Вi=1/(i2+2). Получить вектор АВ.

2) Дана действительная квадратная матрица порядка N, все элементы которой различны. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.

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

4) Последовательность многочленов определяется следующим образом: Н0(х)=1, Н1(х)=х, … ,НК(х)=хНК-1(х)+(К+2)НК-2(х). Даны действительные числа А0..АN. Получить многочлен А0Н0(х)+…+АNНN(х).

5)  Даны N точек на плоскости (N>=4). Выяснить, найдутся ли среди этих точек такие, которые являются вершинами квадрата. Найти стороны этого квадрата.

6) Получить все перестановки элементов 1, .., N.

 

Задание № 2-20

1) Даны квадратные матрицы А и В порядка N. Получить матрицу А(В-Е)С, где Е – единичная матрица порядка N, а элемента матрицы С вычисляются по формуле

Сij=1/( i+j ).

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

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

4) Последовательность многочленов определяется следующим образом: Н0(х)=1, Н1(х)=х, … ,НК(х)=(х-К)НК-1(х)+(х+К)НК-2(х). Даны действительные числа А0..АN. Получить многочлен А0Н0(х)+…+АNНN(х).

5) Даны три точки на плоскости. Выяснить, являются ли они вершинами прямоугольника. Найти координаты четвертой вершины.

6) Получить все сочетания из N элементов по M в каждом. (М<=N).

Правила хорошего стиля программирования

Документация в исходном коде

1) Каждая программа должна начинаться с комментария, содержащего имя и фамилию программиста, назначение программы, номер версии и дату создания.

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

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

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

5) Имена переменных и подпрограмм должны быть информативными, т.е. такими, чтобы, глядя на них, другой программист мог догадаться о назначении переменной или подпрограммы. Плохо подобранное имя, дезориентирующее читателя, даже хуже, чем неинформативное имя, например X или A. Имена переменных должны состоять из букв нижнего регистра, кроме букв, с которых начинается второе или последующие слова, входящие в имя, например taxRate или numberOfCars. Имена подпрограмм должны начинаться с буквы верхнего регистра.

6) Имена объектов, свойств и методов должны начинаться с букв верхнего регистра.

7) Имя каждого компонента должно начинаться с префикса, состоящего из трех букв нижнего регистра и обозначающего тип компонента. Например, имя формы содержит префикс frm, поля ввода – edt, кнопки – btn и т.д. Буквы  после префикса описывают назначение или содержание компонента. Например, поле ввода edtLastName содержит фамилию.

8)   Для улучшения читаемости исходного текста программы рекомендуется писать не более одного оператора в строке, что вызвано особенностями восприятия текста человеком. Кроме того, это облегчает пошаговую отладку в символьных отладчиках.

9) Не следует опасаться того, что программа слишком вырастет в длину, так как реальные программы и без того настолько длинны, что несколько «лишних» страниц (или даже десятков страниц) не меняют общую ситуацию. Выигрыш же в понимаемости с избытком покрывает увеличение длины.

10) Два оператора в строке вполне допустимы, если второй подчинен первому, причем является единственным подчиненным. Использование двух и более операторов в строке не только допустимо, но и желательно, если это позволяет подчеркнуть некую систему в локальной последовательности операторов.

Правила разработки программ

1) У всех вещественных констант цифры должны быть как слева, так и справа от десятичной точки, например 0.15, а не .15.

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

3) Для преобразования вещественного значения в строку и обратно используйте процедуры Str() и Val(), а для целых значений в языке Object Pascal – функции StrToInt() и IntToStr() соответственно.

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

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

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

Пользовательский интерфейс

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

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

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

Защита от ошибок

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

2) Попытка разыменования указателя, ссылающегося на nil, вызывает ошибку. Следовательно, любой указатель, содержимое которого неизвестно, должен быть проверен до разыменования, например:

If (intPtr<>nil) then

begin

intPtr^:=5;

end;

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

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

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

6) Необходимо проверять результаты операций со свободной памятью, особенно результаты операции выделения памяти.

Отступы и блоки

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

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

Procedure TfrmIndentExample.DoIt(Sender:TObject);

Var

Code:integer;

myReal:real;

inner:integer;

outer:integer;

begin

val(edtNumber.Text, myReal, code);

if (code = 0) then begin

for outer := 1 to 20 do begin

    myReal := myReal + 1.0;

    if (myReal > 100.0) then begin

       for inner := 1 to 5 do begin

          myReal := (myReal / 2.0) + inner;

       end; {for}

    end

    else begin

       myReal := myReal + 5.5;

    end; {if}

end; {for}

end; {if}

end; {DoIt}

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

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

Циклы

1) В языках TURBO PASCAL и OBJECT PASCAL есть три оператора циклов: while, repeat и for. В некоторых ситуациях может быть использован только один из этих операторов, однако в большинстве случаев программист должен выбрать один из них. Каждый из этих циклов предназначен для специфических ситуаций, следовательно, существуют правила, определяющие предпочтительность их использования.

2) Циклы while и repeat называются недетерминированными, потому что количество их итераций зависит от результатов вычислений в теле цикла. В то же время цикл for является детерминированным – количество итераций должно быть определено до начала цикла. Везде, где это возможно, используйте детерминированный цикл for.

3) При выборе между циклами while и repeat рекомендуется следующий критерий. Если тело цикла должно быть выполнено как минимум один раз, то следует предпочесть цикл repeat. Условие цикла repeat проверяется в конце цикла, следовательно, первая итерация выполняется всегда. Используйте цикл while только в тех случаях, когда, в зависимости от значения условия выполнения цикла, тело его может быть не выполнено ни разу.

 

 

Библиографический список

 

1. Фаронов В.В. ТурбоПаскаль: в 3-х кн.-М. 1997.

2. Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0/ Под ред. Тарасенко В.П..- К.: ВЕК+, М.: ДЕСС, 1999.- 496 с.

3. Культин Н. Turbo Pascal 7.0/ Н. Культин; В. Сергеев. - СПб.: БХВ - Санкт-Петербург, 1998. - 326 с.

4. Иванова Г.С. Основы программирования: Учеб. для вузов по направлению "Информатика и вычислительная техника", специальностям: "Вычислительные машины, комплексы, системы и сети", "Автоматизированные системы обработки информации и управления", "Программное обеспечение вычислительной техники и информационных систем"/ Г. С. Иванова. - М.: Изд-во МГТУ им. Н. Э. Баумана, 2001. - 391 с.:

5. Бен-Ари М. Языки программирования: Практ. сравнит. анализ: Учеб. по языкам программирования / М. Бен-Ари; В. С. Штаркман, М. Н. Яковлева; Под ред. В. С. Штаркмана. - М.: Мир, 2000. - 366 с.

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

7. Баас, Роб. Delphi 4: Полное рук.: Пер. с нем./ Р. Баас, М. Фервай, Х. Гюнтер; Под ред. А. Шевцова. - Киев: BHV, 1999. - 797 с.

8. Бежанова М.М. Практическое программирование. Структуры данных и алгоритмы: Учеб. / М. М. Бежанова, Л. А. Москвина, И. В. Поттосин. - М.: Логос, 2001. - 223 с.

9. Бежанова М.М. Современные понятия и методы программирования/            М. М. Бежанова, И. В. Поттосин. - М.: Науч. мир, 2000. - 191 с.

 

 

Редактор Н.Н. Пацула

ИД № 06039 от 12.10.2001

 

Подписано в печать 22.04.05. Формат 60×84 1/16.

Бумага офсетная. Отпечатано на дупликаторе.

Усл. печ. л. 2,0. Уч.-изд. 2,0. Тираж 200 экз.

 

Издательство ОмГТУ. 644050, г. Омск, пр. Мира 11.

 Типография ОмГТУ


Дата добавления: 2018-02-15; просмотров: 1136; Мы поможем в написании вашей работы!

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




Мы поможем в написании ваших работ!