Последние записи
- Windows 10 сменить администратора
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Дек
Рандомное слайдшоу
Posted by obzor under Delphi
Есть N JPG картинок загруженных в Лист.
Запускаем режим слайдшоу. Выбираем по одной картинке.
Когда перебираем последовательно — все просто.
Как сделать рандомный выбор картинки без повторов.
Присваивать каждой картинке переменную? А если N=500…?
Может есть более хитрый способ исключить из результата «уже использованные»?
(Удалять «уже использованные» из листа не получится он чистится только весь)
A)
1. Получить кол-во картинок: N
2. Создать массив размера N и заполнить его по порядку: 1, 2, 3, …, N
3. Перемешать массив: shuffle(). Необходимую библиотеку можно найти (возможно, что она уже есть, например, в Python, C++).
4. Последовательно просматриваем новый массив и воспроизводим картинку в соответствии с получаемым номером.
B)
Можно создать строковый массив с именами файлов, а потом его перемешать — shuffle().
C)
1. Можно перемешивать массив после каждого проигрывания всех картинок.
2. Перемешивать оставшуюся часть после проигрывания 5, 10 или некоторого другого кол-ва картинок.
PS: Не заметил про Delphi
Вот решение от Нейро:
program ShuffleArrayDemo;
{$APPTYPE CONSOLE}
uses SysUtils, Math;
procedure ShuffleArray(var A: array of Integer);
var i, j, temp: Integer;
begin
Randomize;
for i := High(A) downto Low(A) do
begin
j := Random(i + 1);
temp := A;
A := A[j];
A[j] := temp;
end;
end;
var A: array of Integer; i: Integer;
begin
SetLength(A, 10);
for i := Low(A) to High(A) do A := i;
Writeln('Original array:');
for i := Low(A) to High(A) do Write(A, ' ');
Writeln;
ShuffleArray(A);
Writeln( 'Shuffled array:');
for i := Low(A) to High(A) do Write(A, ' ');
Writeln;
end.
Другой источник:
procedure FastPermuteArray(A: TDynIntegerArray);
procedure Swap(n, m: integer);
var
tmp: integer;
begin
tmp := A[n];
A[n] := A[m];
A[m] := tmp;
end;
var
i: Integer;
begin
for i := High(A) downto 1 do
Swap(i, RandomRange(0, i));
end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)