Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров в функцию / 25 сообщений из 30, страница 1 из 2
16.01.2015, 09:57
    #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
16.01.2015, 10:05
    #38855830
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
Про шаблоны почитай
...
Рейтинг: 0 / 0
16.01.2015, 10:08
    #38855836
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
В языке программирования Си статическая типизация, тип каждого элемента устанавливается во время компиляции, и во время выполнения он меняться не может.
В Си float и int, например, вы не смешаете.

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

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

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

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


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


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

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

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


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

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

А при чём тут ООП и функциональное программирование ?
Здесь ни того, ни другого нет и не предвидится.
...
Рейтинг: 0 / 0
16.01.2015, 16:40
    #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
16.01.2015, 16:55
    #38856408
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
Вместо i.MAX_VALUE, i.MIN_VALUE автор хочет получить макрос.
...
Рейтинг: 0 / 0
16.01.2015, 17:14
    #38856432
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
MasterZivМожно конечно поизвращаться в таком стиле:
Добавь к списку типов long long и __i128 и вот тут-то мы и повеселимся...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.01.2015, 19:05
    #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
16.01.2015, 19:06
    #38856509
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
Dimitry Sibiryakovlong long и __i128 и вот тут-то мы и повеселимся
Это да
...
Рейтинг: 0 / 0
16.01.2015, 19:43
    #38856522
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
Dimitry SibiryakovMasterZivМожно конечно поизвращаться в таком стиле:
Добавь к списку типов long long и __i128 и вот тут-то мы и повеселимся...


Ну да, скорость вычисления искомых значений будет, мягко говоря, черепашья.
...
Рейтинг: 0 / 0
16.01.2015, 19:44
    #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
16.01.2015, 20:28
    #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
16.01.2015, 20:32
    #38856540
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
Вася Уткинчто имелось ввиду?
http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.01.2015, 21:17
    #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
17.01.2015, 15:28
    #38856757
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров в функцию
Код: plaintext
1.
#define printfMaxMin(type) printMaxMin< ## type ## >()
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров в функцию / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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