Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Функция Transfer. 
V
    Опции темы
valvliv
Дата 30.1.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В эту функцию я вообще не въезжаю - она зачем?? smile

Товарисч Кр@ш, smile
Добавлено @ 23:05
Тут глюк случился в процессе запостения. Потрите дубль плз.
PM MAIL   Вверх
Cr@$h
Дата 31.1.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Функция Transfer позволяет заставить смотреть на некоторый объект по другому, отображает один тип данных в другой. Учитывая то, что все представляется битами, скажем, на символ, котрый этими битами представляется, можно посмотреть как на целое число. Если битов не хватает, то они дополняются (обычно нулями), если их в исходном объекте избыточно, то берутся первые нужные, остальные не задействуются.
Во-первых, чтобы далеко не ходить, можно есть функции, которые по символу возвращают его целочисленное значение, или по целочисленному значению возвращают соответствующий символ. В этом случае в битовом представлении они идентичны.
Из символа целый: IChar, IAChar. Вторая делает это на основе кодов ASCII.
Из целого в символьный: Char, AChar.
Вернемся к нашим баранам. Transfer( source, mold [, size] )
source -- на что хотим посмотреть по-новому; может быть и массивом,
mold -- смотрим на исходник как на тип, что у mold; может быть и массивом,
size -- если задан, то возвращается одномерный массив размера size, каждый элемент которого типа, что у mold.
Тут такое поведение:
  • если mold скаляр и size отсутствует, то результат скаляр;
  • если mold массив и size отсутствует, то результат массив одномерный. Его размер мал, насколько это возможно, но в байтах не меньше, чем у source.
  • если size присутствует, то результат одномерный массив размера size.

Пример
Код

program TransferFunction

    implicit none
    
    complex ComplexVector(2), z(1)

    ! Получим 4.0 Значит процессор представляет 4.0 и 1082130432 как строку битов
    ! 0100 0000 1000 0000 0000 0000 0000 0000.
    print *, "Is it a four also?"
    print *, Transfer( 1082130432, 0.0 )
    
    ! Получим одномерный комплексный массив размера 2, первый элемент которого
    ! равен 1 + 2i, а второй -- 3 + xi, где x зависит от процессора. В IFVC x на
    ! деле окажется нулем.
    ComplexVector = Transfer( [1.0, 2.0, 3.0], z )
    
    print *, "Complex vector"
    print *, ComplexVector
 
    ! Получим одномерный комплексный массив размера 1, эдинственный элемент которого
    ! равен 1 + 2i.
    z = Transfer( [1.0, 2.0, 3.0], z, size = 1 )
    
    print *, "Complex vector of length 1"
    print *, z
    
    ! Получим комплексное число 1 + 2i.
    print *, "Complex number"
    print *, Transfer( [1.0, 2.0, 3.0], (0.0, 0.0) )
 
    read *

end program TransferFunction

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

 Is it a four also?
   4.000000
 Complex vector
 (1.000000,2.000000) (3.000000,0.0000000E+00)
 Complex vector of length 1
 (1.000000,2.000000)
 Complex number
 (1.000000,2.000000)


Можно применять, когда хотим например иметь список разнородных элементов и смотреть на узел, то как на один тип объектов, то как на другой. Призван заменить equivalence, но не рекомендую использовать оба, хотя у последнего есть одно применение. Можно обозначить одно и то же начало у одномерного у трехмерного массивов одного размера. Тогда, если мы захотим искать, скажем, максимальный элемент в трех мерном массиве, с которым и работаем, то можно проводить этот поиск в одномерном массиве, который в по памяти совпадает с трехмерным. Понадобится всего один цикл, не нужно будет расчитывать положение очередного элемента трехмерного массива, все будет делаться через одну индексацию. Это сэкономит время.
PM MAIL ICQ   Вверх
valvliv
Дата 31.1.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Последний пример - очень доходчивый. Только я буду дольше программу писать с трансфером, чем она по трем индексам искать максимальный элемент!! smile


PM MAIL   Вверх
Cr@$h
Дата 31.1.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Люблю все на практике объяснять.
Цитата(valvliv @ 31.1.2006, 13:25 Найти цитируемый пост)

Только я буду дольше программу писать с трансфером, чем она по трем индексам искать максимальный элемент!! 

Хм. smile Тогда трехиндексный поиск работает быстрее, чем я думал.
PM MAIL ICQ   Вверх
valvliv
Дата 31.1.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не, это просто я - тормоз smile
PM MAIL   Вверх
Cr@$h
Дата 31.1.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Цитата(valvliv @ 31.1.2006, 15:44 Найти цитируемый пост)

Не, это просто я - тормоз

Тогда поиск может позволить себе работать и помедленее. smile
Жду новых вопросов в твоих изысканиях.

Это сообщение отредактировал(а) Cr@$h - 31.1.2006, 16:55
PM MAIL ICQ   Вверх
valvliv
Дата 31.1.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дык, вопросы тока начинаюцца smile Мне Фортран новый стал уже нравицца...
PM MAIL   Вверх
Cr@$h
Дата 31.1.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Цитата(valvliv @ 31.1.2006, 20:16 Найти цитируемый пост)

Дык, вопросы тока начинаюцца  Мне Фортран новый стал уже нравицца...

Это хорошо, солидарен. Жду пока кто-нить Fortran 2003 нормально реализует. Там полное ООП, исключения, поддержка Си на уровне типов и много-много всего. Но это уже совсем другая история...
PM MAIL ICQ   Вверх
valvliv
Дата 31.1.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм. Он мне нравится потому, что на матлаб похож smile а си - ну его совсем... не дамское это дело...
PM MAIL   Вверх
Cr@$h
Дата 31.1.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Цитата(valvliv @ 31.1.2006, 22:43 Найти цитируемый пост)

Он мне нравится потому, что на матлаб похож

Родился от Fortran. smile
Цитата(valvliv @ 31.1.2006, 22:43 Найти цитируемый пост)

а си - ну его совсем... не дамское это дело...

smile Не знаю, по ме так он просто запутанный. Fortran более строже, ИМХО.
PM MAIL ICQ   Вверх
Cr@$h
Дата 31.1.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Кстати, в этом ключе добавлю. Я использовал в примере модный конструктор для массива наподобие:
Код

integer :: Array(5) = [1, 2, 3, 4, 5]

вместо классического
Код

integer :: Array(5) = (/1, 2, 3, 4, 5/)

Добавлен последним стандартом и уже в некоторых местах реализован.
Цитата(valvliv @ 31.1.2006, 22:43 Найти цитируемый пост)

на матлаб похож

А его я начал изучать совсем недавно, так что это я торомоз. smile

Это сообщение отредактировал(а) Cr@$h - 31.1.2006, 22:47
PM MAIL ICQ   Вверх
valvliv
Дата 31.1.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Этот модный конструктор - уже совсем на матлаб похож smile

Мне тоже фортран за строгость нравицца smile Ничего лишнего, аккуратно и прозрачно, и теперь уже без странностей 77-го - вообще красота smile


PM MAIL   Вверх
Cr@$h
Дата 1.2.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

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



Цитата(valvliv @ 31.1.2006, 23:52 Найти цитируемый пост)

теперь уже без странностей 77-го - вообще красота

Жаль, много кода на 77-ом написано, болшая часть netlib.org, наверное. smile А ведь его можно было ой как сократить да оптимизировать...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




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


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

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