Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SKRESHIVANIYA / 22 сообщений из 22, страница 1 из 1
02.06.2004, 16:20
    #32545094
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
POMOQITE POJALUSTA! U MENYA TAKOY VOPROS.

Yest 1 polya :A , 4 zapis.

A
12345
QAZWS
TYUIO
1QAZ2
Nado chto sluchaynim obrazam po para vzyat ix, dopustim:

12345
1qaz2


qazws
tyuio

dlya 1-y para dopustim k=2, dlya 2-ya para k=4 (k-toje sluchaynoe chislo)

12 345
1q az2


qazw s
tyui o


rezultat doljen bit takoy:
12az2
1q345

qazwo
tyuis
...
Рейтинг: 0 / 0
02.06.2004, 16:52
    #32545156
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Так устроит?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
* Проиндексировать по случайному числу
=rand(- 1 )
index on str(rand()* 1000000000 , 9 , 0 ) to rnd.idx
* Сканом пройтись и взять значения полей попарно
i= 0 
scan all
  ?pole
  i=mod(i+ 1 , 2 )
  if i= 1 
    ? '---'
  endif
endscan
...
Рейтинг: 0 / 0
02.06.2004, 17:07
    #32545199
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Naccet 1-y casti voprosa ponyal (po parno vzyat), a kak nachet 2-y casti:
.....
dlya 1-y para dopustim k=2, dlya 2-ya para k=4 (k-toje sluchaynoe chislo)

12 345
1q az2


qazw s
tyui o


rezultat doljen bit takoy:
12az2
1q345

qazwo
tyuis
...
Рейтинг: 0 / 0
02.06.2004, 17:19
    #32545222
Раз (1)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Что-то вроде
Код: plaintext
1.
2.
3.
lcBufferString = lcString1
lcString1 = STUFF(lcString1,  0 , k, LEFT(lcString2, k))
lcString2 = STUFF(lcString2,  0 , k, LEFT(lcBufferString, k))
...
Рейтинг: 0 / 0
03.06.2004, 09:41
    #32545882
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Naccet 1-y casti voprosa (po parno vzyat) YESHYO KAKIE TO VARIANTI YEST?
...
Рейтинг: 0 / 0
03.06.2004, 09:54
    #32545902
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Вторая часть изложена не очень ясно. Что это за случайное K?
Что с ним делают? В каком диапазоне у K значения?
...
Рейтинг: 0 / 0
03.06.2004, 10:08
    #32545932
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Diapazon K zavisit ot dlina poley. dopustim u nas :k=[1-5].
*************
A
12345
QAZWS
TYUIO
1QAZ2
*****
no eto ne problema ,seycas eto k ya moqu slucayno vzyat , no eti poley po parno ne moqu vzyat. Kolocestvo zapisey moqut bit i bolshe 4.
...
Рейтинг: 0 / 0
03.06.2004, 11:46
    #32546215
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
А, понял - нужно у пар поменять местами случайное количество символов с хвоста.

Модифицируем скрипт
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
* Проиндексировать по случайному числу
=rand(- 1 )
index on str(rand()* 1000000000 , 9 , 0 ) to rnd.idx
* Далее берем попарно и меняем хвосты в цикле
prvalue=''
i= 1 
k=reccount()
r= 0 
l=len(pole)
go top
do while i* 2 <=k
  r=int(rand()*l)+ 1 
  prvalue=pole
  skip  1 
  ?left(prvalue,r)+right(pole,l-r)
  ?left(pole,r)+right(prvalue,l-r)
  ?'---'
  skip1
  i=i+ 1 
enddo
Так?
...
Рейтинг: 0 / 0
03.06.2004, 12:36
    #32546377
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Da tak. NO u menya opyat pochemu to v 1-y pare vsye kak nado, a 2-m net. Mojet ya chto to ne tak delayu?
...
Рейтинг: 0 / 0
03.06.2004, 12:44
    #32546392
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Опечатка -

skip1 надо заменить на
skip 1
...
Рейтинг: 0 / 0
03.06.2004, 13:10
    #32546464
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Nado chtobi vzyat tak chto zapisi ucastvovavshix na 1-m pare ne uchstvovali na ostalnix i t.d. Pari DALJNI BIT UNIKALNI.
A vashim primere pomeomu ne tak
...
Рейтинг: 0 / 0
03.06.2004, 13:21
    #32546488
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Почему же? Установив индекс по случайному числу, мы потом проходим по записям сверху вниз (skip-ами или же, как в первом примере, scan-ом).
Это достаточная гарантия того, что запись, обработанная один раз, вторично обработана не будет. Более того, второй пример учитывает, что число записей может быть нечетным. Лишняя одна запись не будет обработана.
...
Рейтинг: 0 / 0
03.06.2004, 13:29
    #32546504
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Ya toje tak dumal. No u menya pochemu to ne tak
...
Рейтинг: 0 / 0
03.06.2004, 13:36
    #32546527
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Ya seycas zametil chto, yesli sortirovat po kakomu to pole poluchayetsya tak kak mne nado. A sortirovat po sluchaynomu cislo ne moqu.
...
Рейтинг: 0 / 0
03.06.2004, 13:39
    #32546534
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Не вижу других ошибок.

1. Может, в нескольких записях строки одинаковые, а так не надо?
Тогда надо:
Код: plaintext
1.
2.
3.
select distinct a from mytable into cursor mycursor
select mycursor
index on str(rand()* 1000000000 , 9 , 0 ) to rnd.idx
...

2. С отладочными целями можно выводить на экран перед каждым skip'ом
Код: plaintext
?recno() 
- что позволит убедиться в том, что записи разные.

3. Да, и если имя поля A, то, конечно, надо везде где у меня написано "pole" написать "A"
...
Рейтинг: 0 / 0
03.06.2004, 13:44
    #32546553
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Не понимаю, почему индекс не создается - в принципе, должен.
Можно добавить в таблицу второе поле B и сделать:

Код: plaintext
1.
replace all b with str(rand()* 1000000000 , 9 , 0 )
index on b to rnd.idx

вместо

Код: plaintext
index on str(rand()* 1000000000 , 9 , 0 ) to rnd.idx
...
Рейтинг: 0 / 0
03.06.2004, 13:48
    #32546559
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Ну или так:

Код: plaintext
index on str(rand()* 1000000000 , 9 , 0 )+A to rnd.idx

;-)
...
Рейтинг: 0 / 0
03.06.2004, 13:56
    #32546586
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Posmotrite pojalusta, v primere. Cto tut ne tak?
...
Рейтинг: 0 / 0
03.06.2004, 14:29
    #32546694
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
2-ya polya toje ne pamoqla. Neznayu pochemu?!
...
Рейтинг: 0 / 0
03.06.2004, 14:43
    #32546766
TF
TF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Net 2-ya pole pamoqla, SPASIBO Urri!
...
Рейтинг: 0 / 0
03.06.2004, 14:43
    #32546767
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Попробуй так:

Код: 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.
* Это запускается один раз для создания индекса
USE AL
=rand(- 1 )
index on str(rand()* 1000000000 , 9 , 0 ) to rnd.idx

* Основной цикл
CLEAR
LOCAL lcString1, lcString2, lcStrin3, lcString4, lnPoz
STORE '' TO lcString1, lcString2 
select AL
SET ORDER TO rnd
GO TOP
SCAN
	IF EMPTY(m.lcString1)
		lcString1 = AL.AS1
		LOOP
	ENDIF
	lcString2 = AL.AS1
	=rand(- 1 )
	lnPoz = int(rand()*LEN(AL.AS1))+ 1 
	lcString3 = LEFT(m.lcString1,m.lnPoz)+SubStr(m.lcString2,m.lnPoz+ 1 )
	lcString4 = LEFT(m.lcString2,m.lnPoz)+SubStr(m.lcString1,m.lnPoz+ 1 )
	?m.lcString1,' -> ',m.lcString3
	?m.lcString2,' -> ',m.lcString4
	?'-----------------------------'
	
	STORE '' TO lcString1, lcString2 
ENDSCAN

В принципе, можно и без индекса. Но в этом случае нужна будет временная таблица (или массив) для хранения уже использованных записей, что по сути то же самое
...
Рейтинг: 0 / 0
03.06.2004, 15:12
    #32546861
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SKRESHIVANIYA
Судя по всему, перемещение по записям вызывает переоценку построенного индекса и его перестройку (сравниваемый-то RAND() теперь другой!). Поэтому существует возможность повторного попадания записи в scan.

Можно еще, наверное, так:

select a, int(rand()*1000000000) as b ;
from mytable ;
into cursor mycursor ;
order by 2

scan
...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SKRESHIVANIYA / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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