Bezdna.su https://bezdna.su/f/ |
|
Программирование. https://bezdna.su/f/viewtopic.php?f=3&t=99 |
Страница 1 из 1 |
Автор: | Induct [ Сб янв 15, 2011 6:56 pm ] |
Заголовок сообщения: | Программирование. |
Поставил язык small basic, Не рекомендую всем- он не понимает знак возведения в степень и скобки, и похоже формулы. В бумажной книжке к нему ничего про это сказано не было, а так простой, чуткий и сильный язык. Но как писать на нем серьезное не представляю. Лучше сразу брать бэйсик из висуал студио. Выложу, вдруг пригодится кому. Прога для умножения чисел в столбик. Я пытаюсь сделать Х в степени Х. (ещё не перевел на полноценный бэйсик) c[n]- массив TextWindow.Write("X= ") x=textwindow.ReadNumber() -взять внесенное число. while c[n] >= 10 For n=1 to (w-1) y=x/(10^n) c[n]=floor (y) 'celaia chast -целая часть исходного числа, постепенно уменьшающаяся при делении на 10, 100... If c[n]<10 then n=w endif endfor EndWhile TextWindow.Write(w) -этим блоком можно заменить нижеследующее более фундаментально, чтоли n=1 c[n]=floor(x/(10^n)) If c[n] >= 10 Then n=n+1 c[n]=floor(x/(10^n)) Else n=w endif считали целую часть для получения w -количества цифр в числе. (наверно можно короче, но...) for n=1 to w a[n]=Math.Remainder(x,10^n) ' vsa drobn chast растущая при делении на 10, 100... b[n]=(a[n]-a[n-1])/(10^(n-1)) 'sama cifra -исходное число, переведенное в массив чисел. endfor |
Автор: | Induct [ Вс фев 13, 2011 9:54 am ] |
Заголовок сообщения: | Re: Попытки программировать. |
Написал в нормальном визуал студио, но только черновик- Х умножается на Х. Эррор лист чистый. Ошибки если и есть, то смысловые, не языковые. (ещё не отлаживал:)) Пока переделываю его в Х умножается на У(мало отличий от этого), и затем переделаю в Х в степени Х. Вдруг кого позабавит. Public Class Form1 Dim n, i, j, l, l3, m, p4, q4 As Integer Dim w As Integer Dim a() As Integer Dim b(), b2(), p2(), p3(), q3(), q5() As Integer Dim c() As Integer Dim z(,), z2(,) As Integer Dim l2(,) As Integer Dim x As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Dim n, k, m, f As Integer Dim w As Integer TextBox1.Clear() x = Me.TextBox1.Text For n = 1 To w c(n) = Math.Floor(x / (10 ^ n)) If c(n) < 10 Then n = w End If Next For n = 1 To w a(n) = x - ((10 ^ n) * c(n)) ' vsa drobn chast растущая при делении на b(n) = ((a(n) - a(n - 1)) / (10 ^ (n - 1))) 'sama cifra -исходное число, переведенное в массив чисел. Next For n = 1 To w For k = 1 To w l = b(k) * b(n) If l >= 10 Then l2(n, k) = Math.Floor(l / 10) 'desyatki. из предыдущего шага берём l3 = l - 10 * l2(n, k) 'edinici z(n, k) = l2(n - 1, k - 1) + l3 Else : l = z(n, k) End If If n = w Then p2(k) = l + l2(w - 1, k - 1) p3(k) = Math.Floor(p2(k) / 10) 'desiatki kraine levih chlenov z(n, k) = p2(k) - 10 * p3(k) 'edinici p3(k) = z(n, w + 1) End If Next Next For n = 1 To (2 * w + 1) m = z(1, n) For f = n To 1 m = m + z(f - 1, f) Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania stolbcov q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n - 1) If n = 2 * w + 1 Then q5(n) = m + q3(n - 1) 'pervaia cifria Rezultata ne razdeliaetsa End If Next End Sub End Class |
Автор: | Gosha555 [ Пн фев 14, 2011 12:20 pm ] |
Заголовок сообщения: | Re: Попытки программировать. |
Лучше сразу брать калькулятор! |
Автор: | Induct [ Пн фев 14, 2011 5:46 pm ] |
Заголовок сообщения: | Re: Попытки программировать. |
ну а мосх чуть-чуть развить |
Автор: | Induct [ Пт мар 04, 2011 4:17 pm ] |
Заголовок сообщения: | Re: Попытки программировать. |
Интерфейс. Как вводить число в текстбокс, нажимать кнопку1 и получать результат в том же текст боксе (исходное число исчезает). Кнопка2 очищает текст-бокс. Эта прога работает. Код: Public Class Form1
Dim x As Integer 'или as double Dim y As Integer 'или as double Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click x = CInt(TextBox1.Text) 'или так: X = Val(InputBox(“Введите значение переменной Х”,”Ввод данных”)) -v proceduru knopki или Cdbl(TextBox1.Text) -если переменные и значение типа double y = x * x TextBox1.Text = CStr(y) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Clear() End Sub End Class |
Автор: | Induct [ Вс мар 13, 2011 3:26 pm ] |
Заголовок сообщения: | Re: Программирование. |
Уже лучше работает эта прога. Проблемы в интерфейсе, вводе нескольких переменных в одно окно одной кнопкой=Button2. работаю над этим. Код: Public Class Form1
Dim n, i, j, l, l3, p4, q4 As Integer Dim w, w2 As Integer Dim a(), a2() As Integer Dim b(), b2(), p2(), p3(), q3(), q5() As Integer Dim c(), c2() As Integer Dim z(,), z2(,), m As Integer Dim l2(,) As Integer Dim x, y, v As Double Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Clear() Button2.Text = "Ввод исходных чисел" Button1.Text = "Вычислить" End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub '______________________________________________________________________________________________________ Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, k, f As Integer Dim w As Integer Dim oExcel As Object Dim oBook As Object Dim oSheet As Object For n = 1 To w c(n) = Math.Floor(x / (10 ^ n)) If c(n) < 10 Then n = w End If Next For n = 1 To w2 c2(n) = Math.Floor(y / (10 ^ n)) If c2(n) < 10 Then n = w2 End If Next For n = 1 To w a(n) = x - ((10 ^ n) * c(n)) ' vsa drobn chast растущая при делении на b(n) = ((a(n) - a(n - 1)) / (10 ^ (n - 1))) 'sama cifra -исходное число, переведенное в массив чисел. Next For n = 1 To w2 a2(n) = y - ((10 ^ n) * c2(n)) b2(n) = ((a2(n) - a2(n - 1)) / (10 ^ (n - 1))) Next My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr(w), True) My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr(w2), True) 'oExcel = CreateObject("Excel.Application") 'oBook = oExcel.Workbooks.Add 'oSheet= For n = 1 To w2 For k = 1 To w 'sozdanie matrici l = b(k) * b2(n) If l >= 10 Then l2(n, k) = Math.Floor(l / 10) 'desyatki. из предыдущего шага берём l3 = l - 10 * l2(n, k) 'edinici z(n, k) = l2(n, k - 1) + l3 Else : l = z(n, k) End If If k = w Then 'posledny stolbec p2(k) = l + l2(n, w - 1) p3(k) = Math.Floor(p2(k) / 10) 'desiatki kraine levih chlenov z(n, w) = p2(k) - 10 * p3(k) 'edinici z(n, w + 1) = p3(k) End If My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr(z(n, k)), True) 'matrica pered sumirovaniem Next 'oSheet.Range("A2").Resize(n, w).Value = z Next 'z(1, n) = l2(1, n - 1) + l - 10 * l2(1, n) 'oBook.SaveAs("C:\Documents and Settings\я\Мои документы\97476001754732.xls") 'oExcel.Quit() For n = 1 To (w + 1) 'kolichestvo stolbcov=w+1, proekcia kolichestva strok=w2-1 m = z(1, n) For f = 1 To (n - 1) m = m + z(f + 1, n - f) 'summiruem po \diagonali Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n - 1) Next For n = w + 2 To (w + w2) m = z(n - (w + 1) + 1, 1) For f = 1 To (n - 1) m = m + z(f + 1, n - f) 'summiruem po \diagonali Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n - 1) If n = w + w2 Then q5(n) = m + q3(n - 1) 'pervaia cifria Rezultata ne razdeliaetsa End If Next End Sub '_____________________________________________________________________________________________________ Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click On Error GoTo ErrorHandler If x > 1 Then y = CDbl(Me.TextBox1.Text) ' Else : x = CDbl(Me.TextBox1.Text) 'before exitsub- kod, mogushiy sozdat oshibku End If Exit Sub ErrorHandler: x = CDbl(Me.TextBox1.Text) ' Insert code to handle the error here Resume Next 'perehod k sleduyoushey comande koda, vniz TextBox1.Clear() 'x = CDbl(Me.TextBox1.Text) 'y = CDbl(Me.TextBox1.Text) End Sub End Class |
Автор: | Induct [ Вс апр 17, 2011 2:46 pm ] |
Заголовок сообщения: | Re: Программирование. |
Логический алгоритм почти отладил. Исходные числа из файла/текстбокса читает без ошибок, переводит их в числовой массив без ошибок. Сливает в эксель эти же числовые массивы исходных чисел- без ошибок. Создает из этих массивов матрицу, странновато создает- иногда внутри попадаются столбцы из нулей. Буду разбираться. Благодарю пользователя Alex77755 http://www.cyberforum.ru/members/13705.html , благодаря Помощи Алекса я решил фундаментальные проблемы проги умножения в столбик, и его Калькулятор это просто класс, выдает отличные результаты, проверенные мною на точно верных, полученных другим путём. Функцией Split можно данные и из Текстбокса обрабатывать: alltext =textbox1.text Все числа через пробелы каждое за один раз. Код: Public Class Form1
Dim n, i, j, l, l3, p4, s As Integer Dim w, w2, b(), b2(), l2(,) As Integer Dim q3(), q4, q5() As Integer Dim z(,), z2(,), m, p2(), p3() As Integer Dim x, y, v, t, t2, more As Integer Dim TestArray(), c(), c2(), s2() As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Clear() Button2.Text = "Ввод через текстовое окно" Button1.Text = "Вычислить" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, k, f As Integer Dim w As Integer Dim oExcel As Object Dim oBook As Object Dim oSheet As Object Dim alltext As String alltext = My.Computer.FileSystem.ReadAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt") TestArray = Split(alltext, " ") 'критерий-пробел- после запятой. если без него-по умолчанию, то всё равно пробел. Обязательно " " , а не "" -иначе alltext не разделится. Dim LastNonEmpty As Integer = -1 'номер только непустых элементов For i As Integer = 0 To TestArray.Length - 1 ' номер последнего(верхняя граница) меньше на 1 чем длина массива If TestArray(i) <> "" Then LastNonEmpty = LastNonEmpty + 1 TestArray(LastNonEmpty) = TestArray(i) ' LastNonEmpty будет всегда меньше i, i считает и пустые End If Next ReDim Preserve TestArray(LastNonEmpty) 'установление новой верхней границы, кол-ва эл-тов TestArray w = Len(TestArray(0)) My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr(w), True) 'для проверки w2 = Len(TestArray(1)) ' My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr(w2), True) My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", TestArray(0), True) 'для проверки Dim c(w) As String 'ustanovlenie verhnih granic. Inache Basic nikak. Dim b(w) As Integer Dim c2(w2) As String Dim b2(w2) As Integer For n = 1 To w c(n) = Mid(TestArray(0), n, 1) ' b(n) = CInt(c(n)) ' X ,perevedenny v massiv Next For n = 1 To w2 c2(n) = Mid(TestArray(1), n, 1) b2(n) = CInt(c2(n)) 'Y, perevedenny v massiv Next If w > w2 Or w = w2 Then 'эта кутерьма нужна, чтобы записать массивы Х и У одним двумерным в эксель(на всякий случай) more = w Else : more = w2 End If Dim z2(2, more) As Integer 'но строки 3 и столбцов more+1 For k = 1 To w z2(1, k) = b(k) Next For k = 1 To w2 z2(2, k) = b2(k) Next oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add oSheet = oBook.Worksheets(1) Dim l2(w2, w) As Integer Dim z(w2, w + 1) As Integer Dim p2(w) As Integer Dim p3(w) As Integer For n = w2 To 1 For k = w To 1 'sozdanie matrici к- номера столбцов l = b(k) * b2(n) If l >= 10 Then l2(n, k) = Math.Floor(l / 10) 'desyatki. из предыдущего шага берём l3 = l - 10 * l2(n, k) 'edinici z(n, k) = l2(n, k + 1) + l3 Else : l = z(n, k) End If If k = 1 Then 'posledny stolbec p2(k) = l + l2(n, w + 1) p3(k) = Math.Floor(p2(k) / 10) 'desiatki kraine levih chlenov z(n, w) = p2(k) - 10 * p3(k) 'edinici z(n, w + 1) = p3(k) ' End If Next Next oSheet.Range("A1").Value = "Пример заголовка" oSheet.Range("A3").Resize(3, more + 1).Value = z2 'в ресайзе указываем фактическое число строк, столбцов oSheet.Range("A9").Resize(w2 + 1, w + 2).Value = z oBook.SaveAs("C:\Documents and Settings\я\Мои документы\97476001754732.xls") 'если файла нет- будет создан, если есть- ответить заменить на вопрос "заменить?" oExcel.Quit() My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", " ", True) Dim q3(w + w2) As Integer Dim q5(w + w2) As Integer For n = 1 To (w + 1) 'kolichestvo stolbcov=w+1 m = z(1, n) For f = 1 To (n - 1) m = m + z(f + 1, n - f) 'summiruem po \diagonali Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n - 1) My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr((q5(n))), True) Next For n = w + 2 To (w + 1 + w2 - 1) '(1,w+1)-uglovoy element matrici vhodit in w and in w2 m = z(n - (w + 1) + 1, w + 1) For f = 1 To (w2 - (n - (w + 1) + 1)) ' ostatok do konca w2-vertikalnoy dliny ot tekushego n m = m + z(f + n - (w + 1) + 1, w + 1 - f) ' summiruem po \diagonali Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n - 1) If n = w + w2 Then q5(n) = m + q3(n - 1) 'pervaia cifria Rezultata ne razdeliaetsa My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr((q5(n))), True) End If Next End Sub Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click On Error GoTo ErrorHandler ' ввод If x > 1 Then Me.TextBox1.Text = TestArray(1) Else : Me.TextBox1.Text = TestArray(0) 'before exitsub- kod, mogushiy sozdat oshibku End If 'Exit Sub ErrorHandler: Me.TextBox1.Text = TestArray(0) ' Insert code to handle the error here Resume Next 'perehod k sleduyoushey comande koda, vniz TextBox1.Clear() End Sub End Class |
Автор: | Induct [ Чт апр 21, 2011 4:58 pm ] |
Заголовок сообщения: | Re: Программирование. |
Обновил движок матрицы. Прежде недодумал его- логику получения элементов z(n,k). Теперь ,имхо, додумал. Но в экселе почему-то вся матрица -нули, и q5() в тхт никаких нету. Код: For n = w2 To 1
For k = w To 1 'sozdanie matrici к- номера столбцов l = b(k) * b2(n) If k = w Then ' наверно можно без этого иф. десятков предыдущего шага нет -исходя из предустановленых границ l2 l2(n, k) = Math.Floor((l) / 10) l3 = l - 10 * l2(n, k) 'samiy praviy stolbec z(n, k) = l3 End If l2(n, k) = Math.Floor((l + l2(n, k + 1)) / 10) l3 = l - 10 * l2(n, k) 'samiy praviy stolbec z(n, k) = l3 If k = 1 Then 'posledny stolbec p2(k) = l + l2(n, k + 1) 'zdes- tekush rez+ des predyd rez p3(k) = Math.Floor(p2(k) / 10) 'desiatki kraine levih chlenov z(n, 1) = p2(k) - 10 * p3(k) 'edinici z(n, 0) = p3(k) 'i zdes End If My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", " ", True) My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr(z(n, k)), True) Next My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", "||", True) Next oSheet.Range("A1").Value = "Пример заголовка" oSheet.Range("A3").Resize(3, more + 1).Value = z2 oSheet.Range("A9").Resize(w2 + 1, w + 1).Value = z oBook.SaveAs("C:\Documents and Settings\я\Мои документы\97476001754732.xls") oExcel.Quit() My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", " ", True) Dim q3(w + w2) As Integer Dim q5(w + w2) As Integer For n = w To 0 'kolichestvo stolbcov=w+1, proekcia kolichestva strok=w2-1 m = z(w2, n) For f = 1 To (w - n) m = m + z(w2 - f, n + f) 'summiruem po \diagonali Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n + 1) My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr((q5(n))), True) Next For n = w2 To 1 'ZAKONCH zdes(1,w+1)-uglovoy element matrici vhodit in w and in w2 m = z(n, 0) For f = 1 To n - 1 ' ostatok do konca w2-vertikalnoy dliny ot tekushego n (w2 - (n - (w + 1) + 1)) m = m + z(n - f, f) Next q3(n) = Math.Floor(m / 10) 'desyatki ot chisel sumirovania q4 = m - 10 * q3(n) 'ih edinici q5(n) = q4 + q3(n + 1) If n = 1 Then q5(n) = m + q3(n + 1) 'pervaia cifria Rezultata ne razdeliaetsa My.Computer.FileSystem.WriteAllText("C:\Documents and Settings\я\Мои документы\97476001754732.txt", CStr((q5(n))), True) End If Next End Sub |
Автор: | Induct [ Вс апр 24, 2011 8:19 am ] |
Заголовок сообщения: | Re: Программирование. |
Установление границы массива -обязательно Непосредственно перед его заполнением, установлением значений его элементов. Dim c(w) As String 'ustanovlenie verhnih granic. Inache Basic nikak. Dim b(w) As Integer Dim c2(w2) As String Dim b2(w2) As Integer For n = 1 To w c(n) = Mid(TestArray(0), n, 1) ' Ind Vne granic m b(n) = CInt(c(n)) ' X ,perevedenny v massiv Next For n = 1 To w2 c2(n) = Mid(TestArray(1), n, 1) ' b2(n) = CInt(c2(n)) 'Y, perevedenny v massiv Next Понял почему матрица была нулями. Надо вот так For n = w2 To 1 Step -1 For k = w To 1 Step -1 -шаг должен быть отрицательным при убываниии каунтера. В функциях Len, Mid, InStr старт-номер фактически первого элемента объекта =1, не 0. one-based параметр. |
Автор: | Induct [ Пн апр 25, 2011 4:18 pm ] |
Заголовок сообщения: | Re: Программирование. |
Чтение из Excel код: Imports Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objExcel As New Excel.Application Dim objWrkBk As Excel.Workbook Dim objSht As Excel.Worksheet Dim testdata As String objWrkBk = GetObject("c:\test.xls") ' or objWrkBk = objExcel.Workbooks.Open("C:\test.xls") objSht = objWrkBk.Worksheets(1) testdata = objSht.Cells(1, 1).Value.ToString() ' or testdata = objSht.Rows(1).Cells(1).Text.ToString() ' or testdata = objSht.Range("A1").Value.ToString 'или toInteger если testdata -Integer или так: '//Create an Array and then add these entries to an excel spreadsheet -reading Dim a(10) As String 'если в экселе цифры- тип числовой For iRow = 1 To 10 a(iRow) = oSheet.Cells(iRow, 1).Value Next iRow TextBox1.Text = testdata End Sub End Class Источник: http://social.msdn.microsoft.com/forums ... dee7999ff/ http://vb-helper.com/howto_net_dao_data ... excel.html Значение символа &: With excel_worksheet.Range("A" & row_num, "Z" & _ row_num).Font .Bold = True End With тоесть & означает соединение без пробела, как видно из его использования в механизме метода Range. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |