
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (31) « Первая ... 2 3 [4] 5 6 ... 30 31 ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
Да, видимо еще одно добавление про вывод собственного текста. Я сомневаюсь, что это можно сделать одной строкой (ну не вгоняя весь текст в одну строку типа :
![]() ![]() int i = 0; for (int j = 0; j < 10; j++); std::cout << "hello"; CRgn A; Добавлено Круто! Это я и хотел узнать. Не имеет смысла с теоретической точки зрения, и именно потому, что . mo3r Извини, я не понял, а что такое "рефлексия"? |
Сообщ.
#47
,
|
|
|
Цитата Narsil @ Извини, я не понял, а что такое "рефлексия"? Возможность из программы узнавать/менять информацию о программе, типах данных и т.д. В частности, возможность получить код программы. |
Сообщ.
#48
,
|
|
|
Не отвлекаемся от темы!
![]() |
Сообщ.
#49
,
|
|
|
wormball
я б решил ту задачу както так. ![]() ![]() int main(int, char*) { std::ifstream ifile("test1.txt"); std::ofstream ofile("test2.txt"); class revFunctor { public: std::string operator()(std::string str_) { std::reverse (str_.begin(), str_.end()); return str_; } }; std::transform (std::istream_iterator<std::string>(ifile), std::istream_iterator<std::string>(), std::ostream_iterator<std::string>(ofile, " "), revFunctor()); } но если гнатья за меньшим количеством символов, то можно так ![]() ![]() using namespace std; string revFunction (string str_) { reverse (str_.begin(), str_.end()); return str_; } int main(int, char*) { ifstream ifile("test1.txt"); ofstream ofile("test2.txt"); typedef istream_iterator<string> iIt; std::transform (iIt(ifile), iIt(), ostream_iterator<string>(ofile, " "), revFunction); } или даже так ![]() ![]() using namespace std; int main(int, char*) { ifstream ifile("test1.txt"); ofstream ofile("test2.txt"); string word; while (ifile>>word) { reverse (word.begin(), word.end()); ofile << word << " "; } } Не вижу никакого преимущества Форта над С++. он не короче(ну не настолько, чтобы это можно было учитывать), не быстрее и - он непонятен. С++ код можно читать почти как предложения в тексте. а форт.. я никак вкурить ни одлну строчку не могу))) Хотя последний минус, наверно сугубо субъективный. Но, если форт - близок к идеалу, то чем он лучше С++? |
Сообщ.
#50
,
|
|
|
Цитата LuckLess @ using namespace std; int main(int, char*) { ifstream ifile("test1.txt"); ofstream ofile("test2.txt"); string word; while (ifile>>word) { reverse (word.begin(), word.end()); ofile << word << " "; } } Позвольте! Насколько я понял, это всё реализовано в стандартной библиотеке языка С++, а ты это просто используешь? Кстати, ты это дело проверял на работоспособность? Во что оно преобразует, скажем, текст моего поста? Цитата LuckLess @ он не короче(ну не настолько, чтобы это можно было учитывать) Если сравнивать сравнимое, т. е. не писать на одном языке с использованием библиотеки, а на другом собственноручно, то короче, причём заметно. Вот, скажем, напиши на С++ программу, выводящую римские числа. Цитата LuckLess @ не быстрее Померял я как-то раз, я уже об этом писал. На MSVC функция вызывается в 10 раз дольше, чем на моём форте. Циклы я сравнивал с паскалём, паскаль быстрее, но я грешу на то, что он оптимизирующий. У меня есть подозрение, что на серьёзных задачах автоматическая оптимизация не очень сильно помогает, правда, я это ещё не проверял. Цитата LuckLess @ он непонятен Смотри мой пост номер 39, где я прочитал небольшую лекцию про Форт. идеальный язык программирования (сообщение #1161095) . Я там объяснил, что это не недостаток, а преимущество. Цитата LuckLess @ а форт.. я никак вкурить ни одлну строчку не могу Это как, скажем, албанский езыг, не к ночи будет сказано. Если тебе объяснят, как строятся фразы на албанском, ты далеко не сразу будешь понимать албанскую речь, надо ещё познать слова. Так же и на Форте. Цитата LuckLess @ Но, если форт - близок к идеалу, то чем он лучше С++? Опять же см. пост номер 39 |
Сообщ.
#51
,
|
|
|
Цитата wormball @ Позвольте! Насколько я понял, это всё реализовано в стандартной библиотеке языка С++, а ты это просто используешь? Извини. а что мне на АПИ файлы читать? |
Сообщ.
#52
,
|
|
|
Цитата wormball @ Насколько я понял, это всё реализовано в стандартной библиотеке языка С++, а ты это просто используешь? А это где реализовано: ? А STL - это неотъемлимая часть языка С++. LuckLess несколько неверно реализовал задачку. Нужно было так: ![]() ![]() #include <fstream> #include <iterator> #include <algorithm> #include <vector> int main() { std::vector<string> words; std::copy(std::istream_iterator(std::ifstream("file1.txt")), std::istream_iterator(), std::back_inserter(words)); std::copy(words.rbegin(), words.rend(), std::ostream_iterator(std::ofstream("file2.txt"), " ")); } Итого - три строчки, одна переменная. |
Сообщ.
#53
,
|
|
|
Цитата Flex Ferrum @ А STL - это неотъемлимая часть языка С++. LuckLess несколько неверно реализовал задачку. Нужно было так: Не записать слова в обратном порядке, а каждое слово перевернуть надо... а сами слова в томже порядке оставить.. Добавлено а если сделать то, что ты написал, то лучше уж ![]() ![]() std::vector<std::string> words((std::istream_iterator<std::string>(std::ifstream("file1.txt"))), std::istream_iterator<std::string>()); std::copy(words.rbegin(), words.rend(), std::ostream_iterator<std::string>(std::ofstream("file2.txt"), " ")); Добавлено 2 строчки ![]() |
Сообщ.
#54
,
|
|
|
Цитата LuckLess @ Не записать слова в обратном порядке, а каждое слово перевернуть надо... а сами слова в томже порядке оставить.. Цитирую твоё задание: Цитата LuckLess @ Напиши программу на форте которая прочитает текстовый файл "text1.txt", создаст "text2.txt" и запишет в него все слова но задом наперед. т.е. text1.txt содержит "asd dsa" к примеру -- выход "dsa asd" в text2.txt .. ты говоришь просто что на форте все записи короче выходят... вот сравнимс.. Из примера "asd dsa" абсолютно неясно, надо слова переворачивать или ставить в обратном порядке. Кстати, сам С++ грешит подобными неоднозначностями. Цитата Flex Ferrum @ А STL - это неотъемлимая часть языка С++. Ещё раз говорю, что надо сравнивать честно. Я не против хороших библиотек, я только за, но в данном случае мы (по крайней мере я) сравниваем не библиотеки, а языки как таковые. Библиотеки - дело наживное. Я уже предложил задачу: написать вывод чисел в римской системе счисления. В одном из первых постов я уже приводил своё решение: ![]() ![]() | roman numbers create ones 'I 1, 'X 1, 'C 1, 'M 1, create fives 'V 1, 'L 1, 'D 1, var rank : typeone ones rank @ + c@ emit ; : typefive fives rank @ + c@ emit ; : typeten ones rank @ + 1+ c@ emit ; : typeones for typeone next ; : typefives ( n -- ) dup if 1 = if typefive else typeten then else drop then ; : typedigit ( div mod -- ) dup <0 if typeone drop typefives else swap typefives typeones then ; : digit ( n -- ) 5 /mod swap dup 4 = if drop 1 + -1 then typedigit ; : incrank 1 rank +! ; : decrank rank @ if 1 rank -! then ; : roman ( n -- ) 10 /mod dup if incrank roman decrank else drop then digit ; : toroman 0 rank ! roman space ; Вот если это будет на С++ короче, тогда я точно Кстати, я бы с удовольствием почитал про то, как вы так лихо решили задачу с перестановкой слов. У меня в форте как раз поддержка строк отвратительная (может быть, потому и получилась такая длинная программа). Где про это можно почитать? |
Сообщ.
#55
,
|
|
|
Цитата wormball @ Я уже предложил задачу: написать вывод чисел в римской системе счисления. А словами можешь алгоритм описать? Я, честно говоря, не совсем в курсе - как это правильно делается. |
Сообщ.
#56
,
|
|
|
Цитата wormball @ Из примера "asd dsa" абсолютно неясно, надо слова переворачивать или ставить в обратном порядке. Кстати, сам С++ грешит подобными неоднозначностями. Угу. Да неясно выразился)) Какие неоднозначности есть в С++? ![]() Форт короче только за счет того, что у него нету ключевых слов явно начинающих и завершающих блоки(функции и т.д.), а также за счет того, что в нем отсуствуют типы(насколько я понял). На мой взгляд - это не два плюса а два жирных минуса. Сам алгоритм короче от этого не записывается. на С++ можно тоже наваять макросы и пользовать их для сокращения записи- но это мрачный изврат. Форт вполне пригоден как язак для решения небольших, прокладных задач. Но никак не для промышленного программирования. А идеальный язык вродь как должен быть пригоден почти везде ![]() Цитата Flex Ferrum @ А словами можешь алгоритм описать? Я, честно говоря, не совсем в курсе - как это правильно делается. http://ru.wikipedia.org/wiki/%D0%A0%D0%B8%D0%BC%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F |
Сообщ.
#57
,
|
|
|
Цитата Flex Ferrum @ А словами можешь алгоритм описать? Я, честно говоря, не совсем в курсе - как это правильно делается. Ну, у меня программа тоже не совсем правильно работает: для 1999 выдаёт MCMXCIX, когда должна по идее MIM, но с другой стороны MCMXCIX - тоже 1999. Одним словом, я беру каждый десятичный разряд и отдельно преобразую его в строку. Вот таблица соответствия: 1 I 5 V 10 X 50 L 100 C 500 D 1000 M Эта задача подробно разобрана в "Способе мышления - Форт" (вторая половина четвёртой главы), если это тебе чем-то поможет. Правда, я туда почти не заглядывал. Добавлено Цитата LuckLess @ http://ru.wikipedia.org/wiki/%D0%A0%D0%B8%...%BD%D0%B8%D1%8F Во, а у меня, оказывается, правильный алгоритм! Цитата LuckLess @ Какие неоднозначности есть в С++? Про это есть на rsdn.ru в разделе "философия программирования". Единственное, что помню - i+++++j. Цитата LuckLess @ что у него нету ключевых слов явно начинающих и завершающих блоки(функции и т.д.) Как это нету? Функция начинается с : и заканчивается на ; . Цитата LuckLess @ На мой взгляд - это не два плюса а два жирных минуса. Опять же советую прочитать мой пост номер 39 и спорить с аргументацией, приведённой мною в оном посте. Цитата LuckLess @ Форт вполне пригоден как язак для решения небольших, прокладных задач. Но никак не для промышленного программирования. У того же Броуди есть куча примеров промышленного применения Форта. Я, кстати, тоже сейчас занимаюсь тем, что пишу на своём Форте программу для моделирования молекул, уже написал где-то половину. Это при условии, что ещё года не прошло, как я начал серьёзно заниматься Фортом. |
Сообщ.
#58
,
|
|
|
Цитата LuckLess @ http://ru.wikipedia.org/wiki/%D0%A0%D0%B8%...%BD%D0%B8%D1%8F Скинь описание сюда - у меня доступа нет. |
Сообщ.
#59
,
|
|
|
Цитата wormball @ i+++++j. Это не неоднозначность. Это UB(undefined behavior), и то что это UB написано в стандарте С++, так что о неоднозначности тут речи идти не может. Цитата wormball @ Как это нету? Функция начинается с : и заканчивается на ; . Это заменть не ключевое слово - а ключевой символ)) Цитата wormball @ Опять же советую прочитать мой пост номер 39 и спорить с аргументацией, приведённой мною в оном посте. А какая там аргументация то? Помпезность С++ -- Хм. Ничего подобного. Вывод о том, рас большую функцию на форте не напишешь то это плюс этого языка мне вообще непонятен. Разбиение на функции хорошо - но не настолько чтоб функция из пары строк уже читалась проблематично. Отсуствие типизации - которое ставиться плисом аргументируя это цитатой тоже вещ странная. Получаеться что перед тем как твою функцию использовать я должен в нее залесть, прочитать и решть - подходит ли она мне или нет - так как типов то нет.. |
Сообщ.
#60
,
|
|
|
> Идеальных языков не было, нет и никогда не будет.
да, а асм - не язык а представление машинных кодов на английском, грубо говоря я не считаю его языком, он лучший) |