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

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

Войти
Регистрация
Восстановить пароль
 
tel89147093818
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 2
#1

Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов - C++

06.01.2014, 23:49. Просмотров 693. Ответов 3
Метки нет (Все метки)

Условие было такое
Сумеете ли вы вывести числа от 1 до 1000 средствами языка C/C++, не используя циклов и условных операторов? (Не стоит предлагать 1000 раз написать printf() или cout.)

Я как то на странице с готовыми решениями наткнулся на код

C
1
2
3
4
5
6
7
#include <stdio.h>
#include <stdlib.h>
void main(int j)
{
printf("%d\n", j);
(&main + (&exit - &main)*(j/1000))(j+1);
}
Попробовал скомпилировать его в MS Visual Studio 2013 Ultimate (пользуюсь этой средой)
Вылезла ошибка при компиляции
error C2296: '-' : illegal, left operand has type 'void (__cdecl *)(int)'

Вот мне и стало инетересно, может ли это вообще как нибудь заработать

Не зря же в конце концов это оказалось на странице с решениями

Вот ссылка на источник
http://stackoverflow.com/questions/4...r-conditionals
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2014, 23:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов (C++):

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

Объяснить действия условных операторов if - C++
Изучаю с++ , попался код, не понимаю некоторых if. Обьясните пожалуйста. 1) if (avto) // это я так понимаю, if avto != null 2) if...

Проверить работу условных операторов - C++
Здравствуйте в программе необходим вычислить z={(a-b+c)+min(a,b), a-b&gt;7; min (a,b)/b, a-b&lt;7; max (a,b), a-b =7. Переменная Z должна...

Количество условных операторов подряд - C++
Можно ли записать условные операторы таким образом ? if (условие 1) { оператор 1; оператор 2; ....... оператор n;

задача на использование условных операторов - C++
Добрый вечер. Возникили трудности с решением задачи с использованием условных операторов. Не могу разобраться , слишком много переменных и...

Игра с использованием массивов и условных операторов - C++
Вечер добрый, ниже код отвечает за движение '*', по строкам вверх-влево-вправо-вниз. Проблема вот в чем, код работает, но если сразу...

3
x1Mike7x
217 / 130 / 6
Регистрация: 06.11.2010
Сообщений: 234
07.01.2014, 00:34 #2
Как вывести числа от 1 до 1000 без сравнений в Си++?
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
07.01.2014, 00:54 #3
В вашем примере две беды: адресная арифметика с указателями на функцию и разные сигнатуры функций main и exit.

Вот, в принципе, суть та же, но длиннее и более-менее по-стандарту:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdlib>
#include <iostream>
 
void (*functions[2])(int);
 
void quit(int) {
  exit(0);
}
 
void print(int n) {
  std::cout << n << std::endl;
  functions[n / 1000](n + 1);
}
 
int main(int, char**) {
  functions[0] = print;
  functions[1] = quit;
  print(0);
}
Добавлено через 9 минут
По-короче:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdlib>
#include <iostream>
 
void print(int n) {
  static void (*functions[])(int) = {print, exit};
  std::cout << n << std::endl;
  functions[n / 1000](n + 1);
}
 
int main(int, char**) {
  print(0);
}
2
outoftime
║XLR8║
510 / 432 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.01.2014, 02:40 #4
lemegeton, tel89147093818, а мне больше шаблонный вариант нравится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template<int N>
void rec()
{
    rec<N-1>();
    std::cout << N << std::endl;
}
 
template<>
void rec<0>() { }
 
int main()
{
    rec<500>();
}
Преимущество: нету ни сравнений, ни циклов ни меток перехода шаблон раскрутиться в код типа
C++
1
2
3
4
5
std::cout << 1 << std::endl;
std::cout << 2 << std::endl;
std::cout << 3 << std::endl;
std::cout << 4 << std::endl;
...
Недостаток: необходимо указать повышенную глубину для рекурсии шаблонов (на mingw у меня 500 по умолчанию).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2014, 02:40
Привет! Вот еще темы с ответами:

Линейный алгоритм, переписать программу без условных операторов - C++
Можно ли как-то переписать данную программу без условных операторов? Что бы алгоритм был линейный? #include &lt;iostream&gt; using namespace...

Написать программу, вычисляющую выражение с использованием условных операторов - C++
Написать программу, вычисляющую выражение с использованием условных операторов. Написать программу, которая: a. запрашивает какую...

Используя метод вычетов, сгенерировать последовательность из 1000 псевдослучайных чисел - C++
Вообщем есть задание. 1. Используя метод вычетов, сгенерировать последовательность из 1000 псевдослучайных чисел, результат вывести на...

Написать программу для решения уравнения или неравенства с использованием условных операторов - C++
Написать программу для решения уравнения или неравенства с использованием условных операторов a1*x+b1&gt;=0 a2*x+b2&gt;0


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
07.01.2014, 02:40
Ответ Создать тему
Опции темы

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