powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров в функцию
30 сообщений из 30, показаны все 2 страниц
Передача параметров в функцию
    #38855823
kab18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли модифицировать приведенную ниже функцию так, чтобы передаваемая переменная i могла иметь произвольный тип данных?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
unsigned char MaxMin(i)
{
   i=0;
   do
      i--;
   while(i<0);
   i++;
   printf("Min= %d\n",i);
   i=0;
   do
      i++;
   while(i>0);
   i--;
   printf("Max= %d\n\n",i);
   return 0;
}
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38855830
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про шаблоны почитай
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38855836
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В языке программирования Си статическая типизация, тип каждого элемента устанавливается во время компиляции, и во время выполнения он меняться не может.
В Си float и int, например, вы не смешаете.

Однако, в языке С++ используется технология обобщенного программирования. Думаю Сообщество расскажет вам более подробно.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38855851
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18,

а у вас функция то работает ? Почему входные параметры без типа данных ? По моему, в старых версиях компиляторов можно было входной параметр указывать без типа, по умолчанию был int, неужели и современные компиляторы это поддерживают ?
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38855986
kab18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMercurykab18,

а у вас функция то работает ? Почему входные параметры без типа данных ? По моему, в старых версиях компиляторов можно было входной параметр указывать без типа, по умолчанию был int, неужели и современные компиляторы это поддерживают ?
У меня билдер. По умолчанию int, но смысл функции был поиск максимального/минимального значения по каждому типу данных. Я понимаю, что есть таблицы но хотелось эксперементально удостовериться. Для меня например непонятно почему тип данных int имеет размер 4 байта при количестве возможных значений 65535. Не понятно чем в билдере int отличается от long int.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856028
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18 Для меня например непонятно почему тип данных int имеет размер 4 байта при количестве возможных значений 65535.
Судя по твоей картинке 65535 относится unsigned short

kab18Не понятно чем в билдере int отличается от long int.
Скорее всего ничем. Наследие прошлого. Когда-то давным-давно int был 16 бит, т.к. процессоры были 16-битные. Почитай
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856041
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Область допустимых значений для знакового целого
Код: plaintext
1.
-2^(N-1) ... 2^(N-1) - 1


для беззнакового
Код: plaintext
1.
0 ... 2^N - 1


где N размер переменной в битах, т.е. sizeof(тип) * 8
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856076
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18Не понятно чем в билдере int отличается от long int
В Винде int==long. Такое соглашение (и в полном соответствии со стандартом).
Но например в Линуксе x64 long больше int.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856126
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18модифицировать приведенную ниже функцию
Приведённую функцию надо не модифицировать, а выкидывать напрочь. Открой для себя
заголовок limits.h и, в частности, определённые там константы максимального/минимального
значения для каждого типа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856178
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurykab18,

а у вас функция то работает ? Почему входные параметры без типа данных ? По моему, в старых версиях компиляторов можно было входной параметр указывать без типа, по умолчанию был int, неужели и современные компиляторы это поддерживают ?

Именно поэтому.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856179
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18Возможно ли модифицировать приведенную ниже функцию так, чтобы передаваемая переменная i могла иметь произвольный тип данных?


Тебя интересует решение на С, или на С++ ?
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856184
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18

Это не функция MaxMin. Это функция printfMaxMin. Один кэп которого звали Врунгель
говаривал дескыть как вы функцию назовёте так и она вобщем будет плавать. А в данном
случае мы имеем side-effect.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856221
kab18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
любое, но в функциональном програмировании я плаваю меньше, чем в ООП.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856378
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18MasterZiv,
любое, но в функциональном програмировании я плаваю меньше, чем в ООП.

А при чём тут ООП и функциональное программирование ?
Здесь ни того, ни другого нет и не предвидится.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856385
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18MasterZiv,
любое, но в функциональном програмировании я плаваю меньше, чем в ООП.


Ну и возвращаясь к:

авторВозможно ли модифицировать приведенную ниже функцию так, чтобы передаваемая переменная i могла иметь произвольный тип данных?


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

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

В таком виде я вообще не вижу смысла её писать.
Можно конечно поизвращаться в таком стиле:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#define IMPL_MIN() { i=0; do ++i; while(i<0); printf( "Min= %d\n", (int)(++i) ); }
#define IMPL_MAX() { i=0; do ++i; while(i<0); printf( "Min= %d\n", (int)(--i) ); }

void printIntMaxMin()
{
  int i;
  IMPL_MIN();
  IMPL_MAX();
}

void printLongMaxMin()
{
  long i;
  IMPL_MIN();
  IMPL_MAX();
}



Но в целом смысла ноль.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856408
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо i.MAX_VALUE, i.MIN_VALUE автор хочет получить макрос.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856432
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМожно конечно поизвращаться в таком стиле:
Добавь к списку типов long long и __i128 и вот тут-то мы и повеселимся...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856508
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18любое
Ну раз любое то вот на С++.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include <iostream>

using namespace std;

template <class T>
void printMaxMin()
{
   T i=0;
   cout << "Type: " << typeid(i).name() << endl;
   do
      i--;
   while(i<0);
   i++;
   cout << "Min=" << i << endl;
   i=0;
   do
      i++;
   while(i>0);
   i--;
   cout << "Max=" << i << endl;
   return 0;
}

int main()
{
	printMaxMin<int>();
	printMaxMin<short>();
	printMaxMin<long>();
	return 0;
}
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856509
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovlong long и __i128 и вот тут-то мы и повеселимся
Это да
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856522
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivМожно конечно поизвращаться в таком стиле:
Добавь к списку типов long long и __i128 и вот тут-то мы и повеселимся...


Ну да, скорость вычисления искомых значений будет, мягко говоря, черепашья.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856523
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovskykab18Не понятно чем в билдере int отличается от long int
В Винде int==long. Такое соглашение (и в полном соответствии со стандартом).
Но например в Линуксе x64 long больше int.
В смысле, что имелось ввиду?

Например, GCC x86_64 стоит под линуксом: http://ideone.com/Qq03Uk
авторint: 4
long: 4
long long: 8
На всех компиляторах, что я видел (BCC64, Clang, GCC, MSVC, ICC) точно так же.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856539
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинНапример, GCC x86_64 стоит под линуксом: http://ideone.com/Qq03Uk
Чем докажете что под линуксом?
Я то могу свое утверждение подтвердить свидетельскими показаниями :)
http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

Вася УткинНа всех компиляторах, что я видел (BCC64, Clang, GCC, MSVC, ICC) точно так же.
И часто вы видели BCC64 и MSVC под линуксом?
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856540
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинчто имелось ввиду?
http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856553
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВася УткинНапример, GCC x86_64 стоит под линуксом: http://ideone.com/Qq03Uk] http://ideone.com/Qq03Uk
Чем докажете что под линуксом?
Я то могу свое утверждение подтвердить свидетельскими показаниями :)
http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

Вася УткинНа всех компиляторах, что я видел (BCC64, Clang, GCC, MSVC, ICC) точно так же.
И часто вы видели BCC64 и MSVC под линуксом?
Да, точняк, сейчас проверил - под Ubuntu x86_64: long - 8 байт, слава богу я long int никогда не использую :)
Надеюсь и не придется, сейчас есть хорошая штука в C11/C++11 http://www.cplusplus.com/reference/cstdint/] http://www.cplusplus.com/reference/cstdint/
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38856757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
#define printfMaxMin(type) printMaxMin< ## type ## >()
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38857558
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kab18Возможно ли модифицировать приведенную ниже функцию так, чтобы передаваемая переменная i могла иметь произвольный тип данных?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
unsigned char MaxMin(i)
{
   i=0;
   do
      i--;
   while(i<0);
   i++;
   printf("Min= %d\n",i);
   i=0;
   do
      i++;
   while(i>0);
   i--;
   printf("Max= %d\n\n",i);
   return 0;
}



сегодня вспомнил ваш вопрос. И на самом деле можно, даже без обобщенного программирования.
Вам нужно передавать в функцию указатель на начало массива, и размер типа sizeof(T).
Единственная загвоздка в квалификаторе signed/unsigned
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38857647
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurykab18Возможно ли модифицировать приведенную ниже функцию так, чтобы передаваемая переменная i могла иметь произвольный тип данных?


сегодня вспомнил ваш вопрос. И на самом деле можно, даже без обобщенного программирования.
Вам нужно передавать в функцию указатель на начало массива, и размер типа sizeof(T).
Единственная загвоздка в квалификаторе signed/unsigned



Саша, это, знаешь ли, методы реализации полиморфизма из прошлого века.
Внутри функции-то что делать будешь ?
30 if-ов ?
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38857682
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSashaMercuryпропущено...


сегодня вспомнил ваш вопрос. И на самом деле можно, даже без обобщенного программирования.
Вам нужно передавать в функцию указатель на начало массива, и размер типа sizeof(T).
Единственная загвоздка в квалификаторе signed/unsigned



Саша, это, знаешь ли, методы реализации полиморфизма из прошлого века.
Внутри функции-то что делать будешь ?
30 if-ов ?

о другом думал когда предполагал реализацию, но сейчас понял что рассуждал неправильно. Тут я неправ
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38857689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут неправ топикстартер. Он хочет птичьего молока параметрический полиморфизм.
...
Рейтинг: 0 / 0
Передача параметров в функцию
    #38857924
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТут неправ топикстартер. Он хочет птичьего молока параметрический полиморфизм.
У нас в плюсах это называется перегрузкой .
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров в функцию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]