Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Что такое "ключ" и "селектор ключа"?

Во многих программах встречается понятие ключ.Просветите пожалуйста что это??? Что такое селектор ключа??? Дайте пжалуйста определение или ссылку.
Ответ: Ключ - уникальный идентификатор чего-либо. Служит для поиска/доступа к некоторым данным в коллекции (базе данных). Может быть чем угодно - числом, строкой или объектом.
Вопрос: Реализация игры "шахматы"

Данная шахматная доска - поле размером 8 × 8. Пользователь вводит координаты
фигур, из расчета, что (1, 1) - координата нижнего левого угла (направление движения
белых пешек от единицы до восьмерки, а черных от восьмерки до единицы).
Определить , какая фигура нападает или защищает другую, если
пользователь вводит координаты каждой фигуры. Если пользователь сделает не
корректное ввода данных (например, фигуры находятся за пределами поля или
на одной клетке), выдать соответствующее сообщение.
*
белого короля, белого пешки, черного коня;

Добавлено через 8 минут
Данная шахматная доска - поле размером 8 × 8. Пользователь вводит координаты
фигур, из расчета, что (1, 1) - координата нижнего левого угла (направление движения
белых пешек от единицы до восьмерки, а черных от восьмерки до единицы).
Определить , какая фигура нападает или защищает другую, если
пользователь вводит координаты каждой фигуры. Если пользователь сделает не
корректное ввода данных (например, фигуры находятся за пределами поля или
на одной клетке), выдать соответствующее сообщение.
*
белого короля, белого пешки, черного коня;
При выполнении практической работы необходимо использовать только
линейные и разветвленные вычислительные структуры (использование массивов, циклов,
операторов безусловного перехода и прерывания программы запрещается).
Осуществить ввод необходимых данных, выполнить реализацию алгоритма с
использованием операторов условия, обеспечить вывод полученных результатов

Добавлено через 1 минуту
Пример программы
C#
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
 
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int xk, yk, xp, yp, xf, yf;            
            Console.WriteLine("Имитация трех фигур на поле: король(ч), пешка(ч), дамка(б).");
// Ввод короля на поле                
            Console.WriteLine("Введите координаты короля:");
            Console.Write("хk= ");
            xk = Convert.ToInt32(Console.ReadLine());// ввод и инициализация хk
            Console.Write("yk= ");
            yk = Convert.ToInt32(Console.ReadLine());// ввод и инициализация yk
            if(xk<=0 || xk>=9 || yk<=0 || yk>=9){
                Console.WriteLine("Ошибка! Фигура за полем!");
                return;
            }
// Ввод пешки на поле  
            Console.WriteLine("Введите координаты пешки:");
            Console.Write("хp= ");
            xp = Convert.ToInt32(Console.ReadLine());// ввод и инициализация хp
            Console.Write("yp= ");
            yp = Convert.ToInt32(Console.ReadLine());// ввод и инициализация yp
            if (xp <= 0 || xp >= 8 || yp <= 0 || yp >= 8) // пешка за полем или на неположеном месте?
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                return;
            }
            if (yp == 1)        // пешка стала дамкой дойдя до конца доски?
            {
                Console.WriteLine("Ошибка! Пешка стала дамкой!");
                return;
            }
            if (xp == xk && yp == yk)              // пешка на короле?
            {
                Console.WriteLine("Ошибка! Фигура на фигуре!");
                return;
            }
// Ввод дамки на поле            
            Console.WriteLine("Введите координаты дамки:");
            Console.Write("хf= ");
            xf = Convert.ToInt32(Console.ReadLine());// ввод и инициализация хf   
            Console.Write("yf= ");
            yf = Convert.ToInt32(Console.ReadLine());// ввод и инициализация yf
            if (xf <= 0 || xf >= 9 || yf <= 0 || yf >= 9) // ферзь за полем?
            {
                Console.WriteLine("Ошибка! Фигура за полем!");
                return;
            }
            if ((xf == xk && yf == yk) || (xf==xp && yf==yp) ) // ферзь на другой фигуре?
            {
                Console.WriteLine("Ошибка! Фигура на фигуре!");
                return;
            }
            Console.WriteLine("Фигуры раставлены.");
            Console.WriteLine("Король [{0},{1}], пешка [{2},{3}], дамка [{4},{5}]", xk, yk, xp, yp, xf, yf);
// -------------------------Проверка боя и вывод-----------------------------
            bool boy_korol = false, boy_peshka = false, peshka_Zkorol = false, korol_Zpeshka = false;
// Дамка под боем короля?
            if ((xk+1==xf || xk==xf || xk-1==xf) && (yk - 1 == yf || yk == yf || yk - 1 == yf))
            { 
                Console.WriteLine("Дамка находится под боем короля"); 
            }
           
// Дамка под боем пешки?
            if (yp - 1 == yf && (xp - 1 == xf || xp + 1 == xf))
            {
                Console.WriteLine("Дамка находится под боем пешки");
            }
// Король под боем дамки?            
            if ((xf == xk) || (yf == yk))      // По вертикали и горизонтали
            {
                if (((xk > xp && xk < xf) || (xk < xp && xk > xf)) ||
                    ((yk > yp && yk < yf) || (yk < yp && yk > yf)))
                {
                    korol_Zpeshka = true;  // Король под боем дамки и защищает пешку
                }
                else
                {
                    boy_korol = true; // Король под боем дамки без защиты пешки
                }
            }
            if (Math.Abs(xk - xf) == Math.Abs(yk - yf))       // По диагонялям
            {
                if (Math.Abs(xk - xf) < Math.Abs(xp - xf))
                {
                    korol_Zpeshka = true;// Король под боем дамки и защищает пешку
                }
                else
                {
                    boy_korol = true;                         // Король под боем дамки без защиты пешки
                }
            }
// Пешка под боем дамки?
            if ((xf == xp) || (yf == yp))  // По вертикали и горизонтали
            {
                if (((xp > xk && xp < xf) || (xp < xk && xp > xf)) || 
                    ((yp > yk && yp < yf) || (yp < yk && yp > yf)))
                {
                    peshka_Zkorol = true; // Пешка под боем дамки и защищает короля
                }
                else
                {
                    boy_peshka = true; // Пешка под боем дамки без защиты короля
                }
            }
            if (Math.Abs(xp - xf) == Math.Abs(yp - yf))       // По диагонялям
            {
                if (Math.Abs(xp - xf) < Math.Abs(xk - xf)) 
                {
                    peshka_Zkorol = true;// Пешка под боем дамки и защищает короля
                }else 
                {
                    boy_peshka = true;// Пешка под боем дамки без защиты короля
                }
            }
// Вывод кто под чьим боем
            
            if ((!korol_Zpeshka) && (boy_peshka)) { Console.WriteLine("Пешка находится под боем дамки"); }
            if (peshka_Zkorol) { Console.WriteLine("Пешка находится под боем дамки и защищает короля"); }
 
            if ((!peshka_Zkorol) && (boy_korol)) { Console.WriteLine("Король находится под боем дамки"); }
            if (korol_Zpeshka) { Console.WriteLine("Король находится под боем дамки и защищает пешку"); }
 
            if (!korol_Zpeshka && !boy_peshka && !peshka_Zkorol && !boy_korol) 
            {
                Console.WriteLine("Фигуры не пересекаются"); 
            }
            Console.Read();
        }
    }
}
Ответ: На самом деле, на такой задаче можно научиться оптимизировать количество строк кода. Кстати, и по быстродействию тоже: много условных переходов уменьшает вероятность их предсказания, вследствие чего будет много сбросов конвейера. И если выполнять такой код в длиннющем цикле, это сыграет не последнюю роль в производительности. Впрочем, конечно, маловероятно что при решении именно этой задачи кто-то задумывается об этом...
И второе "на самом деле": задача абсолютно адекватная, для прохождения темы условий. Тут не нужны ни циклы, ни паттерны, ни даже(!!!) знание квантовой механики. Количество входных данных константно, и не очень большое. Для реализации задачи нужен только if и пара математических функций, чтобы уменьшить код, и вместо всех возможных состояний (которых аж C(64,3), и на каждое -- строк по 50 кода проверки. если не ошибаюсь) использовать функцию от координат двух фигур. Если сюда впихать что-то еще, задача только распухнет. Ну а реализация полной мат модели шахматной доски займет тоже несколько больше кода, чем было представлено постами выше.
Поэтому даже на такой простой задаче можно запросто увидеть, как человек думает, и думает ли вообще, собственно. Берет ли чужой код и подгоняет под свою задачу, или делает сам. И, наконец, "умный" ли код он копирует (на такой задаче четко видно: зачастую проще реализовать свой алгоритм, чем подгонять код ТС, ибо он неподгонябелен). Это позволит преподавателю подстроиться под студента и помочь ему в освоении материала

Не по теме:

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


Ну и, в конце концов, повторюсь, задача адекватная, для соответствующей темы. Посмотрите на мой код: разве он огромен? при использовании try-catch можно было бы еще и проверки сделать в одну строку, получилось бы еще в два раза меньше. Ну а для проверки состояний им можно назначить чиселки, а внизу уже выводить сообщения, соответствующие состояниям. Кстати, тоже можно реализовать через условия (хотя, какой-нибудь switch-case был бы читабельнее, в данном случае).
Короче, это по всякому лучше, чем реализовывать в чисто имеративном языке обход списка рекурсией или вычисление факториала через нее же, для прохождения темы "рекурсия" (повторюсь, актуально это там, где в курсе не проходят, что такое "хвостовая рекурсия"), реализация длинных чисел или компиляторов на пхп (опять же, речь об учебном процессе), или, скажем, реализация ООП-подобного синтаксиса в Erlang.
Спасибо за внимание!

Добавлено через 5 минут
Сообщение от int_array
if (xk + 1 == xf&&yk==yf) Console.WriteLine("Конь под боем короля");
* * * * * * if (xk - 1 == xf && yk == yf) Console.WriteLine("Конь под боем короля");
* * * * * * if (yk + 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
* * * * * * if (yk - 1 == yf && xk == xf) Console.WriteLine("Конь под боем короля");
* * * * * * if (xk + 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
* * * * * * if (xk - 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
* * * * * * if (xk - 1 == xf && yk + 1 == yf) Console.WriteLine("Конь под боем короля");
* * * * * * if (xk + 1 == xf && yk - 1 == yf) Console.WriteLine("Конь под боем короля");
if (xp + 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
* * * * * * if (xp - 1 == xf && yp + 1 == yf) Console.WriteLine("Конь под боем пешки");
if (xf - 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf + 1 == xk && yf + 2 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf - 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf - 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf - 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf + 1 == xk && yf - 2 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf + 2 == xk && yf - 1 == yk) Console.WriteLine("Королю шах от коня");
* * * * * * if (xf + 2 == xk && yf + 1 == yk) Console.WriteLine("Королю шах от коня");
if (xf - 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf + 1 == xp && yf + 2 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf - 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf - 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf - 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf + 1 == xp && yf - 2 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf + 2 == xp && yf - 1 == yp) Console.WriteLine("Пешка под боем коня");
* * * * * * if (xf + 2 == xp && yf + 1 == yp) Console.WriteLine("Пешка под боем коня");
а еще почему-то вспомнилось: (точнее, именно )
Вопрос: VS не "понимает" Using System.Web.Hosting

народ хелп.я новичок в asp.net
using System.Web.Hosting;-студия не видит и ругается,а без нее не создам
Код C#
1
 MyExeHost host = (MyExeHost)ApplicationHost.CreateApplicationHost(typeof(MyExeHost), "/", Directory.GetCurrentDirectory());
Добавлено через 8 часов 9 минут
пожалуйста очень нужно

Добавлено через 36 минут
Хостинг ASP.NET в консольном приложении.
вот полный код:
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System; using System.10; using System.Web; using System.Web.Hosting;
public class App {
public static void Main(string[ ] args)
{
if (args.length != 0)
{
// Предметная область AppDomain. обрабатывающая запрос.
MyExeHost host =
(MyExeHost)ApplicatlonHost.CreateApplicatlonHost (typeof(MyExeHost),
Di rectory.GetCurrentDirectory{));
// Обращение к новой области AppDomain. host.ProcessRequest(args[0]);
}
}
1
// наследование от MarshalByRefObject для разрешения удаленных вызовов через // AppDomains.oublic class MyExeHost : MarshalByRefObject {
public vuid ProcessRequest(string page)
{
// Создание запроса исполнителя.
HttpworkerRequest hwr = new SimpleWorkerR<3<iuest(page, null. Console. Out):
// Передача запроса в ASP.NET для обработки.
HttpRuntime.ProcessRequest(hwr):
»
} 
Таким образом, если вы с помощью аргумента командной строки переладите запрос для файла
Код HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Page Language="C#" %>
<html>
<body>
<h1>Hello ASPX!</h1>
<br />
<h2><%= DateTime. Now. ToShortTimeStringO %></h2>
</bocy>
</ntml>
то получите приблизительно такой результат:
<htmi>
<head>
</head>
<body>
<H1>Hello ASPX!</h1>
<Or />
<h2>09:06</h2>
</nody>
</htmi>
Добавлено через 2 минуты
создал консольное приложение c#,код написал,но не хочет работать.
ругается на using System.Web.Hosting; и на MyExeHost host
потом решил создать пустое приложение в asp.net результат тот же,ток ругается на MyExeHost host

Добавлено через 1 час 44 минуты
народ мне нужно исправлять код.
я не знаю где его запускать
может в студии проблема?у меня 2012.
Ответ: archar, берем вот такой C# код:
Кликните здесь для просмотра всего текста
Код C#
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
using System;
using System.IO;
using System.Web;
using System.Web.Hosting;
 
namespace cs_ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                MyExeHost host = (MyExeHost)ApplicationHost.CreateApplicationHost(typeof (MyExeHost), "/", Directory.GetCurrentDirectory());
                host.ProcessRequest(args[0]);
            }
        }
    }
 
    public class MyExeHost : MarshalByRefObject
    {
        public void ProcessRequest(string page)
        {
            HttpWorkerRequest hwr = new SimpleWorkerRequest(page, null, Console.Out);
            HttpRuntime.ProcessRequest(hwr);
        }
    }
}

плюс такой файл test.aspx:
Кликните здесь для просмотра всего текста
Код HTML5
1
2
3
4
5
6
7
8
<%@ Page Language="C#" %>
<html>
<body>
<h1>Hello ASPX!</h1>
<br />
<h2><%= DateTime.Now.ToShortTimeString() %></h2>
</body>
</html>

Компилируем C# код. Создаем рядом с exe папку bin. Копируем туда свой exe. То есть у нас будет примерно такая структура каталогов:
Код Code
1
2
\bin\Debug\ConsoleApplication.exe
bin\Debug\bin\ConsoleApplication.exe
Запускаем первый exe с такой командной строкой:
Код Code
1
ConsoleApplication.exe test.aspx
И получаем искомый результат.
Вопрос: с миру по нитке - "бедному" рубаха

Добрый день, дорогие форумчане, можете подсказать как сделать следующее для моего сайта(в нем сейчас просто базовая верстка-html и все)
Хотел усовершенствовать сайт добавив пару функций(полагаю, они на php и в некоторых случая js(его знаю меньше php))
Пожалуйста расскажите, как сделать следующие функции(может кто-то знает, отпишитесь пожалуйста, очень интересно)
1) Узнать город по ip клиента и написать его, например "привет Москва"


2) Сделать закрытую функцию проверки оплаты(сам пример у меня есть, как сделать, чтобы проверка была не чаще чем 3 раза в 5 мин и делалась приватно(логин пароль моего кошелька не был на странице) вопрос, кончено, ламерский, но простите, не моя среда разработки, в ней недавно... (САМ КОД ПРОВЕРКИ КИВИ-БАЛАНСА есть);


3)Всплывающее окошечко с Именем из вк(такие банеры я видел, например, я авторизован в вк так-то и мне пишут: "Генадий Астакович, не пропустите шанс...) и у меня появляется банер "привет такой-то, вам нужна помощь?"



4)блеклист - с баном по ip или просто прверка на айпи - перевод на другую страницу, если айпи равняется хоть одному из базы бана
=============================================================================
спасибо за внимание, надеюсь найти ответы, хотя бы на некоторые вопросы "как это сделать более рационально?"
извините за недостаток знаний в этой теме, пишу в другой среде.... Если нужны дополнительные сферы (думаю, в вопросе 3 нужен JS) и тд. то не серчайте, напишите, как думаете)
PS верстка есть, нужно лишь узнать как сделать такие функции
Ответ:
Сообщение от Jewbacabra
Сообщение от 1337trix
Сделать закрытую функцию проверки оплаты
не понял
имею в иду такое - клиент заходит на сайт, нажимает кнопку "проверить оплату" и на сайте начинается заданное действие, чтобы оно шло не через клиента, а через мой сайт, чтоб не мог отсниффить или найти в ик
Вопрос: Как проверить строку в "поле" на уникальность при добавлении строки в БД?

Доброго времени суток!
Знает ли кто-нибудь, как правильно составить команду SQL, которая бы проверяла строку на уникальность и в случае, если такая строка уже имелась в "поле", то записать вместо неё новую.
Пробовал такое:
Код C#
1
2
string cmd = string.Format("DROP (SELECT TestName FROM Test) If EXISTS(SELECT TestName, count(TestName) From Test Group By TestName Having count(TestName)>1 );"+
                "Insert Into 'Test' (TestName) Value ({0}) ", str)
Эта команда разумеется не работает.
Может кто сталкивался с подобной проблемой и знает, на каких источниках можно поискать ответ, на подобный вопрос?
Ответ: Никто не хочет делиться инфой Поэтому, если кому интересно я нашёл следующее:
1) Игнорирует данные, если такие имеются
Код C#
1
string cmd = string.Format("INSERT or IGNORE INTO 'Table1' (Column1) VALUES ('Привет')");
2) Обновляет данные, если такие имеются
Код C#
1
string cmd = string.Format("INSERT or REPLACE INTO 'Table1' (Column1) VALUES ('Привет')");
Надеюсь кому-нибудь пригодится.
Нашёл ответ на вопрос в книжке "Неполное Руководство по SQLite для пользователей Windows".

Думаю на этом тему можно считать закрытой.
Вопрос: Из "нижнего" полигона надо вырезать всё, что перекрывается "верхним" полигоном

Задача такая. Есть полигон с дырками в векторном виде. Поверх него нарисован другой полигон с дырками, тоже в векторном виде. Из "нижнего" полигона надо вырезать всё, что перекрывается "верхним" полигоном. Ясно, что при этом "нижний" полигон может превратиться в несколько (возможно в сотни) полигонов, некоторые из которых могут быть с дырками.

то есть, что-то вроде:

Код C#
1
public static Polygon[] Intersect(Polygon underlied, Polygon overlapped) // возвращает останки "нижнего" полигона.
Я в курсе, что это классическая задача и можно нагуглить тонны кода разной степени глючности. Может быть у кого-то был такой опыт? Хотелось бы ссылки на хорошие алгоритмы, неважно на каком языке. Или даже просто на грамотное описание такого алгоритма.

Производительность не слишком критична. Пока есть идея свести задачу к нескольким операциям пересечения полигонов без дырок. Т.е. пересекать внешние границы и дырки отдельно. Ясно так же, что тут можно огрести проблем с округлением. Например, получить рёбра микроскопической длинны, которые при каком-нибудь преобразовании координат или при экспорте в какой-нибудь дебильный формат будут сливаться в точку.
Ответ: Ну понятно, что полигоны. Суть "ломаной" в том, что не эллипсы, с центром и радиусом, прямоугольники и не прочее такое. Полигон там в виде ломаной. Правда, не очень понял, как получать в числовом виде, не настолько туда влезал, но в текстовом получается.
Вопрос: Можно ли "подменить" тип данных в процессе выполнения?

Добрый день!

Есть у меня такой кусок кода, описывающего класс.

Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef vector<double> complex;
typedef map<string, double> datablock;
typedef map<string, complex> acdatablock;
 
class PsfFileReader {
public:
  PsfFileReader(string S1);
  datablock getDataBlock();
...
  ifstream File;
 
private:
  datablock readDataBlock();
  string FileName;
...
  datablock DataBlock;
  bool DbEmpty;
  datablock prevDataBlock;
  bool PrevDbEmpty;
  bool ReadFile;
}; // PsfFileReader
Определено 2 типа: datablock и acdatablock.
Какой из 2-х типов будет использоваться, становится известно только в момент работы конструктора.
Разница между datablock и acdatablock - в том, что первый содержит действительные числа (double), а второй - комплексные (как известно, для комплексного числа нужна пара double). Я решил класть эту пару в вектор.

Вопрос - надо ли класть рядом acdatablock и писать второй комплект функций-членов, с ним работающих, или можно делать подмену по ходу дела, с помощью шаблонов, например?
Ответ:
Сообщение от Ilot
А не проще ли везде пользоваться классом map<string, complex> ведь double конвертируем в complex.
Да, действительно. Можно использовать std::complex и свой тип с векторами не городить.
Возможно, я потеряю в эффективности, если везде свои double заменю на complex.
То есть, вы предлагаете вместо double иметь (real, 0) и тогда у меня будет комплексная арифметика, которая даст такой же результат?
Хм, я даже не думал о таком.
Цель моей программы - сравнение последовательности чисел и вывод "совпадают - не совпадают" и "насколько не совпадают". Я планировал сравнивать по отдельности действительную и мнимую части.

А если вычитать по правилам комплексной арифметики... об этом надо подумать, смогу ли я получить то, что надо.
Вопрос: Как "запомнить" уже имеющийся текст в RichTextBox и проверять изменился ли он

Привет всем, у меня появилась такая проблема:
Я подсвечиваю слова в RichTextBox и если таких слов много, то у меня начинает подвисать RichTextBox.
Подсвечиваю я с помощью регулярных выражений и события TextChanged.
Я подумал как можно решить проблему и надумал такое:
Сначала сделать подсветку текста, потом запомнить уже подсвеченный текст и при следующей подсветке подсвечивать только новый текст, а старый не трогать, т.к. он уже подсвечен.
Никак не могу придумать, как такое сделать. Или если я не правильно придумал, то подскажите как можно реализовать по другому.

Заранее спасибо.
Ответ: Рядовой, алгоритм такой: я выделяю весь текст, делаю его черным цветом, потом перебираю массив нужных мне слов и если есть совпадения выделяю

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var currentSelStart = richTextBox1.SelectionStart;//Потом понадобится для выделения строки, на которой находились
    var currentSelLength = richTextBox1.SelectionLength;//Все время 0
 
    richTextBox1.SelectAll();
    richTextBox1.SelectionColor = System.Drawing.SystemColors.WindowText;
    foreach(string str in text)
    {
       var Syntax = Regex.Matches(richTextBox1.Text, @"\b" + str + @"\b");
       foreach (var syntax in Syntax.Cast<Match>())
       {
           richTextBox1.Select(syntax.Index, syntax.Length);
           richTextBox1.SelectionColor = System.Drawing.Color.Blue;
       }
    }
    richTextBox1.Select(currentSelStart, currentSelLength);
    richTextBox1.SelectionColor = System.Drawing.SystemColors.WindowText;
Я знаю, что это не лучший вариант, но лучше я не смог найти.
Вопрос: Как "уговорить" Visual Basic 6.0 нарисовать такую Картинку?

Здравствуйте!
Прошу помощи. Подскажите, пожалуйста, как "уговорить" Visual Basic 6.0 нарисовать такую Картинку, ниже. Какие изменения надо внести в исходный код?

Сам код появился в 2007 году. Возможно, в ту пору не хватало умельцев, чтобы дать сюжету Вторую Жизнь.
Исходный код
Кликните здесь для просмотра всего текста
Код Visual Basic
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   3030
   ClientLeft      =   120
   ClientTop       =   450
   ClientWidth     =   4560
   LinkTopic       =   "Form1"
   ScaleHeight     =   3030
   ScaleWidth      =   4560
   StartUpPosition =   3  'Windows Default
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
 
Option Base 0
Dim Chislo_periodov As Single
 
Sub TwelveNodes()
If ThisDocument.Shapes.Count > 0 Then ThisDocument.Shapes(1).Delete 'удаление фигуры 1
If ThisDocument.Shapes.Count > 0 Then ThisDocument.Shapes(1).Delete 'удаление фигуры 1 (оставшейся)
' Макрос записан 30.06.2007 User; запуск в документе Word: альт-D.
Const pi = 3.1415926535898
Dim k As Integer: k = 49  'количество приближающих дугу циклоиды сегментов
If k < 1 Then Exit Sub
Dim ShiftX: ShiftX = 50             'сдвиг (точек) вправо от угла листа
Dim ShiftY: ShiftY = 10             'сдвиг (точек) вниз от угла листа
Dim fi As Single                    'полярная коодината (радиан)
Dim A As Integer                    'радиус неподвижного круга
Dim x() As Single, y() As Single    'Декартовы коорд. точек (x: вправо, y: вниз от угла)
Dim Nn As Single, N As Single, nS As String, begpoint, finpoint
 
If Chislo_periodov <= 0 Then Chislo_periodov = 32 '31.6667
nS = InputBox(vbLf & "Число периодов:", "Например: 42", Chislo_periodov)
If IsNumeric(nS) = False Then Exit Sub
N = CSng(nS) 'Val(nS)
    If N > 333 Then _
    If MsgBox(N & " требует долгого ожидания, боитесь?", vbYesNo) = vbYes Then Exit Sub
Chislo_periodov = N
If N < 0.01 Then Chislo_periodov = 55: Exit Sub
                            ReDim x(k * N - 1)
                            ReDim y(k * N - 1)
fi = 8 * pi / N / k
A = 43 * N
'A = 31 * N
 
For Nn = 0 To k * N - 1
x(Nn) = (A * Cos(Nn * fi) + A * Sin(A * Nn * fi)) / 3 + ShiftX + (1 - Cos(Nn * fi / 6)) * Nn * Cos(Nn * fi)
y(Nn) = (A * Sin(Nn * fi) - A * Cos(A * Nn * fi)) / 3 + ShiftY + (1 - Cos(Nn * fi / 6)) * Nn * Sin(Nn * fi)
'    If Nn = 0 Then InputBox vbCr & vbCr & vbCr & "начальная точка:", "(X; Y)", x(0) & ",  " & y(0)
Next Nn
 
With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, x(0), y(0))
    For Nn = 1 To k * N - 1
    .AddNodes msoSegmentCurve, msoEditingAuto, x(Nn), y(Nn)
    Next Nn
'    .AddNodes msoSegmentCurve, msoEditingAuto, x(0), y(0)
    .ConvertToShape.Select
End With
 
begpoint = Array(x(0), y(0))                'начало полилинии
finpoint = Array(x(k * N - 1), y(k * N - 1)) 'конец полилинии
 
