| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Консольное приложение |
| Автор: svyashennik 6.5.2007, 14:05 |
| Здравствуйте хлопцы!!! Нужна помощ. Пишу консольное приложение в билдере. У меня 2-а модуля. Из главногомодуля вызывается процедура(она во втором модуле). Эта процедура должна передать матрицу в гл. модуль. Вопрос - как это сделать????? |
| Автор: BreakPointMAN 6.5.2007, 14:25 |
| Как именно у тебя хранится матрица? (двумерный C'шный массив, вектор векторов или что-то другое?) Что ты подразумеваешь под словом "модуль"? (просто совокупность .h+.cpp или что-то еще?) И в чем именно проблема? |
| Автор: svyashennik 6.5.2007, 16:07 |
| Вот : модуль Tabl.cpp void Vvod (/*что-то здесь*/) { int tablica[4][6] ={ {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, }; } Вот гл. прога #include <Tabl.cpp> int main() { int tablica[4][6]; Vvod(/*и что-то здесь*/); } Добавлено через 1 минуту и 30 секунд Как правильно вызвать процедуру?? |
| Автор: Klin 6.5.2007, 16:29 | ||||
| Может я что-то не понимаю, а в чем проблема? Можно так: Главный модуль.
Второй модуль.
Все работает. Добавлено через 28 секунд или нужно получить весь массив одной функцией? |
| Автор: svyashennik 6.5.2007, 18:14 |
| Именно!!!!! |
| Автор: fish9370 6.5.2007, 19:15 | ||||||||
передавать массив через стек не рационально.. завтра ты захочешь увеличить массив.. что тогда? в твоем случае я бы объявил глобальный массив и ничего бы никуда не передавал.. но сделать это можно, например, описав предварительно структуру содержащую такой массив:
а дальше передавай его себе в функцию:
не забудь инициализировать массив.. Добавлено через 8 минут и 45 секунд
в данном случае твой массив "tablica[4][6]" из другой функции не будет тебе доступен, поскольку он определен внутри функции Vvod(), в локальной области видимости и будет удален, как только функция завершит свою работу.. |
| Автор: svyashennik 6.5.2007, 20:36 |
| Хорошо. Я инициализирую массив в главном модуле, но значения заносить то мне надо в п/п Vvod Добавлено через 1 минуту и 23 секунды И не по отдельности а все элементы сразу |
| Автор: Klin 6.5.2007, 21:28 | ||||||
Это практически тоже самое Главный модуль.
Второй модуль.
Все работает, но не знаю, правильно ли это и не будет ли ошибок в будущем. |
| Автор: fish9370 6.5.2007, 22:24 | ||
|
| Автор: Klin 6.5.2007, 23:09 |
А я предупреждал По логике надо задать тип функции, которая будет возвращать массив. Это возможно, но как реализовать пока не знаю :( Сейчас с временем напряг. Возможно через type? Время выберу что-нибудь придумаю. |
| Автор: svyashennik 7.5.2007, 19:59 |
| Я сделал так: //Модуль VVod.cpp #include "VVODmod.h" #include <stdio.h> #include <string.h> #include <stdlib.h> void Vvod (tablica) { int tablica[4][6]= { {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} }; ... ... } //------------------------------------------------------------ //гл. модуль #include <VVod.cpp> int main() { int a [4][6]; Vvod(a); } И вот что вылезает: [C++ Error] VVODmod.cpp(37): E2238 Multiple declaration for 'tablica' |
| Автор: Klin 7.5.2007, 20:50 | ||
| svyashennik, и что это вам дало? Ошибку можно исправить, но работать не будет :( Я же по другому писал! Второй модуль.
|
| Автор: fish9370 7.5.2007, 22:25 |
| задача изначально поставленна неверно.. отсюда неправильные пчелы и неправильный мед.. прошу переформулировать задачу.. хочу знать зачем нужны эти "два модуля".. хочется услышать общую идею.. передавать массив через стек в функцию или из функции не правильно.. а в данном случае предпринимается именно такая попытка, мне кажется плохо, когда некоторые товарищи вместо того чтобы объяснить парню, что это не правильно стараются его же кривыми методами ему помочь.. как правило, в качестве параметров (через стек) передаются переменные небольшого объема, их количество тоже стараются уменьшить.. если требуется работать с большим количеством данных, в функцию передается указатель.. если и в этот раз мой пост будет проигнорирован - я пас.. |
| Автор: svyashennik 7.5.2007, 23:49 |
| Дело в том, что у меня программа в которой несколько подпрограмм делают различные пребразования с таблицей (одной и конкретного размера) . вот я и подумал чтоб одна п/п вводила данные, другая считала и т.д. и они обменивались этой таблицей (матрицей) |
| Автор: Klin 8.5.2007, 00:06 |
| Тогда это можно сделать вообще без дополнительных модулей, но раз надо, то объявляешь свою таблицу в модуле, и объявляешь его всем другим модулям, а они работают непосредственно с ним, а не копируют / передают значения. |
| Автор: fish9370 8.5.2007, 15:41 | ||||
я бы сделал так: объявил бы глобальную таблицу (поскольку ее размер предопределен, и как я понял она не большая).. а дальше она автоматически была бы доступна всем функциям в твоей программе.. пример:
|
| Автор: Klin 8.5.2007, 19:47 |
| fish9370, я в принципе это и имел ввиду |
| Автор: fish9370 8.5.2007, 20:02 | ||
я знаю, что ты это понимаешь, я за него побоялся.. |
| Автор: svyashennik 9.5.2007, 09:49 |
| Хорошо... понял Всем спасибо за участие |