СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Лекция № 9 (кырг)

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Лекция № 9 (кырг)»

Лекция № 9. With инструкциясы

1. With инструкциясы

2. 1-мисал. Векторду борборлоштуруу

3. 2-мисал. Матрицанын эң чоң элементи

  1. With инструкциясы

With инструкциясы инструкция иреттелиши үчүн объектти көрсөтүү мүмкүнчүлүгүн берет. With инструкциясы процедуралардын аткарылуусун тездетет жана объекттин ысымын кайталап берүүсүнүн алдын алат.

With Button1

.Text = “Эсептөө

.Tag = “От

.Visible = False

End With

With инструкциясын колдонуусуз бул программаны төмөнкү жол менен жазуу керек болот:

Button1.Text = “Эсептөө

Button1.Tag = “От

Button1.Visible = False

Программанын эффектүүлүгүн жогорулатуу үчүн With кийирилген инструкцияларын түзүүгө болот.


  1. 1-мисал. Векторду борборлоштуруу

Эки вектор берилген a(1), a(2), … , a(k) жана b(1), b(2), … , b(l). Эгер а векторунун элементтеринин орточо мааниси b векторунун элементтеринин орточо маанисинен кичине болсо, анда а векторун борборлоштуруу жана чыгаруу. Болбосо b векторун борборлоштуруу жана чыгаруу керек. Ар бир борборлоштурулган массивдин элементи, башкы массивдин тиешелүү элементинин маанисинин жана анын элементтеринин орточо маанисин айырмасы катары болот.

Подпрограммалар тизмеси:

х векторун кийирүү. Подпрограмманы колдонобуз:

Sub InputVector(ByRef x() As Single, Optional _ ByVal ArrayName As String = "элемент")

Экинчи аргумент сөзсүз түрдөгү эмес. Бул кийирилүүчү массивдин ысымы болгон, тексттик жолчо. Бул аргумент массивди кийирүүнү, InputBox функция терезесинде кийирилүүчү массивдин атын көрсөтүү аркылуу, түшүнүктүү кылат.

Эгер экинчи аргументти, подпрограммага кайрылууда алып койсок, анда массивдин атынын ордуна «элемент»: (элемент(5) = ?) жолчосу чыгарылат.

x вектору үчүн анын элементтеринин орточо маанисин эсептөө. Функцияны колдонобуз.

Function Орточо(ByVal x() As Single) As Single

X векторун борборлоштуруу. Подпрограмманы колдонобуз:

Sub ВектордуБорборлоштуруу(ByRef x()As Single)

X векторун чыгаруу. Подпрограмманы колдонобуз:

Sub OutputVector(ByRef x() As Single, _ ByVal y As TextBox)

Экинчи аргумент, чыгаруу аткарылуучу, тексттик терезе үчүн керек.

Проекттин интерфейси:

Формада Button1 баскычын жана TextBox1 тексттик талаасын жайгаштырабыз. Төмөнкү таблицада берилгендей касиеттердин маанилерин беребиз.

Объекттердин касиеттеринин таблицасы:

Касиеттин аты

Касиеттин мааниси

Button1 баскычы

Name (объект аты)

btnБаштоо

Text (баскычтагы текстти берет)

Вычислить

Font (баскычтагы шрифттин параметрлерин берет)

Microsoft Sans Serif; 12pt

Anchor

Bottom, Left, Right (төмөнкү, сол, оң)

TextBox1 тексттик талаасы

Name (объекттин аты)

txtЖурнал

MultiLine (тексттик талаада бир нече жолчону жайгаштырууга мүмкүнчүлүк берет)

True

Text (тексттик талаада текстти берет)

Бош

ScrollBars (жылдыруунун вертикалдуу сызыгын берет)

Both (экоо тең)

Font (тексттик талаада шрифттин параметрлерин берет)

Microsoft Sans Serif; 12pt

Anchor (байланыштырат)

Top, Bottom, Left, Right (жогорку, төмөнкү, сол, оң)

ReadOnly (аткарууда тексттик талааны редактирлөө мүмкүнчүлүгүн бербейт)

True

Объекттердин аталыштарын өзгөртүү сунуштарды аткарууда ыңгайлуу, объекттин аты кыска жана анын классын жана дайындалышын көрсөтүп турат. Буга объекттин аталышын эки бөлүктөн түзүү аркылуу жетилет. Ысымынын биринчи бөлүгү, ал таандык болгон классты билдирет. Ал эми экинчиси анын дайындалышын билдирет. Объект үчүн класс бул өзгөрүлмө үчүн тип болгондой сыяктуу эле.

Программанын коду

Листинг 1. btnБаштоо_Click окуялуу подпрограмманын коду

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnБаштоо.Click

Dim k, l As Integer

Dim a(), b() As Single

txtЖурнал.Clear()

k = InputBox("k=?")

l = InputBox("l=?")

txtЖурнал.AppendText("k= " & k & vbTab & " l= " & l & vbCrLf)

ReDim a(k), b(l)

InputVector(a, "a")

txtЖурнал.AppendText("Вектор а" & vbCrLf)

OutputVector(a, txtЖурнал)

InputVector(b, "b")

txtЖурнал.AppendText("Вектор b" & vbCrLf)

OutputVector(b, txtЖурнал)

Dim ОрточоА, ОрточоВ As Single

ОрточоА = Орточо(a)

ОрточоВ = Орточо(b)

If ОрточоА Then

ВектордуБорборлоштуруу(a)

txtЖурнал.AppendText("Борборлоштурулган вектор а" & vbCrLf)

OutputVector(a, txtЖурнал)

Else

ВектордуБорборлоштуруу(b)

txtЖурнал.AppendText("Борборлоштурулган вектор b" & vbCrLf)

OutputVector(b, txtЖурнал)

End If

End Sub

Листинг 2 Орточо функциясынын коду

Private Function Орточо(ByVal x() As _ Single) As Single

Dim sum As Single, i As Integer

For i = 1 To x.GetUpperBound(0)

sum = sum + x(i)

Next

Орточо = sum / x.GetUpperBound(0)

End Function

Бул функция, диапозону [1, максималдуу маани] ге таандык индекстүү вектордун бардык элементтеринин орточо арифметикалык маанисин эсептөө үчүн арналган. Мында x(0) вектордун элементинин мааниси эске алынбайт.

GetUpperBound(0) методу x векторунун индексинин максималдуу маанисин кайтарат. Бул методдун аргументи массивдин өлчөмдүүлүгүн берет. Көп өлчөмдүү масиивдердин өлчөмдөрү нолдон баштап номерленет.

Листинг 3 ВектордуБорборлоштуруу подпрограммасынын коду

Private Sub ВектордуБорборлоштуруу(ByRef _ x() As Single)

Dim i As Integer, sx As Single

sx = Орточо(x)

For I = 1 To x.GetUpperBound(0)

x(i) = x(i) – sx

Next

End Sub

Бул подрограммада x векторунун x(0)дон башка бардык элементтери борборлоштурулат.

Листинг 4 InputVectorподпрограммасынын коду

Private Sub InputVector(ByRef x() As Single, Optional ByVal ArrayName As String =_ "элемент")

Dim i As Integer

For i = 1 To x.GetUpperBound(0)

x(i) = InputBox(ArrayName & "(" & i & ") = ?")

Next

End Sub

Бул подпрограмма x массивинин x(0)дон башка бардык элементтеринин кийирилүүсүн камсыздайт.

Листинг 5 OutputVector подпрограммасынын коду

Private Sub OutputVector(ByVal x() As_Single, ByVal y As TextBox)

Dim i As Integer

For i = 1 To x.GetUpperBound(0)

y.AppendText(x(i) & vbTab)

Next

y.AppendText(vbCrLf)

End Sub

Бул подпрограмма x массивинин x(0) элементинен башка бардык элементтеринин чыгарылуусун камсыздайт.

  1. 2-мисал. Матрицанын эң чон элементи

кa жолчолуу жана la мамычалуу а матрицисы, ошондой эле кb жолчолуу жана lb мамычалуу b матрицасы берилген.

Бул матрицалардын максималдуу сандагы элементтеринен эң чоң маанисин табуу. Максималдуу элементи эң чоң болгон матрицаны чыгаруу.

Маселелердин тизмеси

  1. x матрицасын кийирүү. Подпрограмманы колдонобуз:

Sub InputMatrix(ByRef x(,) As Single, Optional _ ByVal ArrayName As String = "элемент")

Бул подпрограмманын эки аргументи бар. Биринчи аргументи – кийирүүгө таандык, матрицанын ысымы. Экинчи сөзсүз эмес аргумент – кийирилүү матрицанын ысымы болгон, жолчо. Бул аргумент InputBox функция терезесинде, кайсы матрицанын элементи кийирилүүгө таандык экендигин билдирип турат.

  1. x матрицасынын максималдуу элементин аныктоо. Функцияны колдонобуз:

Function МаксМатр(ByVal x(,) As Single) As Single

  1. x матрицасын чыгаруу. Төмөнкү подпрограмманы колдонобуз:

Sub OutputMatrix(ByRef x(,) As Single, _ ByVal y As TextBox)

Бул подпрограмманын эки аргументи бар. Биринчи аргумент – чыгарууга таандык болгон, матрицанын аты. Экинчи аргумент - матрицанын чыгарылуусу аткарыла турган тексттик талаанын ысымы.

x матрицасынын жолчолорунун саны imax жана мамычаларынын саны аргументтеринин тизмесини аркылуу МаксМатр функциясына берилбейт. Бул өзгөрмөлөрдүн МаксМатр функциясынын алгоритминде колдонулган мааниси GetUpperBound массив ыкмасынын жардамында эсептелет. Алгоритмдин негизи болуп матрицасынын бардык элементтеринин кыска циклда айландыруу жана МаксX өзгөрмөсүнүн жардамында, эгер ал мурун каралган элементтеринин маанисинин баарынан чоң болгон, кезектеги каралуучу x(i,j) элементин эстеп калуу.

Кодду иштеп чыгуу

Листинг 7. Проекттин коду

Public Class Form1

Private Sub btnБаштоо_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnБаштоо.Click

Dim ka, la, kb, lb, kc, lc As Integer

Dim a(,), b(,), c(,) As Single

txtЖурнал.Clear()

ka = InputBox("ka=?")

la = InputBox("la=?")

kb = InputBox("kb=?")

lb = InputBox("lb=?")

kc = InputBox("kc=?")

lc = InputBox("lc=?")

txtЖурнал.AppendText("ka= " & ka & vbTab & " la= " & la & vbCrLf)

txtЖурнал.AppendText("kb= " & ka & vbTab & " lb= " & la & vbCrLf)

txtЖурнал.AppendText("kc= " & ka & vbTab & " lc= " & la & vbCrLf)

ReDim a(ka, la), b(kb, lb), c(kc, lc)

InputMatrix(a, "a")

txtЖурнал.AppendText("Матрица а" & vbCrLf)

OutputMatrix(a, txtЖурнал)

InputMatrix(b, "b")

txtЖурнал.AppendText("Матрица b" & vbCrLf)

OutputMatrix(b, txtЖурнал)

InputMatrix(c, "c")

txtЖурнал.AppendText("Матрица c" & vbCrLf)

OutputMatrix(c, txtЖурнал)

Dim МаксА, МаксВ, МаксС As Single

МаксА = МаксМатр(a)

МаксВ = МаксМатр(b)

МаксС = МаксМатр(c)

Dim МаксАВС As Single

МаксАВС = МаксА

If МаксВ МаксАВС Then МаксАВС = МаксВ

If МаксС МаксАВС Then МаксАВС = МаксС

txtЖурнал.AppendText("Эң чоң элементи барабар" & vbTab & МаксАВС &_ vbCrLf)

If МаксАВС = МаксА Then txtЖурнал.AppendText("Эң чоң элемент камтыйт_ матрица a" & vbCrLf)

OutputMatrix(a, txtЖурнал)

ElseIf МаксАВС = МаксВ Then

txtЖурнал.AppendText(" Эң чоң элемент камтыйт матрица b" & vbCrLf)

OutputMatrix(b, txtЖурнал)

ElseIf МаксАВС = МаксС Then

txtЖурнал.AppendText(" Эң чоң элемент камтыйт матрица c" & vbCrLf)

OutputMatrix(c, txtЖурнал)

Eпd If

End Sub

Private Function МаксМатр(ByVal x(,) As Single) As Single

Dim i, j As Integer, МаксХ As Single

МаксХ = x(1, 1)

For i = 1 To x.GetUpperBound(0)

For j = 1 To x.GetUpperBound(1)

If x(i, j) МаксХ Then МаксХ = x(i, j)

Next

Next

МаксМатр = МаксХ

End Function

Private Sub InputMatrix(ByRef x(,) As Single, Optional ByVal ArrayName As String = "элемент")

Dim i, j As Integer

For i = 1 To x.GetUpperBound(0)

For j = 1 To x.GetUpperBound(1)

x(i, j) = InputBox(ArrayName & "(" & i & "," & j & ") = ?")

Next

Next

End Sub


Private Sub OutputMatrix(ByVal x(,) As Single, ByVal y As TextBox)

Dim i, j As Integer

For i = 1 To x.GetUpperBound(0)

For j = 1 To x.GetUpperBound(1)

y.AppendText(x(i, j) & vbTab)

Next

y.AppendText(vbCrLf)

Next

End Sub

End Class