Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Консольное приложение, вызов процедкры из другого модуля 
V
    Опции темы
svyashennik
Дата 6.5.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 21.4.2006
Где: Питер

Репутация: нет
Всего: нет



Здравствуйте хлопцы!!! Нужна помощ.

Пишу консольное приложение в билдере. У меня 2-а модуля. Из главногомодуля вызывается процедура(она во втором модуле). Эта процедура должна передать матрицу в гл. модуль.
Вопрос - как это сделать?????  
 smile 
PM MAIL ICQ   Вверх
BreakPointMAN
Дата 6.5.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 6
Всего: 24



Как именно у тебя хранится матрица? (двумерный C'шный массив, вектор векторов или что-то другое?) Что ты подразумеваешь под словом "модуль"? (просто совокупность .h+.cpp или что-то еще?)  И в чем именно проблема?


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
svyashennik
Дата 6.5.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 21.4.2006
Где: Питер

Репутация: нет
Всего: нет



Вот : модуль 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 секунд
Как правильно вызвать процедуру??
PM MAIL ICQ   Вверх
Klin
Дата 6.5.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Может я что-то не понимаю, а в чем проблема? Можно так:

Главный модуль.
Код

#include <Tabl.cpp>
int main()
 { 
  int tablica[4][6];
  for (int x = 0; x<4; x++)
   for (int y = 0; y<6; y++)  tablica[x][y]  = Vvod(x,y);
 }

Второй модуль.
Код

 int tablica[4][6] ={ {1, 2, 3, 4, 5, 6},
                       {7, 8, 9, 10, 11, 12},
                       {13, 14, 15, 16, 17, 18},
                       {19, 20, 21, 22, 23, 24} };
 int Vvod (int x, int y)
  {
  return tablica[x][y];
 }

Все работает.

Добавлено через 28 секунд
или нужно получить весь массив одной функцией?


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
svyashennik
Дата 6.5.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 21.4.2006
Где: Питер

Репутация: нет
Всего: нет



Именно!!!!! smile 
PM MAIL ICQ   Вверх
fish9370
Дата 6.5.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(svyashennik @ 6.5.2007,  18:14)
Именно!!!!! smile

передавать массив через стек не рационально.. завтра ты захочешь увеличить массив.. что тогда?
в твоем случае я бы объявил глобальный массив и ничего бы никуда не передавал..

но сделать это можно, например, описав предварительно структуру содержащую такой массив:

Код

struct _array
{
       int tablica[4][6];
};


а дальше передавай его себе в функцию:

Код

void myFunc(_array myArray)
{
       //тело функции
}


не забудь инициализировать массив..

Добавлено через 8 минут и 45 секунд
Цитата(svyashennik @ 6.5.2007,  16:07)
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}, };

}

в данном случае твой массив "tablica[4][6]" из другой функции не будет тебе доступен, поскольку он определен внутри функции Vvod(), в локальной области видимости и будет удален, как только функция завершит свою работу..

Это сообщение отредактировал(а) fish9370 - 6.5.2007, 19:19


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Klin
Дата 6.5.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(fish9370 @  6.5.2007,  20:15 Найти цитируемый пост)
но сделать это можно, описав предварительно структуру содержащую такой массив:

Тогда надо будет заполнять массив в функции, а это не так хорошо. ИМХО тогда уже лучше создать функцию в главном модуле.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
svyashennik
Дата 6.5.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 21.4.2006
Где: Питер

Репутация: нет
Всего: нет



Хорошо. smile 
Я инициализирую массив в главном модуле, но значения заносить то мне надо в п/п Vvod

Добавлено через 1 минуту и 23 секунды
И не по отдельности а все элементы сразу
PM MAIL ICQ   Вверх
Klin
Дата 6.5.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(svyashennik @  6.5.2007,  21:36 Найти цитируемый пост)
Я инициализирую массив в главном модуле, но значения заносить то мне надо в п/п Vvod

Это практически тоже самое smile Но вот нашел решение поставленной задачи:

Главный модуль.
Код

#include <Tabl.cpp>
int main()
 { 
  int tablica[4][6];
  Vvod(tablica);
 }


Второй модуль.
Код

int tab[4][6] ={ {1, 2, 3, 4, 5, 6},
                      {7, 8, 9, 10, 11, 12},
                      {13, 14, 15, 16, 17, 18},
                      {19, 20, 21, 22, 23, 24} };

void Vvod (int my[4][6])
{
 for (int x = 0; x<4; x++)
  for (int y = 0; y<6; y++)
   my[x][y] = tab[x][y];
};


Все работает, но не знаю, правильно ли это и не будет ли ошибок в будущем.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
fish9370
Дата 6.5.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(Klin @ 6.5.2007,  21:28)
Все работает, но не знаю, правильно ли это и не будет ли ошибок в будущем.

 smile абсолютная бессмыслица.. надеюсь он это применять не будет..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Klin
Дата 6.5.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(fish9370 @  6.5.2007,  23:24 Найти цитируемый пост)
абсолютная бессмыслица.. надеюсь он это применять не будет.. 

А я предупреждал smile Сам не понимаю, как оно работает.  smile fish9370, может знаете как и что исправить?
По логике надо задать тип функции, которая будет возвращать массив. Это возможно, но как реализовать пока не знаю :(  Сейчас с временем напряг. Возможно через type? Время выберу что-нибудь придумаю.



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
svyashennik
Дата 7.5.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 21.4.2006
Где: Питер

Репутация: нет
Всего: нет



Я сделал так:
//Модуль 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'

PM MAIL ICQ   Вверх
Klin
Дата 7.5.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



svyashennik, и что это вам дало? 
Ошибку можно исправить, но работать не будет :(  Я же по другому писал!

Второй модуль.

Код

#include "VVODmod.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 void Vvod (int tablica [4][6])
 {
  for (int x = 0; x<4; x++)
   for (int y = 0; y<6; y++)
    tablica [x][y] = 0;
 }


Это сообщение отредактировал(а) Klin - 7.5.2007, 20:51


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
fish9370
Дата 7.5.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



задача изначально поставленна неверно.. отсюда неправильные пчелы и неправильный мед.. прошу переформулировать задачу.. хочу знать зачем нужны эти "два модуля".. хочется услышать общую идею..

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

как правило, в качестве параметров (через стек) передаются переменные небольшого объема, их количество тоже стараются уменьшить.. если требуется работать с большим количеством данных, в функцию передается указатель..

если и в этот раз мой пост будет проигнорирован - я пас..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
svyashennik
Дата 7.5.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 21.4.2006
Где: Питер

Репутация: нет
Всего: нет



Дело в том, что у меня программа в которой несколько подпрограмм делают различные пребразования с таблицей (одной и конкретного размера) .
вот я и подумал чтоб одна п/п вводила данные, другая считала и т.д.
и они обменивались этой таблицей (матрицей) smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.