Форум программистов, компьютерный форум CyberForum.ru

пмогите разобратся... - C++

Восстановить пароль Регистрация
 
алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 16:34     пмогите разобратся... #1
хочу попытатся сам решить задачу но боюсь что буду делать несавсем то что нужно ..задача из подбельского ..
Код
// ----------------------------------------- Модуль 1 -------------------------------------
//РЗ-10-1.СРР - первый файл многомодульной программы
#include <iostream>

             // Для К - внешнее связывание
int counter(void);
// Для counter - внешнее связывание
int main (void)
{
    int K = 0;
    static int K_IN =0;     // Для К_IN - внутреннее связывание К += ++K_IN;
}
// ----------------------------------------- Модуль 2 -------------------------------------

//РЗ-10-2.СРР - второй (основной) файл программы
#include <iostream>

int main(void)
{ void counter (void); // Прототип - внешнее связывание
void display (void);    // Прототип - внешнее связывание
                               // К - локальный объект - внутреннее связывание:
for (int K = 0; K < 3; K++)
{ cout << "\nПараметр цикла К =" << K;
counter (); // Изменяет свою К_IN и внешнюю К
display ();
}
}

//----------------------------------------- Модуль 3 ---------------------------------------

//РЗ-10-З.СРР - третий файл программы
#include <iostream>

void display (void)  // Для display - внешнее связывание
{ extern int K;       // Для К - внешнее связывание static
int K_IN = 0;      // Для К_IN - внутреннее связывание
cout << "\nВнешнее К = " << K++ << " Внутреннее К_IN из функции display = " << K_IN++;
}
как я понимаю программа аналогична ...
//РЗ-08.СРР - инициализация и существование локальных статических объектов
#include <iostream>


using namespace std;

int counter (void); // Прототип функции

int main(void)
{

int K = 3; // Локальная переменная функции main
for (; K != 0; K--)
{

cout << "\nАвтоматическая К = " << K;
cout << "\tСчетчик=" << counter();
}
return 0 ;
}

int counter (void) // Определение функции
{
static int K; // Статическая переменная,
return ++K; // локализованная в теле функции
}
вообшем я так понимаю что надо частично поменять частями части программы из модулей...
и нет необходимости 2ды задействовать библиотеку иострим...
(подскажите правильный ли ход мысли...+есле несложно поподсказывайте полчасика...так как я думаю поданной программе у меня появица еше не 1н вопрос)

Добавлено через 40 минут
ладно есле влом скоректировать мои дествия хоть намекните направельные дествия или выложите решение....(прост я вбольшей степени изучаю си поприримерам а непонимание правельного решения примера ведет лиш к появлению непонимания самой задачи в целом....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2012, 16:34     пмогите разобратся...
Посмотрите здесь:

Не могу разобратся с классами C++
C++ Пмогите допилить програмку
C++ Помогите разобратся
C++ не могу разобратся с ошибками
Нужно разобратся, ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
17.03.2012, 16:38
  #2

Не по теме:

Просто не все знакомы с Подбельским, и не понимают в чем заключается задача.

алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 17:35  [ТС]     пмогите разобратся... #3
эх еслеб я эт доконца понимал.... как я понимаю надо написать 1ну программу состояшую из 3х связанных между собой программ...но чесноговоря моему мозгу такую задачу не переварить посему я решил что это все записывается ввиде 1й программы но чем сильней я пытался понять логику выполнения программы тем сильней мягкоговоря запутывался в ней..(вот цитата с подбельского)
Тип компоновки, или тип связывания, определяет соответствие идентификатора конкретному объекту или функции в программе, исходный текст которой размещен в нескольких файлах (модулях). В этом случае каждому имени, используемому в нескольких файлах, может соответствовать либо один объект (функция), общий для всех файлов, либо по одному и более объектов в каждом файле.
Результат выполнения:

Параметр цикла К = О
Внешнее К = 1
Внутреннее K_IN из функции display = 0
Параметр цикла К = 1
Внешнее К = 4
Внутреннее K_IN из функции display = 1
Параметр цикла К = 2
Внешнее К = 8
Внутреннее K_IN из функции display = 2
+чесно говоря я недоконца понимаю данный цикл....
+есле есть время подскажите и собственно помогите скоректировать действия есле времени нет дайте код правельной программы(конечн самому решить хочеца но коли с этим непоможете так хоть смысл боле менее пойму) ибо шас я очень неуверен что сам осилю ее попровить....

Добавлено через 15 минут
вообше я не очень помонимаю работу строчек
counter ();
display ();
может подскажете ....+ я так понимаю библиотеку 2ды задавать не надо задаем ее в 1модуле..
и записываем как 1ну программу или я планирую не то решение?

Добавлено через 23 минуты
+несовсем понимаю как записать правельно строчку К += ++K_IN
есле через фор и предположить что имелось ввиду K+ = K_IN++ то неполучаеца....

Добавлено через 1 минуту
ну хоть скажите чтонить (да я невеликий програмист а начинаюший...и делаю и думаю много глупостей но ведь все с этого начинали и без помоши непродвинулись бы дальше..)
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 17:36     пмогите разобратся... #4
вам уже сказали
Цитата Сообщение от kazak Посмотреть сообщение
не все знакомы с Подбельским, и не понимают в чем заключается задача.
ждите телепатов
алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 17:49  [ТС]     пмогите разобратся... #5
Тип компоновки, или тип связывания, определяет соответствие идентификатора конкретному объекту или функции в программе, исходный текст которой размещен в нескольких файлах (модулях). В этом случае каждому имени, используемому в нескольких файлах, может соответствовать либо один объект (функция), общий для всех файлов, либо по одному и более объектов в каждом файле. Файлы программы (модули) могут транслироваться отдельно, и в этом случае возникает проблема установления связи между одним и тем же идентификатором и единственным объектом, которому он соответствует. Такие объекты (функции) и их имена нуждаются во внешнем связывании, которое выполняет компоновщик (редактор связей) при объединении отдельных объектных модулей программы. Для остальных объектов (функций), которые локализованы в файлах, используется внутреннее связывание.

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

Например, имена статических объектов (static) локализованы в своем файле и могут быть использованы как имена других объектов и функций в других независимо транслируемых файлах. Такие имена имеют внутренний тип компоновки (связывания). Если имена объектов или функций определены со спецификатором extern, то имя будет иметь внешний тип компоновки (связывания). Рассмотрим следующую программу, функции которой и определения переменных рассредоточены по трем текстовым файлам:
(моя программа)

Результат выполнения:

Параметр цикла К = О
Внешнее К = 1
Внутреннее K_IN из функции display = 0
Параметр цикла К = 1
Внешнее К = 4
Внутреннее K_IN из функции display = 1
Параметр цикла К = 2
Внешнее К = 8
Внутреннее K_IN из функции display = 2

Анализируя текст и результаты программы, обратите внимание на следующее:

внешняя переменная с именем K является общей для файлов 1 и 3 (внешнее связывание);
внутренняя переменная с именем K существует только в основном модуле;
статические переменные с именем K_IN различны в модулях 1 и 3, т.е. это различные объекты с одинаковым именем. Для каждого из них реализуется внутреннее связывание.
Для некоторых имен тип компоновки не существует. К ним относятся параметры функций, имена объектов, локализованных в блоке (без спецификаторов extern), идентификаторы, не являющиеся именами объектов и функций (например, имя введенного пользователем типа).
вот все что внем есть..ей богу...+сори думал вы покомандам из программы помете...ну хоть часть ошибок/(((
эх попытался сам сделать только напладил ошибок и потерял веру в свои силы=(
вот что вышло витоге
//РЗ-10-1.СРР - первый файл многомодульной программы
#include <iostream>

using namespace std;
int counter(void);
int display(void);
int main ()
{
int K = 0;
static int K_IN =0;
К = K_IN++
}

// ----------------------------------------- Модуль 2 -------------------------------------

//РЗ-10-2.СРР - второй (основной) файл программы
#include <iostream>
void main (void)
{ void counter(void); // Прототип - внешнее связывание
void display(void); // Прототип - внешнее связывание
// К - локальный объект - внутреннее связывание:
for (int K = 0; K < 3; K++)
{ cout << "\nПараметр цикла К =" << K; // Изменяет свою К_ IN и внешнюю К
}
return 0 ;
}

//----------------------------------------- Модуль 3 ---------------------------------------

//РЗ-10-З.СРР - третий файл программы
#include <iostream>
void main(void)
{void display(void); // Для display - внешнее связывание
extern int K; // Для К - внешнее связывание static
int K_IN = 0; // Для К_IN - внутреннее связывание
cout << "\nВнешнее К = " << K++ << " Внутреннее К_IN из функции display = " << K_IN++;
}
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 18:07     пмогите разобратся... #6
за то, что не поленился переписать книгу, респект. но поставленной задачи, которую ты хочешь выполнить тут нет.
раз уж ты не поленился могу сказать следующее:
данные 3 файла - это не общие файлы одной программы, а 3 её варианта. тут демонстрация разных вариантов связывания.
сама прога должна собираться из одного из показанных тобой вариантов исходников и другого(других), где для каждого варианта определены ф-ии (counter() и display()) и внешние переменные(extern int K; для з-го случая)
алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 18:19  [ТС]     пмогите разобратся... #7
блиннн ну больше то програм там не дано....чтото я запутался но спс что внес хоть какуюто ясность по поводу моих чшетных попыток...
ладно наверно забью на эту задачу можеш дать любую другую на эту тему.... правитльно решенную...
пожалуйста...
я весь день потратил чтоб понять эту тему немогуш я засегодня вообше нечего непонять(((
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 18:32     пмогите разобратся... #8
ты так и не понял, что от тебя требовалось?
надо просто сказать:
задача: я хочу/пытаюсь сделать то-то, используя то-то, таким-то способом
или что-то в этом роде. лично я не вижу конкретных вопросов.
алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 18:39  [ТС]     пмогите разобратся... #9
эх ладн наверн вопрос можн закрыть мой мозг прост вырубаеца.... я хочу сделать эти 3 варианта программы.... используя их состовляюшии какимто способом))
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 18:47     пмогите разобратся... #10
Цитата Сообщение от алексейч Посмотреть сообщение
сделать эти 3 варианта программы
и она должна делать... сферического коня в вакууме. так?
алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 18:56  [ТС]     пмогите разобратся... #11
да хоть его)))
хоть про коня узнаю ато сегодня много чего насмотрел а понял лиш то что нечего неепонял)))
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 19:20     пмогите разобратся... #12
не знаю на счёт коней, но наверно в книге описано о возможности таких вариантов(пишу отсебячину - почти коня):
1. все в одном
file.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int n;
 
void
fn()
{
    ++n;
}
 
int
main(void)
{
    cout << n << endl;
    fn();
    cout << n << endl;
    return 0;
}


2. 2 файла:
file1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int n;
 
int
main(void)
{
    void fn();
    cout << n << endl;
    fn();
    cout << n << endl;
    return 0;
}

file2.cpp
C++
1
2
3
4
5
6
7
extern int n;
 
void
fn()
{
    ++n;
}


3. 2 файла:
file1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
 
int
main(void)
{
    extern int n;
    void fn();
    cout << n << endl;
    fn();
    cout << n << endl;
    return 0;
}

file2.cpp
C++
1
2
3
4
5
6
7
int n;
 
void
fn()
{
    ++n;
}
алексейч
2 / 2 / 0
Регистрация: 22.02.2012
Сообщений: 66
Записей в блоге: 1
17.03.2012, 19:47  [ТС]     пмогите разобратся... #13
хм...возможно....спс....ток есле несложно навпомни что значит ++n
Hemull
47 / 47 / 1
Регистрация: 12.03.2012
Сообщений: 108
17.03.2012, 20:31     пмогите разобратся... #14
алексейч, это префиксный инкремент, те сначала оператор увеличивает значение переменной, а потом, если есть какие-то действия над ней, то их воспроизводит
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 21:09     пмогите разобратся...
Еще ссылки по теме:

Немогу разобратся с идентификатором C++
C++ Не могу разобратся со строками!
Не могу разобратся с ошибкой C++

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

Или воспользуйтесь поиском по форуму:
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 21:09     пмогите разобратся... #15
Цитата Сообщение от алексейч Посмотреть сообщение
что значит ++n
n += 1 === n = n + 1
Yandex
Объявления
17.03.2012, 21:09     пмогите разобратся...
Ответ Создать тему
Опции темы

Текущее время: 04:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru