Приношу заранее извенения если такая задачу уже обсуждалась. Не помню где я ее взял, так что тоже приношу извенения, если нарушу чьи-то авторские права.
Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
Здравствуйте, King Oleg, Вы писали:
KO>Здравствуйте, Goodkov, Вы писали:
G>>Запрещено пользоваться, операторами цикла (for, while ). KO>А рекурсия — это цикл?
Здравствуйте, Apostate, Вы писали:
A>Здравствуйте, King Oleg, Вы писали:
KO>>Здравствуйте, Goodkov, Вы писали:
G>>>Запрещено пользоваться, операторами цикла (for, while ). KO>>А рекурсия — это цикл?
A>а goto?
Забыл уточнить — нельзя также пользоваться оператором сравнения(if), а goto можно,
соответственно рекурсией тоже.
Здравствуйте, Goodkov, Вы писали:
G>Приношу заранее извенения если такая задачу уже обсуждалась. Не помню где я ее взял, так что тоже приношу извенения, если нарушу чьи-то авторские права.
G>Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
Здравствуйте, Дмитро, Вы писали:
Д>Здравствуйте, Goodkov, Вы писали:
G>>Приношу заранее извенения если такая задачу уже обсуждалась. Не помню где я ее взял, так что тоже приношу извенения, если нарушу чьи-то авторские права.
G>>Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
Д>
Здравствуйте, Goodkov, Вы писали:
G>НИКАКИМИ ОПЕРАТОРАМИ СРАВНЕНИЯ ПОЛЬЗОВАТЬСЯ НЕЛЬЗЯ
осталось организовать выход из рекурсии или, если в уславии не уточняется, что надо напечатать только цисла от 1 до 100, просто забить на выход
Здравствуйте, Goodkov, Вы писали:
G>Здравствуйте, Дмитро, Вы писали:
Д>>Здравствуйте, Goodkov, Вы писали:
G>>>Приношу заранее извенения если такая задачу уже обсуждалась. Не помню где я ее взял, так что тоже приношу извенения, если нарушу чьи-то авторские права.
G>>>Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
Д>>
Здравствуйте, Goodkov, Вы писали:
G>>main(i){printf("%i\n",i-1);main(i*i/(i%101)+1);} G>сорри за ламерство и как это откомпилировать???
У меня Turbo C++ 3 потребовал поставить инклуд стдио
И тело функции — на другую строку опустить. А так все сработало
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Gasy, Вы писали:
G>А в условии требуется корректный выход?
В принципе нет, но для красоты можно разделить задачу на две части,
одна с некорректным выходом, другая с корректным.
Есть решение с выходом по делению на ноль за 39 символов, но я его не знаю.
Есть мысль заменить в предидущих решениях функцию main например функцией m(i)
и если позволяет компилятор указать точку входа эту функцию, такое прокатит?
Просто проверить не могу, т.к. в данную минуту нет ни одного нормального
компилятора кроме BC++3.1, а там надо делать include <stdio.h>, а это уже не красиво.
ЖуК>>42
MAG>Не пойдет. В C++, в отличие от C, обязательно объявление функций перед использованием.
???
А какую функцию он не объявил перед использованием?
Здравствуйте, Goodkov, Вы писали:
G>Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
ЖуК>>>42
MAG>>Не пойдет. В C++, в отличие от C, обязательно объявление функций перед использованием. KO>??? KO>А какую функцию он не объявил перед использованием?
А также класс std::ostream и глобальный объект std::cout. Мало того, объект cout не введен в текущее пространство имен из std.
Кроме того, в объявлении функции main(i) в C++ обязательно указание типа i и типа возвращаемого значения, и, к тому же, это недопустимый набор аргументов.
Здравствуйте, King Oleg, Вы писали:
P>>неа, инклады подключать надо и неймспейс KO>Для printf() тоже самое.
втом то и дело что это не так!
делов том что объявление происходит при первом использовании, но оно может не соответствовать типу функции... но как раз использование в С в наших случаях соответствует прототипам, и в соглашениях о вызовах стек при вызове функции высвобождает вызывающий... так что все хорошо!
Здравствуйте, Plague, Вы писали:
P>Здравствуйте, Goodkov, Вы писали:
G>>Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
43 символа, но новая версия старая начиналась с 1, а не с нуля...
а у всех остальных начинается с единицы
Здравствуйте, Goodkov, Вы писали:
G>Задача состоит в следующем. Необходимо написать программу на С, которая выводит в столбец цифры от 0 до 100. Цель — получить как можно меньший размер исходника в символах(считая пробелы и т.д.). Запрещено пользоваться, операторами цикла (for, while ). Сам написал где-то в районе 50 символов, слышал про 41 (под gcc).
39 символов:
i;main(){printf("%d\n",++i)-4&&main();}
main(i){printf("%d\n",i++)-4&&main(i);}
Можно конечно во втором варианте i++ убрать в main и заменить на i+1 или на ++i.
P.S. Придумал еще нечестный вариант 39 символов (при запуске нужно указать 100 любых аргументов, если получится ):
main(i){--i&&main(i)&printf("%d\n",i);}
основанный на принципе не (действие,рекурсия), а (рекурсия,действие).
Здравствуйте, AlexVinS, Вы писали:
AVS>Здравствуйте, Apapa, Вы писали: AVS>маленькое исправление AVS>... A>>39 символов: A>>
i;main(){printf("%d\n",i++)-4&&main();}
AVS>... AVS>чтобы с нуля начиналось.
Вот елки! Я наоборот старался, чтобы было от 1 до 100. Невнимательность, невнимательность...
Хотя это не существенно. Я думаю мою идею про "printf(...)-4&&..." это не портит.
Здравствуйте, Apapa, Вы писали:
A>Здравствуйте, AlexVinS, Вы писали:
AVS>>Здравствуйте, Apapa, Вы писали: AVS>>маленькое исправление AVS>>... A>>>39 символов: A>>>
i;main(){printf("%d\n",i++)-4&&main();}
AVS>>... AVS>>чтобы с нуля начиналось.
A>Вот елки! Я наоборот старался, чтобы было от 1 до 100. Невнимательность, невнимательность... A>Хотя это не существенно. Я думаю мою идею про "printf(...)-4&&..." это не портит.
Согласен идея . Для полного решения осталось доказать что короче нельзя
G>Дайте мне копилятор который все это дело откомпилирует!!! G>А то мой не хочет!!!
Компилировать нужно .c на C-шном, а не на C++-шном. В данном случае это обязательно. Я брал wcc из Watcom. Можно wcc386 оттуда же.
Какие ошибки выдает?