Кто может рассказать о Гампах?

Anything and all.

Moderators: Murderator+, Murderator

CFA
Posts: 64
Joined: 2006-02-03 06:53:36

Post by CFA »

Destruction wrote:

Code: Select all

if (30<x) and (x<40)

Не вижу логики, будет верно если x < 30, зачем тогда двойное условие? Возможно имелось в виду так:

Code: Select all

if (30>x) and (x<40)


30<x == x>30
x<40 == x<40 => x> 30 and x<40
CRazych
Posts: 24
Joined: 2006-02-07 15:26:45

Post by CRazych »

Вы на условие не сматрите это для примера!

Просто мне нужно знать если способ просто упрастить конструкцию.

Я просто подозреваю, что скорость работы этого скрипта будет давольно не быстрая!
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

CRazych wrote:Вы на условие не сматрите это для примера!

Просто мне нужно знать если способ просто упрастить конструкцию.

Я просто подозреваю, что скорость работы этого скрипта будет давольно не быстрая!

Условия обрабатываются достаточно быстро.

Сократить можно - загнать всяку нечисть в массив и пустить циклом.
CRazych
Posts: 24
Joined: 2006-02-07 15:26:45

Post by CRazych »

Чо то у мен мазгов нехватает.
Помагите плиз логикой. Как обработать строку
"coordinates 71o 53' S 83o 15' E"

Нужно вытащить координыты.
Просблема в том что они плавают тоесь нельзя просто указывать номер символа в строке.
Допустим следущая строка.
"location 171o 53' S 183o 15' E"

Ктонить может подсказать?
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

ну и что чт оплавает?
Вырезаешь статическую часть "location "
дальше на чинаешь в строчке искать пробелы, выризать МИДом

А вообще была такая хорошая функция scanint описание ее правда так и не попадалось на глаза;)
CRazych
Posts: 24
Joined: 2006-02-07 15:26:45

Post by CRazych »

Как это понять вырезаешь?
Каким образом? (пример приведи)
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

CRazych wrote:всё уже разобрался всё проще некуда )


Есть куча команд для работы со строчками... основные для тебя тут будет Left(str, n) Right(str, n) Mid(str, p, n)
первая возврашает подстроку на чиная с левого края длинной Н
Вторая тоже самая только справа...
третья возврашает подстрокку на чиная с позиции П и длиной Н
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

CRazych wrote:Как это понять вырезаешь?
Каким образом? (пример приведи)


Вот тебе удобная для таких случаев функция:

Code: Select all

Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
   VAR tmpst, i, dlin, kol = 0, start = 0
   dlin = len( st )
   For i=0 To dlin - 1
      If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
         kol = kol + 1
         If kol == nom Then
            ; это первый пробел после нужного нам слова
            tmpst = mid( st, start, i - start )
            return tmpst
         Else
            While mid( st, i, 1 ) == ' '
               i = i + 1
            Wend
            If kol == nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
endsub
CRazych
Posts: 24
Joined: 2006-02-07 15:26:45

Post by CRazych »

Для нюба можно каждую строку с коминтарием?
Я просто ниразу в сваей жизне не использвал такого рода операторы.
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

чего тут не понятного? вот ты как определяешь зрительно что в строчке есть слова? правельно буковки и пустоты... так вот у этой пустоты есть имя... "ПРОБЕЛ" как не страно но у пустоты есть номер...
так вот что бы делить строчки достаточно искать эти пустоты... и найдя определять границы...
Самы простой алгоритм это с 2-мя переменными посиции начала и конца (начало_слова, конец_слова (числовые переменные)).

для простоты можно в конец строки добавить пробел...
изначально:
строка = строка + пробел
начало_слова = 0
конец_слова = 0
ищем пробел
нашли (текущая_позиция)
начало_слова = конец_слова
конец_слова = текущая_позиция

после первого прохода мы уже можем выделить первое слово...
и так далее...
CRazych
Posts: 24
Joined: 2006-02-07 15:26:45

Post by CRazych »

Давай по примерам, что б я доконца разобрался.
Допустим есть переменная num=abc1 abc2 abc3

Задание вывести в отдельную переменную "z" abc2

Code: Select all

sub main()
var num,z
num=abc1 abc2 abc3
нужно продолжить код дальше


Первые вопросы:
Что делают функции len( ) mid( )



Я сильно извеняюсь за глыпые вопросы, но больше мне их задать негде.

И надеюсь с вашей помащью у меня ченить получится.
Заранее спасибо!
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Исходное:
строка = 'abc1 abc2 abc3'
номер_слова = 3 (номер слова, которое нам надо выделить из строки)
z = 0

Как искать пробел?
в инжекте строки это массив символов, по этому кним можно обращаться как к масиву.
строках[0] = 'a' строка[1] = 'b'
Следовательно достаточно обращатся к элементам массива, что бы найти пробел.

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

Code: Select all

sub GetWord(строка, номер_слова)
var текущая_позиция = 0, начало_слова = 0, конец_слова = 0
   строка = строка + ' '
   while номер_слова <> 0
      if строка[текущая_позиция] == ' ' then
         номер_слова = номер_слова - 1
         начало_слова = конец_слова
         конец_слова = текущая_позиция
      end if
      текущая_позиция = текущая_позиция + 1
   wend
   return Mid(строка, начало_слова, конец_слова - начало_слова)
end sub
z=val(GetWord('abc1 abc2 abc3', 3))
CRazych
Posts: 24
Joined: 2006-02-07 15:26:45

Post by CRazych »

<> что это означает?
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

CRazych wrote:<> что это означает?


<> - означает "не равно"
Post Reply