четверг, 26 мая 2011 г.

Перевод строки

Разбаловались мы программисты высокого уровня замечательным символом \n. Но не так часто знаешь что это за символ и что за собой кроет. Assembler. Все мы знаем что для перевода строки достаточно вывести 10 символ как любимая консолька перескочит вниз, но с файлом такие штучки не пройдут.
 Точнее нет, конечно символ запишется, но мы совсем забыли о том что такое ОП. Оказывается различные ОП, по разному трактуют символы перевода строк, конечно под каждую ОП создан редактор не использующий стандартные библиотеки и способный трактовать всё что хочешь и всё как хочешь, но это не стандартно. В первые с различными трактовками перевода строк я столкнулся на Питоне, когда под Виндой решил чуточку подредактировать скрипт который на писал на Линуксе(Of Top чувствуете разницу ПОД Виндой и НА Линуксе) И обнаружил что открытая блокнотом программа состоит из 1 длиннющей строчки, время от времени с какими-то квадратиками вместо переносов строки. Ну открыл в notepad++ и всё нормально (с тех пор не использую никогда блокнот). Если мы поместим 10 символ в фаил блокнот его отобразит НИКАК. Если мы поместим символ перевода строки в фаил (0Ah) то его блокнот тоже отобразит НИКАК. Чтоб блокнот его хоть кк-то отобразил мы должны поместит символ возврата каретки(0Dh) и потом Символ переноса строки(0Ah). Эта схема будет нормально интерпретироватся во всех редакторах, даже тех кто понимает обыкновенный перевод строки 10 символом, да к стати, вы можете меня наругать и будете правы. Ведь 10 символ это и есть 0Ah в шестнадцатеричной кодировке :) а 0Dh - возврат каретки. И если мы заглянем в учебник нам скажут "переводите так:
сначала 10 потом 13" (хоть порядок не имеет значения). И сетовать мы можем на заботливую консоль, и на свою природную лень.
Читать дальше......

вторник, 24 мая 2011 г.

Макросы это классно

Первое моё знакомство с макросам было случайным. Я обладаю плохим свойством засыпать за чтением учебников. Поэтому учебники я не читаю, и впервые узнал про макросы от преподавателя, который посмотрел что я в сотый раз пишу цикл по 2 переменным и посоветовал мне создать макрос.
Оказалось теперь с помощью
 #define F for(i=0;i<n;i++)
я могу вместо обыкновенного цикла писать просто буковку F. Любопытно также то что Си вполне поддерживает кирилицу в макросах, так что можно по извращатся и набить что-то типа 
#define сделать_10_раз for (i=0; i<10;i++)
Вообще можно весёлый исходник составить.
А теперь макросы в ассемблере, они мне невероятно облегчили жизнь.
Как я задолбался с вечной отладкой и выводом символов порчей регистров, и так далее, но вот ВНЕЗАПНО наткнулся на макрос.
И теперь вместо

push si
push ax
push dx
tabl db '0123456789'
mov si,A
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,tabl[si]
int 21h
mov ah,2
mov dl,10
int 21h
pop dx
pop ax
pop si 

Я пишу просто
ToVisual A
где A - то число которое мне надо отобразить.
Классно ещё то что макросам можно сообщать параметры. Да, согласен. Процедуры лучше макросов по занимаемому месту, но по скорости работы макросы выигрывают. Макрос - простая замена текста. Теперь мои программы даже на ассемблере гораздо больше человечны.






















Читать дальше......

суббота, 21 мая 2011 г.

Ночь в музее.

Вчера выступили в музее со спектаклем Щелкунчик, было хорошо: без люфтов, томозов, собрано, слажено, отлично. Отличный танец мой и Алиски. В общем не плохо. Мы не пошли ни на какую культурную программу, было как-то "уставше" от культурных программ. Портит вечер немного разве что небольшой скандал, хотя я до сих пор не понимаю свою вину. Я вышел проводить своих друзей, проводил и вернулся. Да, пожалуй я виновен в том что я не взял телефон и не сказал ни кому куда я направился. Но у меня есть голова на плечах, я знаю что мы закрываем вечер и что надо вот-вот вернутся. Они так-же мои друзья и я люблю их, какими бы они там ни были. Ещё неплохо влетело Косте, сначала за задранные ноги(не поспоришь есть за что) потом уже за что ни-попадя, за то что он оказался рядом с кругом сидящих на полу людей, даже не он его организовал. За то что он перенёс Олю из одного конца зала на руках в другой.  Ну ладно. Бывает так что люди друг друга не понимают. Вероятно что-то на подобии вышло в этой "Ночи в музее".  Всё равно мне понравилось, спасибо всем, в особенности Наталье Георгиевне нашему любимому руководителю.
Читать дальше......

среда, 18 мая 2011 г.

"Неделя убита на ошибки компилятора", "или польлуйтесь проверенным временем ПО"

