Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 25.12.2013
Сообщений: 26

Составить рекурсивную процедуру для печати k- го элемента массива целых чисел

17.02.2014, 20:05. Показов 1079. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить рекурсивную процедуру для печати k- го элемента массива целых чисел.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2014, 20:05
Ответы с готовыми решениями:

Написать рекурсивную процедуру для печати всех элементов динамического массива, кратных 3
Дан динамический масив целых чисел. Написать рекурсивную процедуру для печати из него всех элементов , кратных 3.

Написать процедуру нахождения максимального элемента массива из 10 целых чисел
Написать процедуру нахождения максимального элемента массива из 10 целых чисел. Применить данную процедуру к трем заданным массивам.

Написать процедуру нахождения максимального элемента массива из 10 целых чисел
Написать процедуру нахождения максимального элемента массива из 10 целых чисел. Применить данную процедуру к трем заданным массивам.

15
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
17.02.2014, 21:26
Лучший ответ Сообщение было отмечено The trick как решение

Решение

А зачем здесь рекурсия?

Visual Basic
1
2
3
Sub PrintK(A() as integer, k as integer)
  Debug.Print A(k)
End sub
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 04:13
Вот пример как из динамического списка, в котором могут быть
вложенные списки, сделать один список рекурсивно

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
Option Explicit
'
'    © FelixMacintosh
'
Public Function AbsArr(ParamArray Var())
    ' Абсолютный список
    'Арг: Динамическое добавление аргументов
    Dim f, v, v1
    Static ind&, ubn&, va(), rec&
    For Each v In Var(0)
        If Not IsArray(v) Then
            If ind = ubn Then ubn = ubn * 2 + 1: ReDim Preserve va(ubn)
            ubn = UBound(va)
            If IsObject(v) Then Set va(ind) = v Else va(ind) = v 'Set // Let
            ind = ind + 1
        Else: rec = rec + 1: Call AbsArr(v)
        End If
    Next
    If rec = 0 Then ReDim Preserve va(ind - 1): AbsArr = va
    rec = rec - 1
End Function
 
Private Sub Form_Unload(Cancel As Integer)
    Dim v, v1, f&
    v = Array(99, Array(1, 2, 3), 4, 5, Array(6, 7))
    v1 = AbsArr(v)
    For f = LBound(v1) To UBound(v1)
        Print "Varname:= v1(" & f & ") .................Value:= " & v1(f)
    Next
    Print "=================================="
    Print "Размер списка = " & LBound(v1) & " to " & UBound(v1)
    Cancel = MsgBox("Выйти ?", vbYesNo) = vbNo
End Sub
Миниатюры
Составить рекурсивную процедуру для печати k- го элемента массива целых чисел  
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 06:30
Кое-что исправил, теперь можно добавлять объекты

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
Option Explicit
'
'    © FelixMacintosh
'
Public Function AbsArr(ParamArray Var())
    ' Абсолютный список
    'Арг: Динамическое добавление аргументов
    Dim f, v, v1
    Static ind&, ubn&, va(), rec&
    If rec Then Var = Var(0)
    For Each v In Var
        If Not IsArray(v) Then
            If ind >= ubn Then ubn = ind * 2 + 1: ReDim Preserve va(ubn) Else _
            ubn = UBound(va)
            If IsObject(v) Then Set va(ind) = v Else va(ind) = v 'Set // Let
            ind = ind + 1
        Else: rec = rec + 1: Call AbsArr(v)
        End If
    Next
    If rec = 0 Then
        ReDim Preserve va(ind - 1): AbsArr = va
        ind = 0: ubn = 0: Erase va
    Else: rec = rec - 1
    End If
End Function
 
Private Sub Form_Unload(Cancel As Integer)
    Dim v, v1, f&
    v = Array(99, Form1, Array(1, 2, 3), 4, 5, Array(6, 7))
    v1 = AbsArr(1, v)
    v1 = AbsArr(v1, v1, v1)
    For f = LBound(v1) To UBound(v1)
        If IsObject(v1(f)) Then Print "Varname:= v1(" & f & ") .................Value:= " & TypeName(v1(f)) Else _
        Print "Varname:= v1(" & f & ") .................Value:= " & v1(f)
    Next
    Print "=================================="
    Print "Размер списка = " & LBound(v1) & " to " & UBound(v1)
    Cancel = MsgBox("Выйти ?", vbYesNo) = vbNo
End Sub
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 07:39
Eщё пару полезных функций туда добавил
которые конвертируют список +пример использования

Кликните здесь для просмотра всего текста
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Option Explicit
'
'    © FelixMacintosh
'
Public Function CArrLng(Arr) As Long()
    Dim a&(), l&, u&, f&
    l = LBound(Arr): u = UBound(Arr)
    ReDim Preserve a(l To u)
    On Error Resume Next
    For f = l To u
        a(f) = CLng(Arr(f)): If Err Then a(f) = -Err.Number: Err.Clear
    Next
    CArrLng = a
End Function
 
Public Function CArrStr(Arr) As String()
    Dim a$(), l&, u&, f&
    l = LBound(Arr): u = UBound(Arr)
    ReDim Preserve a(l To u)
    On Error Resume Next
    For f = l To u
        a(f) = CStr(Arr(f)): If Err Then a(f) = "Error:[" & Err.Number & "]" & _
        Err.Description: Err.Clear
    Next
    CArrStr = a
End Function
 
Public Function AbsArr(ParamArray Var())
    ' Абсолютный список
    'Арг: Динамическое добавление аргументов
    Dim f, v, v1
    Static ind&, ubn&, va(), rec&
    If rec Then Var = Var(0)
    For Each v In Var
        If Not IsArray(v) Then
            If ind >= ubn Then ubn = ind * 2 + 1: ReDim Preserve va(ubn) Else _
            ubn = UBound(va)
            If IsObject(v) Then Set va(ind) = v Else va(ind) = v 'Set // Let
            ind = ind + 1
        Else: rec = rec + 1: Call AbsArr(v)
        End If
    Next
    If rec = 0 Then
        ReDim Preserve va(ind - 1): AbsArr = va
        ind = 0: ubn = 0: Erase va
    Else: rec = rec - 1
    End If
End Function
 
 
Private Sub Form_Unload(Cancel As Integer)
    Dim v, v1, f&, ListLng&(), ListStr$()
    v = Array(99, Form1, Array(1, 2, 3), 4, 5, Array(6, 7))
    v1 = AbsArr(1, v)
    v1 = AbsArr(v1, v1, v1)
    ListLng = CArrLng(AbsArr(v))
    ListStr = CArrStr(AbsArr(v))
    v1 = ListStr
    For f = LBound(v1) To UBound(v1)
        If IsObject(v1(f)) Then Print "Varname:= v1(" & f & ") .................Value:= " & TypeName(v1(f)) Else _
        Print "Varname:= v1(" & f & ") .................Value:= " & v1(f)
    Next
    Print "=================================="
    Print "Размер списка = " & LBound(v1) & " to " & UBound(v1)
    Cancel = MsgBox("Выйти ?", vbYesNo) = vbNo
End Sub
Миниатюры
Составить рекурсивную процедуру для печати k- го элемента массива целых чисел   Составить рекурсивную процедуру для печати k- го элемента массива целых чисел  
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 07:56
Вот целиком проект, пользуйтесь )
Вложения
Тип файла: rar ListArray.rar (13.3 Кб, 7 просмотров)
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
18.02.2014, 10:24
Конечно непонятно зачем, но где-то так можно
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Option Explicit
Private Sub Комманда1_Click()
Dim A
A = Array(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22)
REC A, 5, 0 ' вызов процедуры. Передаём массив, номер элемента и начало отсчёта
End Sub
 
Sub REC(A, K, X) ' рекурсивная процедура
    X = X + 1
        If K = X Then: Debug.Print A(K): Exit Sub
    REC A, K, X ' вызывает сама себя
End Sub
Хотя напрягает, что ТС тупо грузит сюда свои учебные задания и не предпринимает никаких попыток самой хоть попробовать их выполнить! Что ж за студенты пошли! Наши будущие руководители! Кто ж за вас работать-то будет?

Добавлено через 4 минуты
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
Вот целиком проект, пользуйтесь )
"И что это за народное творчество" спросил бы Матросскин!
2
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 10:38
Цитата Сообщение от Alex77755 Посмотреть сообщение
"И что это за народное творчество" спросил бы Матросскин!
Дело в том, что я тоже когда-то был новичком, и поэтому выложил,
то что может пригодиться, исходя из своего опыта с чем мне приходилось
сталкиваться, предворительно проверил у себя, чтоб всё работало как в аптеке

не люблю каких-то недоделок, тем более как вы говорите, студенты пошли
которые не способны к самостоятельным решениям
Цитата Сообщение от Alex77755 Посмотреть сообщение
Наши будущие руководители! Кто ж за вас работать-то будет?
если так пойдет, то придут китайцы, и обеспечат работой,
в место того чтобы учиться на картинки жать, будут спину гнуть, за копейки
2
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
18.02.2014, 11:16
Я емею в виду, что в том, что ты выложил форма не та!

Добавлено через 38 секунд
В проекте формы нет, а та что рядом не от этого проекта

Добавлено через 2 минуты
Всё, что есть в форме:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_Unload(Cancel As Integer)
    Dim f&, u&, l$(), p&, q&, rez#
    l = Split("13, 4, -2, 6, 7, -1, -5, 2, -3, 4", ",")
    ReDim m$(0), n$(0)
    u = UBound(l)
    For f = u To 0 Step -1
        If l(f) < 0 Then
            m(0) = m(0) & " " & Trim(l(f)): p = p + 1
        ElseIf Val(l(f)) > 0 Then n(0) = n(0) & " " & Trim(l(f)): q = q + 1
        End If
    Next
    m = Split(Mid$(m(0), 2)): n = Split(Mid$(n(0), 2))
    For f = 0 To IIf(p < q, p, q) - 1
      rez = rez + m(f) * n(f)
    Next f
    Cls
    Print "The result of calculation = " & rez
    CreateObject("SAPI.SpVoice").Speak "The result of calculation " & rez
    If MsgBox("Выйти ?", vbYesNo) = vbNo Then Cancel = 1
End Sub
Добавлено через 11 минут
Ты не хранишь формы в папке с проектом?
Где искать форму?
Visual Basic
1
Form=..\Default 001\Form1.frm
Исправил на
Visual Basic
1
 Form=Form1.frm
Но явно не то, о чём ты писал
2
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 11:27
Спасибо что заметили
хорошо что я текст на форуме выложил !
оказывается при копирывании папки с проектом я не учел
то что файл проекта может ссылаться на ту форму, откуда копировал

исправил это недоразумение, извиняюсь
Вложения
Тип файла: rar ListArray.rar (13.6 Кб, 6 просмотров)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
18.02.2014, 12:08
Alex77755, рекурсия полезна, когда она при каждом вызове чуть упрощает задачу. А в постановке ТС задача печати k-го элемента сводится... к чему? К печати k-го элемента. Вот если бы нужно было бы печатать k-й элемент списка (с интерфейсом "дать голову" и "дать хвост") - вот тогда бы задача была разумной...
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
18.02.2014, 12:29
Catstail, К сожалению не все учебные задания логичны.
Но, в принципе, это не лишено каког-то смысла: Для получения навыков нужно выполнять задания различного типа. Что бы хотя бы понять безсмысленность некоторых.
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
18.02.2014, 13:08
Да можно придумать задачу Допустим, у нас есть ЭВМ, которая не умеет складывать два числа, а умеет только прибавлять и отнимать 1, и сравнивать с 0.
Задача: составить рекурсивную функцию сложения целых положительных чисел для этой ЭВМ.
Решение
Visual Basic
1
2
3
4
5
6
7
Function AddRec%(x%, y%)
  If x Then
    AddRec = AddRec(x - 1, y) + 1
  Else
    AddRec = y
  End If
End Function

Для чисел любого знака
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
Function AddRec%(x%, y%)
  Select Case x
  Case Is > 0: AddRec = AddRec(x - 1, y) + 1
  Case Is < 0: AddRec = AddRec(x + 1, y) - 1
  Case Else: AddRec = y
  End Select
End Function
1
18.02.2014, 13:14

Не по теме:

Цитата Сообщение от Alex77755 Посмотреть сообщение
Что бы хотя бы понять безсмысленность некоторых.
Браво, Alex77755!

0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.02.2014, 13:18
Цитата Сообщение от Казанский Посмотреть сообщение
составить рекурсивную функцию сложения целых положительных
Это ещё что ...
я калькулятор делал, там рекурсия была в том
что функция вызывала себя для пересчёта, выражений в скобках
и выводила результат

Добавлено через 2 минуты
правда затерялся, где-то ...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
18.02.2014, 13:30
Казанский, Ваша задача отнюдь не бессмысленна. Она сводит сложную операцию к простой. А к чему сводится печать k-го элемента массива?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2014, 13:30
Помогаю со студенческими работами здесь

Напишите рекурсивную процедуру для печати всех букв строки
Дана строка, состоящая из букв и цифр. напишите рекурсивную процедуру для печати всех букв из этой строки. массивы не использовать!(а...

Составить рекурсивную процедуру нахождения максимального элемента в массиве
3. Составить рекурсивную процедуру нахождения максимального элемента в массиве.

Разработать рекурсивную процедуру двоичного поиска элемента массива
Нужно подредактировать часть кода. Необходимо разработать рекурсивную процедуру двоичного поиска элемента массива, равного данному...

Составить процедуру для определения максимального по модулю элемента одномерного массива
Составить процедуру для определения максимального по модулю элемента одномерного массива. Если максимальные по модулю элементы заданных...

Составить процедуру для нахождения максимального и минимального по модулю элемента одномерного массива A
Здравствуйте. Срочно нужна помощь по данной программе. Составить процедуру для нахождения максимального и минимального по модулю...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru