пʼятниця, 21 жовтня 2011 р.

Контрольная по Pascal

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

1. Объявите переменные a целого типа, b - дробного типа, с - типа байт, d - строкового типа, e - логического типа, f - символьного типа.

2. Есть некоторая процедура P(). Как выполнить эту процедуру 100 раз, задействовав всего 3 строки программного кода?

3. Есть 4 условия:
if A='a' then...
if A='A' then...
if a='a' then...
if a='A' then...

Какие из них всегда будут иметь одинаковое логическое значение?

4. Дана программа
n:=15;
while n>1 do
begin
if n mod 2 = 0 then
  n:=n div 2
else
  n:= 3*n+1;
  Writeln(n);
end;

Какие числа выведет эта программа на экран?

5. Какое максимальное значение может храниться в переменной типа байт?

вівторок, 18 жовтня 2011 р.

Access+VBA

Создайте новую базу данных. В ней простую форму в режиме конструктора с именем "Упражнение №1".
Задание №1. В форме создать кнопку, при нажатии которой в поле надписи высвечивается текущая дата.

Порядок выполнения. Внутри формы создайте надпись, присвойте ей имя посредством свойства "Имя". Значением имени пусть будет слово "Today". Создайте кнопку с текстом "Какое сегодня число?". Для кнопки определите свойства "События" - "Нажатие кнопки" как процедуру обработки события. Программа на VBA будет по умолчанию иметь имя "Кнопка№_Click" (вместо № будет какое-то число). В ее тексте запишите строку:

Today.Caption = Date()


Таким образом, функция даты (Date) присвоит значение надписи (Today.Caption) Запустите программу, исправьте возможные ошибки.

Задание №2. В форме создать кнопку, при нажатии которой в поле надписи может быть введена произвольная дата.

Порядок выполнения. Аналогично предыдущему примеру вплоть до текста процедуры обработки события. Если имя надписи "myDate", то текстом будет:

Dim d As String 
d = InputBox("Введите дату")
myDate.Caption = d 


Объявлена переменная d для ввода даты? Окно ввода данных InputBox, Надпись приняла Caption, равное d.

Если выполнить отмену ввода даты, то переменная d не принимает никакого значения, что ведет к ошибке. Добавьте строку, которая прервет выполнение события (Exit Sub), если d - не дата (Not  IsDate(d) ):

If Not IsDate(d) Then Exit Sub

Задание №3. Надпись высвечивается цветом, принятым по умолчанию (черный). Изменить цвет надписи, если введенная дата - выходной день (воскресенье).
Порядок выполнения. Внесите изменения в текст процедуры обработки события:
После ввода даты определите номер дня в неделе, считая, что понедельник - 1-ый.

Dim n As Integer
n = WeekDay(d, vbMonday)

Выберите цвет надписи (ForeColor) равным 255 (красный), если номер = 7, и 0(черный) в остальных случаях.

If n = 7 Then
myDate.ForeColor = 255
Else
myDate.ForeColor = 0
End If
myDate.Caption = d


Дополнительное задание: Измените цвет и для субботы (шестой день недели).

Задание №4. Создать кнопку, при нажатии которой будет определен день недели для введенной даты.

Порядок выполнения. Аналогично второму заданию. Вместо вывода значения даты в надпись (имеет имя "Неделя"), нужно выводить текст названия дня недели в зависимости от его номера, который известен переменной n (например, номер понедельника = 1). Для выбора названия по номеру используйте оператор Select Case:

Select Case n
Case 1
Неделя.Caption = "Понедельник"
Case 2
Неделя.Caption = "Вторник"


End Select

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

четвер, 13 жовтня 2011 р.

Работа со строками

Рассмотрим алгоритм решения задачи, в которой нужно подсчитать количество вхождений символа «а» в строке. Используем компоненты классов TEdit и TMemo для ввода строки и вывода результата.

Пусть форма будет выглядеть следующим образом:

Объявим в юните переменные
var s: string;
i, k: integer;


А обработчик нажатия кнопки будет выглядеть так:

procedure TForm1.Button1Click(Sender: TObject);
begin
  s:=edit1.text; //ввод строки
  for i:=1 to length(s) do //идем по строке
   if s[i]=’a’ then k:=k+1; {если i-ый символ а, тогда увеличиваем счетчик k}
  Memo1.text:=IntToStr(k) //вывод результата
end;


Задания для самостоятельной работы:
1.Дана строка s. Найти количество вхождений букв a,b,c,d в ней.
2.Найти количество цифр в строке.
3.Сцепить несколько строк в одну.
4.Из данной строки выбрать цифры и сформировать из них новую строку.
5.Найти количество слов, начинающихся на букву с.
6.Подсчитать количество слов в строке.
7.Определить начинается и заканчивается ли слово одной буквой.
8.Удалить каждую четную букву в строке.
9.Проверить одинаковое ли число открытых и закрытых скобок в строке.

вівторок, 4 жовтня 2011 р.

Рисование на форме

Когда пользователь нажимает одну из кнопок мыши, указатель которой находится над формой  (или над компонентом), Windows посылает приложению несколько сообщений.  Для написания кода,  откликающегося на эти сообщения, Delphi  определяет несколько событий.  Основных событий два: OnMouseDown, которое происходит при нажатии одной из кнопок мыши, и OnMouseUp, которое происходит при освобождении кнопки.   Еще одно важное системное сообщение связано с перемещением мыши – сообщение OnMouseMove.

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

События, связанные с мышью

Метод,  соответствующий событию OnMouseDown,  имеет несколько параметров:  procedure TForm1.FormMouseDown   (Sender : TObject ;  Button : TMouseButton ;    Shift : TShiftState ; X,Y : Integer ) ;  Кроме обычного параметра Sender, указывающего, на каком компоненте произошло нажатие, здесь присутствуют еще четыре

 1) Button – показывает, какая из трех кнопок мыши была нажата. Возможные значения: mbRight, mbLeft, mbCenter.  

2) Shift – показывает, какие влияющие на мышь клавиши были нажаты при возникновении события. Такой клавишей может быть Alt, Ctrl или Shift,  нажатая вместе с самой кнопкой мыши.  Данный параметр имеет тип множества, т.к. несколько клавиш могут быть нажаты одновременно. Это означает, что при анализе условия вы должны применять не проверку на равенство, а оператор in.

3) X  и Y –  показывают координаты позиции мыши относительно клиентской области.  

Рисование в форме

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

Свойство Pixels – это двумерный массив, соответствующий цветам отдельных пикселов в Canvas. Canvas.Pixels[10,20] соответствует цвету пикселя, который находится на 10 пикселов правее и на 20 пикселов ниже точки отсчета. Обращайтесь с массивом пикселов как с любым другим свойством; чтобы изменить цвет пикселя,  присвойте ему новое значение.  Чтобы определить цвет пикселя, – прочитайте значение.  

Этот класс создает  «канву», на которой можно рисовать чертежными инструментами - пером, кистью и шрифтом. Объекты класса  TСanvas автоматически создаются для всех видимых компонентов,  которые должны уметь нарисовать себя. Они инкапсулируют объекты Font, Pen, Brush, а также многочисленные методы, использующие эти объекты.  

Каждое свойство Canvas имеет воображаемое перо для рисования линий и контуров. Свойство Pen (перо) определяет цвет и размер линий и границ фигур. Свойствами пера являются его цвет, размер  (если это сплошная линия)  или стиль.  Работая с пером, вы можете прочитать  (но не изменить)  его текущую позицию  (свойство PenPos). 

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

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

Свойство Font  определяет шрифт,  который используется методом холста TextOut  для написания текста в форме. Шрифт имеет имя,  размер,  стиль, цвет и т.п.  

Черчение и рисование

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

♦ Рисование – это технология, которая позволит приложению перерисовывать всю ее поверхность при любых возможных условиях.  Для вызова перерисовки можно использовать методы Invalidate, UpDate, ReFresh и Repaint.  

Порядок выполнения работы

Задание № 1

1. После запуска DELPHI необходимо создать новое приложение (если оно не создано автоматически)  с помощью меню File\New Application.  Далее необходимо создать свою папку, в которой нужно сохранить проект и модуль.    

2. Поместить в форму меню Color (на странице Standart Палитры Компонентов есть объект MainMenu) c командами PenColor и BrushColor,  которые будут соответственно изменять цвет пера и кисти с помощью стандартной диалоговой панели.

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

Варианты индивидуальных заданий

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

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

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

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

Некоторые  подсказки для реализации этой задачи

  1. Запишите следующий код для события OnMouseDown:  
if Button = mbLeft then
     begin
       Center.X := X;
       Center.Y := Y;
         if ssShift in Shift then
         Circle := False
       Else
         Circle := True;
     end;  

Переменна формы Circle типа Boolean определяет вид фигуры. Значения координат центра фигуры записываются в переменную формы Center  типа TPoint.
Это будет выглядеть так:  
var    Form1: TForm1;
    Center, Radius: TPoint;
    Circle: Boolean;

2. Запишите следующий код для события OnMouseUp :
  Radius.X := abs(Center.X-X);
  Radius.Y := abs (center.Y-Y);
     if Circle then
         Canvas.Ellipse(Center.X-Radius.X, Center.Y-Radius.Y, Center.X+Radius.X, Center.Y+Radius.Y)
     Else
         Canvas.Rectangle(Center.X-Radius.X, Center.Y-Radius.Y, Center.X+Radius.X, Center.Y+Radius.Y);

3. Запишите следующий код для события  OnMouseMove:
  Caption: =Format ('Координаты: x=%d, y=%d ' , [X, Y]);

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

Задание № 2  
Начиная с оператора if,  код для события OnMouseUp  перенести в код для события OnPaint.  
1.  В код для события OnMouseUp вставить в конце вызов метода Invalidate ( который вызывает косвенно метод FormPaint, связанный с событием OnPaint). 
Это будет выглядеть так:  
begin  Radius.X:=abs(Center.X -X);  
Radius.Y:=abs(Center.Y-Y);
    Invalidate;
  end;  
2.  Запустить приложение.  При правильном выполнении всех инструкций, в форме будет рисоваться только одна фигура.

3. Выполните первое задание для компонента PaintBox.     
На странице System Палитры Компонентов есть объект TPaintBox, который можно использовать для построения приложений типа графического редактора или,  например,  в качестве места построения графиков.  Никаких ключевых свойств, кроме CanvasTPaintBox не имеет, собственно, этот объект является просто канвой для рисования. Важно, что координаты указателя мыши,  передаваемые в обработчики соответствующих событий (OnMouseMove  и др.),  являются относительными,  т.е.  это смещение мыши относительно левого верхнего угла объекта TPaintBox,  а не относительно левого верхнего угла формы.  
4. Изучите возможности компонента Shape.    
На странице Additionally Палитры Компонентов есть объект TShape. TShape - простейшие графические объекты на форме типа круг, квадрат и т.п. Вид объекта указывается в свойстве Shape. Свойство Pen  определяет цвет и вид границы объекта. Brush  задает цвет и вид заполнения объекта.  Эти свойства можно менять как во время дизайна, так и во время выполнения программы.