И вот. Началось всё с обновления, я всё таки согласился на надоедливое окошко " а не хотите ли вы обновить всё и вся?". Я подумал , а почему бы и нет? Ново, лучшее, новые фитчи удобства, клёво всё. Но вот буквально после пары дней я заметил что-то не ладное, мои программы идеальны по определению а работают почему-то не так, я перепроверял алгоритмы много раз они чисты как слеза не целованной девственницы. А работают не правильно и хоть ты убей. Вот уж я пошел по контрольным точкам в каждой строке и проверял состояние переменных каждый раз пока вдруг не обнаружил УДАСНУЮ ВЕСЧЬ!!! Скорее земля сомкнутся с небом чем такое может произойти, наверное в тот момент грохнула ещё какая-то атомная электростанция, может Юпитер обозлился на меня за нерегулярные жертвоприношения, но цикл for вышел за свои рамки! вот такой код, который я использую в среднем по 3-4 раза за час не работает
for i:=0 to 10 do
    for j:=0 to 10 do
       Memo1.Lines.Add(IntToStr(i*j));
Вот так вот ребята. Пришлось переписывать все свои for в whilы.
Ну думаю нет, это адская мука, ну на фиг это Делфю а напишу ка я жизнь на С++.  Фух, там хотя-бы for работает. Писать в наглую по такой же идее скучно, что-бы можно сделать? О! Придумал. А не буду ка я использовать стандартный класс std::Vector.  А научусь ка я самостоятельно работать с динамическими структурами данных на низком уровне.Будет у меня одномерный динамический массив, напишу ка я пересчёт показателей из одномерного в двуменый, пропишу способы доступа как свойства, в общем чтоб научится как положено. Но вот написал смотрю, не работает, мусор из памяти берёт, ну давай рыть что не так. И вуаля. 4 строчки кода.(FA и FB - динамические массивы, A - свойство досупа с пересчётом показателей к FA, B соответственно к FB )

ShowMessage(A[4][1]);//выдал мне -1 как положено
delete []B;
B = new int[50];
ShowMessage(A[4][1]);// и что бы вы думали? выдаёт 16492261(короче мусор)
A  никак не связано с B. Они тупо наезжают друг на друга в памяти.
причём портится только 1 элемент массива A, именно [4][1]. Соль ещё в том что раньше массив B был 4*4 то есть 16. Вот скажите как можно программировать, если не знаешь чему можно доверять а где ошибки компилятора? Как результат неделя убита.
Читать дальше......

пятница, 13 мая 2011 г.

Программирование это механизм.

Помню невероятно радовался когда написал свой первый Хеловорд.
Это был питон( совет всем начинающим начинать с питона ) А ведь до поступления на специальность я даже не знал что такое программирование и с чем его едят. Я поступал на кораблестроительный(океано-техника). Для меня не была принципиальна та специальность, я ещё не определился тогда. Но документы перепутали, и я чудным образом попал на компьютерные технологии. Можно было перевестись, но мне было лень. И вот я понял что надо как-то что-то делать, скачал учебник по питону, скачал питон и начал читать, первые несколько глав конечно были скучными одна теория, всякие пространства имён, типы данных и т.д. Я уже был готов закрыть учебник. Но когда наконец появилась практика и на экранчике появилась консолечька с какой-то  надписью вот тогда я просто прыгал от счастья. дело не в чём то новом, дело в том что своеобразный механизм который я сконструировал РАБОТАЕТ! Позже стали захватывать дух математически красивые идеальные решения интересных задач( круглый поезд, 2 мухи, 2 верёвки).
Алгоритмизацию вполне можно сравнить с каким либо очень сложными механизмом. Ты прописываешь путь движения своих переменных, когда они должны изменятся, куда они должны попасть, что с ними делать, От куда взять и куда положить, это игра по правилам, сложная игра. И после обнаружения что ещё 1 тобою сотворённый механизм работает несравнимо ни с чем. Секс, наркотики,алкоголь, это всё мелочи по сравнению с тем чувством что пара тысяч твоих строк успешно функционируют. Окружающие не понимают твоих радостей, они лишь видят какие-то картинки, символы на экране, что-то делается, помню в воспоминаниях Линуса Торвальдса, когда он создал многозадачность у себя и его программа выделяла процеcорное время для печати букв A и B. И он позвал свою сестру чтоб она это оценила. Но Сестру это почему-то не впечатлило, для неё это были лишь буквы A и B. Люди не знают насколько сложно и  гениально всё функционирует внутри. А мы радуемся.
Читать дальше......

Игрушка "Жизнь"

баловался,вот написал игрушку Жизнь. Интересная штуковина. Правила есть в вики. Интересная статья на хабре. А для тех кто уж заинтересовался то вот целое исследование. Ах, да, вот и сама игрушка. Если хоть кого заинтересует, дайте знать, допишу много чего интересного(сохранение в фаил, пошаговое выполнение, шаг назад, стандартные интересные комбинации и т.д.)
Читать дальше......