Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
Gerkss
2 / 2 / 0
Регистрация: 06.05.2013
Сообщений: 50
1

Циклы с предусловием и постусловием

06.05.2013, 19:43. Просмотров 2605. Ответов 18
Метки нет (Все метки)

Здравствуйте. У меня возникла проблема при составлении программы, не могу сдружиться с циклами( Вот задача:
Дано натуральное число. Определить:
а) количество цифр "3" в нем;
б) сколько раз в нем встречается цифра, равная последней;
в) количество четных цифр в нем.

Заранее Спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2013, 19:43
Ответы с готовыми решениями:

Использование разных циклов: с предусловием, с постусловием, с параметром
Помогите решить задачу на VBA с использованием разных циклов,с предусловием,с...

Программа с использованием цикла с предусловием или с постусловием
Не важно,либо предусловие или постусловие. Помогите пожалуйста.

Циклы с постусловием в VBA
Составить программу вычисления значений функции F(x) на отрезке с шагом h....

цикл с постусловием
Private Sub CommandButton1_Click() Dim a, b, h As Single Dim x, y As Single...

Цикл с предусловием
Даны действительное число а, натуральное число n. Вычислить: ...

18
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
07.05.2013, 00:22 2
Ваши наработки? Где?

Добавлено через 2 часа 20 минут
Ладно. Не дружат - не навязывайтесь. Мы с Вами люди гордые, обойдемся.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub TTTT()
'Need Tools > References > Microsoft Scripting Runtime
Dim dict As Object, i&, j&, k&, N&, mKeys
    N = 2083253017: j = 3: k = CLng(Right(N, 1))
    Set dict = CreateObject("scripting.dictionary")
    dict.comparemode = 1
        For i = 1 To Len(CStr(N))
            If Not dict.exists(Mid(CStr(N), i, 1)) Then
                dict.Add Mid(CStr(N), i, 1), 1
                    Else
                        dict.Item(Mid(CStr(N), i, 1)) = _
                                    CLng(dict.Item(Mid(CStr(N), i, 1))) + 1
            End If
        Next 'i
    i = 0
        For Each mKeys In dict.keys
            If CLng(mKeys) Mod 2 = 0 Then i = i + 1
        Next
    MsgBox "MY NUMBER:" & Space(2) & N & Chr(13) & Chr(13) & _
                "Number" & Space(2) & j & Space(2) & "meets" & Space(2) & _
                dict.Item(CStr(j)) & Space(2) & "times ;" & Chr(13) & Chr(13) & _
                "Number" & Space(2) & k & Space(2) & "meets" & Space(2) & _
                dict.Item(CStr(k)) & Space(2) & "times ;" & Chr(13) & Chr(13) & _
                "Number Of Even" & Space(2) & "-" & Space(2) & i & " ."
    Set dict = Nothing
    MsgBox Space(12) & "D O N E!"
End Sub
Или было нужно через Regular Expressions?
1
Скрипт
5445 / 1126 / 49
Регистрация: 15.09.2012
Сообщений: 3,418
07.05.2013, 06:43 3
Igor_Tr, студенты в этом разделе Форума не используют библиотеки в своих кодах. Вы используете в коде библиотеку "Microsoft Scripting Runtime".

Поэтому студенту ваш код не подходит - работу у него не примут.
0
Alex77755
10760 / 3329 / 557
Регистрация: 13.02.2009
Сообщений: 9,800
07.05.2013, 08:01 4
И ещё: по условию нужны циклы с условиями While - Wend, Do - Loop
0
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
07.05.2013, 11:17 5
Здравствуйте.
To_Alex77755. Да не вопрос. Но не вижу я в условии этого
To Скрипт. Это для школы, или для ВУЗа? Если для последнего, тогда я что-то не понимаю. Напоминает обучение лошади для мельницы. Только по кругу, и только по часовой. Студенты имеют право решать как считают нужным, и имеют обязанность защитить свое решение и ответить на доп. вопросы. А еще имеют право защищаться на комиссии (сам использовал, и удачно). Если очень препод старательный .
0
Скрипт
5445 / 1126 / 49
Регистрация: 15.09.2012
Сообщений: 3,418
07.05.2013, 11:25 6
Igor_Tr, на Форуме, в разделе "VBA" создают темы студенты из ВУЗов. Это не программисты, у них другая специальность, например, экономисты. У них есть предмет "Информатика". На предмете "Информатика" они изучают основы программирования, используя язык программирования "VBA".

В разных ВУЗах по-разному, в каких-то ВУЗах изучает основы программирования на других языках программирования, например, на "Паскаль".
0
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
07.05.2013, 11:41 7
To Скрипт. Я Вас очень уважаню, но.. Знаю человека (не "отечественное" образование), который делал курсак (не профильный!!!) для жены (один из московских вузов), принесла ему козу. Он собрал местные каталоги, и выполнил на их основе. Козу выбросил. Она тоже воевала:"У нас так не принято! не примут!..." В результате проект прошел на ура и в вузе был какое-то время как показательный. Правда, для защиты он ее поднатаскал. Время, смеется, заняло больше, чем на сам проект
0
Hugo121
6292 / 2391 / 406
Регистрация: 19.10.2012
Сообщений: 7,080
07.05.2013, 12:31 8
Я тоже на стороне словарей
А для while/wend нужно другую задачу давать, а не ту, которая создана для решения словарями

Добавлено через 8 минут
Кстати, а на регулярках можно сделать всю задачу полностью? Количество 3 и последней цифры можно, это знаю... А как чётные? Считать 2/4/6/8?
Я не специалист...
0
Alex77755
10760 / 3329 / 557
Регистрация: 13.02.2009
Сообщений: 9,800
07.05.2013, 12:34 9
0 тоже чётный
А на счет условий можно так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
i = 0
       While i <= Len(CStr(n))
       '''''''''''''''''''''''код как и был со словарём
        i = i + 1
        Wend
        
  i = 0
        Do While i <= Len(CStr(n))
       '''''''''''''''''''''''код как и был со словарём
        i = i + 1
        Loop
        
        
  i = 0
        Do
       '''''''''''''''''''''''код как и был со словарём
        i = i + 1
        Loop While i <= Len(CStr(n))
Добавлено через 57 секунд
И ещё есть Until для условий
0
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
07.05.2013, 12:44 10
To Alex77755. Я тоже тогда про это подумал. Но не было уточнения - оставил как есть.
Здравствуйте, Hugo. И как праздники? Очень надеюсь, что я действительно тогда был не прав. А если, тогда от души сочувствую. Но ВСЕ ПРОХОДИТ! У нас дурдом. Еще не помню, чтоб в апреле два раза траву косил (в смысле - газон)
0
Hugo121
07.05.2013, 13:02
  #11

Не по теме:

Про "не прав" не понял... Ну да ладно.
Праздники закончились, траву пока косить рано (только вчера был первый почти летний тёплый день) :(
Но первый загар уже есть - пока ещё приятно посидеть с холодным пивком в саду на солнышке (позже будет приянтно в тенёчке) :)

0
Gerkss
2 / 2 / 0
Регистрация: 06.05.2013
Сообщений: 50
07.05.2013, 15:21  [ТС] 12
Igor_Tr, огромное спасибо)) всё отлично, всё приняли)
0
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
07.05.2013, 15:26 13
Приятно удивлен. Но постарайтесь "подружиться" с как можно больше...
0
Gerkss
2 / 2 / 0
Регистрация: 06.05.2013
Сообщений: 50
12.06.2013, 23:47  [ТС] 14
Alex77755, а можно полный вариант программы?

Добавлено через 2 минуты
можно ли полный вариант вашей программы? с циклами DO While, сейчас начал разбираться, не могу понять, как внести данные, в методичке так сухо дано, что не понять(
0
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
13.06.2013, 02:36 15
Цитата Сообщение от Hugo121 Посмотреть сообщение
а на регулярках можно сделать всю задачу полностью? Количество 3 и последней цифры можно, это знаю... А как чётные? Считать 2/4/6/8?
наверное, примерно так:
Visual Basic
1
2
3
4
5
6
7
8
Sub tt()
  s = "567547469579"
  With CreateObject("VBScript.Regexp")
    .Global = True
    .Pattern = "[02468]"
    MsgBox .Execute(s).Count
  End With
End Sub
или так:
Visual Basic
1
2
3
4
5
6
7
8
Sub tt()
  s = "56754746009579"
  With CreateObject("VBScript.Regexp")
    .Global = True
    .Pattern = "[^02468]"
    MsgBox Len(.Replace(s, ""))
  End With
End Sub
0
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
13.06.2013, 11:17 16
To Gerkss. Не понимаю, как можно учить по методичке (но хотел бы научиться). Есть несколько основных видов подобных циклов - Do...Loop, While...Wend. Они они имеют кучу модификаций. Основная разница (между модификациями!!!) - время проверки необходимости выполнения цикла. То-есть, вариант1: в начале проверяем условие, и тогда (зависимо от условия) выполняем/невыполняем код в середине такого цикла. Вариант2: обязательно выполняется код в середине цикла, и в конце (а иногда и в ~середине) принимается, по определенным результатам/условиям, решения - возвращаться снова в код, который всередине такого цикла, или идти дальше по коду, который уже после цикла. Какой цикл/модификацию применить - определяется по потребности "писателя кода", и, очень часто, зависит от субьективного (личных симпатий "писателя"). Подобные циклы - очень важные для языков программирования, поэтому лучше Вам про них почитать (например, Гарнаев, Walkenbach, Harris). Приблизительно - 40 страниц, и есть примеры.
0
Alex77755
10760 / 3329 / 557
Регистрация: 13.02.2009
Сообщений: 9,800
13.06.2013, 11:53 17
Igor_Tr,
А я наоборот не понимаю как можно не понять хотя бы прочитав методичку. Вот цитата из методички с примерами:

Кликните здесь для просмотра всего текста
Цикл Do…Loop

В этом случае повторяется блок операторов, пока заданное условие является истинным или пока оно не станет истинным.
Имеется четыре варианта синтаксиса этого цикла. В двух первых вариантах условие проверяется в начале цикла:
Do [{While | Until} условие]
тело цикла
Loop
В других двух вариантах условие проверяется в конце цик-ла:
Do [{While | Until} условие]
тело цикла
Loop [{While | Until} условие]
Здесь условие является числовым или строковым выраже-нием со значениями True или False. Вообще, оно необязательно. Значение Null условия трактуется как False. Тело цикла – это последовательность операторов, которая будет выполняться, пока условие остается истинным, если перед ним стоит ключе-вое слово While, или пока оно остается ложным – в вариантах цикла с ключевым словом Until. Таким образом, циклы вида While условие эквивалентны циклам вида Until Not условие. Кроме того, в тело цикла может входить оператор Exit Do, вы-полнение которого сразу прекращает цикл и передает управле-ние оператору, непосредственно следующему за Loop. В случае нескольких вложенных циклов Do…Loop оператор Exit Do за-вершает лишь самый внутренний цикл, в теле которого он рас-положен.
Примеры.
В данном примере реализованы три варианта поиска по об-разцу с проверкой условия в начале цикла, в конце цикла и в середине цикла для варианта поиска по образцу с барьером:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Public Sub Loop1()
Const Size = 5
Dim X() As Integer
Dim I As Integer
Dim Found As Boolean
Const pat = 7
'Инициализация случайными числами в интервале [1, 11]
ReDim X(1 To Size)
Randomize
For i = 1 To Size
X(i) = Int(11 * Rnd)
Next i
' Поиск по образцу с проверкой в начале цикла
i = 1: Found = False
Do While (i <= Size) And (Not Found)
If X(i) = pat Then
Found = True
Else: i = i+1
End If
Loop
If Found Then
Debug.Print "Найден образец!"
Else: Debug.Print "Образец не найден!"
End If
' Поиск по образцу с проверкой в конце цикла
i = 1: Found = False
Do 
If X(i) = pat Then
Found = True
Else: i = i+1
End If
Loop Until Found Or (i = Size + 1)
If Found Then
Debug.Print "Найден образец!"
Else: Debug.Print "Образец не найден!"
End If
 
' Поиск с барьером
ReDim Preserve X(1 To Size + 1)
X(Size + 1) = pat
i = 1 
Do
If X(i) = pat Then Exit Do
i = i + 1
Loop
If i = size + 1 Then
Debug.Print " Образец не найден!"
Else: Debug.Print "Образец найден!"
End If
End Sub
0
Igor_Tr
4369 / 653 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
13.06.2013, 12:05 18
To_Alex77755. Это как-бы с моего личного опыта. Методичка, в моем понимании, это компас, направление в сжатом виде. Считаю, что почитать развернутый материал все-таки лучше (еще лучше - из нескольких источников, если остались вопросы). Может, я такой недоходящий... А может, методички теперь лучше Гарнаев.
0
Alex77755
13.06.2013, 12:20     Циклы с предусловием и постусловием
  #19

Не по теме:

На счёт нескольких источников я согласен:
И некоторые методички лучше не читать.
Но в некоторых расписано более доходчиво чем в справочниках.

0
13.06.2013, 12:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 12:20
Привет! Вот еще темы с ответами:

Цикл с предусловием VBA
Всем привет, нужно решить 8 любых задач в VBA. Очень нужна ваша помощь :sorry:...

Задача на цикл с предусловием
Что неправильно я делаю в цикле? Потому программа считает не правильно....

Доработка кода! Цикл с постусловием!
Sub Кнопка1_Щелчок() Dim N, K As Integer N = InputBox(&quot;Введите значение N&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru