Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83

Цикл for от заданного значения до 0 включительно

25.05.2025, 12:04. Показов 8779. Ответов 37
Метки нет (Все метки)

Доброго времени суток.

Я думал что цикл for знаю вдоль и поперёк. Ан нет...
Имеем такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int variable;
 
int main()
{
    variable = 3; // Здесь имеем какое то значение переменной, допустим 3
    
    for (int i = variable; i -- > 0;)
    {
        std::cout << i << '\n'; // Выполнение кода с заданным индексом
    }
    
    return 0;
}
Получаем:
2
1
0

А мне надо:
3
2
1
0
При том что обязательное условие: выполнение кода должно начинаться именно со старшего индекса, а заканчиваться нулевым.
Перепробовал поиграться с полями цикла - получается хрень.
Раньше такого мне никогда не надо было, а сейчас потребовалось.
Понятно что не дурак, и могу сделать так (и так абсолютно работает):
C++
1
2
3
4
5
    for (int i = variable; i > 0; i --)
    {
        std::cout << i << '\n'; // Выполнение кода с заданным индексом
    }
    std::cout << 0 << '\n'; // Выполнение кода с индексом = 0;
Понятно что также можно усложнить конструкцию самого цикла, но я просто озадачен тем, что неужели цикл for на простых условиях так не может?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2025, 12:04
Ответы с готовыми решениями:

Цикл: Вывести все простые числа от M до N включительно
Вывести все простые числа от M до N включительно. Вывести числа в порядке возрастания, по одному в...

Вычислить сумму N случайных чисел, заданных в диапазоне от -5 до 5 включительно
Задача: Вычислить сумму N случайных чисел, заданных в диапазоне от -5 до 5 включительно....

Вывести все простые числа, меньшие заданного n, включительно
Простое число Помогите Пожалуйста! Простое число это число которое делится только на 1 и...

37
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
29.05.2025, 00:02  [ТС]
Verevkin, да, тоже решение, в принципе Royal_X, уже о нём упомянул.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.05.2025, 01:15
Если для индексирования, то тригером спокойно можно брать следующее за наименьшим индексом.
При этом это будет работать как для знаковых так и беззнаковых типов.
В первом случае, это будет -1, во втором, макс, знач. Так как макс. знач. по определению не может быть индексом реального элемента, то его использование имеет место быть.

Ещё варианты через разного рода итераторы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
template<class IndexIntegerType, class T>
void ReverseIter(T *arr, IndexIntegerType index){
   for(IndexIntegerType i = index, end = static_cast<IndexIntegerType>(-1); i != end; --i)
      std::cout << arr[i] << ' ';
   std::cout << std::endl;
}
 
int main(){
   int arr[]{0,1,2,3,4,5,6,7,8,9};
   ReverseIter(arr, int(5));
   ReverseIter(arr, (unsigned long long)(5));   
}
В случаях когда индекс может выйти за допустимые пределы внутри цикла, индекс проверяется отдельно is_in_bound
И так далее.
Можно использовать и int, если вам достаточно и диапазона, и вы не желаете думать.
Но знать как обойтись и с целым типом нужно
.
Способы с Итераторами не будем затрагивать.

Как видите, ваш вопрос
Цитата Сообщение от Mr McLaren Посмотреть сообщение
Цикл for от заданного значения до 0 включительно
по сути неточный или даже ошибочный.
0
фрилансер
 Аватар для Алексей1153
6487 / 5715 / 1133
Регистрация: 11.10.2019
Сообщений: 15,249
29.05.2025, 07:46
Цитата Сообщение от SmallEvil Посмотреть сообщение
Способы с Итераторами не будем затрагивать.
а чего бы и не затронуть?
Во-первых, это красиво

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <iterator>
 
int main()
{
    int arr[] = {3,74,42,14,-15,0,9,11};
    //нужно вывести 14,42,74,3
 
    constexpr size_t shift=4;
    static_assert(std::size(arr)>=shift);
 
    std::copy(std::next(std::rbegin(arr),shift), std::rend(arr),std::ostream_iterator<int>{std::cout,"\n"});
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.05.2025, 11:28
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а чего бы и не затронуть?
Я имел ввиду возможную реализацию итераторов по массиву. Да и сам концепт итераторов в целом.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
29.05.2025, 11:42
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Во-первых, это красиво
Это вот это, штоли, красиво?



Ваще нечитаемая колбаса символов, блин...
0
фрилансер
 Аватар для Алексей1153
6487 / 5715 / 1133
Регистрация: 11.10.2019
Сообщений: 15,249
29.05.2025, 12:41
Verevkin, там как раз всё читаемо, почти на английском написано
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
29.05.2025, 12:46
Цитата Сообщение от Алексей1153 Посмотреть сообщение
там как раз всё читаемо, почти на английском написано
Ох ух эти чёртовы англичане! При создании английского языка почти все слова из С++ взяли!
1
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
30.05.2025, 13:37
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    int arr[] = { 3,74,42,14,-15,0,9,11, 4321 };
    //нужно вывести 14,42,74,3
    int a=0, b = 0;
while (arr[8] > 0)
    {
        a = arr[8] % 10;
        b = b * 10 + a;
        arr[8] = arr[8] / 10;
    }
while (b > 0)
    {
        printf("%d\n", arr[(b%10)-1]);
        b = b / 10;
    }
    std::cout << "Hello World!\n";
    getchar();
}
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
30.05.2025, 14:33
clip_n(2).mp4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int one(int* a) { return a[3]; }
int two(int* a) { return a[2]; }
int three(int* a) { return a[1]; }
int four(int* a) { return a[0]; }
 
typedef int(*arithm_t)(int*);
arithm_t funcs[] = {
    one,two,three,four,
};
 
 
 
int main()
{
    int arr[] = { 3,74,42,14,-15,0,9,11,};
    //нужно вывести 14,42,74,3
 
    for (short i{}; i < 4; ++i)
        printf("%d\n", funcs[i](arr));
    getchar();
}
Фантазия на тему..
0
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,164
30.05.2025, 16:24
0
фрилансер
 Аватар для Алексей1153
6487 / 5715 / 1133
Регистрация: 11.10.2019
Сообщений: 15,249
30.05.2025, 16:46
Наталья8, можно попроще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    int arr[] = { 3,74,42,14,-15,0,9,11,};
    //нужно вывести 14,42,74,3
 
    for (auto i:{arr[3],arr[2],arr[1],arr[0],})
    {
        std::cout<<i<<'\n';
    }
}
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6279 / 3003 / 1051
Регистрация: 01.06.2021
Сообщений: 11,236
30.05.2025, 19:57
Цитата Сообщение от Алексей1153 Посмотреть сообщение
нужно вывести 14,42,74,3
Цитата Сообщение от Алексей1153 Посмотреть сообщение
можно попроще
Цитата Сообщение от Алексей1153 Посмотреть сообщение
C++
1
2
3
4
for (auto i:{arr[3],arr[2],arr[1],arr[0],})
    {
        std::cout<<i<<'\n';
    }
C++
1
2
3
4
5
6
#include <iostream>
 
int main()
{
    std::cout<<"14,42,74,3";
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
30.05.2025, 20:57

Не по теме:


Цитата Сообщение от Royal_X Посмотреть сообщение
std::cout<<"14,42,74,3";
Можно вообще без компьютера и С++.
На бумажке, по старинке.
Да, да, бумага ещё существует и не только туалетная)



Добавлено через 1 минуту

Не по теме:

p.s. совсем заскучали форумчане.

0
 Аватар для vlisp
1070 / 991 / 153
Регистрация: 10.08.2015
Сообщений: 5,403
31.05.2025, 13:44
Цитата Сообщение от SmallEvil Посмотреть сообщение
p.s. совсем заскучали форумчане.

Не по теме:

сессия закончилась и выпускной прошел

0
01.06.2025, 06:36

Не по теме:

Цитата Сообщение от vlisp Посмотреть сообщение
сессия закончилась
Она еще не начиналась, а зачеты - до 6 июня.
Думаю, дело в том, что С++ изучают все меньше и меньше....

0
02.06.2025, 00:18

Не по теме:

Даа. Что то всё завяло... Может весна - лето.
У нас говорили - щепка на щепку лезет. Все жениться хотят.
А я заставляю себя заниматься. Мне жениться не надо. И слава богу.

0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6279 / 3003 / 1051
Регистрация: 01.06.2021
Сообщений: 11,236
02.06.2025, 00:24
Verevkin, скоро у тебя будет красивый рейтинг "9999". Я бы плюсанул, чтобы ты быстрее отпраздновал, но к сожалению понижен в правах временно. Было бы хорошо, чтобы он на таком числе и оставался у тебя.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.06.2025, 08:26
Цитата Сообщение от Royal_X Посмотреть сообщение
скоро у тебя будет красивый рейтинг "9999". Я бы плюсанул
Мне плевать на эти циферки. Их нельзя обналичить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2025, 08:26

Вычислите значение функции y=x^3-x^2+16x-43 для x изменяющегося в диапозоне от -4 до 4 включительно с шагом 0,5
1) Вычислите значение функции y=x^3-x^2+16x-43 для x изменяющегося в диапозоне от -4 до 4...

Установить в ноль с седьмого по двенадцатый биты включительно в двоичном представлении целого значения А
Написать программу в которой необходимо установить в ноль с седьмого по двенадцатый биты...

Посчитать в каждой строке матрицы произведение элементов со значением от 3 до 10, включительно
Решить с использованием функций. Должны быть функции ввода, вывода, обработки массива и, в случае...

Из одного массива скопировать в другой массив значения в диапазоне от -5 до 5 включительно и подсчитать их количество
•Дан массив из 50 элементов, значения которых формируются функцией random и лежат в диапазоне от...

Цикл: Посчитать среднее арифметическое всех чисел в заданном диапазоне. Цикл while.
Напишите пожалуйста код для данной задачки с помощью цикла while Вывести числа в пользовательском...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru