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

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

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

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

06.01.2014, 23:49. Просмотров 646. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2014, 23:49     Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов
Посмотрите здесь:
C++ Применение циклов, условных операторов
задача на использование условных операторов C++
C++ Объяснить действия условных операторов if
Проверить работу условных операторов C++
C++ Количество условных операторов подряд
Игра с использованием массивов и условных операторов C++
Написать программу, вычисляющую выражение с использованием условных операторов C++
C++ Линейный алгоритм, переписать программу без условных операторов
Используя метод вычетов, сгенерировать последовательность из 1000 псевдослучайных чисел C++
Для произвольных значений a, b вычислить решение системы неравенств (с применением условных операторов) C++
C++ Можно ли как-то осуществить вывод кириллицы в консоль, не используя Lucida Console
C++ Составить программу с использованием условных операторов. Даны три вещественных числа. Вычислить max(x+y+z, xyz).

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
x1Mike7x
216 / 129 / 6
Регистрация: 06.11.2010
Сообщений: 234
07.01.2014, 00:34     Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов #2
Как вывести числа от 1 до 1000 без сравнений в Си++?
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
07.01.2014, 00:54     Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов #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);
}
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.01.2014, 02:40     Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов #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 по умолчанию).
Yandex
Объявления
07.01.2014, 02:40     Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов
Ответ Создать тему
Опции темы

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