Второй не совсем такой же, как первый. Я прочитал
for i;= 1 to n do
из-за с 1 по n как
for i = 1; i <= n; i += 1
В каждом j-цикле k начинается с j. Таким образом, k начинается с 1 только в первом j-цикле каждого i-цикла.
Хотя первый алгоритм просто представляется в виде строк и столбцов, второй - нет.
function a1(n) {
console.clear();
console.log('algorithm 1');
console.log('n = ' + n);
console.log('x | y | z');
var x, y, z = 0;
var tr, td;
for (x = 1; x <= n; x += 1) {
tr = document.createElement('tr');
for (y = 1; y <= n; y++) {
td = document.createElement('td');
z = z + 1;
console.log(x + ' | ' + y + ' | ' + z);
tr.appendChild(td);
td.innerHTML = z;
}
tbl1.appendChild(tr);
}
}
function a2(n) {
var i, j, k, r = 0;
console.clear();
console.log('algorithm 2');
console.log('n = ' + n);
console.log('i | j | k |i+j| r')
for (i = 1; i <= n; i += 1) {
for (j = 1; j <= i; j += 1) {
for (k = j; k <= (i + j); k += 1) {
r = r + 1;
console.log(i+ ' | ' + j + ' | ' + k + ' | ' + (i+j) + ' | ' + r);
}
}
}
return (r);
}
// output table 1 handle
var tbl1 = document.getElementById('output1');
// Event handlers for buttons a1 and a2
document.getElementById("a1_start").addEventListener("click", function(){
a1(5);
});
document.getElementById("a2_start").addEventListener("click", function(){
console.log('returns ' + a2(4));
});
td {
text-align: center;
border: solid 1px #000;
}
<button id="a1_start">
start algorithm 1
</button>
<button id="a2_start">
start algorithm 2
</button>
<table id="output1">
</table>
Попробуйте событие
webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser.Document.GetElementById("product").SetAttribute("value", product);
webBrowser.Document.GetElementById("version").SetAttribute("value", version);
webBrowser.Document.GetElementById("commit").InvokeMember("click");
}
DocumentCompleted Проверьте проект WatiN:
Вдохновленный разработка Watir WatiN, запущенного в декабре 2005 для создания подобного вида веб-приложения, Тестирующего возможный для языков .NET. С тех пор WatiN превратился в простую в использовании, многофункциональную и стабильную платформу. WatiN разрабатывается в C# и стремится приносить Вам простой способ автоматизировать Ваши тесты с использованием Internet Explorer и FireFox .NET...
код yuna и bnl не сработал в приведенном ниже примере;
пример с ошибкой:
1-й ожидает завершения. Но 2-й с invokemember ("submit" ") не сделал. вызвать работы. но ReadyState.Complete действует как Завершено до того, как ДЕЙСТВИТЕЛЬНО завершено:
wb.Navigate(url);
while(wb.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
MessageBox.Show("ok this waits Complete");
//navigates to new page
wb.Document.GetElementById("formId").InvokeMember("submit");
while(wb.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
MessageBox.Show("webBrowser havent navigated yet. it gave me previous page's html.");
var html = wb.Document.GetElementsByTagName("HTML")[0].OuterHtml;
как исправить эту нежелательную ситуацию:
использование
public myForm1 {
myForm1_load() { }
// func to make browser wait is inside the Extended class More tidy.
WebBrowserEX wbEX = new WebBrowserEX();
button1_click(){
wbEX.Navigate("site1.com");
wbEX.waitWebBrowserToComplete(wb);
wbEX.Document.GetElementById("input1").SetAttribute("Value", "hello");
//submit does navigation
wbEX.Document.GetElementById("formid").InvokeMember("submit");
wbEX.waitWebBrowserToComplete(wb);
// this actually waits for document Compelete. worked for me.
var processedHtml = wbEX.Document.GetElementsByTagName("HTML")[0].OuterHtml;
var rawHtml = wbEX.DocumentText;
}
}
//put this extended class in your code.
//(ie right below form class, or seperate cs file doesnt matter)
public class WebBrowserEX : WebBrowser
{
//ctor
WebBrowserEX()
{
//wired aumatically here. we dont need to worry our sweet brain.
this.DocumentCompleted += (o, e) => { webbrowserDocumentCompleted = true;};
}
//instead of checking readState, get state from DocumentCompleted Event
// via bool value
bool webbrowserDocumentCompleted = false;
public void waitWebBrowserToComplete()
{
while (!webbrowserDocumentCompleted )
{ Application.DoEvents(); }
webbrowserDocumentCompleted = false;
}
}
Делайте попытку Селена ( http://seleniumhq.org ) или WatiN ( http://watin.sourceforge.net ) для сохранения себя некоторая работа.
Если Вы используете InternetExplorer. COM-объект приложения, проверьте свойство ReadyState на значение 4.
Я думаю , событие DocumentCompleted управления WebBrowser должно получить Вас, куда необходимо пойти.
Принятие элемента "фиксации" представляет стандартную кнопку отправки Формы тогда, можно присоединить обработчик событий к событию WebBrowsers Navigated.
Этот код мне очень помог. Возможно, это может быть и для вас
wb.Navigate(url);
while(wb.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
MessageBox.Show("Loaded");