Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
_Ivana
3042 / 1729 / 150
Регистрация: 01.03.2013
Сообщений: 4,908
Записей в блоге: 2
#1

Скормить С код С++ компилятору? - C++

01.03.2013, 20:11. Просмотров 618. Ответов 16
Метки нет (Все метки)

Здравствуйте. Ради интереса я решал следующую задачку:
Кликните здесь для просмотра всего текста
Выражения языка L записываются по обычным правилам и строятся с помощью знаков арифметических действий +, –, *, / и круглых скобок. Операнды обозначаются буквами латинского алфавита. Операнды разделяются нулём или более пробелов.
Выражения функционального языка F записываются только с помощью функций ADD(x,y) – сложение; SUB(x,y) – вычитание; MUL(x,y) – умножение; DIV(x,y) – деление, где x и y – выражения языка F. Ни в языке L, ни в языке F одноместные операции не предусмотрены.
Дана строка длиной до 80 символов, содержащая правильное выражение языка L. Получить запись этого выражения на языке F. Операнды должны идти в том же порядке, что и во входном выражении. Лишних скобок не выводите.
Пример входных данных:
a + (b-c)/(c*d)
Пример выходных данных:
ADD(a,DIV(SUB(b,c),MUL(c,d)))

Я её решил, написал несколько алгоритмов на разных языках, в т.ч. на С. Но мне же захотелось отправить решение, а на том сайте компилятор С не предлагается - есть пара С++, но я с ним не работал. Прочитав немного интернета, я таки подключил iostream и получил/отправил данные через cin|cout. То есть, я воткнул между получением и отправкой свой С код, и это у меня работало на http://liveworkspace.org . Когда же отправлял это решение на сайт с задачей, раз 30 не мог добиться вердикта "Решено верно". Впоследствии оказалось, что входящая строка содержала '\r\n', а я ориентировался на завершающий 0. Решил другую задачку, также на С, пока не удалось добиться положительного вердикта сайта. Дело в том, что сайт не пишет ни входных ни выходных данных, то есть я даже не могу понять где у меня ошибка Плюс я не знаю традиций С++, особенностей класса string и т.д. Собственно, вопрос - имеет ли смысл мне продолжать писать код на С а потом пытаться скармливать его С++ компилятору? Или это изначально порочная затея и мне стоит поискать сайты, которые публикуют интересные задачи и принимают решения именно на С?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2013, 20:11     Скормить С код С++ компилятору?
Посмотрите здесь:

Как сообщить компилятору, чтобы код не проверялся на ошибки? - C++
Функция из моей предыдущей темы заработала http://www.cyberforum.ru/cpp-beginners/thread1817011.html#post9596889 затем я ее перенес...

Вопрос по компилятору - C++
Подскажите пожалуйста, как откомпилировать код в MS VC++ 2010. Вот, например, в MS VC++ 2010 есть команда build, а в этом ковом куда надо...

Почему компилятору нужно динамическое связывание? - C++
Допустим A *ptr = &B; ptr->addvalue; , при компиляции не подставится адрес функции вместо имени, потому что ещё не создана таблица...

Как подключить библиотеку gluit к компилятору? - C++
В общем, посмотрел на ютубе ролик с созданием змейки, решил попробовать сделать. Там все прекрасно описано, кроме подключения OpenGL и...

Что-то компилятору не нравится. Ввод-вывод - C++
Да-да КОКОКО, БЫДЛОКОД, МАМКУ... Я его испоганил до ужаса, а компиль всё равно не хочет работать... #include"pch.h" ...

Создание программы, которая будет обращаться к компилятору - C++
Хочу написать программу, которая будет обращаться к компилятору, в нём же она будет проверять работоспособность кода, который напишут в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITishnik
7 / 7 / 0
Регистрация: 07.01.2013
Сообщений: 75
01.03.2013, 20:53     Скормить С код С++ компилятору? #2
Цитата Сообщение от _Ivana Посмотреть сообщение
писать код на С а потом пытаться скармливать его С++
кажется это какое то издевательство над компилятором
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.03.2013, 20:57     Скормить С код С++ компилятору? #3
С++ компилятор должен съедать код на чистых сях без извращений.
Если у вас что-то не компилится - выкладывайте код.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
01.03.2013, 21:17     Скормить С код С++ компилятору? #4
diagon, не факт, вот чисто сишный код http://liveworkspace.org/code/2FIUye, но С++ его не скомпилит.

Добавлено через 3 минуты
Цитата Сообщение от _Ivana Посмотреть сообщение
Собственно, вопрос - имеет ли смысл мне продолжать писать код на С а потом пытаться скармливать его С++ компилятору?
Если код написан на том Си, который подмножество С++, то С++ компилятор его скомпилит без изменений. Я даже думаю зря ты заморачивался с <iostream> и пр.
iifat
2225 / 1378 / 102
Регистрация: 05.06.2011
Сообщений: 3,799
01.03.2013, 21:28     Скормить С код С++ компилятору? #5
Таки в любом случае, имхо, стоит поставить себе кой-нить ++ для отладки. В принципе, ++ должен брать если не любую, то уж почти любую программу. \r\n, про которые ты пишешь -- это вовсе не особенность ++, это формат текстовых файлов.
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.03.2013, 21:31     Скормить С код С++ компилятору? #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
С++ его не скомпилит.
так
Цитата Сообщение от diagon Посмотреть сообщение
без извращений
же

В си есть около полусотни фич, которые не скомпилятся на плюсах, но они очень редко встречаются.
Самые распространненые - неявное приведение void* к T*, правило неявного int и void main().
Kastaneda
01.03.2013, 21:33
  #7

Не по теме:

Цитата Сообщение от diagon Посмотреть сообщение
так
Цитата Сообщение от diagon
без извращений
же
Ну как бы да, но этот синтаксис вроде как K&R проповедуют (как говорят, я так и не прочитал эту книгу), поэтому хз - извращение или нет.

Байт
Эксперт C
15840 / 10167 / 1522
Регистрация: 24.12.2010
Сообщений: 19,167
01.03.2013, 22:52     Скормить С код С++ компилятору? #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
я так и не прочитал эту книгу
А вот тут я вам завидую. Попробуйте, прочитайте. Конечно, ничего особо нового вы там не найдете. Все давным давно обсосано и даже переврано. Но попробуйте себя поставить на место древнего программера, замученного Алголами, Фортранами, Коболами и Пиэлями... Это был - взрыв. Основная идея, как я ее понял - мы хотим сделать так, чтоб нам было хорошо. Надеемся, что хорошо будет и вам.
Только там в конце есть "задачник" (во всяком случае в том первом переводе на ru, который мне попался). Вот его можете не читать. Это просто ребята резвились. Сами не могли понять, что ж за штуку они напридумывали. И от избытка молодой энергии фокусничали.
Светлой памяти Деннису Ричи.
Доброго здоровья Кернигану

Добавлено через 31 минуту
http://ru.wikipedia.org/wiki/%D0%A0%...BD%D0%B8%D1%81
Kastaneda
01.03.2013, 22:55
  #9

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
http://ru.wikipedia.org/wiki/%D0%A0%...BD%D0%B8%D1%81
Байт, да как бы я знаю, кто такой Д.Ритчи)

Байт
Эксперт C
15840 / 10167 / 1522
Регистрация: 24.12.2010
Сообщений: 19,167
01.03.2013, 23:03     Скормить С код С++ компилятору? #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
да как бы я знаю, кто такой Д.Ритчи
Прошу прощения за пропущенную букву "т". Это, безусловно, невежливо с моей стороны.
_Ivana
3042 / 1729 / 150
Регистрация: 01.03.2013
Сообщений: 4,908
Записей в блоге: 2
01.03.2013, 23:30  [ТС]     Скормить С код С++ компилятору? #11
Спасибо за ответы. Вот вы говорите, что таки можно на С, и даже без iostream и cin/cout. Вторая задачка (очень простая, хотя оценена почему-то выше первой) http://atpp.vstu.edu.ru/cgi-bin/arh_...s.pl?id_prb=39, там сказано
Исходные данные
Строка печатных символов, длина не превышает 100000 символов.
Я не знаю, но подозреваю что в С++ можно завести string и он будет неограниченной длины, будет иметь методы конца и т.д. В С мне остается только нарезать массив char на 100001 и заполнить его как-то из входного потока (может и без iostream). Причем надо именно заполнить весь - алгоритм не довольствуется последовательным перебором входного потока. Просто я немного стесняюсь объявлять такие массивы, тем более что пишу в АВР студии и там еще надо найти камень, у которого хватит ОЗУ. Но там я для проверки заполняю массивы. А как только я получил данные в понятном мне виде (массив а не стринг), дальше у меня вопросов нет, точнее они появляются только при выводе. Что, неужели прокатит подлинковка стандартной С-шной stdio и вместо cout >> c можно написать printf(c)? И забыть про плюсовость вообще?
С++ компилятора на компе нет, пользуюсь http://liveworkspace.org
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
01.03.2013, 23:40     Скормить С код С++ компилятору? #12
ну 100000 символов это грубо говоря 100 Мб, почему бы не выделить (динамически) ?

Цитата Сообщение от _Ivana Посмотреть сообщение
С++ компилятора на компе нет, пользуюсь http://liveworkspace.org
там Linux и g++, характеристики машины думаю нормальные, так что можно и там эксперементировать.
_Ivana
3042 / 1729 / 150
Регистрация: 01.03.2013
Сообщений: 4,908
Записей в блоге: 2
02.03.2013, 01:19  [ТС]     Скормить С код С++ компилятору? #13
Попробовал, действительно прожевывает stdio с его printf и getchar - почему я не догадался сразу? И не надо обращаться к плюсам, остаемся в рамках С. Правда, есть момент - решения ранжируются по времени выполнения и по объему слинкованного файла, а это зависит от используемых библиотек. Сишные получились медленнее плюсовых, хотя и немного поменьше... Нет счастья в стандартных библиотеках

ЗЫ и раз уж отредактировали стартовый пост и выложили задачу (хотя она не принципиальна), то пользуясь случаем выражу сожаление - зря решения не ранжируются по ОЗУ - в этой задаче предел задан в 65536 КБ, а я в С уложился в 200 Байт на все вообще (и на стек в том числе).
iifat
2225 / 1378 / 102
Регистрация: 05.06.2011
Сообщений: 3,799
02.03.2013, 04:21     Скормить С код С++ компилятору? #14
Во-первых, таки напоминаю: ограничение по памяти 10000, так что никаких, как я понимаю, массивов на 100000 тебе не светит.
Во-вторых, никакого преимущества по скорости ++ перед Цэ не имеет и иметь не может в принципе. Он может отставать непринципиально, ненамного и т.п. -- но вызов метода объекта таки в разы медленнее вызова функи, а прочее одинаково.
В-третьих, это что за голый Цэ без ++? Такое ещё делают?

Добавлено через 7 минут
Виноват, не 10000, а 10000К, так что памяти хватит. Не знаю точно, умеет ли ++овый string расти самостоятельно, но таки никто не мешает тебе написать то же самое на Цэ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2013, 12:13     Скормить С код С++ компилятору?
Еще ссылки по теме:

Как компилятору указать директорию заголовочных файлов. - C++
Мне надо на Visual Studio 2010 Ultimate. Нужно указать директорию заголовочных файлов DirectX'а.

Как запретить компилятору неявное преобразование из числового типа в символьный? - C++
У мя возникла такая проблема: я ввожу данные типа char и мне надо быть уверенным, что я ввел именно символ, т.е. если я ввожу число мне...

Создание *.dll: для чего нужен компилятору параметр -DBUILD_DLL? (использую MinGW) - C++
Не, реально, зачем он? ...Друзья! Много где в инете вы найдёте как кропать dll-ки, например тут. обратите внимание на командную...

Зачем компилятору что-то упорядочивать после вычисления второго операнда логического "или"? - C++
Стандарт: То есть: если второй оператор вычислен, вычисление каждого выражения и побочный эффект, связанный с первым выражением...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.03.2013, 12:13     Скормить С код С++ компилятору? #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от iifat Посмотреть сообщение
но вызов метода объекта таки в разы медленнее вызова функи
Ahaha tell me moar.
Yandex
Объявления
02.03.2013, 12:13     Скормить С код С++ компилятору?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru