|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
Массивы и функции как параметры18.06.2013, 18:14. Показов 3111. Ответов 23
Метки нет (Все метки)
Из главной функции нужно вызвать промежуточную функцию с 3 параметрами - (введённый двумерный массив, кол-во элементов, функция).
Последний параметр действие(функция) которое нужно выполнить над массивом. Например заменить нулем все элементы столбца после минимального элемента. Сложность у меня вызвало то что промежуточная функция должна выполнить это действие для конкретных элементов. Например у меня выполнить действие для столбцов у которых последний элемент имеет чётное значение. Как в промежуточной функции я должен уметь различить это, если я получаю целиков массив в параметрах? При выполнении действия как то передавать ему нужный столбец как отдельную структуру? Если писанина вся эта не ясна вот схема вызовов функций: main -> промежуточная функция (3 параметра), определяются нужные столбцы -> функция(действие над выбранными столбцами)
0
|
|
| 18.06.2013, 18:14 | |
|
Ответы с готовыми решениями:
23
Массивы, как параметры функций
|
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 20.06.2013, 12:10 [ТС] | |
|
Люди, ну объясните пожалуйста как это сделать?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||
| 25.06.2013, 10:20 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
||||||
| 02.07.2013, 00:19 [ТС] | ||||||
|
Огромное спасибо!
Что бы точно отразить суть задания напишу такой полукод:
И вопрос, что за трюк с этим typedef (*action)? Немного не понял. Спасибо.
0
|
||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||
| 02.07.2013, 12:29 | ||||||||
(int **, int, int) и возвращает void.
1
|
||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 02.07.2013, 14:21 | |
|
SanAlex, а чего подгонять? Мой код и так на 80% соответствует заданию. Вам осталось написать второе действие, а также функцию main, в которой вызывать process_array с соответствующими аргументами.
1
|
|
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 15.07.2013, 19:15 [ТС] | |
|
Ещё такой вопрос: вот вы двумерный массив в списке формальных параметров функции пишете так (**arr)
А разве если просто написать (arr) - это не будет ссылкой на его первый элемент? Если все же оставить так (**arr), то при вызове какая будет запись массива в фактических параметрах. Я просто думал когда дело ведётся с массивом, то при описании и вызове его в параметрах, он записывается одинаково -(arr).
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
| 15.07.2013, 20:00 | |||||||||||
|
SanAlex, вопроса не понял. Если записать так:
Учтите, что обычный статический двумерный массив, объявленный как type array[ROWS][COLS], в функцию, ожидающую type **, передать не получится, поскольку типы будут несовместимы (тип массива array - не type **, а type (*)[COLS]). Поэтому передавать туда надо массив указателей, например, динамически выделенный массив массивов:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
||||||||||||||||
| 15.07.2013, 20:34 [ТС] | ||||||||||||||||
|
silent_1991
Да я видимо не понятно описал вопрос. Ну вообщем. каков будет синтаксис, если: 1) Массив в списке формальных параметров 2) Тот же массив в списке фактических (при вызове) Далее, допустим такое описание функции
Это называется передача "Массива указателей?" Такой же синтаксис пойдёт и для n-мерного массива? И что написано в этой строке?
Спасибо.
0
|
||||||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||
| 15.07.2013, 20:43 | ||||
|
1
|
||||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 16.07.2013, 22:02 [ТС] | |
|
Спасибо. Однако я ничего не понял. Объясните пожалуйста доступным, для новичка, языком что к чему.
Перерыл весь интернет. Передача двумерных массивом как параметра везде описана по разному. Кто то в параметрах функции пишет этот массив так: (int **arr) Кто то так: (int arr[][N]) или даже так (int *arr), тогда какой смысл в первом случае? Кто нибудь может доступно объяснить при каком описании, какой будет вызов (синтаксически). И какой вариант лучше и почему, или может каждый вариант хорош для конкретного случая? И в конце концов что из этого всего называется Массивом указателей, что из них массив массивов? Надеюсь на вашу снисходительность по отношению к моим "непоняткам". Просто такое расхождение в информации разных источником совсем с толку сбило, и запутало. Спасибо.
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||||||||||||||||||||||
| 16.07.2013, 22:29 | |||||||||||||||||||||||||||||||
|
Двумерный массив может быть представлен по-разному:
1. Созданный на стеке:
Выделяем одномерный массив 10*20, а потом интерпретируем его как двумерный в своих вычислениях. В первом случае передавать массив в функцию надо так:
1
|
|||||||||||||||||||||||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 16.07.2013, 22:29 | |
|
Для начала надо понимать, что двумерный массив в памяти не отличается от одномерного - всё его содержимое аккуратно и последовательно разложено в одной непрерывной области памяти. Строки такого массива последовательно размещены друг за другом.
Первый случай (int ** arr) - массив указателей на строки двумерного. Такой вспомогательный массив необходимо создавать и заполнять указателями. Второй случай (int arr[][N]) - по сути, адрес первого элемента, а синтаксически - тот же двумерный массив. Однако при этом функция жёстко заточена под конкретный N. Третий случай (int *arr) - тоже адрес первого элемента. Функции передаются размеры массива и она вычисляет линейный индекс из номеров строки и столбца (если массив размерностью M на N, то j-й элемент i-й строки имеет линейный индекс i*M + j).
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||
| 16.07.2013, 22:36 | |||
|
0
|
|||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||
| 16.07.2013, 22:51 | |||
|
Ну и по поводу имитации - это вопрос мнений. Собственно, в случае работы со стековыми двумерными массивами компилятор усердно занимается как раз той самой имитацией.
0
|
|||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 16.07.2013, 23:06 | ||
|
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 16.07.2013, 23:16 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
||
| 28.09.2013, 16:23 [ТС] | ||
|
Tulosba
вы писали:
0
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 28.09.2013, 17:36 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 28.09.2013, 17:47 [ТС] | |
|
Tulosba,
Блин, а как теперь к массиву обращаться внутри функции? Определённому элементу?
0
|
|
| 28.09.2013, 17:47 | |
|
Помогаю со студенческими работами здесь
20
Как правильно вызывать функцию, параметры которой - массивы Двумерные массивы как формальные и фактические параметры функций Целесообразно ли передавать большие массивы как параметры в метод? Оптимизация кода, функции и методы как параметры функции Параметры-значения и параметры-переменные в функции и процедуре Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение
Это мой обзор планшета X220 с точки зрения школьника.
Недавно я решила попытаться уменьшить свой. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|