Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2021, 12:17   #11
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Один вопрос: зачем вы так настойчиво создаете функции с разными именами, а потом их передефайниваете?
FrosyaZZ вне форума Ответить с цитированием
Старый 05.04.2021, 12:19   #12
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию

> но на будущее предупреждаю - это не нужно никогда использовать в программах.

Согласен.

А задействовать #ifndef не получится?

Что бы вызвать например одновременно INT (#define INTEGER - как определенную константу), а для Double делать проверку серез #ifndef, как ранее не определенную ?

Если я правильно понимаю, то ifndef полная противоположность к #ifdef, которая позволяет проверить, не было ли значение ранее определено.

И если мы ранее Double не определили в main.cpp то он должен будет вызваться?

На практике не проверял, веду дискуссию и проверяю свои теории.
Farlep вне форума Ответить с цитированием
Старый 05.04.2021, 12:22   #13
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Один вопрос: зачем вы так настойчиво создаете функции с разными именами, а потом их передефайниваете?
(Для каждого типа написать отдельную функцию)

в ) создать обобщающие имена функции , которым будет определена функция соответствующего типа
в зависимости от константы ,указанной в файле prog.cpp . (#define show ShowInt )

За перегрузки никто не говорит в поставленной задачи. Согласно #define в prog.cpp должны вызываться своя функция, но задефайненная одним именем в *.h

Последний раз редактировалось Farlep; 05.04.2021 в 12:25.
Farlep вне форума Ответить с цитированием
Старый 05.04.2021, 12:23   #14
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Farlep, я перестал понимать, что ты хочешь добиться. Возможно, стОит поменять препода
Алексей1153 вне форума Ответить с цитированием
Старый 05.04.2021, 12:23   #15
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от Farlep Посмотреть сообщение
Для каждого типа написать отдельную функцию
для этого не нужны дефайны, просто сделай у трёх функций одинаковое имя (перегрузка)
Алексей1153 вне форума Ответить с цитированием
Старый 05.04.2021, 20:37   #16
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
для этого не нужны дефайны, просто сделай у трёх функций одинаковое имя (перегрузка)
Согласно условию имена функций должны быть разные.

Я сделал, то что посчитал правильным решением поставленной задачи.

Теперь достаточно в prog.cpp указать какой массив создаем и выводим

prog.cpp

Код:
//#define INTEGER
#define Double
//#define Char

#include"function.h"


int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	const int n = 10;	
	int a[n];
	double b[n];
	char c[n];

#if defined(INTEGER)
	
	StarLine(n * 3, '*');
	cout << endl;
	cout << "Int   ";
	FillArray(a, n);
	ShowArray(a, n);
	cout << endl;
	StarLine(n * 3, '*');
	cout << endl;
	
#elif defined(Double)
	
	StarLine(n * 3, '*');
	cout << endl;
	cout << "Double";

	FillArray(b, n);
	ShowArray(b, n);
	cout << endl;
	StarLine(n * 3, '*');
	cout << endl;

#elif defined(Char)
	
	StarLine(n * 3, '*');
	cout << endl;
	cout << "Char  ";
	FillArray(c, n);
	ShowArray(c, n);	
	cout << endl;
	StarLine(n * 3, '*');
#endif

	cout << endl;
	cout << endl;
	system("pause");
	return 0;

}
function.h
Код:
#pragma once
#include<iostream>
#include <ctime>
#include<iomanip>
#include <Windows.h>

using namespace std;

// макрос используется при генерайции чисел для массива double
#define DOUBLEArray  1.3

#ifdef INTEGER
#define FillArray FillArrayInt
#define ShowArray ShowArrayInt
#endif

#ifdef Double
#define FillArray FillArrayDouble
#define ShowArray ShowArrayDouble
#endif

#ifdef Char
#define FillArray FillArrayChar
#define ShowArray ShowArrayChar
#endif

// создание одномерного массива int
void FillArrayInt(int a[], int);

// вывод одномерного массива int
void ShowArrayInt(int a[], int);


// создание одномерного массива double
void FillArrayDouble(double a[], int);

// вывод одномерного массива double
void ShowArrayDouble(double a[], int);


// создание одномерного массива char
void FillArrayChar(char a[], int);

// вывод одномерного массива char
void ShowArrayChar(char a[], int);


void StarLine(int n, char a);
Изображения
Тип файла: png double.png (43.0 Кб, 1 просмотров)

Последний раз редактировалось Farlep; 05.04.2021 в 20:43.
Farlep вне форума Ответить с цитированием
Старый 06.04.2021, 07:20   #17
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Код:
int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	const int n = 10;	

	StarLine(n * 3, '*');
	cout << endl;

#if defined(INTEGER)
	int a[n]{};
	cout << "Int   ";
#elif defined(Double)
	double a[n]{};
	cout << "Double";
#elif defined(Char)
	char a[n]{};
	cout << "Char  ";
#endif

	FillArray(a, n);
	ShowArray(a, n);
	cout << endl;
	StarLine(n * 3, '*');
	cout << endl;

	cout << endl;
	system("pause");
	return 0;
}
Алексей1153 вне форума Ответить с цитированием
Старый 06.04.2021, 10:12   #18
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию

Алексей1153, спасибо. Вчера перед сном так и сделал, сам додумался ).

Вы помогли мне понять, что в main только одну константу можно будет открыть и только один вариант вызывать. До этого я пытался одновременно все вызвать.

Препроцессор так не работает. Вчера почитал про него пару часиков. На самом деле интересная вещь. особенно доя тестирования. Не нужно кучу кода комментировать. Но нужно быть осторожным с ним.
Farlep вне форума Ответить с цитированием
Старый 06.04.2021, 14:46   #19
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Farlep
в main только одну константу можно будет открыть и только один вариант вызывать
Это не так.
Код:
#include "function.h"

using namespace std;

#define n 10

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    int a[n];
    double b[n];
    char c[n];

    cout << endl;
    cout << "Int   ";
#define INTEGER
#include "function.h"
    FillArray(a, n);
    ShowArray(a, n);
#undef INTEGER
    cout << endl;

    cout << endl;
    cout << "Double";
#define DOUBLE
#include "function.h"
    FillArray(b, n);
    ShowArray(b, n);
#undef DOUBLE
    cout << endl;

    cout << endl;
    cout << "Char  ";
#define CHAR
#include "function.h"
    FillArray(c, n);
    ShowArray(c, n);
#undef CHAR
    cout << endl;

    cout << endl;
    system("pause");
    return 0;
}
Код:
#if defined(INTEGER)
#define FillArray FillArrayInt
#define ShowArray ShowArrayInt
#elif defined(DOUBLE)
#define FillArray FillArrayDouble
#define ShowArray ShowArrayDouble
#elif defined(CHAR)
#define FillArray FillArrayChar
#define ShowArray ShowArrayChar
#else
#include <iostream>
#include <ctime>
#include <iomanip>
#include <Windows.h>

void FillArrayInt(int a[], int);
void ShowArrayInt(int a[], int);
void FillArrayDouble(double a[], int);
void ShowArrayDouble(double a[], int);
void FillArrayChar(char a[], int);
void ShowArrayChar(char a[], int);
#endif
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 07.04.2021, 09:43   #20
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

BDA, ну такую жесть нельзя в реальный проект тащить )) Любой чих - и всё поломается
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы Внимание! В задаче реализовать заполнение массива, вывод на экран исходного массива и измененного (если при реш Гарри Паскаль, Turbo Pascal, PascalABC.NET 3 26.06.2015 09:45
Одномерные массивы Внимание! В задаче реализовать заполнение массива, вывод на экран исходного массива и измененного (если при ре Гарри Паскаль, Turbo Pascal, PascalABC.NET 1 25.06.2015 08:55
Заполнение listbox значениями из массива. Заполнение массива. Gnaqeaz C# (си шарп) 9 23.10.2014 07:53
Заполнение массива Hrum Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 24.11.2012 00:54
Заполнение массива Alex_Mason Общие вопросы Delphi 2 07.12.2010 22:58