Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2010, 10:23   #1
LaMort2015
Новичок
Джуниор
 
Регистрация: 03.02.2010
Сообщений: 1
По умолчанию Ошибки синтаксиса поправьте

Знакомая попросила помочь с заданиями в институт. Я не очень знаю VBA и это мой первый опыт. Вот суть
Есть задание
Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего и правого нижнего углов каждого из них. Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника, содержащего указанные прямоугольники.

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

Подумал что нужно создать форму для ввода координат известных углов.

Сделал форму из 8 текст боксов и одной кнопки

Начал писать на каждый текст бокс прописал что то такое

Код:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lbxos As String
Dim lbxor As Double
lbxor = CDbl(lbxos)
End Sub
И так на каждый текс бокс с разными переменными

Потом на кнопку прописал

Код:
Private Sub CommandButton1_Click()
Dim otvets As String
Dim otvetr As Double
otvetr = lbxor + lbyor + rbxor + rbyor + lbxtr + lbytr + rbxtr + rbytr
otvets = CStr(otvetr)
MsgBox ("Ответ - " $ otvets)
End Sub
Выдает ошибку Type mismatch тут
Код:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lbxos As String
Dim lbxor As Double
lbxor = CDbl(lbxos)
End Sub
Пробовал по другому
Код:
Private Sub CommandButton1_Click()
lbxor = CDbl(lbxos)
lbyor = CDbl(lbyos)
rbxor = CDbl(rbxos)
rbxor = CDbl(rbyos)
lbxtr = CDbl(lbxts)
lbytr = CDbl(lbyts)
lbytr = CDbl(rbxts)
lbytr = CDbl(rbyts)
Dim otvets As String
Dim otvetr As Double
otvetr = lbxor + lbyor + rbxor + rbyor + lbxtr + lbytr + rbxtr + rbytr
otvets = CStr(otvetr)
MsgBox ("Ответ - " $ otvets)
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lbxos As String
End Sub
Выдает ошибку синтаксиса тут

Private Sub CommandButton1_Click()

Подскажите может я вообще не в том направлении размышляю?

P.S.
На кнопке я прописал
Код:
otvetr = lbxor + lbyor + rbxor + rbyor + lbxtr + lbytr + rbxtr + rbytr
otvets = CStr(otvetr)
MsgBox ("Ответ - " $ otvets)
Просто чтобы проверить работоспособность формы. Для решения задачи планирую написать другое выражение естественно
LaMort2015 вне форума Ответить с цитированием
Старый 04.02.2010, 12:40   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

На самом деле всё гораздо проще. Насколько я понял, вы ошиблись, описывая исходные данные задачи. Должны быть заданы левый нижний и правый верхний углы исходных прямоугольников (или другие углы, расположенные по диагонали), иначе рассчитать невозможно, т.к. будет неизвестна высота этих прямоугольников.
Если не останавливаться на анализе ошибок при вводе координат, то можно использовать пример из приложенного файла.
Код:
Option Explicit
Private Type Point
  x As Single
  y As Single
End Type

'Координаты левого нижнего и правого верхнего углов первого и второго прямоугольника.
Private LeftBottom1 As Point, RightTop1 As Point
Private LeftBottom2 As Point, RightTop2 As Point
'Координаты левого нижнего и правого верхнего углов результирующего прямоугольника.
Private LeftBottom As Point, RightTop As Point

Private Sub CommandButton1_Click()
'Проверяем введённые координаты
Dim ar
'Координаты первого прямоугольника
ar = Split(TextBox1.Text, ";")
LeftBottom1.x = CSng(ar(0))
LeftBottom1.y = CSng(ar(1))
ar = Split(TextBox2.Text, ";")
RightTop1.x = CSng(ar(0))
RightTop1.y = CSng(ar(1))

'Координаты углов второго прямоугольника
ar = Split(TextBox3.Text, ";")
LeftBottom2.x = CSng(ar(0))
LeftBottom2.y = CSng(ar(1))
ar = Split(TextBox4.Text, ";")
RightTop2.x = CSng(ar(0))
RightTop2.y = CSng(ar(1))

'Координаты результирующего прямоугольника
LeftBottom.x = IIf(LeftBottom1.x > LeftBottom2.x, LeftBottom2.x, LeftBottom1.x)
LeftBottom.y = IIf(LeftBottom1.y > LeftBottom2.y, LeftBottom2.y, LeftBottom1.y)
RightTop.x = IIf(RightTop1.x < RightTop2.x, RightTop2.x, RightTop1.x)
RightTop.y = IIf(RightTop1.y < RightTop2.y, RightTop2.y, RightTop1.y)

MsgBox "Координаты результирующего прямоугольника: " & _
        "Левый нижний угол: (" & LeftBottom.x & ";" & LeftBottom.y & ")" & vbCr & _
        "Правый верхний угол: (" & RightTop.x & ";" & RightTop.y & ")", vbOKOnly + vbInformation, Me.Caption
Я исходил из того, что координата левого нижнего угла будет определяться наименьшей из исходных координат левого нижнего угла исходных прямоугольников, а координата правого верхнего угла — наибольшей из координат правого нижнего угла.
Если же условие задачи сформулировано верно, то я не знаю как её решать.
Вложения
Тип файла: doc Doc1.doc (43.5 Кб, 15 просмотров)
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C\C++. Поправьте программу. HixoH Общие вопросы C/C++ 4 27.11.2009 14:45
Поправьте алгоритм rausch Помощь студентам 1 08.09.2009 05:02
Поправьте код!!! Klim Bassenger Microsoft Office Excel 15 27.05.2009 15:24
Поправьте код! Klim Bassenger Microsoft Office Excel 1 10.04.2009 15:46
Поправьте, пожалуста! liver1981 Общие вопросы C/C++ 14 28.03.2009 06:45