Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10

Передача параметров в процедуру по ссылке

27.04.2018, 21:13. Показов 2041. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вроде простецкая задача, решается в VB и FreeBasic при помощи ByRef просто и понятно.
Как это сделать в PB и где об этом написано в справке по PB я не нашёл.
Нужен был код для экспериментов.
С одного форума в ветке FreeBasic нашёл код, где это необходимо для правильной работы программы, автор перевода с Паскаля на FB ur_naz
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
' Gosper.bas
     
    Declare Sub Draw2 ( ByRef x As Double,_
                        ByRef y As Double,_
                        ByVal l As Double,_
                        ByVal u As Double,_
                        ByVal t As Integer,_
                        ByVal q As Integer )
     
    Declare Sub DrawGosper ( ByVal x As Double,_
                             ByVal y As Double,_
                             ByVal l As Double,_
                             ByVal u As Double,_
                             ByVal t As Integer,_
                             ByVal q As Integer )
    Const pi = 3.14
     
    ScreenRes 800, 600, 8
    DrawGosper (175, 425, 450, 0, 4, 0)
    Sleep 
     
    Sub Draw2 ( ByRef x As Double,_
                ByRef y As Double,_
                ByVal l As Double,_
                ByVal u As Double,_
                ByVal t As Integer,_
                ByVal q As Integer )
     
        DrawGosper (x, y, l, u, t, q)
        x = x + l*cos(u)
        y = y - l*sin(u)
    End Sub
     
    Sub DrawGosper ( ByVal x As Double,_
                     ByVal y As Double,_
                     ByVal l As Double,_
                     ByVal u As Double,_
                     ByVal t As Integer,_
                     ByVal q As Integer )
     
     If t > 0 Then
     
     If q = 1 Then
          x = x + l*cos(u)
          y = y - l*sin(u)
          u = u + pi
     End If
     
        u = u - 2 * pi / 19
        l = l / sqr(7)
        Draw2(x, y, l, u,          t-1, 0)
        Draw2(x, y, l, u + pi/3,   t-1, 1)
        Draw2(x, y, l, u + pi,     t-1, 1)
        Draw2(x, y, l, u + 2*pi/3, t-1, 0)
        Draw2(x, y, l, u,          t-1, 0)
        Draw2(x, y, l, u,          t-1, 0)
        Draw2(x, y, l, u - pi/3,   t-1, 1)
     
     Else
          Line ( CInt(x), CInt(y) ) - ( CInt(x+l*cos(u)), CInt(y-l*Sin(u)) ),5,
     End If
     
    End Sub
Задача - перевести на PureBasic. Особенность именно в том, что в процедуре Draw2 два параметра передаются по ссылке ByRef x As Double, ByRef y As Double
Решение для PureBasic будет такое:
PureBasic
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
67
68
69
70
Declare           Draw2 ( *x.float, 
                          *y.float, 
                         l.f, 
                         u.f, 
                         t.i, 
                         q.i )
     
Declare          DrawGosper ( x.f, 
                              y.f, 
                              l.f, 
                              u.f, 
                              t.i, 
                              q.i )
    
     
Procedure        DrawGosper (x.f, 
                              y.f, 
                              l.f, 
                              u.f, 
                              t.i, 
                              q.i )
     
     If t > 0  
     
         If q = 1  
               x + l*|!REG3XP3!>Cos(u)
               y - l*|!REG3XP3!>Sin(u)
               u + #PI
         EndIf
     
        u - 2 * #PI / 19
        l / Sqr(7)
        Draw2(@x, @y, l, u,           t-1, 0)
        Draw2(@x, @y, l, u + #PI/3,   t-1, 1)
        Draw2(@x, @y, l, u + #PI,     t-1, 1)
        Draw2(@x, @y, l, u + 2*| class="re2">#PI/3, t-1, 0)
        Draw2(@x, @y, l, u,           t-1, 0)
        Draw2(@x, @y, l, u,           t-1, 0)
        Draw2(@x, @y, l, u - #PI/3,   t-1, 1)
     
      Else
           LineXY ( x, y, x+l*|!REG3XP3!>Cos(u), y-l*|!REG3XP3!>Sin(u), #Red)
      EndIf
     
   EndProcedure
    
 Procedure Draw2 ( *x.float, 
                   *y.float,
                   l.f, 
                   u.f, 
                   t.i, 
                   q.i )
     
        DrawGosper (*x\f, *y\f, l, u, t, q)
         *x\f + l*|!REG3XP3!>Cos(u)
         *y\f - l*|!REG3XP3!>Sin(u)
    EndProcedure
     
 
   
   OpenWindow(0, 0, 0, 800, 600, " ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
   CanvasGadget(0,0,0,800, 600 )
   
   StartDrawing(CanvasOutput(0))
      DrawGosper (175, 425, 450, 0, 4, 0)
   StopDrawing()  
    
    Repeat
      Event = WindowEvent()
    Until Event = #PB_Event_CloseWindow
В итоге получаем картинку как надо.
Можно написать простой макрос
PureBasic
1
2
3
Macro ByRef(Name, Type)
  *Name.Type
EndMacro
Все эти премудрости нашёл на английском оф. форуме по PB.
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2018, 21:13
Ответы с готовыми решениями:

Передача параметров по ссылке
Вот задание: С клавиатуры вводится число, передается в вызываемую функцию, в ней найти сумму делителей и их число. Результат работы...

Передача параметров по ссылке
Стоит ли передавать все параметры (кроме скалярных и указателей) по сслыке? Т.е. вместо void doSomething(const int _count, const...

Передача параметров по ссылке
Допустим, есть ф-я: int foo() { } Хотелось бы чтобы она изменяла значение, передаваемое ей. Например:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2018, 21:13
Помогаю со студенческими работами здесь

Передача параметров по ссылке
Правильно ли я понимаю, что все параметры, описываемые после слово var будут передаваться по ссылке? procedure F(var a, b: integer); ...

Передача параметров по ссылке
У кого есть рабочий вариант сего чуда ? (К примеру,функции квадратного корня).В учебнике не работает.

Передача параметров по ссылке
Доброго! Имеется класс: class Node(object): def __init__(self): self.key = 0 self.left = None ...

Передача параметров по ссылке в класс
Помогите пожалуйста проблемой: нужно передать в класс некой формы по ссылке имя сервера и базы данных, чтоб после закрытия этой модальной...

Передача параметров по ссылке в функции
Простейшая задачка по передаче параметров по ссылке в функции, но не могу на что ругается компилятор... #include <stdio.h> int...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru