Сложение в столбике
Private Sub Command1_Click()
Dim paramA As Double 'колличество чисел
Dim paramB As Double 'значение числа
Dim r As Double
Dim i As Long
Dim t As Double
paramA = Val(Text1.Text)
paramB = Val(Text2.Text)
Label1 = ""
Label2 = ""
For i = 1 To paramA
r = paramB + 2 * paramB
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
End Sub
Этот код выдает задаваемое кол-во чисел и записывает их в столбик. Например парамА=5,парамВ=3. Програма записывает пять девяток в столбик,т.к r будет равно 9. Мне нужно чтобы после этого запускалась програма которая будет складывать каждое число(1число+2число+3число и тд) до тех пор пока их сумма не привысит ну например 27. После этого програма должна остановиться и указать сколько несложенных чисел осталось. Как это осуществить?
Это значения переменной t ?:confused:
Тоже в столбик?:confused: или просто сумму?:confused:
Да ну можно хоть как обозначить
просто сумму
Нужно точно знать откуда береться сумма 27
Иначе мой код не будет работать правильно
[COLOR="#ff00ff"]Dim SummaR As Double
Dim MemCikl As Long
Dim MemNumber As Long[/COLOR]
For i = 1 To paramA
r = paramB + 2 * paramB
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
[COLOR="#ff00ff"]SummaR = SummaR + r
If SummaR =[COLOR="red"] t[/COLOR] Then
MemCikl = i
Exit For
End If[/COLOR]
Next i
[COLOR="#ff00ff"]SummaR = 0
For i = MemCikl To paramA
'сколько несложенных чисел осталось
MemNumber = MemNumber + 1
'просто сумму
SummaR = SummaR + r
Next i[/COLOR]
она ниоткуда не береться, это просто число достигнув которого прога должна остановить сложение чисел и показать результат. 27 не являеться результатом какого-либо математического вырожения это просто задаваемое число которое может изменяться, потом я введу текст бокс и буду воводить него это число, и кажды раз прога будет суммировать числа до тех пор пока их сумма не достигнет задаваемого числа.
Вы правельно поймите что
программе нужно знать "их сумму" или "просто число" т.к Вы каждый раз вводите новые значения.
из примера выше
6 девяток
Тогда, что?
[COLOR="blue"]Dim[/COLOR] MemCikl As Long
[COLOR="blue"]Dim[/COLOR] MemNumber As Long
[COLOR="blue"]For[/COLOR] i = 1 [COLOR="blue"]To[/COLOR] paramA
r = paramB + 2 * paramB
SummaR = SummaR + r
MemCikl = i
[COLOR="blue"]Select case[/COLOR] SummaR
[COLOR="blue"]Case Is[/COLOR] > t
SummaR = SummaR - r
MemCikl = MemCikl - 1
[COLOR="blue"]Exit For[/COLOR]
[COLOR="blue"]Case Is[/COLOR] = t
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
[COLOR="blue"]Exit For[/COLOR]
[COLOR="blue"]End Select[/COLOR]
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
[COLOR="blue"]Next[/COLOR] i
MemNumber = 0: SummaR = 0
[COLOR="blue"]For[/COLOR] i = MemCikl [COLOR="blue"]To[/COLOR] paramA
[COLOR="#006400"]'сколько несложенных чисел осталось[/COLOR]
MemNumber = MemNumber + 1
[COLOR="#006400"]'какая сумма осталось[/COLOR]
SummaR = SummaR + r
[COLOR="blue"]Next[/COLOR] i
[COLOR="#006400"]P.S
t Это t =Val( TextBox.Text) куда вводиться 27 или 25 из примера выше
Протестируйте код и дайте ответ.[/COLOR]
я так понимаю что он выводит мне столько чисел в столбике сколько он сложил? Надо чтоб если я задаю 12 чисел он их всех выводил и потом показал сколько осталось несложенных, но паказать в столбике он должен все 12 чисел
Я вроде написал код согласно условиям которые Вы написали выше.
Вот новый
Private Sub Command1_Click()
Dim paramA As Double 'колличество чисел
Dim paramB As Double 'значение числа
Dim r As Double
Dim i As Long
Dim t As Double
Dim SummaR As Double
Dim MemCikl As Long
Dim MemNumber As Long
paramA = Val(Text1.Text)
paramB = Val(Text2.Text)
Label1 = ""
Label2 = ""
For i = 1 To paramA
r = paramB + 2 * paramB
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
For i = 1 To paramA
r = paramB + 2 * paramB
SummaR = SummaR + r
MemCikl = i
Select case SummaR
Case Is > t
SummaR = SummaR - r
MemCikl = MemCikl - 1
Exit For
Case Is = t
Exit For
End Select
Next i
MemNumber = 0: SummaR = 0
For i = MemCikl To paramA
'сколько несложенных чисел осталось LabelN = MemNumber **************
MemNumber = MemNumber + 1
'какая сумма осталось LabelN = SummaR **************
SummaR = SummaR + r
Next i
End Sub
Я отметил звездочками LabelN = MemNumber **************
MemNumber = MemNumber + 1
Не буду писать весь код , а просто вставте LabelN не знаю какой N для примера Label65
[COLOR="blue"]Next i[/COLOR]
[COLOR="red"]Label65 = "Сколько несложенных чисел осталось " & MemNumber[/COLOR]
[COLOR="blue"]End Sub[/COLOR]
Хотел спросить про Label VB6 допускает писать так
[COLOR="blue"]Label65 = "Сколько несложенных чисел осталось " & MemNumber[/COLOR]
на сколько я помню в VB6 писал всегда так
[COLOR="blue"]Label65.caption = "Сколько несложенных чисел осталось " & Str(MemNumber)[/COLOR]
Label3 = SummaR
Label2 = MemNumber
проверил вроде все нормально. Ща буду подганять под свой настоящий код. UserNet2008 Спасибо вам!!! Не прощаюсь)))
Private Sub Command1_Click()
Dim paramA As Double 'колличество чисел
Dim paramB As Double 'значение числа
Dim r As Double
Dim i As Long
Dim t As Double
Dim SummaR As Double
Dim MemCikl As Long
Dim MemNumber As Long
paramA = Val(Text1.Text)
paramB = Val(Text2.Text)
t = Val(Text3.Text)
Label1 = ""
Label2 = ""
For i = 1 To paramA
r = paramB + 2 * paramB
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
For i = 1 To paramA
r = paramB + 2 * paramB
SummaR = SummaR + r
MemCikl = i
Select Case SummaR
Case Is > t
SummaR = SummaR - r
MemCikl = MemCikl - 1
Exit For
Case Is = t
Exit For
End Select
Next i
MemNumber = 0: SummaR = 0
For i = MemCikl To paramA
'сколько несложенных чисел осталось Label2 = MemNumber **************
MemNumber = MemNumber + 1
'какая сумма осталось Label2 = SummaR **************
SummaR = SummaR + r
Next i
Label3 = SummaR
Label2 = MemNumber
End Sub
Что-то не то. Я задаю ему парамА=5,парамВ=2,t=25. Прога выдает столбик из 5 шестерок(это нормально) в лейбл 2 вписывает цифру 2(несложенные числа), в лейбл 3 сумму(12). Но ведь граничное число 25 а в 25 входит четыре шестерки 6+6+6+6=24, 24<25 должно показать 1 цифру а в сумме 6. Почему он этого не делает. И еще вопрос если я ему задаю граничное число заведомо большее чем сумма всех чисел он все равно пишет что осталась одна цифра?
Для начала закоментируйте или удалите следующую строку [COLOR="#006400"]' MemCikl = MemCikl - 1[/COLOR]
А что должна сделать программа если число заведомо большее чем сумма всех чисел?
В этом коде можно разобраться и так.
Sergey198826
Вам нужно учиться отлаживать программу самому если Вы хотите программировать
Есть такая кнопка F9 она делает точку остановки в коде. Потом можно шаг за шагом пройтись по коду и узнать значения всех переменных.
она должна показать что не сложенных чисел 0, т.е сумма всех чисел меньше граничного числа значит они все сложенны.
я удалил строчку ' MemCikl = MemCikl - 1 пргограма работает нормально но хотелось бы чтоб програма складывала числа до граничного числа включая его. т.е если я задаю 24 то прога остановиться когда сумма дайдет до 24 включая 24 а не до 23
P.S На самом деле я не планирую становиться програмистом, но это необходимо для моего диплома. Поэтому я обращаюсь к профессионалам за помощью. Я знаю только самые азы, но ваша помощь помагает мне превратить мою программу в реальность. Я уверен что для полного изуения бейсика и проффесионального програмирования неоюходимо заниматься исключительно програмированием, т.к халатности оно не терпит. Конечно я мог бы нанять програмиста и диктовать ему условия но тогда я утрачу понимание того, чем я занимаюсь. Делая ее сам я до мелочей могу разобраться в ней, но для того чтобы ее сделать мне необходимы переодические консультации, и пользуясь случаем хочу еще раз выразить вам свою благодарность.
Дайте еще пример парамА=,парамВ=,t= , а лучше несколько и какой результат Вы ожидаете
Private Sub Command1_Click()
Dim paramA As Double 'êîëëè÷åñòâî ÷èñåë
Dim paramB As Double 'çíà÷åíèå ÷èñëà
Dim r As Double
Dim i As Long
Dim t As Double
Dim SummaR As Double
Dim MemCikl As Long
Dim MemNumber As Long
paramA = Val(Text1.Text)
paramB = Val(Text2.Text)
t = Val(Text3.Text)
Label1 = ""
Label2 = ""
For i = 1 To paramA
r = Int(Rnd * paramB) + 1
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
For i = 1 To paramA
r = Int(Rnd * paramB) + 1
SummaR = SummaR + r
MemCikl = i
Select Case SummaR
Case Is > t
SummaR = SummaR - r
Exit For
Case Is = t
Exit For
End Select
Next i
MemNumber = 0: SummaR = 0
For i = MemCikl To paramA
'ñêîëüêî íåñëîæåííûõ ÷èñåë îñòàëîñü Label2 = MemNumber **************
MemNumber = MemNumber + 1
'êàêàÿ ñóììà îñòàëîñü Label2 = SummaR **************
SummaR = SummaR + r
Next i
Label3 = SummaR
Label2 = MemNumber
End Sub
Private Sub Form_Load()
Randomize
End Sub
Вот ввел я параметрВ 100, А-5,С-200 он мне выдал столбик след чисел: 52;27;93;66;98, показал что несложенных осталось 1 число а оставшаяся сумма 96. Но если сложить первы 4 числа получиться 238, а граница 200 по идеи четвертое число не должно входить и прога должна показать что осталась два числа. Сумму можно не выводить, просто колличество чисел.
paramB = 100
t = 200
Я правильно ввел данные тогда r = paramB + 2 * paramB r равно 300
и откуда эти цифры
Вы лучше напишите так
1 вариант
paramA =
paramB =
t =
2 вариант
paramA =
paramB =
t =
3 вариант
paramA =
paramB =
t =
r = paramB + 2 * paramB
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
For i = 1 To paramA
r = paramB + 2 * paramB
подставте
r = Int(Rnd * paramB) + 1
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
For i = 1 To paramA
r = Int(Rnd * paramB) + 1
а после всего кода после End Sub вставте
Randomize
End Sub
прога будет генерировать случайные числа
поробуйте подставить эти значения
paramB = 100
t = 200
и посмотрите что получиться
300
300
300
300
300
MemNumber = 5
SummaR = 1500
Private Sub Command1_Click()
Dim paramA As Double 'êîëëè÷åñòâî ÷èñåë
Dim paramB As Double 'çíà÷åíèå ÷èñëà
Dim r As Double
Dim i As Long
Dim t As Double
Dim SummaR As Double
Dim MemCikl As Long
Dim MemNumber As Long
paramA = Val(Text1.Text)
paramB = Val(Text2.Text)
t = Val(Text3.Text)
Label1 = ""
Label2 = ""
For i = 1 To paramA
r = Int(Rnd * paramB) + 1
Label1 = Label1 & r & " "
If i Mod 1 = 0 Then Label1 = Label1 & vbCrLf
Next i
For i = 1 To paramA
r = Int(Rnd * paramB) + 1
SummaR = SummaR + r
MemCikl = i
Select Case SummaR
Case Is > t
SummaR = SummaR - r
Exit For
Case Is = t
Exit For
End Select
Next i
MemNumber = 0: SummaR = 0
For i = MemCikl To paramA
'ñêîëüêî íåñëîæåííûõ ÷èñåë îñòàëîñü Label2 = MemNumber **************
MemNumber = MemNumber + 1
'êàêàÿ ñóììà îñòàëîñü Label2 = SummaR **************
SummaR = SummaR + r
Next i
Label3 = SummaR
Label2 = MemNumber
End Sub
Private Sub Form_Load()
Randomize
End Sub
и подставте эти значения
paramA = 5 в текст бокс1
paramB = 100 в текст бокс 2
t = 200 в текст бокс 3
нажмите кнопку и увидете
столбик из 5 случайных чисел в первом лейбле, кол-во неслож числе во втором лейбле и сумму в третем лейбле.
Вот ввел я параметрВ 100, А-5,С-200 он мне выдал столбик след чисел: 52;27;93;66;98,(у вас могут выскочить совершенно иные числа веды это генератор случ чисел) показал что несложенных осталось 1 число а оставшаяся сумма 96. Но если сложить первы 4 числа получиться 238, а граница 200 по идеи четвертое число не должно входить и прога должна показать что осталась два числа. Сумму можно не выводить, просто колличество чисел.
Я понял ошибку это связано с Генераторами
71+54+58=183<200 верно
29+31=164 не верно
но сумму можно не показывать
просто нажмите еще несколько раз кнопку и вы увидете что програма дает сбой
Это не проблема
вот моя прога там я все разьяснил если что-то непонятно спрашивайте вопрос тоже внутри в самом конце кода. Заранее благодарен.
Я пытался исправить сам но все что у меня получилось это выподение нужного столбика а вот сумму и кол-во оставшихся он не показывал.
Я помогу Вам не раньше Субботы или воскресения код смогу посмотреть только в четверг и то вечером, вообщем завал.
Положите в архив скан, что стоит на сайте только более разборчивый.
До четверга не контовать
буду ждать вашего сообщения а пока попробую еще раз сам покумекать может быть что-то придумаю. До связи![ATTACH]5049[/ATTACH]
Нашел упущение в своем коде в самом конце моего кода поставте Next u иначе выдает ошибку
'47R11,86/0,72
'0R0/0
'56L16,76/0,62
'45F15,56/0,67
'и т.д
Вопрос
1)
чтоб он складывал последние числа
'в строке Например если у нас столбик
'47R11,86/0,72
'0R0/0
'56L16,76/0,62
'45F15,56/0,67
я понел так
72
0
62
67
а что значит это 0,72+0+0,62+0,67 вместо НУЛЮ может быть другое число тоже надо складывать?
2)
если t1 было равно 0 то в лейбле будет показано 0R0/0
если t1 было равно 0 то в лейбле будет показано 0L0/0
если t1 было равно 0 то в лейбле будет показано 0F0/0
Не очень понятно
3)
Какие диапозоны?
Select Case r111 ' Проблема в том что
Case paramK1 To paramK2 'paramK1 должно быть > paramK2
Case paramK3 To paramK4 'paramK2 должно быть > paramK3
Case paramK5 To paramK6 ' и т.д
End Select
Пока все
Тоже не очень понятно
[COLOR="blue"]Dim[/COLOR] paramK1 [COLOR="blue"]As Integer[/COLOR][COLOR="green"] 'этот параметр задает нижнюю границу при котором будет выполняться определенное условие 1 ([COLOR="red"]здесь всегда нужно ставить 0[/COLOR])[/COLOR]
paramK1 = Val(Text5.Text) может так paramK1 = 0
текст бокс тогда не нужен
'47R11,86/0,72
'0R0/0
'56L16,76/0,62
'45F15,56/0,67
'и т.д
не только 10, условие задаеться в первом текст боксе
1)
чтоб он складывал последние числа
'в строке Например если у нас столбик
'47R11,86/0,72
'0R0/0
'56L16,76/0,62
'45F15,56/0,67
я понел так
72
0
62
67
а что значит это 0,72+0+0,62+0,67 вместо НУЛЮ может быть другое число тоже надо складывать?
нет он должен складывать последнее числа в столбике оно идет сразу после / в моем примере это 0,72;0;0,62;0,67 итд. их и надо складывать 0,72+0+0,62+0,67 если в столбике есть 0 как в данном примере то его тоже считать за цифру и складывать.
если t1 было равно 0 то в лейбле будет показано 0R0/0
если t1 было равно 0 то в лейбле будет показано 0L0/0
если t1 было равно 0 то в лейбле будет показано 0F0/0
Не очень понятно
при расчете t1 я задаю условие если t1 больше определенного значения то t1 зануляеться, а если t1 занулилось то и все дальнейшие вычисления будут равны 0 и в столбике оно запишеться как 0R0/0 или 0L0/0 или 0F0/0.Но можно сделать так чтоб вместо 0R0/0 или 0L0/0 или 0F0/0 просто записывался 0 но тогда наверное будет сложнее учитывать его при складывание ведь везде будет стоять числа в форме 45F15,56/0,67 а тут просто 0, ведь его необходимо учитывать при сложении а не пропускать, он должен засчитываться как цифра.
Какие диапозоны?
Select Case r111 ' Проблема в том что
Case paramK1 To paramK2 'paramK1 должно быть > paramK2
Case paramK3 To paramK4 'paramK2 должно быть > paramK3
Case paramK5 To paramK6 ' и т.д
End Select
Диапазон от paramK1 до paramK6 должен всегда равняться 100. paramK1 всегда = 0. paramK6 всегда равно 100, а вот остальные могут быть разными но задоваться в определенной послед-ти. Если я ставлю paramK2 34 то paramK3 должен быть на 1 ед больше =35, paramK4 может наход-ся в диапазоне от 35 до 99, например 78,тогда paramK5 будет на единицу больше =79. Ну тоесть я должен поставить три промежутка которые будут находиться в диапазоне от 0 до 100.
Это структура Select Case требует чтоб так было, потом то в моем коде первый параметр всегда меньше второго?
Тоже не очень понятно
Ну здесь вставляете любое число из диапазона от 5 до 20. Это пока не важно я если что диапазон потом смогу варировать но вы возьмите этот вариант.
paramK1 = Val(Text5.Text) может так paramK1 = 0
текст бокс тогда не нужен
Ну пусть пока останеться для наглядности. Те пусть пока нужно будет его вводить.
А если не 0 тогда что