все так и было
Не можешь срать - не мучай жопу
Дима, блять!
большая часть пользователей пакета MS Office (применительно к Word и Excel) не используют больше 10% функционала. про VBS в экселе я вообще молчу.
Ну VBS крайне мощный и годный инструмент, еще бы он в паре мест работал в рамках логики человеков, а не левой пятки одного-лишь создателя, цены-б ему не было.
Может VBA имеется в виду? Вообще мне нравится эксель тем, что можно в код прикрутить все что угодно (имею в виду работу с SQL или качнуть страницу, распарсить и нужные данные внести в лист или каталог каких-то файлов) и формочки достаточно легко делать. Если какая-то мелкая контора, можно вообще на коленке слепить морду с базовым функционалом бухгалтерии и не нужно 1с.
понятно что есть более толковые инструменты, но для VBA достаточно понимания уровня бейсик/паскаль и при записи макроса позырить какой получился код.
я в студенческие годы как-то делал в экселе решалку для судоку. бесполезная херня, но навыки написания впоследствии пригодились уже в работе.
понятно что есть более толковые инструменты, но для VBA достаточно понимания уровня бейсик/паскаль и при записи макроса позырить какой получился код.
я в студенческие годы как-то делал в экселе решалку для судоку. бесполезная херня, но навыки написания впоследствии пригодились уже в работе.
тьфу, да. VBA.
Так то однохуйственно - VBScript
решалку для судоку? Я знакома с VBA, расскажи саму логику действий макроса, плиз.
Проходит по диапазонам, проверяя наличие искомой цифры, ищет, куда можно вставить, и по новой - для следующей цифры?
Проходит по диапазонам, проверяя наличие искомой цифры, ищет, куда можно вставить, и по новой - для следующей цифры?
Можно находить с помощью рекурсии. На каждом шаге перебираются все возможные варианты для одной ячейки. Если появляется ячейка в которую нельзя вписать цифру, то выходим из текущего шага.
даже нарыл в архиве тот файлик...я тогда был молод, программирование было чуть иное, кроме того, у меня нет профильного образования, было так, типа хобби. сейчас сделал бы чуть более увесистый код, но понятный и читабельный (или не сделал бы тк я ныне датабазник а программером никогда не работал). на этот код втыкал минуты три "как оно работает". спасибо что комменты ставил ))
в общем сделал так: массив 9х9 забил 511 во все неизвестные (двоичное 111 111 111), в известных единичка только в одном бите (например если в клетке изначально 5, то Sud(Row,Col)=(000 010 000)=2^(5-1)=16 )
For Each cell In Field
If cell.Value = "" Then Sud(cell.Row - 5, cell.Column - 1) = 511 Else Sud(cell.Row - 5, cell.Column - 1) = 2 ^ (cell.Value - 1)
cell.Font.ColorIndex = 1
Next cell
потом каждую проверяем "если в том же ряду Х, то такой цифры быть здесь не может, гасим соотв.единичку"
prohodresult = 0
For Each cell In Field
If cell.Value = "" Then
If Lonenum(Sud(cell.Row - 5, cell.Column - 1)) 0 Then cell.Value = Lonenum(Sud(cell.Row - 5, cell.Column - 1)): cell.Font.ColorIndex = 44: prohodresult = 1
For Col = 1 To 9
If Col cell.Column - 1 And Field.Cells(cell.Row - 5, Col).Value "" Then
If Hasnumber(Sud(cell.Row - 5, cell.Column - 1), Field.Cells(cell.Row - 5, Col).Value) = True Then Sud(cell.Row - 5, cell.Column - 1) = Sud(cell.Row - 5, cell.Column - 1) - 2 ^ (Field.Cells(cell.Row - 5, Col).Value - 1): prohodresult = 1
End If
Next Col
то же по рядам и зонам 3х3
в итоге, если в клетке остается лишь один возможный вариант цифры, пишем его.
соответственно, после каждого такого прохода по 9х9 что-то меняется. в итоге либо решение либо дошли до момента когда ничего не меняется
тогда применяем второй вариант. "если в первом ряду цифра 1 не может быть ни здесь ни здесь, а только здесь, то пишем ее"
перебираем для всех цифр.
(да, я знаю, что Goto это стыдно, но без него нужно было так извернуться что я бы не потянул умственно)
For Row = 1 To 9
For Count = 1 To 9
Exhod(Count, 1) = 0
Exhod(Count, 2) = 0
Next Count
For Col = 1 To 9
If Lonenum(Sud(Row, Col)) = 0 Then
For Count = 1 To 9
If Hasnumber(Sud(Row, Col), Count) = True Then Exhod(Count, 1) = Exhod(Count, 1) + 1: Exhod(Count, 2) = Col
Next Count
End If
Next Col
For Count = 1 To 9
If Exhod(Count, 1) = 1 Then Field.Cells(Row, Exhod(Count, 2)).Value = Count: Sud(Row, Exhod(Count, 2)) = 2 ^ (Count - 1): Field.Cells(Row, Exhod(Count, 2)).Font.ColorIndex = 42: GoTo prohod
Next Count
Next Row
это же все для всех рядов, для всех колонок и для всех зон
ну и там уже комбинация 1 и 2 вариантов - либо решили, либо неверные данные либо стопорнулись (но такого почти никогда не было - изначально проверка что минимум 22 клетки, не знаю почему именно это число, давно это было)
(В ролях:
Dim Sud(9, 9) As Integer
Dim Exhod(9, 2) As Integer
Dim Count, Row, Col, sektorX, sektorY As Integer
Dim Field As Range
....
Function Hasnumber(osnova As Integer, Numer As Variant) As Boolean
...
Function Lonenum(osnova2 As Integer) As Integer...)
в общем сделал так: массив 9х9 забил 511 во все неизвестные (двоичное 111 111 111), в известных единичка только в одном бите (например если в клетке изначально 5, то Sud(Row,Col)=(000 010 000)=2^(5-1)=16 )
For Each cell In Field
If cell.Value = "" Then Sud(cell.Row - 5, cell.Column - 1) = 511 Else Sud(cell.Row - 5, cell.Column - 1) = 2 ^ (cell.Value - 1)
cell.Font.ColorIndex = 1
Next cell
потом каждую проверяем "если в том же ряду Х, то такой цифры быть здесь не может, гасим соотв.единичку"
prohodresult = 0
For Each cell In Field
If cell.Value = "" Then
If Lonenum(Sud(cell.Row - 5, cell.Column - 1)) 0 Then cell.Value = Lonenum(Sud(cell.Row - 5, cell.Column - 1)): cell.Font.ColorIndex = 44: prohodresult = 1
For Col = 1 To 9
If Col cell.Column - 1 And Field.Cells(cell.Row - 5, Col).Value "" Then
If Hasnumber(Sud(cell.Row - 5, cell.Column - 1), Field.Cells(cell.Row - 5, Col).Value) = True Then Sud(cell.Row - 5, cell.Column - 1) = Sud(cell.Row - 5, cell.Column - 1) - 2 ^ (Field.Cells(cell.Row - 5, Col).Value - 1): prohodresult = 1
End If
Next Col
то же по рядам и зонам 3х3
в итоге, если в клетке остается лишь один возможный вариант цифры, пишем его.
соответственно, после каждого такого прохода по 9х9 что-то меняется. в итоге либо решение либо дошли до момента когда ничего не меняется
тогда применяем второй вариант. "если в первом ряду цифра 1 не может быть ни здесь ни здесь, а только здесь, то пишем ее"
перебираем для всех цифр.
(да, я знаю, что Goto это стыдно, но без него нужно было так извернуться что я бы не потянул умственно)
For Row = 1 To 9
For Count = 1 To 9
Exhod(Count, 1) = 0
Exhod(Count, 2) = 0
Next Count
For Col = 1 To 9
If Lonenum(Sud(Row, Col)) = 0 Then
For Count = 1 To 9
If Hasnumber(Sud(Row, Col), Count) = True Then Exhod(Count, 1) = Exhod(Count, 1) + 1: Exhod(Count, 2) = Col
Next Count
End If
Next Col
For Count = 1 To 9
If Exhod(Count, 1) = 1 Then Field.Cells(Row, Exhod(Count, 2)).Value = Count: Sud(Row, Exhod(Count, 2)) = 2 ^ (Count - 1): Field.Cells(Row, Exhod(Count, 2)).Font.ColorIndex = 42: GoTo prohod
Next Count
Next Row
это же все для всех рядов, для всех колонок и для всех зон
ну и там уже комбинация 1 и 2 вариантов - либо решили, либо неверные данные либо стопорнулись (но такого почти никогда не было - изначально проверка что минимум 22 клетки, не знаю почему именно это число, давно это было)
(В ролях:
Dim Sud(9, 9) As Integer
Dim Exhod(9, 2) As Integer
Dim Count, Row, Col, sektorX, sektorY As Integer
Dim Field As Range
....
Function Hasnumber(osnova As Integer, Numer As Variant) As Boolean
...
Function Lonenum(osnova2 As Integer) As Integer...)
ух ты, спасибо!
датабазник? SQL, Access, или уже получше что-то придумали?
Microsoft SQL Server.
хотя, когда понимаешь язык запросов и как построены реляционные базы, как работают индексы и т.д., уже не важно с чем именно работать.
Access никогда не пробовал. Если бы нужно было что-то легковесное бесплатное, втулил бы MS SQL Express
хотя, когда понимаешь язык запросов и как построены реляционные базы, как работают индексы и т.д., уже не важно с чем именно работать.
Access никогда не пробовал. Если бы нужно было что-то легковесное бесплатное, втулил бы MS SQL Express
Я вот недавно критерий Фишера рассчитывал в эксле, наверняка там есть инструменты и для матана. Вся претензия уже к самим пользователям, это им оно не нужно.
Эксель сила!
вот кстати ещё одно распространённое заблуждение. 1С имеет огромный потенциал, и его даже иногда реализуют.
Я о том что садятся за 1с и ноют "что значит 389 +123 =512??? должно быть 500 ровно! вызывайте пограмиста!"
Эксель мощная программа. Многие её недооценивают.
Потому, что многие ей пользоваться не умеют, либо работают так же как в word, но с блэкджеком и удобными таблицами
Эксель очень крутой по функциональности, но какой же он тугодум в сравнении с самой говённой БД, а в скорости вычислений уступает почти любой программе, даже самописной.
Странная какая-то школа... Интегралы-производные вроде в 11 классе проходят, не?
Так себе проходят. Я после шкоды всё ещё не знал зачем там в интегралах dx писать.
а мы интегралы вообще не проходили. Классе в 10 производные начали, а в 11 тупо на ЕГЭ надрачивались. Каково было моё охуевание, когда в ВУЗе нам начали читать матан с учётом того, что мы якобы знаем интегралы (а мы их нихуя не знали).
Ну это ваше ЕГЭ виновато. С 10 класса сидят зубрят. У нас вроде нормально прошли, просто не понятно было, на кой хер это все.
Так никто и не спорит. ЕГЭ - абсолютно ненужная и дебильная вещь. Мало того, что отвлекает от учебы, потому что на подготовку уходит минимум год (весь 11 класс), а то и два-три, так ещё и абсолютно не отображает реальной картины знаний. Я написал математику на 48 баллов всего (чуть выше минимального)! Хотя часть С (самая сложная) была решена полностью и были лишь небольшие ошибки в вычислениях (т.к. торопился), либо в записи, либо ещё в какой-нибудь мелочи. И я бы понял, если бы меня штрафовали на треть-половину баллов, но сняли ВСЁ! И по результату я - дурачёк, который может максимум 2 и 2 сложить
Нынче некоторые даже 2+2 не осиливают без калькулятора, но при этом учатся на отлично
>Хотя часть С (самая сложная) была решена полностью и были лишь небольшие ошибки в вычислениях
То есть решал правильно, только ответ получился неправильный? Ну так успокойся, тебе баллы начисляли правильно, только в результате небольших ошибок в вычислениях получилось 48. Не смертельно, живи дальше.
То есть решал правильно, только ответ получился неправильный? Ну так успокойся, тебе баллы начисляли правильно, только в результате небольших ошибок в вычислениях получилось 48. Не смертельно, живи дальше.
Ответы получились правильные как минимум в двух заданиях, я ходил на апелляцию, но из-за мелочей всю часть С срезали под 0 полностью.
"Не смертельно, живи дальше."
Да я и не убиваюсь, самое главное что мне тогда как раз хватило на бюджет поступить
"Не смертельно, живи дальше."
Да я и не убиваюсь, самое главное что мне тогда как раз хватило на бюджет поступить
Если в ВУЗе пропускают интегралы, то тогда скорее всего пропущены и производные, функции, пределы, ряды и множества. Не удивительно, что без этого матан становится не понятной магией.
я наоборот первый курс на матане и прочем нихера не делал, потому что всё осталось в голове с 11 класса. а вот на втором курсе начались эти ебучие теоремы на всю доску...
Чтобы написать коммент, необходимо залогиниться