компьютеры

14 FreeBASIC - тасуем карты (массивы-задачи ч2)

Как перемешать карты в колоде? Для начала возьмем массив на 36 элементов - k(36), а карты это цифры от 1 до 36, и заполним массив случайны.. стоп, случайные числа же могут повторяться. Тогда заполняя массив будем искать есть ли уже такое число в массиве и если есть - заполним случайным числом этот элемент ещё раз, и опять проверим, и т.д.

Заполняем массив k случайными числами от 1 до 36
'for i=1 to 36'
' k(i)=int(rnd()*36+1)'

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

'for i=1 to 36'
' k(i)=int(rnd()*36+1)'

' for j=1 to 36'
' if k(i)=k(j) and i<>j then flag=1'
' next j'

для просмотра мы открыли ещё один цикл(переменная этого цикла j) и проверяем - если текущий элемент k(i) будет равен хоть какому-то элементу массива (кроме самого себя - i<>j), то надо этот случай как то отметить - установим значение переменой flag в 1
и будем выбирать этому текущему элементу значение до тех пор пока будем находить в массиве рвное ему значение(т.е. пока flag=1) Ну а до такого поиска с проверкой будем считать что такого элемента в массиве ещё нет, ведь если есть мы же его найдём, поэтому установим в начале цикла flag=0

for i=1 to 36
do
flag=0
k(i)=int(rnd()*36+1)
for j=1 to 36
if k(i)=k(j) and i<>j then flag=1
next j
loop while flag=1
next i

Получилась такая вот программа

при решении этой задачи использовалась переменая-флаг(flag) Этот вид переменных часто используются в программах. Такое название они получили по аналогии с обычными флагами - флаг бывает поднят, бывает спущен, евличие или отсутствие флага сигнализирут произошло или нет некое событие, проанализировать которое нужно в другом месте программы. Такие переменные ещё называют логическими, и даже в некоторых языках программирования их выделяют в особый тип данных - логический. И часто такая переменная может принимать только два значения - 0 или 1.

Но я примоминаю что решал подобную задачу другим способом, попробую это выудить из памяти

dim as integer i, j
dim k(36) as integer

randomize timer

for i=1 to 36
do
t=int(rnd()*36+1)
loop while k(t)<>0
k(t)=i
next i

for i=1 to 36
print k(i);
next i

sleep

Здесь иной подход к заполнению массива. Я заполняю его числами подряд, беру значения, 1,2,3,4...36, но сам массив заполняю в случайном порядке. Например первое случайное число выпало 17 - значит 1 я заношу в 17 эелемент массива, потом беру второе случайное число, пусть будет 23, и в 23й элемент заношу 2, и т.д. Но перед занесением убеждаюсь что туда ещё ничего не заносили - должен быть ноль. Т.е я выбрал случайно индекс для элемента массива и пока ему соответствующий элемент массива содержит не ноль, я перевыбираю индекс на другой.
do
t=int(rnd()*36+1)
loop while k(t)<>0
цикл прервётся если в k(t) встретится ноль, тогда можно туда занести следующий по порядку номер
'k(t)=i'

Этот вариант мне понравился больше, он более краток))) А краткость сестра таланта))) И обошлись без переменной flag

А как ещё можно решить эту задачу?

PS "тасуем карты" здесь подразумевается конечный результат - получить в итоге перемешанные карты в колоде, а не процесс))

13 FreeBASIC - массивы(задачи)
12 FreeBASIC - массивы
11 FreeBASIC - задачки
10 FreeBASIC - Игра угадай число
09 FreeBASIC - случайные числа, RND
08 FreeBASIC - случайные числа, RND
07 FreeBASIC - циклы
06 FreeBASIC - условный оператор
05 FreeBASIC - первые простые задачки
04 FreeBasic - графика
03 FreeBASIC. Текстовые переменные и операции с ними
02 FreeBASIC Переменные в Бейсике
01 Начинаем изучать FreeBasic
00 FreeBASIC лучший из диалектов бейсика

компьютерыпрограммированиеsgfbsgpgобучение
886
524.309 GOLOS
0
В избранное
Сергей
Кибернетик... а кто это? deals.weku.io/@sergiy, serey.io/@sergiy, whaleshares.io/@sergiy, sola.ai/nsergiy
886
0
Комментарии (7)
Сортировать по:
Популярности
Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий
Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.