powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / for
15 сообщений из 15, страница 1 из 1
for
    #33726376
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу исползувать этот код. Но, мне надо что каждая цифра (1,2,...10) в таблице участвовала одиноковый раз. Как иожно это сделать?
Помогите пожалуста.
...
Рейтинг: 0 / 0
for
    #33727513
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. наоборот, неодинаковый раз.
Сейчас, каждая цифра встречается 296010 раз, но мне надо что это было разные.
...
Рейтинг: 0 / 0
for
    #33727530
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извените, каждая цифра встречается 84 раз.
...
Рейтинг: 0 / 0
for
    #33727908
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Юстас Алексу
...
Рейтинг: 0 / 0
for
    #33736363
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
??
...
Рейтинг: 0 / 0
for
    #33736453
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши нормально и ясно что ты хочешь!!! Файл твой скачал посмотрел .. ну и что надо сделать? Если упираться в твоё слово "разные" то используй не For а RAND() и будет тебе счастье). Короче опиши толком задачу
...
Рейтинг: 0 / 0
for
    #33736510
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, мне надо именно rand(), но как я незнаю. Потому что если rand() исползувать, можно получится что 1 цифр 1 раз участвовать в таблице, другой 100 раз больше, 3-й воопщи не участвовать. А мне надо что все цифры прибилизительно одинокывый раз участвовалась. Количество етих цифр не очеть отличалис друг от друга.
...
Рейтинг: 0 / 0
for
    #33737488
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень отличались это как? К чему вообще такой алгоритм? Можешь объяснить задание полностью? Вот например как вариант:

=RAND(-1)

CREATE TABLE bigTable (a1 N(2,0), a2 N(2,0),;
a3 N(2,0), a4 N(2,0), a5 N(2,0), a6 N(2,0), a7 N(2,0))

DECLARE x(10)

FOR i=1 TO 100
FOR j=1 TO 7
x[j]=INT(RAND()*10)
ENDFOR
INSERT INTO bigTable (A1, a2, a3, a4, a5,A6,A7);
VALUES (x[1], x[2], x[3], x[4], x[5],X[6],X[7])
ENDFOR
BROWSE
Можешь в VALUE сразу вместо эл-ов массива написать INT(RAND()*10), но так вроде понятнее. Если не то , то поробуй еще раз ясно описать задачу...
...
Рейтинг: 0 / 0
for
    #33737972
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо, чтобы в одном записе не повторялись цифры и цифры только из 1-го до 10. У Вас 0 тоже встречается.
Вообщи то мой вариант меня устраеваеть, только 1 НО:
Здесь каждая цифры встречается одиноковый (84) раз,Мне надо в эта программы добавить такой алгоритм что, допустим если, 1 встречается Z раз,
тогда,
2 -z+2
3- z+4
...
6-z+5
...
10-z+3

встречается.
Т.Е. каждая цифра сколько раз будет встречатся я сям мог ругулировать.

P.S. Алгоритм для лоторея
...
Рейтинг: 0 / 0
for
    #33738168
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да задай счетчик в самом начале (например, массив) и в момент присвоения уменьшай значение счетчика. Выбор через RAND() только среди тех значений, которые доступны.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
* Номер элемента - цифра. От  1  до  9 
* Значение - сколько осталось не использованных вариантов
DIMENSION laRemains( 9 )
laRemains[ 1 ] =  84 
laRemains[ 2 ] =  85 
laRemains[ 3 ] =  86 
laRemains[ 4 ] =  87 
laRemains[ 5 ] =  88 
laRemains[ 6 ] =  89 
laRemains[ 7 ] =  90 
laRemains[ 8 ] =  91 
laRemains[ 9 ] =  92 

* Строка, содержащая список доступных цифр
LOCAL lcAvailable
lcAvailable = "132456789"

* Итоговая таблица
CREATE TABLE bigTable (a1 N( 2 , 0 ), ;
		a2 N( 2 , 0 ), ;
		a3 N( 2 , 0 ), ;
		a4 N( 2 , 0 ), ;
		a5 N( 2 , 0 ), ;
		a6 N( 2 , 0 ), ;
		a7 N( 2 , 0 ))

* Заполнение таблицы, пока доступно не менее  7  разных цифр
* Предполагаю, что в одной записи не должно быть повторяющихся значений
RAND(- 1 )
LOCAL lcAvailableOneLine, lnI, lnNextPos, lnNextValue
DO WHILE LEN(m.lcAvailable) >=  7 
	lcAvailableOneLine = m.lcAvailable
	SELECT bigTable
	APPEND BLANK
	FOR m.lnI =  1  TO  7 
		* Вычисляю очередное значение
		lnNextPos = ROUND(RAND()*LEN(m.lcAvailableOneLine), 0 )
		IF m.lnNextPos =  0 
			lnNextPos =  1 
		ENDIF
		lnNextValue = INT(VAL(SubStr(m.lcAvailableOneLine,m.lnNextPos, 1 )))

		* Записываю найденное значение
		REPLACE ("a"+TransForm(m.lnI)) WITH m.lnNextValue

		* Корректирую данные
		m.lcAvailableOneLine = STUFF(m.lcAvailableOneLine,m.lnNextPos, 1 ,"")
		laRemains[m.lnNextValue] = laRemains[m.lnNextValue] -  1 
		IF laRemains[m.lnNextValue] =  0 
			m.lcAvailable = ChrTran(m.lcAvailable,TranForm(m.lnNextValue),"")
		ENDIF
	ENDFOR
ENDDO

Если могут быть двух-значные значения, например, число 10, то можно оперировать буквами, являющимися ASCII-кодом нужного числа, делая замену на цифру в момент записи в таблицу.

Код: plaintext
1.
2.
3.
lcAvailable = CHR( 1 )+CHR( 2 )+CHR( 3 )+CHR( 4 )+CHR( 5 )+...
...
REPLACE ("a"+TransForm(m.lnI)) WITH ASC(m.lnNextValue)

Или же использовать символы и дополнительный массив - перекодировщик

Код: plaintext
1.
2.
3.
4.
DIMENSION laValue( 10 )
laValue[ 1 ] = "a"
laValue[ 2 ] = "b"
laValue[ 3 ] = "c"
...

Выбор происходит среди символов, а через ASCAN() получаем индекс массива, которое и является нужным числом для записи.

Можно вместо массива использовать курсор.
...
Рейтинг: 0 / 0
for
    #33738899
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TranForm что за команда, у меня foxpro 6 и ошибка получается
...
Рейтинг: 0 / 0
for
    #33738944
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот блин.. опечатка это просто ...исправь на TransForm
...
Рейтинг: 0 / 0
for
    #33738951
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка.

TRANSFORM() - преобразование данных в символьное представление определенного формата. В данном случае - без ведущих пробелов.
...
Рейтинг: 0 / 0
for
    #33739051
SDF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да,помоему именно это мне нужна.
Но, остоется еще 2 вопроса:
1. Насчет двух-значные значения ( например, число 10) я не понял что делать?
2.Здесь помоему не проверяется (да и я не сказал об этом ранше) повторяющие записи. Напирмер,
1 4 5 6 3 8 9
1 4 5 6 3 8 9
не должна быть.
...
Рейтинг: 0 / 0
for
    #33740690
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDF1. Насчет двух-значные значения ( например, число 10) я не понял что делать?

Ты уже почти год занимаешся "лотерейными билетами" и все время наступаешь на одни и те же "грабли".

Для программирования вообще и FoxPro в частности

Отображение информации не равно хранению информации.

Другими словами, та картинка которую видит пользователь это не есть то, как эта картинка хранится в базе данных.

Я написал в коде

Код: plaintext
1.
2.
* Строка, содержащая список доступных цифр
LOCAL lcAvailable
lcAvailable = "132456789"
В данном случае, для наглядности, символы, из которых состоит строка совпадают с теми номерами, которые собственно и записываются. Т.е. если надо выбрать цифру 1, то ищем в переменной символ "1".

Но ведь это вовсе не обязательно. Вполне допустимо в качестве символьной строки написать

Код: plaintext
1.
2.
* Строка, содержащая список доступных цифр
LOCAL lcAvailable
lcAvailable = "абвгдежзи"

Кроме того, сформировать массив соответсвия того, что

а = 1
б = 2
в = 3
г = 4
д = 5
е = 6
ж = 7
з = 8
и = 9

Теперь, когда выбираем в строке поиска, например, букву "а" смотрим по таблице соответсвия, что буква "а" - это цифра 1. Вот эту цифру и записываем.

Код: plaintext
1.
2.
3.
 2 .Здесь помоему не проверяется (да и я не сказал об этом ранше) повторяющие записи. Напирмер, 
 1   4   5   6   3   8   9 
 1   4   5   6   3   8   9 
не должна быть.
Если еще добавишь, что строки

1 2 3
3 2 1

это одно и то же значение, то я бы рекомендовал тебе вообще отказаться от RAND() и заполнить вообще все возможные варианты "тупым" перебором значений. Это же элементарная задача на перебор вариантов получается. Т.е. можно решить "в лоб" через вложенные циклы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
* Подбор вариантов выбора  7  значений из  10  возможных
* В одном наборе не должно быть одинаковых значений
* Один набор не должен повторятся несколько раз

LOCAL lnAvailable, lnNumValue, lnDelta
lnNumValue  =  7 
lnAvailable =  10 
lnDelta 	= m.lnAvailable - m.lnNumValue

CREATE CURSOR bigTable (a1 I, a2 I, a3 I, a4 I, a5 I, a6 I, a7 I)

LOCAL lnI1, lnI2, lnI3, lnI4, lnI5, lnI6, lnI7
FOR lnI1 =  1  TO  1  + m.lnDelta
	FOR lnI2 = m.lnI1 +  1  TO  2  + m.lnDelta
		FOR lnI3 = m.lnI2 +  1  TO  3  + m.lnDelta
			FOR lnI4 = m.lnI3 +  1  TO  4  + m.lnDelta
				FOR lnI5 = m.lnI4 +  1  TO  5  + m.lnDelta
					FOR lnI6 = m.lnI5 +  1  TO  6  + m.lnDelta
						FOR lnI7 = m.lnI6 +  1  TO  7  + m.lnDelta
							INSERT INTO bigTable (a1, a2, a3, a4, a5, a6, a7) ;
							VALUES (m.lnI1, m.lnI2, m.lnI3, m.lnI4, m.lnI5, m.lnI6, m.lnI7)
						ENDFOR
					ENDFOR
				ENDFOR
			ENDFOR
		ENDFOR
	ENDFOR
ENDFOR

Получим ВСЕГО 120 вариантов. Ты уверен, что ничего не напутал в условиях?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / for
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]