Re[2]: Эврика N
От: Кодт Россия  
Дата: 25.03.06 19:37
Оценка: 24 (5) +4
Здравствуйте, remark, Вы писали:

А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>struct XXX
R>{
R>    XXX()
R>    {
R>        strcpy(data, "Hello");
R>    }

R>    char data[6];
R>};

R>XXX data[1000];
R>std::cout.write(reinterpret_cast<const char*>(&data[0]), sizeof(data));


Даже проще:
struct X { X() { cout << "Hello" << endl; } };
int main() { X data[1000]; }
Перекуём баги на фичи!
Re: Тест на смекалку !
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:00
Оценка: 10 (2) :))) :))
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


std::count << "1000 раз";




1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Тест на смекалку !
От: Константин http://flint-inc.ru/
Дата: 25.03.06 17:42
Оценка: +1 :)))
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


printf("текст\n");
printf("текст\n");
printf("текст\n");
printf("текст\n");
// ... и так 1000 раз

Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: Тест на смекалку !
От: Аноним  
Дата: 25.03.06 18:57
Оценка: 9 (1) :))
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


A soderzhaniye stroki opredeleno? Mozhno ved' napisat' nebol'shuu progu na kotoruu kompilyator rugnetsa sootvetstvuushee chislo raz.
Re[3]: Тест на смекалку !
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:18
Оценка: 1 (1) +1 :)
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, Аноним, Вы писали:


А>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>
R>>std::count << "1000 раз";
R>>



R>>


8>Смекалка не в этом !

8>

Я уже понял, что это вопрос из серии "угадай о чем я сейчас думаю"


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Тест на смекалку !
От: e-Xecutor Россия  
Дата: 27.03.06 07:40
Оценка: 15 (1) +1
Здравствуйте, Кодт, Вы писали:

гибридный вариант:

#include <stdio.h>
struct x{x(){printf("string\n");};};
template <class T> struct x2{x2(){T t1,t2;}};
template <class T> struct x5{x5(){x2<T> t1,t2;T t;}};
int main(int argc,char* argv[])
{
  x5<x5<x5<x2<x2<x2<x> > > > > > o;
  return 0;
}
Re: Эврика N
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 19:31
Оценка: 13 (2)
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?




struct XXX
{
    XXX()
    {
        strcpy(data, "Hello");
    }

    char data[6];
};

XXX data[1000];
std::cout.write(reinterpret_cast<const char*>(&data[0]), sizeof(data));





1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Тест на смекалку !
От: anger  
Дата: 12.04.06 12:02
Оценка: -2
Ну или так:
printf( "%s%s...%s", "text\n" );
Re: Тест на смекалку !
От: Aznog Россия  
Дата: 25.03.06 18:55
Оценка: 15 (1)
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?

...на стандартном С++:
template <int N>
void print_n(const char* str) {
    std::cout << str << std::endl;
    print_n<N - 1>(str);
}

template <>
void print_n<1>(const char* str) {
    std::cout << str << std::endl;
}

int main()
{
    print_n<1000>("some text");
    return 0;
}
Re: Тест на смекалку !
От: Аноним  
Дата: 25.03.06 18:51
Оценка: 9 (1)
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?



int main()
{
  std::string s="string \n",
              s2=s+s,
              s4=s2+s2, 
              s8=s4+s4, 
              .... , 
              s512=s256+s256,
              s1024=s512+s512;
  std::cout<<s1024.substr( 0, s.size() * 1000 );
  return 0;
};
Re[2]: Тест на смекалку !
От: Mikl Kurkov Россия  
Дата: 27.03.06 10:38
Оценка: 5 (1)
On Mon, 27 Mar 2006 13:41:45 +0400, Lazy Cjow Rhrr <10144@users.rsdn.ru>
wrote:

> <Аноним>,

>
> А>Как вывести строку текста 1000 раз не используя явного или не явного
> цикла ?
>
> Хм... На каком языке? #-)
>
>     1000 $ 'hello '
> hello hello hello hello hello hello hello hello hello hell...
>


Не совсем то что требуется, как я понял.
Будет 1000 символов выведено, а не строк.
Так наверное правильнее:
   1000 $,: 'hello'
hello
hello
hello
hello
hello
...


--
Mikl
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Эврика ! :)
От: shank  
Дата: 25.03.06 18:02
Оценка: :)
Вывести 1 раз, а программу запустить 1000 раз? Или это тоже неявный цикл?
Re[3]: Тест на смекалку !
От: shank  
Дата: 25.03.06 20:13
Оценка: +1
Здравствуйте, 8bit, Вы писали:
Не умаляя заслуги Кодта, но все же, эта строчка
X say[1000];

транслируется в цикл с вызовом конструкторов...
Кто мог знать, что это уже не подпадает под определение "неявный цикл"?
Re[2]: ЕСТЬ ПОБЕДИТЕЛЬ !
От: Кодт Россия  
Дата: 25.03.06 20:43
Оценка: +1
Здравствуйте, 8bit, Вы писали:

8>это и есть решение без цикла, явного или не явного, с наименьшим количеством кода !


Это решение — не совсем "чистый" С++, поскольку пришлось определить свой класс.
Чистое решение — вот:
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
  std::fill_n(std::ostream_iterator<const char*>(std::cout, "\n"), 1000, "hello!");
}

Ни одной нестандартной функции, ни одного нестандартного класса.

Ну а то, что fill_n неявно содержит цикл — так ведь и конструктор массива содержит цикл.
Перекуём баги на фичи!
Re: Тест на смекалку !
От: Кодт Россия  
Дата: 25.03.06 20:56
Оценка: +1
Здравствуй, 8bit

У тебя, конечно же, было готово "правильное" решение. Поэтому ты закрываешь глаза на варианты. А этюд тем и интересен, чтобы решить его нестандартными способами. Это будет откровением для решающих — но и задавший задачу не должен в этом обделять ни себя, ни других.

С учётом того, что boost рискует войти в следующую версию Стандарта — BOOST_PP можно практически принять за решение.

Встречный вопрос к тебе: какими ещё способами можно решить твою задачу, кроме уже перечисленных?
— цикл
— препроцессор
— рекурсивные шаблоны
— дерево вызовов функций
— массив объектов, конструкторы с побочным эффектом
— std::fill_n + ostream_iterator

Несколько решений напрашиваются сразу.
И ещё одно решение может оказаться неочевидным Посмотрим — угадаешь ли ты, что я имею в виду.
Перекуём баги на фичи!
Re[7]: Эврика ! :)
От: i-maverick Россия  
Дата: 28.03.06 22:55
Оценка: :)
Здравствуйте, xr0ld, Вы писали:

S>>>Вывести 1 раз, а программу запустить 1000 раз? Или это тоже неявный цикл?

8>>Нет все должно быть сделанно за один запуск...

X> Рекурсия )


Зачем такие громкие слова? Ты на простом языке напиши.
Re: Тест на смекалку !
От: anonymous Россия http://denis.ibaev.name/
Дата: 01.08.06 11:24
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


perl -e 'print "string\n" x 1000'
Re[2]: Тест на смекалку !
От: remark Россия http://www.1024cores.net/
Дата: 14.08.06 07:22
Оценка: :)
Здравствуйте, CrazyPit, Вы писали:

CP>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


CP>гм


CP>print "string\n" * 1000


... зря всё-таки этот топик перенесли из С++


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Тест на смекалку !
От: Аноним  
Дата: 25.03.06 17:32
Оценка:
Как вывести строку текста 1000 раз не используя явного или не явного цикла ?

25.03.06 23:07: Перенесено модератором из 'C/C++' — Кодт
Re[2]: Тест на смекалку !
От: Аноним  
Дата: 25.03.06 17:44
Оценка:
Здравствуйте, Константин, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


К>
printf("текст\n");
К>printf("текст\n");
К>printf("текст\n");
К>printf("текст\n");
К>// ... и так 1000 раз

К>


код должен быть минимален.
Re: Тест на смекалку !
От: shank  
Дата: 25.03.06 17:48
Оценка:
Набрать ее 1000 раз, юзать goto + if, (или это цикл?) , рекурсию + if, метапрограммирование
#include <iostream>
template<int I>
struct A
{
static void f()    {
    A<I-1>::f();
    std::cout << "stroka\n"; 
    }
};
template<>
struct A<0>
{
    static void f(){}
};
int main(){
    A<1000> a;
    a.f();
}
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 17:53
Оценка:
Здравствуйте, shank, Вы писали:

S>Набрать ее 1000 раз, юзать goto + if, (или это цикл?) , рекурсию + if, метапрограммирование

S>
S>#include <iostream>
S>template<int I>
S>struct A
S>{
S>static void f()    {
S>    A<I-1>::f();
S>    std::cout << "stroka\n"; 
S>    }
S>};
S>template<>
S>struct A<0>
S>{
S>    static void f(){}
S>};
S>int main(){
S>    A<1000> a;
S>    a.f();
S>}
S>


это все не явный цикл...
Re[3]: Тест на смекалку !
От: shank  
Дата: 25.03.06 17:59
Оценка:
Здравствуйте, 8bit, Вы писали:

S>>Набрать ее 1000 раз, юзать goto + if, (или это цикл?) , рекурсию + if, метапрограммирование


8>это все не явный цикл...


Ok. Сдаюсь. Выкладывай ответ или пришли мне его на shanku@yandex.ru, я никому не скажу.
Re[4]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:02
Оценка:
Здравствуйте, shank, Вы писали:

S>Здравствуйте, 8bit, Вы писали:


S>>>Набрать ее 1000 раз, юзать goto + if, (или это цикл?) , рекурсию + if, метапрограммирование


8>>это все не явный цикл...

S>
S>Ok. Сдаюсь. Выкладывай ответ или пришли мне его на shanku@yandex.ru, я никому не скажу.

Еще чуть-чуть подождем может кто ответит...
Правда выходные, народу не много... Но еще подождем
Re[5]: Эврика ! :)
От: 8bit  
Дата: 25.03.06 18:05
Оценка:
Здравствуйте, shank, Вы писали:

S>Вывести 1 раз, а программу запустить 1000 раз? Или это тоже неявный цикл?



Нет все должно быть сделанно за один запуск...
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:07
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>
R>std::count << "1000 раз";
R>



R>


Смекалка не в этом !
Re: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:19
Оценка:
Как вывести строку текста 1000 раз не используя явного или не явного цикла,
при этом код должен быть минимален ?

Подсказка: тест на смекалку по C++
Re: Эврика 2
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


while (true) std::cout << "Hello";



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:20
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, remark, Вы писали:


R>>>Здравствуйте, Аноним, Вы писали:


А>>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>>
R>>>std::count << "1000 раз";
R>>>



R>>>


8>>Смекалка не в этом !

8>>

R>Я уже понял, что это вопрос из серии "угадай о чем я сейчас думаю"


R>


Да нет... я знаю ответ...
Re[2]: Эврика 2
От: 8bit  
Дата: 25.03.06 18:22
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>
R>while (true) std::cout << "Hello";
R>


R>


Re: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:24
Оценка:
Как вывести строку текста на экран ровно 1000 раз
не используя явного или не явного цикла, при этом код должен быть минимален ?

Подсказка: тест на смекалку по C++
Re[5]: Тест на смекалку !
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:24
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, 8bit, Вы писали:


8>>>Здравствуйте, remark, Вы писали:


R>>>>Здравствуйте, Аноним, Вы писали:


А>>>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>>>
R>>>>std::count << "1000 раз";
R>>>>



R>>>>


8>>>Смекалка не в этом !

8>>>

R>>Я уже понял, что это вопрос из серии "угадай о чем я сейчас думаю"


R>>


8>Да нет... я знаю ответ...


Не, я не про это. Я про это: типа я тебя спрашиваю "угадай о чем я сейчас думаю". При этом я не мухлюю и ответ не изменяю в ран-тайме. Но задачка всё равно не простая, согласись.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Эврика 2
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:25
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, Аноним, Вы писали:


А>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>
R>>while (true) std::cout << "Hello";
R>>


R>>


8>


Правильно?

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[6]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:26
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, remark, Вы писали:


R>>>Здравствуйте, 8bit, Вы писали:


8>>>>Здравствуйте, remark, Вы писали:


R>>>>>Здравствуйте, Аноним, Вы писали:


А>>>>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>>>>
R>>>>>std::count << "1000 раз";
R>>>>>



R>>>>>


8>>>>Смекалка не в этом !

8>>>>

R>>>Я уже понял, что это вопрос из серии "угадай о чем я сейчас думаю"


R>>>


8>>Да нет... я знаю ответ...


R>Не, я не про это. Я про это: типа я тебя спрашиваю "угадай о чем я сейчас думаю". При этом я не мухлюю и ответ не изменяю в ран-тайме. Но задачка всё равно не простая, согласись.



R>


Задачка на смекалку !
Решение как и все гениальное простое.
Re: Эврика 3
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?



#define BODY(x, y, z) std::cout << "Привет";
BOOST_PP_REPEAT(BODY, 1000, _)



з.ы. Мог немного напутать с аргументами — писал по памяти


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: Эврика 2
От: 8bit  
Дата: 25.03.06 18:28
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, remark, Вы писали:


R>>>Здравствуйте, Аноним, Вы писали:


А>>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>>
R>>>while (true) std::cout << "Hello";
R>>>


R>>>


8>>


R>Правильно?


нет конечно...
Re[2]: Эврика 3
От: 8bit  
Дата: 25.03.06 18:31
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?



R>
R>#define BODY(x, y, z) std::cout << "Привет";
R>BOOST_PP_REPEAT(BODY, 1000, _)
R>



R>з.ы. Мог немного напутать с аргументами — писал по памяти


R>


Нет.
Сейчас сделаю пост с более точным условием задачи...
Re: Тест на смекалку ! Уточнение и подсказка
От: 8bit  
Дата: 25.03.06 18:33
Оценка:
Как вывести строку текста на экран ровно 1000 раз
не используя явного или не явного цикла, при этом код должен быть минимален и
использованы только возможности стандартного C++ ?
Re[5]: Тест на смекалку !
От: sc Россия  
Дата: 25.03.06 18:40
Оценка:
я знаю, но не буду говорить)
Re[2]: Тест на смекалку ! Уточнение и подсказка
От: Максим Грин Россия http://www.spektr.info.
Дата: 25.03.06 18:44
Оценка:
tipa togo na golom C (len otlazivat, no idea ponatna):



int f()
{
static int c = 1000;
if (--c)
{
cout << "Stroka";
f();
}
}
Re[6]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:45
Оценка:
Здравствуйте, sc, Вы писали:

sc>я знаю, но не буду говорить)


Почему же ?
Re[3]: Тест на смекалку ! Уточнение и подсказка
От: 8bit  
Дата: 25.03.06 18:46
Оценка:
Здравствуйте, Максим Грин, Вы писали:

МГ>tipa togo na golom C (len otlazivat, no idea ponatna):




МГ>int f()

МГ>{
МГ> static int c = 1000;
МГ> if (--c)
МГ> {
МГ> cout << "Stroka";
МГ> f();
МГ> }
МГ>}

это тоже не явный цикл...
Re[7]: Тест на смекалку !
От: sc Россия  
Дата: 25.03.06 18:47
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, sc, Вы писали:


sc>>я знаю, но не буду говорить)


8>Почему же ?

потому что другим уже будет не интересно, могу дать только намек
Re[5]: Эврика 2
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:51
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, 8bit, Вы писали:


8>>>Здравствуйте, remark, Вы писали:


R>>>>Здравствуйте, Аноним, Вы писали:


А>>>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>>>
R>>>>while (true) std::cout << "Hello";
R>>>>


R>>>>


8>>>


R>>Правильно?


8>нет конечно...


Все условия выполнены.
Если всё же неправильно. то просьба конкретизировать что значит "не явный цикл".
Он случайно в задаче определяется не как "то, что позволяет повторить выполнение какого-либо действия несколько раз"?


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?



А>
А>int main()
А>{
А>  std::string s="string \n",
А>              s2=s+s,
А>              s4=s2+s2, 
А>              s8=s4+s4, 
А>              .... , 
А>              s512=s256+s256,
А>              s1024=s512+s512;
А>  std::cout<<s1024.substr( 0, s.size() * 1000 );
А>  return 0;
А>};
А>


Нет... Так извращаться не надо !
Re[8]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 18:54
Оценка:
Здравствуйте, sc, Вы писали:

sc>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, sc, Вы писали:


sc>>>я знаю, но не буду говорить)


8>>Почему же ?

sc>потому что другим уже будет не интересно, могу дать только намек

Ну тогда попозже сравним ответы !
Re[2]: Тест на смекалку ! Уточнение и подсказка
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:56
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Как вывести строку текста на экран ровно 1000 раз

8>не используя явного или не явного цикла,

Вот тут непонятно ваще — что такое цикл я ещё понимаю, но что такое неявный цикл...

8>при этом код должен быть минимален и


это можно интерпретировать, что кол-во лексемм в программе не должно зависеть от числа 1000, т.е. если заменить на 2000, то кол-во лексем в решении не должно измениться?

8>использованы только возможности стандартного C++ ?


Ну тут ещё понятно



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Тест на смекалку !
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 18:57
Оценка:
Здравствуйте, Aznog, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?

A>...на стандартном С++:
A>
A>template <int N>
A>void print_n(const char* str) {
A>    std::cout << str << std::endl;
A>    print_n<N - 1>(str);
A>}

A>template <>
A>void print_n<1>(const char* str) {
A>    std::cout << str << std::endl;
A>}

A>int main()
A>{
A>    print_n<1000>("some text");
A>    return 0;
A>}
A>


Такое уже было здесь
Автор: shank
Дата: 25.03.06
— говорят неправильно



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[6]: Эврика 2
От: 8bit  
Дата: 25.03.06 18:58
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, remark, Вы писали:


R>>>Здравствуйте, 8bit, Вы писали:


8>>>>Здравствуйте, remark, Вы писали:


R>>>>>Здравствуйте, Аноним, Вы писали:


А>>>>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


R>>>>>
R>>>>>while (true) std::cout << "Hello";
R>>>>>


R>>>>>


8>>>>


R>>>Правильно?


8>>нет конечно...


R>Все условия выполнены.

R>Если всё же неправильно. то просьба конкретизировать что значит "не явный цикл".
R>Он случайно в задаче определяется не как "то, что позволяет повторить выполнение какого-либо действия несколько раз"?

R>


1) я немного уточнил условия написав что нужно вывести РОВНО 1000 раз
(как раз что бы не было таких предложений)
2) while это все таки цикл
Re[3]: Тест на смекалку !
От: Aznog Россия  
Дата: 25.03.06 19:01
Оценка:
Здравствуйте, remark, Вы писали:

R>Такое уже было здесь
Автор: shank
Дата: 25.03.06
— говорят неправильно

R>

Слона-то я и не увидел
Re: Тест на смекалку ! Уточнение и подсказка 2
От: 8bit  
Дата: 25.03.06 19:04
Оценка:
Как вывести строку текста на экран (консоль приложения)
РОВНО 1000 раз
не используя явного или не явного цикла,
при этом код должен быть минимален и
использованы только возможности стандартного C++ ?

Определение не явного цикла:
цикл созданный путем различных ухитрений,
(где обычно присутствует счетчик итераций)
Re[9]: Тест на смекалку !
От: sc Россия  
Дата: 25.03.06 19:25
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, sc, Вы писали:


sc>>Здравствуйте, 8bit, Вы писали:


8>>>Здравствуйте, sc, Вы писали:


sc>>>>я знаю, но не буду говорить)


8>>>Почему же ?

sc>>потому что другим уже будет не интересно, могу дать только намек

8>Ну тогда попозже сравним ответы !

Может дать намек?
Re[10]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 19:28
Оценка:
Здравствуйте, sc, Вы писали:

sc>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, sc, Вы писали:


sc>>>Здравствуйте, 8bit, Вы писали:


8>>>>Здравствуйте, sc, Вы писали:


sc>>>>>я знаю, но не буду говорить)


8>>>>Почему же ?

sc>>>потому что другим уже будет не интересно, могу дать только намек

8>>Ну тогда попозже сравним ответы !

sc>Может дать намек?

да я вроде дал намек ниже в ветке...
если только выделить 'C++' по ярче....
Re[11]: Тест на смекалку !
От: sc Россия  
Дата: 25.03.06 19:31
Оценка:
Здравствуйте, 8bit, Вы писали:

8>да я вроде дал намек ниже в ветке...

8>если только выделить 'C++' по ярче....
Может быть написать слово на букву К? Если я правильно догадался)
Re: Тест на смекалку ! Уточнение и подсказка 3
От: 8bit  
Дата: 25.03.06 19:32
Оценка:
Как вывести строку текста на экран (консоль приложения)
РОВНО 1000 раз
не используя явного или не явного цикла,
при этом код должен быть минимален и
использованы только возможности стандартного C++ ?

Определение не явного цикла:
цикл созданный путем различных ухитрений,
(где обычно присутствует счетчик итераций)

Намек:
C++
Re: Тест на смекалку !
От: Аноним  
Дата: 25.03.06 19:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


рекурсией, напрмер шаблонной
Re[2]: Тест на смекалку ! Уточнение и подсказка
От: Кодт Россия  
Дата: 25.03.06 19:35
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Как вывести строку текста на экран ровно 1000 раз

8>не используя явного или не явного цикла, при этом код должен быть минимален и
8>использованы только возможности стандартного C++ ?

Решение с BOOST_PP подходит. В нём нет циклов — препроцессор всё разворачивает.
Перекуём баги на фичи!
Re: Эврика N+1
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 19:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?




std::vector<const char*> data(1000, "Hello\n");
std::for_each(data.begin(), data.end(), std::cout << boost::lambda::_1);



Хочу сразу заметить, что for_each нельзя считать не явным, не неявным циклом — т.к. это есть просто "применение fff к диапазону".



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Эврика N
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 19:44
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, remark, Вы писали:


А>>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


К>
R>>struct XXX
R>>{
R>>    XXX()
R>>    {
R>>        strcpy(data, "Hello");
R>>    }

R>>    char data[6];
R>>};

R>>XXX data[1000];
R>>std::cout.write(reinterpret_cast<const char*>(&data[0]), sizeof(data));
К>


К>Даже проще:

К>
К>struct X { X() { cout << "Hello" << endl; } };
К>int main() { X data[1000]; }
К>


Вот так всегда — придумывай после этого идеи



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[12]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 19:46
Оценка:
Здравствуйте, sc, Вы писали:

sc>Здравствуйте, 8bit, Вы писали:


8>>да я вроде дал намек ниже в ветке...

8>>если только выделить 'C++' по ярче....
sc>Может быть написать слово на букву К? Если я правильно догадался)

На букву C может быть ?
Re[3]: Тест на смекалку ! Уточнение и подсказка
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 19:47
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 8bit, Вы писали:


8>>Как вывести строку текста на экран ровно 1000 раз

8>>не используя явного или не явного цикла, при этом код должен быть минимален и
8>>использованы только возможности стандартного C++ ?

К>Решение с BOOST_PP подходит. В нём нет циклов — препроцессор всё разворачивает.



Автор не до конца уточняет условие. В частности что такое "неявные циклы". Я уже предположил, что возможно автор подразумевает такую трактовку: "то, что позволяет повторить выполнение какого-либо действия несколько раз". В таком случае ни BOOST_PP, ни решение с массивом не подходят



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Тест на смекалку ! Уточнение и подсказка
От: 8bit  
Дата: 25.03.06 19:48
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 8bit, Вы писали:


8>>Как вывести строку текста на экран ровно 1000 раз

8>>не используя явного или не явного цикла, при этом код должен быть минимален и
8>>использованы только возможности стандартного C++ ?

К>Решение с BOOST_PP подходит. В нём нет циклов — препроцессор всё разворачивает.

там ниже уточнение... только чистый стандартый C++
Re[2]: Эврика N
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 19:50
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?




R>
R>struct XXX
R>{
R>    XXX()
R>    {
R>        strcpy(data, "Hello");
R>    }

R>    char data[6];
R>};

R>XXX data[1000];
R>std::cout.write(reinterpret_cast<const char*>(&data[0]), sizeof(data));
R>



Это полностью подходит под твоё уточнённое определение
Автор: 8bit
Дата: 25.03.06


R>

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Эврика N+1
От: remark Россия http://www.1024cores.net/
Дата: 25.03.06 19:50
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?




R>
R>std::vector<const char*> data(1000, "Hello\n");
R>std::for_each(data.begin(), data.end(), std::cout << boost::lambda::_1);
R>



R>Хочу сразу заметить, что for_each нельзя считать не явным, не неявным циклом — т.к. это есть просто "применение fff к диапазону".


B это полностью подходит под твоё уточнённое определение
Автор: 8bit
Дата: 25.03.06



R>

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: ЕСТЬ ПОБЕДИТЕЛЬ !
От: 8bit  
Дата: 25.03.06 19:56
Оценка:
правильный ответ дал Кодт модератор

Его ответ:

struct X { X() { cout << "Hello" << endl; } };
int main() { X data[1000]; }

Хотя предпологалось так:

class X
{
public:
X() { cout << "Hello" << endl; }
};

int main() { X say[1000]; }

это и есть решение без цикла, явного или не явного, с наименьшим количеством кода !
Re[2]: ЕСТЬ ПОБЕДИТЕЛЬ !
От: 8bit  
Дата: 25.03.06 19:59
Оценка:
А так же наиболее ПРОСТОЕ !
не нужны ни vector, ни BOOST, ни чего кроме КОНСТРУКТОРА !
Re[13]: Тест на смекалку !
От: sc Россия  
Дата: 25.03.06 20:00
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, sc, Вы писали:


sc>>Здравствуйте, 8bit, Вы писали:


8>>>да я вроде дал намек ниже в ветке...

8>>>если только выделить 'C++' по ярче....
sc>>Может быть написать слово на букву К? Если я правильно догадался)

8>На букву C может быть ?

И на C тоже Конструктор == Constructor
Я скорее всего знал это раньше, так как решение пришло мгновенно, а это не типично для меня))
Re: Тест на смекалку !
От: Кодт Россия  
Дата: 25.03.06 20:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


Решение с рекурсией. Голый Си.
#include <stdio.h>

void print_1() { printf("text\n"); }

#define DEF_PRINT(x,y) void print_##x() { print_##y(); print_##y(); }
DEF_PRINT(2,1)
DEF_PRINT(4,2)
DEF_PRINT(8,4)
DEF_PRINT(16,8)
DEF_PRINT(32,16)
DEF_PRINT(64,32)
DEF_PRINT(128,64)
DEF_PRINT(256,128)
DEF_PRINT(512,256)

int main()
{
  int const n = 1000;
  // мне лень раскладывать n по битам...
#define PRINT(x) (n & x) ? print_##x() : (void)0;
  PRINT(512);
  PRINT(256);
  PRINT(128);
  PRINT(64);
  PRINT(32);
  PRINT(16);
  PRINT(8);
  PRINT(4);
  PRINT(2);
  PRINT(1);
}
Перекуём баги на фичи!
Re[14]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 20:04
Оценка:
Здравствуйте, sc, Вы писали:

sc>Здравствуйте, 8bit, Вы писали:


8>>Здравствуйте, sc, Вы писали:


sc>>>Здравствуйте, 8bit, Вы писали:


8>>>>да я вроде дал намек ниже в ветке...

8>>>>если только выделить 'C++' по ярче....
sc>>>Может быть написать слово на букву К? Если я правильно догадался)

8>>На букву C может быть ?

sc>И на C тоже Конструктор == Constructor
sc>Я скорее всего знал это раньше, так как решение пришло мгновенно, а это не типично для меня))

Все верно ! это нужно сделать через конструктор !
И это замечательно что такие решения приходят к вам мгновенно !
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 20:05
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


К>Решение с рекурсией. Голый Си.

К>
К>#include <stdio.h>

К>void print_1() { printf("text\n"); }

К>#define DEF_PRINT(x,y) void print_##x() { print_##y(); print_##y(); }
К>DEF_PRINT(2,1)
К>DEF_PRINT(4,2)
К>DEF_PRINT(8,4)
К>DEF_PRINT(16,8)
К>DEF_PRINT(32,16)
К>DEF_PRINT(64,32)
К>DEF_PRINT(128,64)
К>DEF_PRINT(256,128)
К>DEF_PRINT(512,256)

К>int main()
К>{
К>  int const n = 1000;
К>  // мне лень раскладывать n по битам...
К>#define PRINT(x) (n & x) ? print_##x() : (void)0;
К>  PRINT(512);
К>  PRINT(256);
К>  PRINT(128);
К>  PRINT(64);
К>  PRINT(32);
К>  PRINT(16);
К>  PRINT(8);
К>  PRINT(4);
К>  PRINT(2);
К>  PRINT(1);
К>}
К>


Вы уже обьявленны победителем ! Смотрите чуть выше в ветке !
Re[4]: Тест на смекалку !
От: Максим Грин Россия http://www.spektr.info.
Дата: 25.03.06 20:17
Оценка:
protestuu, moi variant s rekursivnim vizovom na golom si — to ze samoe
Re[4]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 20:22
Оценка:
Здравствуйте, shank, Вы писали:

S>Здравствуйте, 8bit, Вы писали:

S>Не умаляя заслуги Кодта, но все же, эта строчка
S>
S>X say[1000];
S>

S>транслируется в цикл с вызовом конструкторов...
S>Кто мог знать, что это уже не подпадает под определение "неявный цикл"?

Вот декомпиляция.
Цикл есть, который создал компилятор а не программист (причем конструктора нет) !
Задача была в том что бы программист не создавал руками цикла !

.text:004010C0 push esi
.text:004010C1 push edi
.text:004010C2 mov edi, ds:??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<(std::basic_ostream<char,std::char_traits<char>> &,char const *)
.text:004010C8 mov esi, 3E8h
.text:004010CD
.text:004010CD loc_4010CD: ; CODE XREF: _main+25j
.text:004010CD mov eax, ds:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::basic_ostream<char,std::char_traits<char>> std::cout
.text:004010D2 push offset aTest ; "test"
.text:004010D7 push eax
.text:004010D8 call edi ; std::operator<<(std::basic_ostream<char,std::char_traits<char>> &,char const *) ; std::operator<<(std::basic_ostream<char,std::char_traits<char>> &,char const *)
.text:004010DA push eax
.text:004010DB call ds:?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::endl(std::basic_ostream<char,std::char_traits<char>> &)
.text:004010E1 add esp, 0Ch
.text:004010E4 dec esi
.text:004010E5 jnz short loc_4010CD
.text:004010E7 pop edi
.text:004010E8 xor eax, eax
.text:004010EA pop esi
.text:004010EB retn
Re[5]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 20:24
Оценка:
Здравствуйте, Максим Грин, Вы писали:

МГ>protestuu, moi variant s rekursivnim vizovom na golom si — to ze samoe


Рекурсия — это не явный цикл который создал программист....
Re[5]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 20:29
Оценка:
Здравствуйте, Максим Грин, Вы писали:

МГ>protestuu, moi variant s rekursivnim vizovom na golom si — to ze samoe


вот ваш счетчик не явного цикла, его создали вы своими же руками:
static int c = 1000;
if (--c)
Re[2]: ЕСТЬ ПОБЕДИТЕЛЬ !
От: 8bit  
Дата: 25.03.06 20:35
Оценка:
А так же 'sc', знавший ответ, но умолчал дабы было интересно...
Re[5]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 20:39
Оценка:
звиняйте.... конструктор конечно же есть....
Но главное что программист не создавал руками цикла !
Re[3]: ЕСТЬ ПОБЕДИТЕЛЬ !
От: 8bit  
Дата: 25.03.06 20:55
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 8bit, Вы писали:


8>>это и есть решение без цикла, явного или не явного, с наименьшим количеством кода !


К>Это решение — не совсем "чистый" С++, поскольку пришлось определить свой класс.

К>Чистое решение — вот:
К>
К>#include <iostream>
К>#include <iterator>
К>#include <algorithm>
К>int main()
К>{
К>  std::fill_n(std::ostream_iterator<const char*>(std::cout, "\n"), 1000, "hello!");
К>}
К>

К>Ни одной нестандартной функции, ни одного нестандартного класса.

К>Ну а то, что fill_n неявно содержит цикл — так ведь и конструктор массива содержит цикл.


"чистый" С++ я употребил что бы люди не пытались использовать всякие там BOOST, рекурсии, а так же как намек что решение скрывается в одной из основ языка (конструктуре).

То что констуктор массива содержит цикл не относится к формулировке задачи, так как
програмист его не создает этот цикл, а только обьявляет массив. Т.е. этот цикл не 'рукотворный' если можно так выразиться. Это зависит от компилятора.
Re[2]: Тест на смекалку !
От: sc Россия  
Дата: 25.03.06 21:04
Оценка:
Здравствуйте, Кодт, Вы писали:
...
К>- массив объектов, конструкторы с побочным эффектом
...
и деструкторы тоже)
Re[3]: Тест на смекалку !
От: Кодт Россия  
Дата: 25.03.06 22:10
Оценка:
Здравствуйте, sc, Вы писали:

К>>- массив объектов, конструкторы с побочным эффектом

sc>и деструкторы тоже)

Замечательно. Одно из.

Какие ещё решения можно вписать в наши анналы? Ограничение на предельную простоту снято.

Есть ограничение на громоздкость: каждое решение должно быть минимально в своём классе.

Например, логарифмическая рекурсия в шаблонах — по основанию 2 упомянули, этого достаточно. По основанию 3 или 10 уже будет, во-первых, повтором, а во-вторых, более громоздко.
Линейная рекурсия в шаблонах — отдельный класс решения. (Правда, не всякий компилятор сможет её поднять).

Да, кстати. Маячок к неочевидному решению: <stdlib.h>
Перекуём баги на фичи!
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 23:38
Оценка:
Я не закрываю глаза на варианты, очень интересно было увидеть различные способы.

Есть вот такой вариант: тоже же через конструктор но без массива,
и даже не знаю есть ли тут рекурсия или цикл (считаю что нет), думаю больше похоже на 'развернутый' массив:
class XXX
{
public:
    XXX(int i, volatile int j=1)
    {
        j /= i;
        cout << "test" << endl;
        XXX a(i-1);
    }
};

int main()
{
    try
    {
        XXX a(4);
    }
    catch (...)
    {
    }
}

Добавлено форматирование — Кодт
Re[4]: Тест на смекалку !
От: Кодт Россия  
Дата: 25.03.06 23:44
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Например, логарифмическая рекурсия в шаблонах — по основанию 2 упомянули, этого достаточно. По основанию 3 или 10 уже будет, во-первых, повтором, а во-вторых, более громоздко.

К>Линейная рекурсия в шаблонах — отдельный класс решения. (Правда, не всякий компилятор сможет её поднять).

Опаньки. Глаза-то у меня замылены... упомянули как раз линейную рекурсию. Для многих компиляторов — это приведёт к ICE. (Насколько помню, только comeau справлялся с глубиной 1000).
Ну раз уж я сам сказал — то приведу это решение.
// с частичной специализацией

template<int N> struct F
{
  void f(const char* s)
  {
    F<N/2>::f(s);
    F<N-N/2>::f(s);
  }
};
template<> struct F<0>
{
  void f(const char* s) { }
};
template<> struct F<1>
{
  void f(const char* s) { cout << s << endl; }
};

int main() { F<1000>::f("hello"); }

// без частичной специализации

template<int N> struct int2type {};

template<int N> void f(const char* s, int2type<N> t)
{
  f(s,int2type<N/2>());
  f(s,int2type<N-N/2>());
}
void f(const char* s, int2type<0> t) {}
void f(const char* s, int2type<1> t) { cout << s << endl; }

int main() { f("hello",int2type<1000>()); }

Дихотомия (N/2, N-N/2) порождает много разных воплощений (instantiations), что утяжеляет работу компилятору.
Самый худший случай — когда N=2^k-1.
Здесь же будут пройдены значения f<N>, N=1000, 500, 250, 125, 63, 62, 32, 31, 16, 15, 8, 7, 4, 3, 2, 1, 0.

Более эффективно — так:
void f(const char* s, int2type<0> t) {}
void f(const char* s, int2type<1> t) { cout << s << endl; }

template<int N> void g(const char* s, int2type<N> t)
{
  f(s, int2type<N%2>());
  g(s, int2type<N/2>());
  g(s, int2type<N/2>());
}
void g(const char* s, int2type<0> t) {}

Будут воплощены g<N>, N = 1000, 500, 250, 125, 62, 31, 15, 7, 3, 1, 0.
Перекуём баги на фичи!
Re[3]: Тест на смекалку !
От: 8bit  
Дата: 25.03.06 23:47
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Я не закрываю глаза на варианты, очень интересно было увидеть различные способы.


8>Есть вот такой вариант: тоже же через конструктор но без массива,

8>и даже не знаю есть ли тут рекурсия или цикл (считаю что нет), думаю больше похоже на 'развернутый' массив:

8>class XXX

8>{
8>public:
8> XXX(int i, volatile int j=1)
8> {
8> j /= i;
8> cout << "test" << endl;
8> XXX a(i-1);
8> }
8>};

8>int main()

8>{
8> try
8> {
8> XXX a(4);
8> }
8> catch (...)
8> {
8> }
8>}

Хотя конечно компилятор развернет это в рекурсию...
Re[3]: Тест на смекалку !
От: Кодт Россия  
Дата: 25.03.06 23:57
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Есть вот такой вариант: тоже же через конструктор но без массива,

8>и даже не знаю есть ли тут рекурсия или цикл (считаю что нет), думаю больше похоже на 'развернутый' массив:

Массива здесь нет, зато есть UB. В конструкторе (считай, в особой функции) создаётся локальная переменная, у которой вызывается конструктор... То есть, эти переменные — во-первых, недостроенные, а во-вторых, не образуют сплошной массив.
Процесс останавливается при делении на ноль (то самое UB).

Даже если при этом возбудится аппаратное исключение — не факт, что будет брошено асинхронное исключение С++. Это личное дело железа, ОС, компилятора, его настроек и твоих рук (иногда нужно явно регистрировать обработчик исключительных ситуаций).
Но пусть произойдёт бросок. Это приведёт к раскрутке стека, т.е., попросту, к возвратам изо всех функций.

То же самое, но более просто
// так
XXX::XXX(int N)
{
  if(N==0) throw int(0); // любой тип исключения, т.к. у нас универсальная ловушка
  cout << "hello\n";
}
// или так
XXX::XXX(int N)
{
  if(N==0) return;
  XXX x(N-1);
}
// или вот так
void f(int N)
{
  if(N==0) return;
  cout << "hello\n";
  f(N-1);
}

То есть, это рекурсия.
Перекуём баги на фичи!
Re[4]: Тест на смекалку !
От: 8bit  
Дата: 26.03.06 01:09
Оценка:
Здравствуйте, Кодт, Вы писали:

Да, кстати. Маячок к неочевидному решению: <stdlib.h>

Это случайно не используя qsort или bsearch ?
Re[4]: Тест на смекалку !
От: 8bit  
Дата: 26.03.06 01:32
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 8bit, Вы писали:


8>>Есть вот такой вариант: тоже же через конструктор но без массива,

8>>и даже не знаю есть ли тут рекурсия или цикл (считаю что нет), думаю больше похоже на 'развернутый' массив:

К>Массива здесь нет, зато есть UB. В конструкторе (считай, в особой функции) создаётся локальная переменная, у которой вызывается конструктор... То есть, эти переменные — во-первых, недостроенные, а во-вторых, не образуют сплошной массив.

К>Процесс останавливается при делении на ноль (то самое UB).

К>Даже если при этом возбудится аппаратное исключение — не факт, что будет брошено асинхронное исключение С++. Это личное дело железа, ОС, компилятора, его настроек и твоих рук (иногда нужно явно регистрировать обработчик исключительных ситуаций).

К>Но пусть произойдёт бросок. Это приведёт к раскрутке стека, т.е., попросту, к возвратам изо всех функций.

К>То же самое, но более просто

К>
К>// так
К>XXX::XXX(int N)
К>{
К>  if(N==0) throw int(0); // любой тип исключения, т.к. у нас универсальная ловушка
К>  cout << "hello\n";
К>}
К>// или так
К>XXX::XXX(int N)
К>{
К>  if(N==0) return;
К>  XXX x(N-1);
К>}
К>// или вот так
К>void f(int N)
К>{
К>  if(N==0) return;
К>  cout << "hello\n";
К>  f(N-1);
К>}
К>

К>То есть, это рекурсия.

я хотел избежать If.
Сначала именно так и написал, а потом решил через деление на ноль выйти,
раз уж мы хотим посмотреть все возможные варианты.
(так как через исключение никто не предлагал)

Но я думаю элегантнее кода нет... чем тот что был заявлен
Re: Тест на смекалку !
От: ZayatsZ Россия  
Дата: 27.03.06 06:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?



здесь
Автор: kosfr
Дата: 19.01.05

здесь
Автор: PVitaliy
Дата: 18.02.05
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Тест на смекалку !
От: ekamaloff Великобритания  
Дата: 27.03.06 06:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


Вот еще одно решение с помощью препроцессора:

// print.h
#ifndef REPEAT_COUNTER
#define REPEAT_COUNTER 0
#endif

#if REPEAT_COUNTER < REPEAT_COUNT

#define REPEAT_COUNTER (REPEAT_COUNTER + 1)

PRINT_STRING
#include "print.h"

#endif


// main.cpp
#include <iostream>

#define REPEAT_COUNT        1000
#define PRINT_STRING        std::cout << "Hello, world!" << std::endl;

int main()
{
    #include "print.h"
}


Вот только у меня это не компилится (VC++ 7.1):

d:\...\print.h(10): fatal error C1014: too many include files : depth = 1024


Видимо я где-то напортачил, только не могу понять где. Или я чего-то принципиально не понимаю и так не получится?
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 27.03.06 07:28
Оценка:
Здравствуйте, ZayatsZ, Вы писали:

ZZ>Здравствуйте, <Аноним>, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?



ZZ>здесь
Автор: kosfr
Дата: 19.01.05

ZZ>здесь
Автор: PVitaliy
Дата: 18.02.05


Повторение мать учения !
Re[2]: Тест на смекалку !
От: ekamaloff Великобритания  
Дата: 27.03.06 07:48
Оценка:
Здравствуйте, ekamaloff, Вы писали:

<>

Все, понял, гоню.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: А если так
От: andrey.def Россия  
Дата: 27.03.06 08:40
Оценка:
select 'hello' as dummy from ( select * from (select * from dual connect by dummy=dummy) where rownum<1001);


PS: ессно это не Си
Re[3]: А если так
От: andrey.def Россия  
Дата: 27.03.06 08:52
Оценка:
Здравствуйте, andrey.def, Вы писали:

AD>
AD>select 'hello' as dummy from ( select * from (select * from dual connect by dummy=dummy) where rownum<1001);
AD>


Ну конечно же в погоне за сокращением кода нужно писать так:

 select 'hello'  from (select * from dual connect by dummy=dummy) where rownum<1001
Re[4]: НУ И СОВСЕМ СОКРАТИТЬ!
От: andrey.def Россия  
Дата: 27.03.06 08:54
Оценка:
select rpad(' ',6001,'hello'||chr(10)) from dual
Re: Тест на смекалку !
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.03.06 09:41
Оценка:
<Аноним>,

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


Хм... На каком языке? #-)
    1000 $ 'hello '
hello hello hello hello hello hello hello hello hello hell...
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: Тест на смекалку !
От: ekamaloff Великобритания  
Дата: 27.03.06 10:57
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Хм... На каком языке? #-)


2 andrey.def and you:

Re: Тест на смекалку ! Уточнение и подсказка
Автор: 8bit
Дата: 25.03.06
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[15]: Варум?
От: Erop Россия  
Дата: 27.03.06 13:35
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Все верно ! это нужно сделать через конструктор !

8>И это замечательно что такие решения приходят к вам мгновенно !


1) А почему это замечательно?
2) А почему это "без неявного цикла"?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Тест на смекалку !
От: i-maverick Россия  
Дата: 28.03.06 09:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


Это настолько древняя задача. Она уже везде перетерта 1000 раз.
И даже попадалась мне на собеседовании в одной крупной компании.

class C {
public:
  C() { cout << "text\n"; }
};

int main {
  C c[1000];
}
Re[2]: Тест на смекалку !
От: _DAle_ Беларусь  
Дата: 28.03.06 09:13
Оценка:
Здравствуйте, i-maverick, Вы писали:

IM>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


IM>Это настолько древняя задача. Она уже везде перетерта 1000 раз.

IM>И даже попадалась мне на собеседовании в одной крупной компании.

IM>
IM>class C {
IM>public:
IM>  C() { cout << "text\n"; }
IM>};

IM>int main {
IM>  C c[1000];
IM>}
IM>


Можно разнообразить решения %)
struct C {
  C()  { cout << "text\n"; }
  ~C() { cout << "text\n"; }
};

int main {
  C c[500];
}
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: Тест на смекалку !
От: i-maverick Россия  
Дата: 28.03.06 09:21
Оценка:
Здравствуйте, _DAle_, Вы писали:

_DA>Можно разнообразить решения %)

_DA>
_DA>struct C {
_DA>  C()  { cout << "text\n"; }
_DA>  ~C() { cout << "text\n"; }
_DA>};

_DA>int main {
_DA>  C c[500];
_DA>}
_DA>


А у меня кода меньше (если класс заменить на структуру).
Re[3]: Тест на смекалку !
От: Вумудщзук Беларусь  
Дата: 28.03.06 10:39
Оценка:
>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?

>
printf("текст\n");
>printf("текст\n");
>printf("текст\n");
>printf("текст\n");
>// ... и так 1000 раз

>

>код должен быть минимален.

тогда брутфорсить можно так: (вариация Кодт'ова решения ниже )

    char *txt = "текст\n", *fmt = "%s%s%s%s";
    char s1[10*1024], s2[10*1024];
    sprintf(s1, fmt, txt, txt, txt, txt);
    sprintf(s2, fmt, s1,s1,s1,s1);
    sprintf(s1, fmt, s2,s2,s2,s2);
    sprintf(s2, fmt, s1,s1,s1,s1);
    printf(fmt, s2,s2,s2,s2);
Homo sum et nihil humani a me alienum puto...
Re[16]: Варум?
От: xr0ld  
Дата: 28.03.06 20:39
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, 8bit, Вы писали:


8>>Все верно ! это нужно сделать через конструктор !

8>>И это замечательно что такие решения приходят к вам мгновенно !


E>1) А почему это замечательно?

E>2) А почему это "без неявного цикла"?

Рекурсия )
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Эврика ! :)
От: xr0ld  
Дата: 28.03.06 22:30
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, shank, Вы писали:


S>>Вывести 1 раз, а программу запустить 1000 раз? Или это тоже неявный цикл?


8>

8>Нет все должно быть сделанно за один запуск...

Рекурсия )
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Тест на смекалку !
От: ilya_ny  
Дата: 29.03.06 04:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


на с++ — понятно

а как на C# ее решить?
Re[17]: Варум?
От: Erop Россия  
Дата: 30.03.06 15:16
Оценка:
Здравствуйте, xr0ld, Вы писали:

E>>1) А почему это замечательно?

E>>2) А почему это "без неявного цикла"?
X>Рекурсия )
3) А при чём тут рекурсия?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Тест на смекалку !
От: vitaly_spb Россия  
Дата: 04.04.06 15:18
Оценка:
_>а как на C# ее решить?

с генериками и структурой наверное...
...Ei incumbit probatio, qui dicit, non qui negat...
Re: Тест на смекалку !
От: Аноним  
Дата: 04.04.06 17:04
Оценка:
printf("line\nline\nline\n ................................ ");
Re[2]: Тест на смекалку ! Уточнение и подсказка 2
От: Аноним  
Дата: 05.04.06 04:17
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Как вывести строку текста на экран (консоль приложения)

8>РОВНО 1000 раз
8>не используя явного или не явного цикла,
8>при этом код должен быть минимален и
8>использованы только возможности стандартного C++ ?

8>Определение не явного цикла:

8>цикл созданный путем различных ухитрений,
8>(где обычно присутствует счетчик итераций)

Элементарно:
printf("РОВНО 1000 раз");

Никаких циклов: явных, неявных и т.п.
Re[16]: Варум?
От: Аноним  
Дата: 05.04.06 11:48
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, 8bit, Вы писали:


8>>Все верно ! это нужно сделать через конструктор !

8>>И это замечательно что такие решения приходят к вам мгновенно !


E>2) А почему это "без неявного цикла"?


Потому что программист лично его не создает.
А уж как там это сделает компилятор — это дело третье....
Re[2]: Тест на смекалку !
От: AleXXus Россия  
Дата: 20.04.06 02:51
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


_>на с++ — понятно


_>а как на C# ее решить?


Легко , хотя и маленько извращенно


class C
{
   private int i = 1000;
   ~C() 
   {
      if(--i >= 0)
      {
         Console.WriteLine("text here;");
         GC.ReRegisterForFinalize(this);
         GC.Collect(0);
      }
      else
         Console.ReadKey();
    }
}
        
static void Main(string[] args)
{
   C c = new C();
   c = null;
   GC.Collect(0);
}
________________________________
When in Rome, do as the Romans do...
Re: Тест на смекалку !
От: Hasmik Армения  
Дата: 07.06.06 16:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


А что такое неявный цикл? В любом случае управление должно возвращаться на то же место кода, если не писать тупо оператор вывода 1000 раз.
Например, мое решение: создать класс А с членом-указателем на А. В конструкторе вызывать печать и new. Статический член инкрементировать, если 1000, new не вызывать.
Re[2]: Тест на смекалку !
От: Кодт Россия  
Дата: 08.06.06 09:51
Оценка:
Здравствуйте, Hasmik, Вы писали:

H>А что такое неявный цикл? В любом случае управление должно возвращаться на то же место кода, если не писать тупо оператор вывода 1000 раз.


Не в любом.
Во-первых, можно написать программу, не тупо генерирующую 1000 операторов вывода (буст-препроцессор или рекурсивные шаблоны).
Во-вторых, можно безусловно вызывать подпрограммы несколько раз. Это не то же самое, что напедалить 1000 строк, правда?
В-третьих, вместо дублирования кода можно дублировать данные (суммировать строки). Правда, внутри strcpy есть неявный цикл...

H>Например, мое решение: создать класс А с членом-указателем на А. В конструкторе вызывать печать и new. Статический член инкрементировать, если 1000, new не вызывать.


Зачем так выделываться? Это же просто рекурсия. Причём линейная (у тебя резиновый стек, да?)
Написать функцию Actor(int n) — т.е. A::ctor — и в ней рекурсивно вызывать себя саму по условию.
Перекуём баги на фичи!
Re[2]: Тест на смекалку !
От: 8bit  
Дата: 26.06.06 19:38
Оценка:
Здравствуйте, Hasmik, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


H>А что такое неявный цикл?


Вот странные вы люди. Вот будет задан такой вопрос и вы что будете спрашивать что такое
неявный цикл ? Т.е что такое явный вы знаете, а что такое неявный не знаете ?
Re[4]: Тест на смекалку !
От: Greg Zubankov СССР  
Дата: 20.07.06 11:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Какие ещё решения можно вписать в наши анналы? Ограничение на предельную простоту снято.


Ни рекурсии, ни циклов.
template <int d> class Out : public Out<d-1> { public: Out() { std::cout << "Hello!"; } };
template <> class Out<0> {};

int main() { Out<1000> out; }
Re[5]: Тест на смекалку !
От: Кодт Россия  
Дата: 20.07.06 11:45
Оценка:
Здравствуйте, Greg Zubankov, Вы писали:

GZ>Ни рекурсии, ни циклов.


Было: линейная рекурсия шаблонов.
Ещё варианты?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Re[4]: Тест на смекалку !
От: MaximE Великобритания  
Дата: 22.07.06 15:05
Оценка:
Здравствуйте, Aznog, Вы писали:

A>Здравствуйте, remark, Вы писали:


R>>Такое уже было здесь
Автор: shank
Дата: 25.03.06
— говорят неправильно

R>>

A>Слона-то я и не увидел


На мой взгляд, то было правильное решение. Машинный код конструктора, сгенеренного шаблоном класса, не содержит циклов.

Решение с массивом в машинном коде имеет цикл, который вызывает конструкторы.
Re[5]: Тест на смекалку !
От: remark Россия http://www.1024cores.net/
Дата: 31.07.06 07:42
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Здравствуйте, Aznog, Вы писали:


A>>Здравствуйте, remark, Вы писали:


R>>>Такое уже было здесь
Автор: shank
Дата: 25.03.06
— говорят неправильно

R>>>

A>>Слона-то я и не увидел


ME>На мой взгляд, то было правильное решение. Машинный код конструктора, сгенеренного шаблоном класса, не содержит циклов.


ME>Решение с массивом в машинном коде имеет цикл, который вызывает конструкторы.



Вроде как автор говорил, что не должно быть счётчика цикла в программе в каком либо виде, а то, что сгенерирует компилятор не рассматривается. В конце концов, что сгенерирует компилятор — это его лично дело. Один не сделает цикл, другой сделает.

Хотя, конечно, условие очень расплывчатое, из серии "угадайте, что я загадал"


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Тест на смекалку !
От: Аноним  
Дата: 02.08.06 07:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


решение на python
print "text\n"*1000


Re: Тест на смекалку !
От: CrazyPit  
Дата: 12.08.06 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


гм


print "string\n" * 1000
Re[2]: Тест на смекалку !
От: Аноним  
Дата: 13.08.06 10:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Как вывести строку текста 1000 раз не используя явного или не явного цикла ?


А>решение на python

А>
А>print "text\n"*1000
А>


А>


Не знаю как на Python, но на Ruby можно ещё так:
puts ["text"]*1000
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.