HLFX.Ru Forum
Показать все 35 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- переписать на С? (https://hlfx.ru/forum/showthread.php?threadid=3886)


Отправлено thambs 24-04-2013 в 19:47:

переписать на С?

в связи с тем что в gfortran обнаружился на редкость идиотский баг, g95 не хочет линковать модули от plplot'а, а триал ifort'а требует анальной регистрации, уже подумываю переписать свои наработки на C (не смотря на боль). в общем, посоветуйте справочник по переходу.
ну и сразу задам вопросы, что бы знать стоит ли игра свеч:

1)производные типы данных есть только в ++ или и в чистом C?
2)массивы всегда начинаются с нуля, или можно зааллокатить произвольные границы?
3)есть ли такое понятие как вырезка массива?
4)в фортране есть такая удобная штука -- contains блок: размещённые внутри этого блока функции и подпрограммы имеют доступ ко всей памяти родительского блока. в C что ни будь аналогичное есть?
5)как работать со строками, есть какой ни будь аналог write или format'а?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 24-04-2013 в 21:02:

для строк есть sprintf
массивы всегда начинаются с нуля.
производные типы данных только в С++
что такое вырезка массива?
contains block? не, не слышал

Следует понимать, что чистый Си минимально отрывается от реального положения дел: что напишешь, то и будет выполняться.
Практически во всех остальных языках полно неочевидных конструкций, существующих только на этапе компиляции. В других языках этот слой абстракции за каким-то чортом существует и в исполняемой программе, но это скорее удел виртуальных машинок, а таковыми я считаю все языки, со встроенным сборщиком мусора, хоть Ксерокс и Тот Кого Я Учил Брить со мной не согласятся

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Cybermax 24-04-2013 в 21:04:

Ничерта не понял, удачи тебе мужик!

__________________


Отправлено Дядя Миша 24-04-2013 в 21:08:

А хотя. Я тут терминологию перечитал. Есть производные типы данных в Си, кроме классов, разумеется. Но практически любой класс может быть описан структурой и неким набором функций, с заранее обговоренным нейм-спейсом.
Т.е. в С++ мы бы писали

C++ Source Code:
1
MyClass :: Set( int value )
2
{
3
  m_iValue = value;
4
}

а в чистом Си
C++ Source Code:
1
MyClass_Set( mystruct_t *p, int value )
2
{
3
  p->m_iValue = value;
4
}

Если учесть, что после компиляциии в С++ все классы развернутся в нечто аналогичное, только автоматически, то разница не так уж велика.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 24-04-2013 в 21:32:

>что такое вырезка массива?

ну например M(1:9:3) -- будет выглядеть как массив из элементов массива M от начиная с 1го, до 9 с шагом 3

>[i]contains block? не, не слышал


хмм ну это так

program main
[описание переменных]
[тело программы]
contains
[subroutine()]
[function[]] -- все функции и подпрограммы внутри этогоо contains'а имеют доступ ко всем переменным из main
endprogram

>минимально отрывается от реального положения дел
ну вот фортран тоже, но блин такая беда с компилятором просто угнетает

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено nemyax 24-04-2013 в 21:33:

Цитата:
Дядя Миша писал:
что такое вырезка массива?

Наверно, как в петоне срез списка:
list1[3:10]
list2[16:]
list3[:]


Отправлено thambs 24-04-2013 в 21:37:

>Но практически любой класс может быть описан структурой и неким набором функций, с заранее обговоренным нейм-спейсом.

ага, вроде понял. т.е. это аналог интерфейсного блока.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 25-04-2013 в 03:43:

Есть мнение (и не только моё), что нужно переписать на си весь код, написанный на фортране, после чего стереть все существующие в мире копии g77/g95/ifort, включая исходники и мануалы, сжечь книги по ним и пристрелить наиболее йаростных адептов этого языка.

__________________

xaerox on Vivino


Отправлено marikcool 25-04-2013 в 04:57:

Нафиг тройные масивы тебе, оберни все класами в плюсах и все быстро сделаешь.

__________________
vk.com/skullcapstudios


Отправлено KiQ 25-04-2013 в 06:20:

thambs если я правильно понял, вырезку массивов можно сделать через for:

C++ Source Code:
1
int[10] array1;
2
int[5] array2;
3
 
4
for (int i = 0; i < 10; i += 2) {
5
  array2[i >> 1] = array1[i];
6
}

__________________
-Brain is dead-


Отправлено XaeroX 25-04-2013 в 06:34:

KiQ
Если не секрет, кто научил тебя строить циклы таким образом?
Почему не цикл от 0 до 5 с адресацией вида array1[i*2]?

__________________

xaerox on Vivino


Отправлено KiQ 25-04-2013 в 06:53:

XaeroX да это я в лоб сделал эмуляцию этой вырезки

__________________
-Brain is dead-


Отправлено XaeroX 25-04-2013 в 09:46:

KiQ
Просто странно, решение "в лоб" через операторы сдвига.

__________________

xaerox on Vivino


Отправлено KiQ 25-04-2013 в 10:32:

XaeroX для скорости же. Умножение тоже можно заменить на <<1

__________________
-Brain is dead-


Отправлено XaeroX 25-04-2013 в 11:12:

KiQ
Я не спрашиваю, зачем заменять деление на сдвиг, это знает даже ребёнок.
Я спрашиваю, зачем строить цикл так, что при адресации нужно выполнять сдвиг (или деление) вместо потенциального "бесплатного" умножения, выполняемого самой командой mov?
Ладно, это риторический вопрос. В очередной раз убедился, до чего ява и сишарп довели народ. Никто уже и не задумывается, как компьютер выполняет программу. Зато как заменить умножение на сдвиг - это все бегом делают. Двойные стандарты...

__________________

xaerox on Vivino


Отправлено thambs 25-04-2013 в 12:12:

KiQ
ээмм.. а указателю как такое передать?
у меня например есть массив DATA[ i*3], хочу сделать указатель eDATA=>DATA[ 1::3 ], то есть сослаться на каждый третий элемент.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 25-04-2013 в 13:35:

thambs
Увеличивай указатель на 3 при обходе.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-04-2013 в 15:38:

Какова практическая цель этой вырезки массивов?
Ну я понимаю, к примеру, если у нас массив объявлен как byte, а на самом деле там дрова лежатвекторы хранятся. И вот мы значит, сначала преобразовываем указатель во флоат, а потом двигаем его на 12 байт.
Для этого? Или есть еще какие-то неочевидные мне кейсы?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 25-04-2013 в 16:02:

Цитата:
Дядя Миша писал:
Или есть еще какие-то неочевидные мне кейсы?

Массив координат xyzxyzxyzxyzxyzxyzxyzxyzx...
Надо осуществить операции только над z-компонентами.
Мне это сразу пришло на ум, потому и предложил делать += 3 в цикле, сдвигая указатель на 3 флоата.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-04-2013 в 16:32:

Ну всё равно никаких проблем же.
Да на Си можно всё что хочешь делать, кроме окошек, конечно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 25-04-2013 в 16:34:

Дядя Миша
А почему окошки нельзя?

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-04-2013 в 16:39:

Очень уж муторно

Всё равно что унитаз вилкой чистить.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 25-04-2013 в 17:17:

>Массив координат xyzxyzxyzxyzxyzxyzxyzxyzx...

ну почти в точку. у меня массив макрчастиц [электрон;ион;атом;электрон;ион;атом;электрон;ион;атом] по электронам и ионам всё время бегаю, а атомы медленные и на электромагнитные поля им пофиг, зато их много, поэтому их обход делаю через некоторое большое количество циклов, ну и очень удобно иметь псевдонимы.

а насчёт общей области памяти для нескольких функций -- как
это реализуется?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 25-04-2013 в 18:49:

Цитата:
thambs писал:
а насчёт общей области памяти для нескольких функций -- как
это реализуется?

Лучше приведи пример.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 25-04-2013 в 20:41:

Цитата:
XaeroX писал:
Массив координат xyzxyzxyzxyzxyzxyzxyzxyzx...
Надо осуществить операции только над z-компонентами.

Да ну их, эти си. Так гораздо веселее:
code:
everyThird :: [a] -> [a] everyThird (_:_:x:xs) = x:everyThird xs everyThird _ = []


Отправлено thambs 27-04-2013 в 03:01:

Дядя Миша
http://www.math.spbu.ru/user/rus/cl...r2.3.shtml#2.39
мм.. ну у меня вот так:
program main
...
[описание переменных и констант]
...
allocate( gArray( ixMin:ixMax,iyMin:iyMax ) )
allocate( pArray( ipMax*3,Cells ) )
...
далее тело программы, а потом блок
contains
subroutine1()
subroutine2()
... - все описанные в этом блоке подпрограммы могут напрямую обратиться к gArray, pArray и любой другой переменной из основной программы.
endprogram main

ну и, естественно, внешним подпрограммам их пришлось бы передавать в качестве параметров и их было бы тогда очень много.

в C такое как сделать? я просто даже не знаю как такое называется, чтоб запрос в гуугле составить.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 27-04-2013 в 04:52:

Цитата:
thambs писал:
ну и, естественно, внешним подпрограммам их пришлось бы передавать в качестве параметров и их было бы тогда очень много.

У моего шефа в функциях на фортране в среднем по 15-20 аргументов. Ему норм.
Цитата:
thambs писал:
в C такое как сделать? я просто даже не знаю как такое называется, чтоб запрос в гуугле составить.

В С (и во всех нормальных языках, даже в ассемблере) такое по умолчанию. Называется "глобальные переменные".
Если они в другом файле объявлены - тогда им надо прописать класс памяти extern.

__________________

xaerox on Vivino


Отправлено Дядя Миша 27-04-2013 в 06:17:

XaeroX фортран не поддерживает глобальные переменные?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 27-04-2013 в 06:41:

Дядя Миша
В привычном нам виде - нет.
Есть коммон-блоки, но их надо в каждой функции переобъявлять, ну примерно как в похапе.
Это как если бы в С надо было каждую глобальную переменную объявлять в функции с ключевым словом extern.

__________________

xaerox on Vivino


Отправлено Дядя Миша 27-04-2013 в 11:25:

Мдя. Какое всё-таки щастье, что у нас есть Си.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 27-04-2013 в 12:34:

Дядя Миша
Фортран вообще забавный язык. Там нет глобальных переменных, но есть встроенные в язык (!) функции-ключевые слова для работы с файлами и встроенный тип данных для работы с комплексными числами. А возможность динамического выделения памяти появилась лишь в 1991 году (до того - память маллокали примерно так же, как в виртуальных машинках квак, т.е. писали кастомные аллокаторы, в отсутствие указателей это был адъ и израилъ).
Собсно, С и был разработан, чтобы забороть эту идиотскую идеологию. Оставить в языке только абстрактные вещи, а конкретные - вынести в библиотеки (CRT и любые другие).

__________________

xaerox on Vivino


Отправлено Дядя Миша 27-04-2013 в 12:55:

Да, но Си появился гораздо раньше 1991 года.
Собственно, вот эти проблемы с массивами-указателями, они и в делфях и в васике, почти везде вообщем. Да там помоему и арихметики указателей никакой нету. Вот это меня вообще в ступор вгоняет. Ну как можно жыть без архиметики указателей?

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 27-04-2013 в 13:52:

Цитата:
Дядя Миша писал:
они и в делфях и в васике, почти везде вообщем. Да там помоему и арихметики указателей никакой нету

В делфях указатели есть, в васике - есть как недокументированная фича (дотошные любители васика таки раскопали).
Но арифметики нет ни там, ни там, факт.

Добавлено 27-04-2013 в 20:52:

Цитата:
Дядя Миша писал:
Ну как можно жыть без архиметики указателей?

Вопрос из разряда "как можно жить без команды rotr" или скажем "xchg".
Привыкшим к языку ассемблера тоже непросто с С работать.
Но для них, к чести сказать, оставили возможность делать вставки. В делфи их тоже делать можно. А в фортране - нет. И в васике - нет. А в яве - и подавно нет.
Зато безопасность и защита от дурака (кем является половина современных погромизтов, по самой оптимистичной оценке).

__________________

xaerox on Vivino


Отправлено Дядя Миша 27-04-2013 в 14:17:

Цитата:
XaeroX писал:
В делфях указатели есть, в васике - есть как недокументированная фича

Я не говорил, что их там нет. Я говорил, что с ними проблемы, т.е. их использование не поощряется авторами языка.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Government-Man 27-04-2013 в 22:24:

Нет языка кроме C и К-рниган пророк его!


Временная зона GMT. Текущее время 09:03.
Показать все 35 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024