With ActiveDocument.Shapes
    .AddPolyline Array(begpoint, finpoint)
    .SelectAll
'    .Range(.Item(1), .Item(2)).Group 'группировка фигур 1 и 2
    Selection.ShapeRange.Group.Select 'группировка выделенных фигур
End With
'
With Selection.ShapeRange
    .Width = 240
    .Height = 240
    .Left = CentimetersToPoints(0)
    .Top = CentimetersToPoints(0)
End With
        Chislo_periodov = Chislo_periodov - 1.5
        ActiveDocument.UndoClear    'это очистка списка откатов (он чудовищно велик)
End Sub
Ответ: Sasha_Smirnov!
Вот опишите, пожалуйста, как случай столкновения теории и практики на конкретном примере — ниже.
Много размышляю, например
Почему такой спрос (!) — за два дня 918 (!) просмотров, ни одного ответа? Сама задача ерундовая. В чём же дело?
Ясно, по картинке на тему выйти нельзя, остается только по тексту. Люди хотят быть умными?
Наверно всё-таки задача с какой-то проходящей олимпиады или экзаменов, даже и не знаю толком — что ещё можно предположить. В интернете ничего не встретил
Вопрос: "Недостижимые" метки в комбинации goto и try-finally

Здравствуйте.
Стандарт языка ECMA-334 описывает одну интересную особенность работы перехода по меткам goto: если оператор goto, находящийся в блоке try, указывает на метку, находящуюся вне блока try-catch-finally, то при переходе по метке будут вызваны все блоки finally, относящиеся к этому блоку try

15.9.3 The goto statement
...
A goto statement is executed as follows:
  • If the goto statement exits one or more try blocks with associated finally blocks, control is initially transferred to the finally block of the innermost try statement. When and if control reaches the end point of a finally block, control is transferred to the finally block of the next enclosing try statement. This process is repeated until the finally blocks of all intervening try statements have been executed.
  • Control is transferred to the target of the goto statement.
Because a goto statement unconditionally transfers control elsewhere, the end point of a goto statement is never reachable.


И код, описывающий эту ситуацию, работает без замечаний
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
 
namespace ConsoleApp
{
    class MainClass
    {
        public static void Main(string[] args) {
            try {
                goto outLabel;
            }
            catch {
                Console.WriteLine("catch executed.");
            }
            finally {
                Console.WriteLine("finally executed.");
            }
            outLabel: Console.WriteLine("out of try-finally block.");
        }
    }
}
Code
finally executed.
out of try-finally block.
Однако, если добавить обработку исключения, то компилятор заметит, что метка является недостижимой, однако таковой она не является
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
 
namespace ConsoleApp
{
    class MainClass
    {
        public static void Main(string[] args) {
            try {
                throw new NullReferenceException();
                goto outLabel;
            }
            catch {
                Console.WriteLine("catch executed.");
            }
            finally {
                Console.WriteLine("finally executed.");
            }
            outLabel: Console.WriteLine("out of try-finally block.");
        }
    }
}
Code
catch executed.
finally executed.
out of try-finally block.
Компилятор Mono 4.2.1.0 сделает два замечания
Program.cs(10,5): warning CS0162: Unreachable code detected
Program.cs(18,4): warning CS0164: This label has not been referenced
Майкрософтовский компилятор (4.0) сделает только одно (первое из них).

Почему компиляторы генерируют такие warning'и?
Ответ:
Сообщение от FIL
код доходит "самотеком" после завершения блока try-finally, а не переходит туда по метке.
А ведь и правда. Даже если goto закомментировать, метка выполнится. Не знал, честно говоря, что такое возможно.
В таком случае код до goto действительно не доходит. В IL коде нет инструкции о переходе (br), хотя она появляется даже если включить все оптимизации в другом коде. Всё сходится.
FIL, спасибо. Воистину говорят: "самое простое решение есть самое правильное".