powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Много ли новых проектов пишется на C
101 сообщений из 101, показаны все 5 страниц
Много ли новых проектов пишется на C
    #35979420
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Интересует ваше мнение и опыт на счет сабж...
Если не учесть Embedded Sys. и драйвера, то много ли что другое пишется с нуля на чистом С.
Самому приходится иногда писать на С, но все это модификиция или улучшение уже давно написанных крупных проектов, а так все остальное, новое на C++ или C#...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35979429
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я уверен что уложусь в тысячу-полторы строк, то беру чистый С.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35979441
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Да если выбор зависит от вас ...
А как на счет новых крупных проектах ?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35979507
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paradoxx wrote:

> Если не учесть Embedded Sys. и драйвера, то много ли что другое пишется
> с нуля на чистом С.

Вот например Линус Торвальдс всё на голом С пишет. Принципиально.
С++ не любит и (видимо) не знает. Вот он там какой-то делал
VCS (он же SVC), принципиально на голом С. какой - забыл.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35979564
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, git
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35979927
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin wrote:
> MasterZiv, git
я так и думал. То ли darcs, то ли git.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980112
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Paradoxx wrote:

> Если не учесть Embedded Sys. и драйвера, то много ли что другое пишется
> с нуля на чистом С.

Вот например Линус Торвальдс всё на голом С пишет. Принципиально.
С++ не любит и (видимо) не знает. Вот он там какой-то делал
VCS (он же SVC), принципиально на голом С. какой - забыл.


Да, с Linux все понятно, но это же не новый проект. Исторически так сложилось, что он был написан н чистом С, поэтому и поддержка на С... По разным причинам много чего сейчас написано на С (*nix, SAS, Oracle, Apache, and so on....).

А вот интересует на счет проектов с нуля много ли чего начинают писать на С?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980163
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо большие проекты то на сипп.
если нужны закруты вроде дотнта то дотнет.
иначе ява.

есть конечно проекты, которые на дотнете лучше б смотрелись, а их на сипп или яве пишут и наоборот.
знаю человека, который начал разработку приложения примерно в 250к на борланде. попытки переслать его на дотнет закончились неудачей (ну не значет он ничего кроме борланда)

ПРОЕКТОВ МНОГО. не забывайте об этом.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980466
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял, что С++ подходит для больших проектов, которые будут все время сильно развиваться, поскольку ООП смягчает последствия принципиальных изменений в проекте, а чистый С подходит скорее всего для тех проектов, которые не будут развиваться далее некоторого предела, который уже видится на стадии начального проектирования.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980603
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paradoxx wrote:

> Да, с Linux все понятно, но это же не новый проект. Исторически так

Это -- не линукс, а кросс-платформенный распределённый VCS.

http://en.wikipedia.org/wiki/Darcs

Проект вполне себе новый был, когда его начинали.
И тогда, естественно, был уже С++.

Ну а случай известен тем, что когда туда пришёл
какой-то наш (русский в смысле) разработчик с вопросом
типа "что же вы такие умные, а на С++ не пишите ?"
он был послан со страшными матами Линусом далеко и
надолко (да не надолго, навсегда он был послан).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980636
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv wrote:

> Это -- не линукс, а кросс-платформенный распределённый VCS.
>
> http://en.wikipedia.org/wiki/Darcs

Тьфу, опять их перепутал.

Тут.
http://en.wikipedia.org/wiki/Git_(software)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980651
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk wrote:
> Я так понял, что С++ подходит для больших проектов, которые будут все
> время сильно развиваться, поскольку ООП смягчает последствия
> принципиальных изменений в проекте, а чистый С подходит скорее всего для
> тех проектов, которые не будут развиваться далее некоторого предела,
> который уже видится на стадии начального проектирования.

Ты понял неправильно. Никто не мешает делать большие проекты и на голом С.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980725
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkЯ так понял, что С++ подходит для больших проектов, которые будут все время сильно развиваться, поскольку ООП смягчает последствия принципиальных изменений в проекте, а чистый С подходит скорее всего для тех проектов, которые не будут развиваться далее некоторого предела, который уже видится на стадии начального проектирования.

Я бы не сказал что ОС это маленький проект или Оракл или SAS :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980742
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paradoxx
Я бы не сказал что ОС это маленький проект или Оракл или SAS :)
Тогда выходит, что С++ и ООП - это религия больше?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980750
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Странные критерии для выбора языка...
Такое впечатление, что у Линуса просто неприязнь к С++.
Но это можно считать единичным случаем ...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980760
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk,

Нет конечно ООП есть хорошо.
Просто хочу сказать, что и на чистом С можно писать довольно крупные проекты.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980776
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще интересно... после 99-ого года что то развивалось в С.
Вроде в С++ разработка идет, скоро ожидается С++09[x], а вот в С такое впечатление, что нету продвижений...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980795
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да на счет развития С можно отметить C1x, но он как то затих.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980811
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paradoxx wrote:

> Странные критерии для выбора языка...
> Такое впечатление, что у Линуса просто неприязнь к С++.
Так так оно и есть. Но случай не единичный. Возможно,
это у финнов в крови -- не знаю.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980815
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParadoxxВот еще интересно... после 99-ого года что то развивалось в С.
Вроде в С++ разработка идет, скоро ожидается С++09[x], а вот в С такое впечатление, что нету продвижений...
Для продвижения языка необходимы усилия крупных фирм. Borland вроде бы отказался от поддержки C, MS поддерживает С++. Надеяться, что в Linux родится что-то - нереально. Ну еще варится несколько версий для программирования микроконтроллеров - это мелко слишком.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980820
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paradoxx wrote:

> Вот еще интересно... после 99-ого года что то развивалось в С.
> Вроде в С++ разработка идет, скоро ожидается С++09[x], а вот в С такое
> впечатление, что нету продвижений...

Так а там нечего особенно развивать. Маленький кроссплатформенный
ассемблер PDP-11, ни больше, ни меньше. Куда его развивать ?
Стандарт выпустили, чтобы зафиксировать (до этого лет 20 С жил
без стандарта, вполне замечательно) -- и всё, собственно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35980855
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Ну хотя бы что то на подобие STL... Конечно физически не вариант сделать STL для С, но имею ввиду
добавить что то для работы со стандартными структурами данных итп...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981135
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paradoxx,

Дак уже давно есть - glibc. Чем не STL для C?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981162
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParadoxxVowk,

Нет конечно ООП есть хорошо.
Просто хочу сказать, что и на чистом С можно писать довольно крупные проекты.

если просто подумать и добавить в структуры си указатель this как первый аргумент, получиться си с классами. собственно если больше ничего не надо, то си тоже хорош.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981174
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clihltParadoxx,

Дак уже давно есть - glibc. Чем не STL для C?

Да конечно это C standard library, но тогда можно еще отметить uClibc, Klibc, dietlibc, Newlib итд...
Но не один из них не можно считать стандартом как например STL дла C++.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981243
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParadoxxclihltParadoxx,

Дак уже давно есть - glibc. Чем не STL для C?

Да конечно это C standard library, но тогда можно еще отметить uClibc, Klibc, dietlibc, Newlib итд...
Но не один из них не можно считать стандартом как например STL дла C++.

Ну.. это все какбы даже не кросплатформенно ( я про ОС) . Хотя утверждать не буду ) О dietlibc и Newlib даже никогда ничего не слышал. )
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981567
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clihlt,

Я имею ввиду что много таких либов, но не один из них не стандарт, то есть не част языка С...
Да и вообще С как то уже не развивают... Да согласен с коллегой MasterZiv, что там мало чего развивать ... Но так вообще не чего не делают.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981733
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Год-полтора назад где-то обсуждали новые стандарты Ansi-C. Даже ссылки куда-то приводились. Но как-то сошлись на мнении что развивать там действительно нечего. Или надо новый язык создавать.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981748
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГод-полтора назад где-то обсуждали новые стандарты Ansi-C. Даже ссылки куда-то приводились. Но как-то сошлись на мнении что развивать там действительно нечего. Или надо новый язык создавать.

си сабалнсирован. и это хорошо.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981763
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Да в 2007-ом про это говорили, но потом затихли что то...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981774
Фотография Paradoxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eee-pcmaytonГод-полтора назад где-то обсуждали новые стандарты Ansi-C. Даже ссылки куда-то приводились. Но как-то сошлись на мнении что развивать там действительно нечего. Или надо новый язык создавать.

си сабалнсирован. и это хорошо.

Простите что имеете ввиду говоря си сабалнсирован?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35981869
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если мне не изменяет склероз, в C99 кажется, был вагон и маленькая тележка новых прибамбасов. Другое дело что для гуёвщиков и оопишников там ничего интересного нет. Ну так "Звиняйте, бананив нЭма...". Что касается новых проектов - ещё несколько лет назад было ощущение что все те миллионы и миллионы строк на фортране и алголе (математические либы) будут портироваться на C/C++, но теперь понятно что всё это останется на фортране и будет двигаться в сторону MPI. А чистый C останется в своей нише - языка написания ОС и серверов. Сложно ожидать какого то революционного развития языка предназначенного для решения таких задач.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35989467
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n ...ещё несколько лет назад было ощущение что все те миллионы и миллионы строк на фортране и алголе (математические либы) будут портироваться на C/C++
Тут вспомнилось - как-то на занятиях по программированию решил рассмотреть простенький библиотечный алгоритм на ФОРТРАНе, но исполнить его на C (тема была по C, а алгоритмов других что-то не приходило в голову. Алгоритм же на Ф. был простенький - в 5 мин. со всеми объяснениями можно уложиться). Начал составлять - не уложился не то что в 5-10 минут, а 2 занятия ухлопал! Именно тогда я понял, почему алгоримы в Фортране практически невозможно перекладывать на C. Всё дело в том, что в параметрах библиотечных функций как правило содержатся размерности многомерных массивов с переменными размерами, которые на Ф. воспринимаются нормально, а в С этого просто НЕТ. Пришлось городить процедуры преобразования многомерных индексов в одномерные и обратно - еле вывернулся, но ожидаемого эффекта от приведенного мною примера не получилось. Идея о переводе алгоритмов с Ф. на С могла родиться у кого угодно, но только не у тех программистов, которые имеют навыки элементарной практической работы на Ф. и С.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35989537
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Paradoxx:

ParadoxxНу хотя бы что то на подобие STL... Конечно физически не вариант сделать STL для С, но имею ввиду добавить что то для работы со стандартными структурами данных итп...
На практике, STL-списки (std::list) часто неудобны и влекут искусственный overhead. Интрузивные списки удобнее, их часто используют, когда пишут на чистом C (см., например, списки в Wine ).
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35990640
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkПришлось городить процедуры преобразования многомерных индексов в одномерные и обратно - еле вывернулся, но ожидаемого эффекта от приведенного мною примера не получилось. Идея о переводе алгоритмов с Ф. на С могла родиться у кого угодно, но только не у тех программистов, которые имеют навыки элементарной практической работы на Ф. и С.

Мдааа ... а про массивы массивов Вы слышали ?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35990843
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)VowkПришлось городить процедуры преобразования многомерных индексов в одномерные и обратно - еле вывернулся, но ожидаемого эффекта от приведенного мною примера не получилось. Идея о переводе алгоритмов с Ф. на С могла родиться у кого угодно, но только не у тех программистов, которые имеют навыки элементарной практической работы на Ф. и С.

Мдааа ... а про массивы массивов Вы слышали ?
Может у него какой-то особо уникальный случай? Никак не пойму, чего ему в С не хватило...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35994950
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИдея о переводе алгоритмов с Ф. на С могла родиться у кого угодно, но только не у тех программистов, которые имеют навыки элементарной практической работы на Ф. и С.

Идея портирования математических алгоритмов с фортрана на си могла родиться у тех программистов, которым приходилось программировать алгоритмы в которых длина массивов, необходимых для хранения данных была заранее неизвестной и постоянно изменялась в процессе работы алгоритма. Попробуйте выполнить экономичное LU разложение разреженной матрицы с произвольным порядком упорядочивания её элементов и Вы сразу поймёте о чём я говорю. Может быть в более поздних версиях фортрана появилась возможность динамической аллокации памяти, последний фортран на котором я писал был кажется 67, там этого не было. Поэтому там такие проблемы решались вообщем то методом тыка.

Хотя я должен признать что некий цимес в Ваших словах есть. Массивы в фортране при передаче их в функции и процедуры допускают полиморфное поведение, в си этого нет просто по определению - тип параметров объявлается в сигнатуре метода а не в его теле как в фортране. В чистом си не эквивалентная, но сходная функциональность достигается путём применения указателей.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35994981
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте на С написать библиотечную подпрограмму, которая находит произведение ... нет, пусть просто сумму двух матриц A(m,n,p) + b(m,n,p) = с(m,n,p) - и далее разговор более предметный пойдет.
Обращение к подпрограмме предполагается что-то в роде
sum_matr(m,n,p,a,b,c).
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35994999
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ Сами матрицы A,B,C определены в вызывающей программе что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 DIM1  =  10 
  DIM2 =  20 
  DIM3 =  15 
  main(){
     int i,j,k;
     double a[DIM1][DIM2][DIM3];
     double b[DIM1][DIM2][DIM3];
     double c[DIM1][DIM2][DIM3];
     for (i= 0 ; i < DIM1; i++) for(j= 0 ;j<DIM2; j++) for (k= 0 ; k < DIM3; k++) {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
         };
      sum_matr(DIM1,DIM2,DIM3,a,b,c);
      }
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995015
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n wrote:

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

+1. Самая главная причина была, пока не появилось в фортране динамическое
выделение памяти.

> Хотя я должен признать что некий цимес в Ваших словах есть. Массивы в
> фортране при передаче их в функции и процедуры допускают полиморфное
> поведение, в си этого нет просто по определению - тип параметров
> объявлается в сигнатуре метода а не в его теле как в фортране. В чистом
> си не эквивалентная, но сходная функциональность достигается путём
> применения указателей.

Адресной арифметики, а не указателей.
Надо самому вычислять смещение элемента в многомерной матрице,
написать функцию, ну или использовать С++.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995031
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оставим проблемы распределения памяти на вызывающую программу (как в приведенном мною примере) - и всё равно это не спасет ситуацию.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995052
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
void sum_matr(const int DIM1, const int DIM2, const int DIM3, double ***a, double ***b, double ***c)
{
         for(int i =  0 ; i < DIM1; i++)
              for(int j=  0 ; j < DIM2; j++)
                   for(int k= 0 ; k < DIM3; k++)
                        c[i][j][k] = a[i][j][k] + c[i][j][k];
}

авторАдресной арифметики, а не указателей.
Надо самому вычислять смещение элемента в многомерной матрице,
написать функцию, ну или использовать С++.

Речь немного о другом - как передать многомерный массив переменной размерности по всем индексам в функцию. Если Вы писали математику, то должны понимать, что Вам (мне по крайней мере) как программисту внутри функции удобнее работать с одномерным массивом используя адресную арифметику, но пользователь то ожидает видеть в сигнатуре метода многомерный массив (стереотипы знаете ли, раз матрица - значит двумерный массив, расчётная сетка в трёхмерной области - трёхмерный массив и т.д.). Ну так чего ж их не порадовать. Вообщем одно другого не подменяет.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995054
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть

Код: plaintext
c[i][j][k] = a[i][j][k] + b[i][j][k];
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995138
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рискну предположить, что этот пример не подвергался проверке.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995385
к е к с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот читаю ваш ленивый спор про си/фортран, кто хитрее в перемножении матриц, а на практике (в работe, за которую вам деньги платят) вы это три фишки в комбинации вообще использовали? или просто здесь воздух трясете?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995567
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к е к свот читаю ваш ленивый спор про си/фортран, кто хитрее в перемножении матриц, а на практике (в работe, за которую вам деньги платят) вы это три фишки в комбинации вообще использовали? или просто здесь воздух трясете?
При реализации численных методов на Ф. подобная обработка многомерных массивов используется повсюду, я привел лишь очень упрощенный вариант для объяснения почти принципиальной невозможности перевести библиотеки Ф. по численным методам на С, а не то, что там у кого-то нехватило времени, денег или ещё каких-нибудь ресурсов или понаписано на Ф. очень много - и поэтому не вышло. Просто удивляюсь, как можно было много лет выносить на обсуждение этот вопрос при том, что достаточно простенького теста для выяснения бесперспективности этой затеи.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995575
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkРискну предположить, что этот пример не подвергался проверке.
Что вас не устраивает в его примере?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995579
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ и еще отвечаю своим примером программистам-теоретикам на ценные указания про существование многомерных массивов в С.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995581
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Что вас не устраивает в его примере?
Сильные сомнения в том, что предлагаемый пример работает правильно.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995612
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo
Что вас не устраивает в его примере?
Сильные сомнения в том, что предлагаемый пример работает правильно.
Хмм, а реально, я тут слил ваши тексты:
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
#include <stdio.h>
int DIM1  =  2 ;
int DIM2 =  3 ;
int DIM3 =  4 ;
void sum_matr(int DIM1,int DIM2, int DIM3, double ***a, double ***b, double ***c)
{
         for(int i =  0 ; i < DIM1; i++)
              for(int j=  0 ; j < DIM2; j++)
                   for(int k= 0 ; k < DIM3; k++)
                        c[i][j][k] = a[i][j][k] + b[i][j][k];
};
int main()
{
    int i,j,k;
    double a[DIM1][DIM2][DIM3];
    double b[DIM1][DIM2][DIM3];
    double c[DIM1][DIM2][DIM3];
    for (i= 0 ; i < DIM1; i++) 
	for(j= 0 ;j<DIM2; j++) 
	    for (k= 0 ; k < DIM3; k++) 
    {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
    }
    for (i= 0 ; i < DIM1; i++) 
    {
	for(j= 0 ;j<DIM2; j++) 
        {
	    for (k= 0 ; k < DIM3; k++) 
    	    {
                printf("a[%d][%d][%d]=%f; ", i, j, k, a[i][j][k]);
            }
	    printf("\n");
        }
        printf("\n");
    };
    for (i= 0 ; i < DIM1; i++) 
    {
	for(j= 0 ;j<DIM2; j++) 
        {
	    for (k= 0 ; k < DIM3; k++) 
    	    {
                printf("b[%d][%d][%d]=%f; ", i, j, k, b[i][j][k]);
            }
	    printf("\n");
        }
        printf("\n");
    };
    sum_matr(DIM1,DIM2,DIM3,a,b,c);
    for (i= 0 ; i < DIM1; i++) 
    {
	for(j= 0 ;j<DIM2; j++) 
        {
	    for (k= 0 ; k < DIM3; k++) 
    	    {
                printf("a[%d][%d][%d]=%f; ", i, j, k, c[i][j][k]);
            }
	    printf("\n");
        }
        printf("\n");
    };
    return  0 ;
};
вылазит сообщение при компиляции:
g++.EXE (GCC) 3.4.5 (mingw special)C:\Temp>g++ -c forthran.cpp
forthran.cpp: In function `int main()':
forthran.cpp:49: error: cannot convert `double (*)[((unsigned int)((int)DIM2))][((unsigned int)((int)DIM3))]' to `double***' for
argument `4' to `void sum_matr(int, int, int, double***, double***, double***)'
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995667
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkПопробуйте на С написать библиотечную подпрограмму, которая находит произведение ... нет, пусть просто сумму двух матриц A(m,n,p) + b(m,n,p) = с(m,n,p) - и далее разговор более предметный пойдет.
Обращение к подпрограмме предполагается что-то в роде
sum_matr(m,n,p,a,b,c).

Зачем писать то, что давно написано ?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995697
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
библиотечную п/п нельзя компилировать в том же модуле, что и вызывающая, поскольку она создается другими программистами для общего применения. Её необходимо компилить в виде отдельного .obj и затем прилинковывать.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995700
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo,
библиотечную п/п нельзя компилировать в том же модуле, что и вызывающая, поскольку она создается другими программистами для общего применения. Её необходимо компилить в виде отдельного .obj и затем прилинковывать.
В простейшем тестовом случае - пофигу, не находите?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995702
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
нет, не пофигу. Потому что и простейший случай не выйдет. Щас скопировал текст и попробую у себя покомпилить.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995724
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo,
нет, не пофигу. Потому что и простейший случай не выйдет. Щас скопировал текст и попробую у себя покомпилить.
Пофигу, в итоге получится то же самое. Зато с листингами возни меньше.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995842
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
попробуй всё-таки для начала - если получится, для меня это будет открытие.
Привожу свой вариант основной программы:
Код: 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.
31.
#include <stdio.h>
#define  DIM1   2 
#define  DIM2   3 
#define  DIM3   4 
void sum_matr(int ,int, int, double*,double*,double*);
int main()
{
    int i,j,k;
    double a[DIM1][DIM2][DIM3];
    double b[DIM1][DIM2][DIM3];
    double c[DIM1][DIM2][DIM3];
    for (i= 0 ; i < DIM1; i++) 
        for(j= 0 ;j<DIM2; j++) 
            for (k= 0 ; k < DIM3; k++) 
    {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
    }
    
    sum_matr(DIM1,DIM2,DIM3,a[ 0 ][ 0 ],b[ 0 ][ 0 ],c[ 0 ][ 0 ]);
	for (i= 0 ; i < DIM1; i++) 
		for (j= 0 ; j < DIM2; j++)
			for (k= 0 ; k < DIM3; k++)
				if (a[i][j][k] + b[i][j][k] != c[i][j][k]) {
					printf("%s","\nСумма вычислена неверно");
					goto exit;
				}
    printf("%s","\nOk");
exit:    
    return  0 ;
};
И "бибиотечной подпрограммы"
Код: 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.
31.
#include <stdio.h>
#define  DIM1   2 
#define  DIM2   3 
#define  DIM3   4 
void sum_matr(int ,int, int, double*,double*,double*);
int main()
{
    int i,j,k;
    double a[DIM1][DIM2][DIM3];
    double b[DIM1][DIM2][DIM3];
    double c[DIM1][DIM2][DIM3];
    for (i= 0 ; i < DIM1; i++) 
        for(j= 0 ;j<DIM2; j++) 
            for (k= 0 ; k < DIM3; k++) 
    {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
    }
    
    sum_matr(DIM1,DIM2,DIM3,a[ 0 ][ 0 ],b[ 0 ][ 0 ],c[ 0 ][ 0 ]);
	for (i= 0 ; i < DIM1; i++) 
		for (j= 0 ; j < DIM2; j++)
			for (k= 0 ; k < DIM3; k++)
				if (a[i][j][k] + b[i][j][k] != c[i][j][k]) {
					printf("%s","\nСумма вычислена неверно");
					goto exit;
				}
    printf("%s","\nOk");
exit:    
    return  0 ;
};
Вроде только так можно. Приверить не могу - не находит какую-то библиотеку
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995850
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, не тот файл взял:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void sum_matr( DIM1, DIM2, DIM3, a, b, c)
int DIM1, DIM2, DIM3;
double *a, *b, *c;

{
   int i,j,k, ind;
   for (i= 0 ; i < DIM1; i++)
      for(j= 0 ; j < DIM2; j++)
	     for(k =  0 ; k < DIM3; k++) {
		    ind = i * DIM1 * DIM2 + j * DIM2 + k;
			c[ind] = a[ind] + b[ind];    
		 }
		    
   
}
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995884
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже вижу ошибку - индекс надо вычислять вроде так:
Код: plaintext
1.
  ind = i*DIM2*DIM3 + j * DIM3 + k 
Короче говоря, можно только через пересчет многомерных индексов в одномерный массив - а это многократно усложняет программы и богатая почва для ошибок (очень простой пример - и уже можно неправильно сделать).
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995944
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo,
попробуй всё-таки для начала - если получится, для меня это будет открытие.

Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995952
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Зачем писать то, что давно написано?
Поинтересовался ссылкой, но при попытке скачать Downoad Master прождал минуту и выдал error.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35995962
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo
Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
Ну, библиотек никогда не создавал - у каждого свой стиль :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996006
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkУже вижу ошибку - индекс надо вычислять вроде так:
Код: plaintext
1.
  ind = i*DIM2*DIM3 + j * DIM3 + k 
Короче говоря, можно только через пересчет многомерных индексов в одномерный массив - а это многократно усложняет программы и богатая почва для ошибок (очень простой пример - и уже можно неправильно сделать).Размер матриц у Вас не динамический, Вы задаёте его при компиляции, тогда почему Вы этого не делаете для аргументов функции sum_matr, а приводите их к одномерному массиву ?
что Вам мешает использовать такую сигнатуру функции:
Код: plaintext
1.
2.
void sum_matr(int DIM1,int DIM2, int DIM3,
    double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])
и обращаться к массиву стандартным способом:
Код: plaintext
c[i][j][k] = a[i][j][k] + b[i][j][k];
?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996035
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkGluk (Kazan)
Зачем писать то, что давно написано?
Поинтересовался ссылкой, но при попытке скачать Downoad Master прождал минуту и выдал error.

Найти где скачать не проблема, вещь известная
Мне правда нафих не нужная, так что ищите сами
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996048
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш
что Вам мешает использовать такую сигнатуру функции:
Код: plaintext
1.
2.
void sum_matr(int DIM1,int DIM2, int DIM3,
    double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])
и обращаться к массиву стандартным способом:
Код: plaintext
c[i][j][k] = a[i][j][k] + b[i][j][k];
?
Это так, что ли?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void sum_matr(int DIM1,int DIM2, int DIM3,
    double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])

{
   int i,j,k;
   for (i= 0 ; i < DIM1; i++)
      for(j= 0 ; j < DIM2; j++)
	     for(k =  0 ; k < DIM3; k++) {

                        c[i][j][k] = a[i][j][k] + b[i][j][k];
		 }


}
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996059
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ Убедительная просьба проверять тексты программ на работоспособность перед тем, как постить.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996067
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk wrote:

> массивов используется повсюду, я привел лишь очень упрощенный вариант
> для объяснения *почти принципиальной* невозможности перевести библиотеки
> Ф. по численным методам на С, а не то, что там у кого-то нехватило

во-первых, есть f2c -- компилятор с фортрана-77 на С. Так что о принципиальной
невозможности говорить не приходится. Во-вторых, даже руками можно
сделать эмуляцию многомерных массивов на С, вычисляя смещения от начала
массива в зависимости от индексов, на ассемблере же это делается,
почему на С-то нельзя ? Да, может будет неудобно, менее читаемо и т.д.,
но принципиально это возможно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996073
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk+ Убедительная просьба проверять тексты программ на работоспособность перед тем, как постить.не у всех есть микрософтовский компилятор :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996085
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшне у всех есть микрософтовский компилятор :)
А какой еще пробовать? У меня Borland где-то на полке, и Watcom еще есть.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996098
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так попробуйте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <stdio.h>
#define DIM1  2 
#define DIM2  3 
#define DIM3  4 
void sum_matr(double a[DIM1][DIM2][DIM3], double b[DIM1][DIM2][DIM3], double c[DIM1][DIM2][DIM3])
{

. . .
    };
    sum_matr(a,b,c);
    for (i= 0 ; i < DIM1; i++)
    {
. . .
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996127
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёштак попробуйте:

Здесь делается попытка создать пусть и очень простую, но библиотечную подпрограмму, которая должна работать не только для одного-единственного случая, когда
DIM1= 2, DIM2 = 3, DIM3 = 4, а для всех нормальных случаев, которые будут ей подавать на вход.
Чтобы было более понятно, представьте вариант, когда надо одной и той же п/п надо один раз сложить массивы DIM1=2, DIM2 = 3, DIM3 = 4, а второй раз - скажем, DIM1 = 10, DIM2 = 15, DIM3 = 20.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996158
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkЁштак попробуйте:

Здесь делается попытка создать пусть и очень простую, но библиотечную подпрограмму, которая должна работать не только для одного-единственного случая, когда
DIM1= 2, DIM2 = 3, DIM3 = 4, а для всех нормальных случаев, которые будут ей подавать на вход.
Чтобы было более понятно, представьте вариант, когда надо одной и той же п/п надо один раз сложить массивы DIM1=2, DIM2 = 3, DIM3 = 4, а второй раз - скажем, DIM1 = 10, DIM2 = 15, DIM3 = 20.тогда этот способ не будет работать :)
но если размер известен при компиляции - его можно точно так же передавать при компиляции библиотеки в библиотеку.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996245
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VowkXDiaBLo
Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
Ну, библиотек никогда не создавал - у каждого свой стиль :)
Почему не создавал? Просто в случае "простейшего примера", не вижу смысла. Не занудствуй, запарил.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996252
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁшVowk+ Убедительная просьба проверять тексты программ на работоспособность перед тем, как постить.не у всех есть микрософтовский компилятор :)
У меня тоже его нету, но я в MinGW проверял :)
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35996262
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoVowkXDiaBLo,
попробуй всё-таки для начала - если получится, для меня это будет открытие.

Что попробовать то? Я уж сколько лет на С++ пишу, не замечал причин, чтобы все функции по отдельным файлам рассовывать.
Ключевой момент тут, если непонятно, я говорю об отдельном файле на каждую функцию. Типа как на каждый публичный класс в Яве.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997539
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабочий вариант на чистом Си (ну закроем глаза на cout)

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
#include <iostream.h>
#include <malloc.h>

void sum_matr(const int, const int, const int, double ***, double ***, double ***);

const int DIM1 =  10 ;
const int DIM2 =  15 ;
const int DIM3 =  20 ;

int main()
{
	double*** A = (double***)malloc(sizeof(double**)*DIM1);
	double*** B = (double***)malloc(sizeof(double**)*DIM1);
	double*** C = (double***)malloc(sizeof(double**)*DIM1);

	int i,j,k;

	for(i =  0 ; i < DIM1; i++)
	{
		A[i] = (double**)malloc(sizeof(double*)*DIM2);
		B[i] = (double**)malloc(sizeof(double*)*DIM2);
		C[i] = (double**)malloc(sizeof(double*)*DIM2);

		for(j=  0 ; j < DIM2; j++)
		{
			A[i][j] = (double*)malloc(sizeof(double)*DIM3);
			B[i][j] = (double*)malloc(sizeof(double)*DIM3);
			C[i][j] = (double*)malloc(sizeof(double)*DIM3);

			for(k= 0 ; k < DIM3; k++)
			{
				A[i][j][k] =  1 . 0 ;
				B[i][j][k] =  2 . 0 ;
				C[i][j][k] =  0 . 0 ;
			}
		}
	}

	sum_matr(DIM1, DIM2, DIM3, A, B, C);

	for(i =  0 ; i < DIM1; i++)
		for(j=  0 ; j < DIM2; j++)
			for(k =  0 ; k < DIM3; k++)
				cout << "C[" << i << "][" << j << "][" << k << "] = " << C[i][j][k] << endl;

	for(i =  0 ; i < DIM1; i++)
	{
		for(j=  0 ; j < DIM2; j++)
		{
			free(A[i][j]);
			free(B[i][j]);
			free(C[i][j]);
		}

		free(A[i]);
		free(B[i]);
		free(C[i]);
	}

	free(A);
	free(B);
	free(C);

	return  0 ;
}

void sum_matr(const int DIM1, const int DIM2, const int DIM3, double ***a, double ***b, double ***c)
{
         for(int i =  0 ; i < DIM1; i++)
              for(int j=  0 ; j < DIM2; j++)
                   for(int k= 0 ; k < DIM3; k++)
                        c[i][j][k] = a[i][j][k] + b[i][j][k];
}
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997621
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nРабочий вариант на чистом Си (ну закроем глаза на cout)

Опять 25. Библиотечная ф-я должна компилироваться в отдельном модуле.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997635
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что по Вашему помешает ей откомпилироваться в отдельном модуле? Я правда не понимаю чего Вам ещё нужно...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997651
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nА что по Вашему помешает ей откомпилироваться в отдельном модуле? Я правда не понимаю чего Вам ещё нужно...
Тут собственно спор идет о причинах больших затруднений перевода библиотечных функций Ф. на С. Я взял максимально простой пример, чтобы, не загромождая деталями, показать сложности этого процесса.
А помешает откомпилироваться в отдельном модуле синтакис C. Хотел бы иметь компилятор, который это сделает.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997665
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА помешает откомпилироваться в отдельном модуле синтакис C. Хотел бы иметь компилятор, который это сделает.

А, нелинейные эффекты, понимаю...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997723
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n
А, нелинейные эффекты, понимаю...
Почему нелинейные? Отсутствие в ЯП какой-либо возможности - вещь весьма прямолинейная.
Я вот подготовил пример чуть более продвинутый.
Главная программа:
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#include <stdio.h>
#define  DIM1   2 
#define  DIM2   3 
#define  DIM3   4 
#define DIM4   20 
#define DIM5   10 
#define DIM6   15 
void sum_matr(int ,int, int, double*,double*,double*);
int main()
{
    int i,j,k;
    double a[DIM1][DIM2][DIM3],  b[DIM1][DIM2][DIM3], c[DIM1][DIM2][DIM3];
    double aa[DIM4][DIM5][DIM6],  bb[DIM4][DIM5][DIM6], cc[DIM4][DIM5][DIM6];
    for (i= 0 ; i < DIM1; i++) for(j= 0 ;j<DIM2; j++) for (k= 0 ; k < DIM3; k++)
    {
         a[i][j][k] = i+j + k;
         b[i][j][k] = i-j - k;
    }
    for (i= 0 ; i < DIM4; i++) for(j= 0 ;j<DIM5; j++) for (k= 0 ; k < DIM6; k++)
    {
         aa[i][j][k] = i+j + k;
         bb[i][j][k] = i-j - k;
    }

    sum_matr(DIM1,DIM2,DIM3,a[ 0 ][ 0 ],b[ 0 ][ 0 ],c[ 0 ][ 0 ]);
    sum_matr(DIM4,DIM5,DIM6,aa[ 0 ][ 0 ],bb[ 0 ][ 0 ],cc[ 0 ][ 0 ]);
    for (i= 0 ; i < DIM1; i++) for (j= 0 ; j < DIM2; j++) for (k= 0 ; k < DIM3; k++)
       if (a[i][j][k] + b[i][j][k] != c[i][j][k]) {
           printf("%s","\n  ivalid sum 1");
           goto exit;
           }
     for (i= 0 ; i < DIM4; i++) for (j= 0 ; j < DIM5; j++) for (k= 0 ; k < DIM6; k++)
        if (aa[i][j][k] + bb[i][j][k] != cc[i][j][k]) {
           printf("%s","\n invalid sum 2");
           goto exit;
           }
    printf("%s","\nOk");
exit:
    return  0 ;
};
И п/п (в отдельном модуле):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void sum_matr( DIM1, DIM2, DIM3, a, b, c)
int DIM1, DIM2, DIM3;
double *a, *b, *c;

{
   int i,j,k, ind;
   for (i= 0 ; i < DIM1; i++)   for(j= 0 ; j < DIM2; j++)    for(k =  0 ; k < DIM3; k++) {
      ind = i * DIM2 * DIM3 + j * DIM3 + k;
      c[ind] = a[ind] + b[ind];
      }
}
Одна и та же п/п используется и правильно работает для двух совершенно разных размеров массивов.
Процесс компляции и выполнения:
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997745
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И? Вы что, хотите сказать что если я вынесу свою функцию в отдельный файл, скомпилирую её в .obj, а потом буду линковать с main'ом для разных DIM1, DIM2, DIM3, то мой вариант не будет работать что ли? Я правильно Вас понял?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997750
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n,
Совершенно верно. Он не то что не будет правильно работать, но и вряд ли какой-нибудь компилятор создаст программу вообще.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997762
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну Вы и упёртый юноша. Может так будет понятней?


Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
#include <iostream.h>
#include <malloc.h>

void sum_matr(const int, const int, const int, double ***, double ***, double ***);

const int DIM1 =  10 ;
const int DIM2 =  15 ;
const int DIM3 =  20 ;

const int DIM11 =  3 ;
const int DIM22 =  4 ;
const int DIM33 =  5 ;

int main()
{
	double*** A = (double***)malloc(sizeof(double**)*DIM1);
	double*** B = (double***)malloc(sizeof(double**)*DIM1);
	double*** C = (double***)malloc(sizeof(double**)*DIM1);

	int i,j,k;

	for(i =  0 ; i < DIM1; i++)
	{
		A[i] = (double**)malloc(sizeof(double*)*DIM2);
		B[i] = (double**)malloc(sizeof(double*)*DIM2);
		C[i] = (double**)malloc(sizeof(double*)*DIM2);

		for(j=  0 ; j < DIM2; j++)
		{
			A[i][j] = (double*)malloc(sizeof(double)*DIM3);
			B[i][j] = (double*)malloc(sizeof(double)*DIM3);
			C[i][j] = (double*)malloc(sizeof(double)*DIM3);

			for(k= 0 ; k < DIM3; k++)
			{
				A[i][j][k] =  1 . 0 ;
				B[i][j][k] =  2 . 0 ;
				C[i][j][k] =  0 . 0 ;
			}
		}
	}

	double*** AA = (double***)malloc(sizeof(double**)*DIM11);
	double*** BB = (double***)malloc(sizeof(double**)*DIM11);
	double*** CC = (double***)malloc(sizeof(double**)*DIM11);

	for(i =  0 ; i < DIM11; i++)
	{
		AA[i] = (double**)malloc(sizeof(double*)*DIM22);
		BB[i] = (double**)malloc(sizeof(double*)*DIM22);
		CC[i] = (double**)malloc(sizeof(double*)*DIM22);

		for(j=  0 ; j < DIM22; j++)
		{
			AA[i][j] = (double*)malloc(sizeof(double)*DIM33);
			BB[i][j] = (double*)malloc(sizeof(double)*DIM33);
			CC[i][j] = (double*)malloc(sizeof(double)*DIM33);

			for(k= 0 ; k < DIM33; k++)
			{
				AA[i][j][k] =  1 . 0 ;
				BB[i][j][k] =  2 . 0 ;
				CC[i][j][k] =  0 . 0 ;
			}
		}
	}

	sum_matr(DIM1, DIM2, DIM3, A, B, C);
	sum_matr(DIM11, DIM22, DIM33, AA, BB, CC);

	for(i =  0 ; i < DIM1; i++)
		for(j=  0 ; j < DIM2; j++)
			for(k =  0 ; k < DIM3; k++)
				cout << "C[" << i << "][" << j << "][" << k << "] = " << C[i][j][k] << endl;

	for(i =  0 ; i < DIM11; i++)
		for(j=  0 ; j < DIM22; j++)
			for(k =  0 ; k < DIM33; k++)
				cout << "CC[" << i << "][" << j << "][" << k << "] = " << CC[i][j][k] << endl;

	for(i =  0 ; i < DIM1; i++)
	{
		for(j=  0 ; j < DIM2; j++)
		{
			free(A[i][j]);
			free(B[i][j]);
			free(C[i][j]);
		}

		free(A[i]);
		free(B[i]);
		free(C[i]);
	}

	free(A);
	free(B);
	free(C);

	for(i =  0 ; i < DIM11; i++)
	{
		for(j=  0 ; j < DIM22; j++)
		{
			free(AA[i][j]);
			free(BB[i][j]);
			free(CC[i][j]);
		}

		free(AA[i]);
		free(BB[i]);
		free(CC[i]);
	}

	free(AA);
	free(BB);
	free(CC);

	return  0 ;
}

void sum_matr(const int ind1, const int ind2, const int ind3, double ***a, double ***b, double ***c)
{
         for(int i =  0 ; i < ind1; i++)
              for(int j=  0 ; j < ind2; j++)
                   for(int k= 0 ; k < ind3; k++)
                        c[i][j][k] = a[i][j][k] + b[i][j][k];
}
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997785
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результаты в студию, плиз.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997801
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На каком же компиляторе? Мой скромный MS 2008 выдает следующее:
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997813
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пжалуйста...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997816
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результат...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997821
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS VS 6.0, дома юзаю Sun Studio 11 на Solaris 10х86 (64 бит), тоже без проблем...
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997832
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vowk , возможно я не понял вашу идею, но пример со СЛОЖЕНИЕМ матриц весьма неудачен. Проведя комплексную оптимизацию, можно три цикла свернуть в один и сделать реализацию тривиальной. Может быть пример с УМНОЖЕНИЕМ был-бы более показателен. Еще неплохо-бы лицезреть контр-пример на Ф., без которого сравнение получается несколько "серым" и "однообразным".
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997852
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык об оптимизации речь даже и не идёт. С одномерным массивом всё ясно, хотя при кодировании мат алгоритмов бывают ситуации когда удобнее использовать другие структуры, но да это всё банальные вещи. По сравнению с фортраном, вот лично мне на си не хватает такой фишки:

Сам метод:

Код: plaintext
1.
2.
3.
4.
5.
SUBROUTINE MATRIX(N,M,K,A)
  INTEGER N,M,K
  DOUBLE PRECISION A( 1 )
  .....
  тело метода
END

Вызов:

Код: plaintext
1.
DOUBLE PRESISION A( 100 , 200 , 300 )
CALL MATRIX( 100 , 200 , 300 ,A)

То есть я внутри метода работаю с A как с одномерным массивом размерности N*M*K, а в описании интерфейса говорю что это трехмерный массив A(N,M,K). У нас была очень большая математическая библиотека написана в таком стиле на фортране, вот при портировании её на чистый Си этот момент доставлял неудобства.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997854
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton Vowk , возможно я не понял вашу идею,Да идея там всего одна - не умеет человек пользоваться языком, отсюда и все его возражения.

Vowk , хочешь отдельных модулей? Которые можно по отдельности компилировать и в разные проекты вставлять? Смотри приложенный архив.
Чистый ANSI C, никаких артефактов из С++. Я не знаю компилятора который с этой программой не справится. Но вот, чтоб ты не блуждал в трех соснах:
Код: plaintext
1.
2.
3.
4.
5.
  cl /c main.c
  cl /c make_matr.c
  cl /c prn_matr.c
  cl /c sum_matr.c
  link /out:test.exe main.obj make_matr.obj prn_matr.obj sum_matr.obj
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997857
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n,
да, проверил, всё работает. Спасибо, теперь понял одно из различий между С и С++. Правда, несколько сложноватое объявление массивов, но всё же сильная вещь.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997867
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nДык об оптимизации речь даже и не идёт. С одномерным массивом всё ясно, хотя при кодировании мат алгоритмов бывают ситуации когда удобнее использовать другие структуры, но да это всё банальные вещи. По сравнению с фортраном, вот лично мне на си не хватает такой фишки:

Сам метод:

Код: plaintext
1.
2.
3.
4.
5.
SUBROUTINE MATRIX(N,M,K,A)
  INTEGER N,M,K
  DOUBLE PRECISION A( 1 )
  .....
  тело метода
END

Вызов:

Код: plaintext
1.
DOUBLE PRESISION A( 100 , 200 , 300 )
CALL MATRIX( 100 , 200 , 300 ,A)

То есть я внутри метода работаю с A как с одномерным массивом размерности N*M*K, а в описании интерфейса говорю что это трехмерный массив A(N,M,K). У нас была очень большая математическая библиотека написана в таком стиле на фортране, вот при портировании её на чистый Си этот момент доставлял неудобства.
А что, приведение типов уже отменили?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void MATRIX(N, M, K, A)
int N, M, K;
double ***A;
{
     double *one_dimension_A = (double *)A;
     // а теперь можешь обращаться к одному и тому же массиву данных в любой размерности.
}
А как дополнительная конфетка: обрати внимание как параметры объявлены.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997876
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
тоже спасибо. Выходит, что это особенность не С++ даже, а обычного С. Пример внимательно изучил.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997879
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да понятно... Не ЭЛЕГАНТНО ЭТО.

double*** - вот это - не элегантно, много геморроя с аллокацией/инициализацией в вызывающей программе. В фортране компиллятор делает это за меня, к хорошему быстро привыкаешь.

авторПравда, несколько сложноватое объявление массивов, но всё же сильная вещь

А это не массивы. Массивы это такие легкие элегантные конструкции которые живут на стеке. А это - нечто что мы налобали из кучи, а СИ всего лишь подсластил нам пилюлю создав иллюзию что с этим нечто можно обращаться как с массивом.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997883
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА как дополнительная конфетка: обрати внимание как параметры объявлены.

А это разве не depricated фича? Чё то у меня смутное чуство что таки да.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997884
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А насчет Фортрана - то там использовались массивы с переменыыми размерами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DOUBLE PRESISION A( 100 , 200 , 300 ), B( 100 , 200 , 300 ), C( 100 , 200 , 300 )
CALL MATRIX( 100 , 200 , 300 ,A,B,C)
...
SUBROUTINE MATRIX(M,N,L,A,B,C)
DIMENSION A(M,N,*), B(M,N,*),C(M,N,*)
FOR I= 1 ,M
   FOR J= 1 ,N
      FOR K= 1 ,L
         C(I,J,K) = A(I,J,K) + B(I,J,K)
      END  
   END
END
Всё же попроще, чем на С.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997893
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nавторА как дополнительная конфетка: обрати внимание как параметры объявлены.А это разве не depricated фича? Чё то у меня смутное чуство что таки да.Да, ее пытались объявить устаревшей, но даже сегодня любой компилятор ее прекрасно понимает. Хотя в классическом учебнике от K&R она уже не упоминается вообще.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997895
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где декларируется связь между звёздочкой '*' и переменной 'L' ?
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997909
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА где декларируется связь между звёздочкой '*' и переменной 'L' ?
* означает размер неопределенной длины (может быть, 1, а может быть и 100).
Для вычисления индекса последняя размерность массива не имеет значения. Это программист знает, что L - это третья размерность массива, а компилятору она не нужна.
Код: plaintext
1.
одномерный индекс A(I,J,K) = I + M*J + M*N*K 
- компилятору надо знать M и N, а последняя размерность L не участвует в вычислении одномерного индекса.
...
Рейтинг: 0 / 0
Много ли новых проектов пишется на C
    #35997973
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nНу Вы и упёртый юноша. Может так будет понятней?
Код: plaintext
1.
...

В MinGW тоже скомпилировалось. Только буркнуло на устаревший хэдер, ну я сделал на всякий
Код: plaintext
1.
2.
3.
#include <iostream>
#include <malloc.h>
using namespace std;
вместо
Код: plaintext
1.
2.
#include <iostream.h>
#include <malloc.h>
И никаких проблем.
...
Рейтинг: 0 / 0
101 сообщений из 101, показаны все 5 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Много ли новых проектов пишется на C
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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