Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334

Как передать в процедуру массив (структуру)?

15.04.2015, 01:35. Показов 1533. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как передать в другую процедуру структуру переменных?
И так, к примеру у нас имеется такой код со структурами переменных.
Кликните здесь для просмотра всего текста
VB.NET
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
   Structure WItemPro
        Public AnimCode As Integer
        Public MinDmg As Integer
        Public MaxDmg As Integer
        Public DmgType As Integer
        Public MaxRangeP As Integer
        Public MaxRangeS As Integer
        Public ProjPID As Integer
        Public MinST As Integer
        Public MPCostP As Integer
        Public MPCostS As Integer
        Public CritFail As Integer
        Public Perk As Integer
        Public Rounds As Integer
        Public Caliber As Integer
        Public AmmoPID As Integer
        Public MaxAmmo As Integer
        Public wSoundID As Byte
   End Structure
 
   Structure AItemPro
        Public Caliber As Integer
        Public Quantity As Integer
        Public ACAdjust As Integer
        Public DRAdjust As Integer
        Public DamMult As Integer
        Public DamDiv As Integer
   End Structure

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   Private WItem As WItemPro
   Private AItem As AItemPro
 
Sub Test()
  Select
    Case
       Save(WItem) 
    Case
       Save(AItem)
    ...
   End Select
End Sub
 
Sub Save(Data)
...
FilePut(fFile, Data)
...
End Sub
Стоит задача передать "структуру переменных" WItem/AItem в процедуру Save для дальнейшего вывода их в файл, как это можно реализовать?
Я конечно могу это реализовать через SelectCase, но я поставил себе задачу обойтись без подобных проверок.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2015, 01:35
Ответы с готовыми решениями:

Массив: Подскажите, пожалуйста, как передать массив А в процедуру Arr?
Добрый день! Подскажите, пожалуйста, как передать массив А в процедуру Arr? using System; using System.Collections.Generic; ...

Как передать массив в процедуру?
:confused: нужно передать в проседуру или функцию массив и поменять там значение элементов как это молжно сделать procedure...

Передать в процедуру массив как константу
Type tarr = array of integer; .... procedure Sort(const a : Tarr); begin //тут массив А сортируется end.

6
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.04.2015, 09:56
Это задача на полиморфизм. Варианты.
1. Реализовать несколько перегруженных версий функции, принимающих разные типы параметров. Подходит для любых типов данных, но увеличивает количество функций.
2. Чтобы одна функция могла принимать несколько разных типов, эти типы должны иметь общего предка. Для этого нужно создать базовый класс и наследовать от него несколько потомков. Здесь уместны только классы, но не структуры, так как структуры неявно наследуют от класса System.ValueType и не могут наследовать ни от какого другого типа.
0
39 / 40 / 20
Регистрация: 30.09.2013
Сообщений: 141
15.04.2015, 12:01
А может создать процедуру с необязательными параметрами? А внутри сохранять в файл только то, что НЕ Nothing?

VB.NET
1
2
3
Private Sub Save(Optional ByVal WData As WItemPro = Nothing, Optional AData As AItemPro = Nothing)
 
End Sub
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.04.2015, 12:36
FlegmaSpirit, значение Nothing является значением по умолчанию для переменных. Значением по умолчанию для структуры будет сама структура.
0
39 / 40 / 20
Регистрация: 30.09.2013
Сообщений: 141
15.04.2015, 15:30
Не в том суть, какое там значение по умолчанию будет. Главное, что моя мысль понятна. И если она подойдёт, хорошо. Если нет, придётся действительно заморочиться с перегрузками и полиморфизмом.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.04.2015, 15:35
FlegmaSpirit, структура не может быть Is Nothing, потому что она не является ссылкой на объект.
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
15.04.2015, 15:38  [ТС]
Цитата Сообщение от FlegmaSpirit Посмотреть сообщение
А может создать процедуру с необязательными параметрами?
да не, это не то, цель другом...
а это получается по сути тоже самое как и использовать в процедуре разные строчки
FilePut(AItem)
FilePut(BItem)
FilePut(WItem)
и использовать условие Select Case, в зависимости от передаваемого параметра в процедуру.
--------

В общем не буду я геморроить, сделаю все по простому.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2015, 15:38
Помогаю со студенческими работами здесь

Как передать ссылку на массив в процедуру
Объявляю динамическую структуру данных. type mas=array of byte; pmas=^mas; var a:pmas; Вопрос следующий, как мне передать...

Как передать ссылку на массив в другую процедуру
Добрый день, подскажите пожалуйста как реализовать передачу динамической ссылки из одной процедуры в другую? Вот образец запроса, как я...

Как правильно передать в процедуру массив строк char*?
Нужно чтобы процедура возвращала измененный массив. Пытаюсь так: Void sss(char**arr) { *arr="i"; } ...

Как передать в хранимую процедуру в MSSQL 2000 массив данных?
Есть нужда передать в качестве входного параметра в хранимую процедуру массив данных. Есть ли какой-нибудь способ это сделать? И как потом...

как передать структуру в функцию, чтобы после выполнения функции он(массив в данном случае) вернулся измененным?
const int size = 256; struct MARKER { char mark; } void processing(MARKER struct_m) { //тут какие-то изменения...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru