Задачка по программированию
Продолжу начатое besislandом и задам несложную, но интересную задачку, которую, в частности, мы с ним решали недавно.
Нужно написать такое выражение, которое при вызове его в цикле в первый раз выведет на экран одно значение, а во все остальные разы - другое.
Использовать это можно, например, когда нам нужно пробежаться по массиву и вывести через запятую все его элементы, удовлетворяющие некоторому условию. Тогда, соответственно, это выражение в первый раз не выведет ничего, а в остальные разы – «,».
Метки: задачки, разработка
июля 3, 2008 at 8:53 пп
Хм, или есть переменная цикла, или это выражение должно пользоваться дополнительной информацией. Или я туплю. :)
С переменной цикла все просто:
for( int i = S; i < F; i++ )
{
System.out.println( i == S );
}
C дополнительной переменной:
int count = 0;
while( condition() )
{
System.out.println( count++ == 0 );
}
июля 4, 2008 at 7:29 дп
В лучших традициях Александреску :) без использования if’ов:
template <int t> void print()
{
std::cout<<t<<std::endl;
print<t-1>();
}
template <> void print()
{
std::cout<<”—-”<<std::endl;
}
print<5>();
июля 4, 2008 at 9:42 дп
echo $i = isset( $i ) ? “, ” : “”;
августа 3, 2008 at 9:20 пп
Чуток не понятен смысл. Когда переменная объявляется – можешь ей присвоить значение необходимое для использования впервый раз. В теле цикла – просто присваиваешь ей значение необходимое для всех остальных разов.
a=”"
for cikl=1 to 10
print a
…
a=”,”
next
октября 12, 2008 at 1:49 дп
Да тут однозначно –
template void print()
{
std::cout<<t<<std::endl;
print();
}
template void print()
{
std::cout<<”—-”<<std::endl;
}
print();
и без всяких вопросов – это помойму наилуший вариант и довольно легко!
октября 19, 2008 at 10:57 пп
вариант 1: статическая переменная внутри цикла.
(для примера была выбрана задача вывода всех четных чисел из массива)
for(int i = 0; i < 10; i++)
{
static bool condition = false;
if((arr[i] / 2) * 2 == arr[i])
{
if(condition) printf(“, “);
condition = true;
printf(“%d”, arr[i]);
}
}
Как вариант вместо були можно назначить разделитель внутри цикла, но, по крайней мере в Си, это будет работать медленней, т.к. копирование строки дольше, чем копирование одного значения.
Вариант 2: скидываем выхлоп в строковую переменную, соответственно если строка не пустая – добавляем разделитель. Медленно и жрет много рамы. Там уже из беспринципности можно даже выдавать разделитель после вывода значения и в конце его просто “срезать”
октября 30, 2008 at 3:29 пп
<?
for ($i=0; $i<$max; $i++){
@echo $str;
$str=”,”;
}