Карта сайта

Это автоматически сохраненная страница от 21.05.2013. Оригинал был здесь: http://2ch.hk/b/res/48514160.html
Сайт a2ch.ru не связан с авторами и содержимым страницы
жалоба / abuse: admin@a2ch.ru

Втр 21 Май 2013 02:04:06
Нид хэлп
Сап помогач.
Пикрилейт - моя зачетная работа по информатике 10 класс.
Суть в том, что я тот еще проебщик и не ходил на информатику, и понятия не имею о чем идет речь на этом сраном клочке бумаги. Прошу тебя, анон выручи, расскажи что да как.


Втр 21 Май 2013 02:07:31
Пожалуйста, анон, завтра нужно сдавать!

Втр 21 Май 2013 02:09:12
Бля писать буду с телефона так что жди

Втр 21 Май 2013 02:10:06
>>48514320
Буду ждать сколько потребуется :3

Втр 21 Май 2013 02:10:25
Что за язык? Белый или паскаль?

Втр 21 Май 2013 02:12:21
сажи гуманитароблядку
хотя ты и на русском с трудом изъясняешься

Втр 21 Май 2013 02:12:45
>>48514160
read(k)
read(n);
for i:=1 to n do
begin
read(a);
if a<em> mod k = 0 then S:=S+a<em>;
end;
write(s);

сортировку загугли сам, я даже видео на лурочке видал.
</em></em>

Втр 21 Май 2013 02:13:16
Должно выполняться на qbasiс&amp;#39;e,вот что могу еще добавить, сильно не пинайте, действительно далек.

Втр 21 Май 2013 02:13:33
>>48514448
>read(a)
очевидный read(a);

Втр 21 Май 2013 02:13:59
>>48514431
Почему с трудом? У меня твердая четверка.

Втр 21 Май 2013 02:14:56
>>48514448
Спасибо.

Втр 21 Май 2013 02:15:02
чтоб тебя выгнали гуманитарий да здравствует естественный отбор


Втр 21 Май 2013 02:16:28
>>48514160
Язык?

Втр 21 Май 2013 02:18:28
>>48514461
>qbasiс
Ничего не понимаю! И это программисты. Говно какое-то, пидоры, блядь. Родина им дала Паскаль пиши! Пиши на Паскале, блядь! Не хочу, хочу жрать говно! Что такое? Это IT? Это IT? Суки, мудачьё программисты. Qbasic запустили, говно жрут пидоры, блядь, ёбаные

Втр 21 Май 2013 02:18:36
>>48514592
Извини, я только на С++ могу.

Втр 21 Май 2013 02:18:44
>Суть в том, что я тот еще проебщик и не ходил на информатику, и понятия не имею о чем идет речь на этом сраном клочке бумаги.

Все правильно делал. Разливать колу в макдаке тоже ведь надо кому-то.

Втр 21 Май 2013 02:19:00
>>48514160
var
A:array of integer;
N,K,i,sum:integer;
begin
writeln(&amp;#39;Количество элементов&amp;#39;);
readln(N);
setlength(A,N);
for i:=0 to N do
readln (A);
writeln(&amp;#39;Кратное число&amp;#39;);
readln (K);
sum:=0;
for i:=0 to N do
if A<em> mod K = 0 then
sum:=sum+A<em>;
writeln(sum);
readln;
end.
</em></em>

Втр 21 Май 2013 02:20:13
>>48514638
рака яичек вам!

Втр 21 Май 2013 02:20:18
var
A:array of integer;
N,K,i,sum:integer;
begin
writeln(&amp;#39;Количество элементов&amp;#39;);
readln(N);
setlength(A,N);
for i:=0 to N do
readln (A);
writeln(&amp;#39;Кратное число&amp;#39;);
readln (K);
sum:=0;
for i:=0 to N do
if A mod K = 0 then
sum:=sum+A;
writeln(sum);
readln;
end.


<em>фикс
</em>

Втр 21 Май 2013 02:20:46
>>48514676
Чаму?

Втр 21 Май 2013 02:21:03
>>48514638
Ему бейсик нужен.

Втр 21 Май 2013 02:22:22
>>48514703
Пиздец, ну давайте теперь школьникам домашку решать

Втр 21 Май 2013 02:22:44
>>48514708

Блять, я и не прочитал сразу.

Втр 21 Май 2013 02:23:07
>>48514749
Что плохого?

Втр 21 Май 2013 02:23:11
>>48514708
хуй в сраку ему нужен

Втр 21 Май 2013 02:23:37
>>48514749
Ну почему бы и не помочь? Деньги попрошайкам же кидают.

Втр 21 Май 2013 02:24:07
>>48514703
вам

Втр 21 Май 2013 02:24:10
>>48514770
>бейсик
>хуй в сраку
Как что-то разное.

Втр 21 Май 2013 02:24:12
Простите, я товлёкся.
>>48514358
Работу нужно выполнить на C.
Пожалуста, помогите, очень надо.

Втр 21 Май 2013 02:24:59
>>48514801
В школе нет С.

Втр 21 Май 2013 02:25:00
>>48514448
Спасибо за помощь, но мне бы на qbasic.

Втр 21 Май 2013 02:25:16
Вы совсем идиоты? Проблема решается за час при наличии гугла и мозга, даже если ОП проебывал все на свете.
Проебал - отрабатывай, мудило.

Втр 21 Май 2013 02:25:45
>>48514160
школьники - не люди

Втр 21 Май 2013 02:26:22
>>48514827
> Ко-ко-ко

Втр 21 Май 2013 02:26:38
>>48514839
Первокурсник, ты?

Втр 21 Май 2013 02:27:01
>>48514801
#include <butthurt.h>
int main(void){
pookan = new Pookan(OP);
pookan.bomb(NULL);
return 0;
}

Втр 21 Май 2013 02:27:09
Я бы тебе помог, но ты как-то без должного уважения просишь, ты даже не сделал мне сасай.

Втр 21 Май 2013 02:28:29
>>48514862
нет

Втр 21 Май 2013 02:28:46
>>48514870
лил.

Втр 21 Май 2013 02:29:28
>>48514872
Но Джейк, а как же Леди Ливнерог?

Втр 21 Май 2013 02:30:19
А потом пойдет учиться на погроммиста.
Въеби-ка сажицы с картинкой.

Втр 21 Май 2013 02:30:24
>>48514160
Пиздец школьники пошли, я в 11 лет игру на бэйсике написал, с графикой, счетчиками, управлением с клавы и уровнями, при том, что тогда никто никакому бэйсику в школе не учил. А этот не может осилить тупой счетчик чисел из пары строк кода с простейшей пошаговой логикой. Теперь понимаю, почему говорят, что у современных школьников мозга нет.

Втр 21 Май 2013 02:30:58
>>48514958
А вот и не пойду.

Втр 21 Май 2013 02:31:14
>>48514937
С ней все кончено.

Втр 21 Май 2013 02:32:06
>>48514961
Мозга нет, зато двачи есть.

Втр 21 Май 2013 02:32:42
>>48514961
чаю этому

Втр 21 Май 2013 02:32:56
>>48514958
Ну и охуенно, на фоне парашного IT-рынка труда я буду красивый и весь в белом.

Втр 21 Май 2013 02:33:53
>>48514961
Двачую этого.
миморазработчикигорь

Втр 21 Май 2013 02:34:10
>>48514988
Сочувствую, Дружище, но может как то без сасай обойдемся!?
У меня там бубльгум, Огненная, и Марси, тебе кто больше нравится?!

Втр 21 Май 2013 02:35:23
>>48514961
И это единственная твоя гордость за всю жизнь?

Втр 21 Май 2013 02:36:04
NYPA.
Сажи безмозглому школьнику.

Втр 21 Май 2013 02:36:14
Ты ленивые хуйло, всё проебал и просишь анона потратить своё время на решение твоих проблем, в которых повинен только ты сам. Да иди ты в хуй.

Втр 21 Май 2013 02:37:23
>>48515118
Мудак, ты за это время, что сидишь в треде и молишь, мог бы загуглить синтаксис своего кубасика, работу с массивами и сделать сам эту простейшую задачку.
Ебаный даун. Страдай сука.

Втр 21 Май 2013 02:37:40
>>48515133
Но анон знает в этом толк, и для него это как дважды два, и не составит труда. И карма улучшится, да.

Втр 21 Май 2013 02:41:16
>>48515168
Этот прозорливый господин прав. Ему 2 чая, а тебе хуй.

Втр 21 Май 2013 02:41:32
>>48515118
Блядь, да тебе же написали код. Переведи на бейсик сам. Там почти то же самое. Вместо аррей - дим. Вместо ридлн - инпут.

Втр 21 Май 2013 02:42:25
сажица
Автома±тное программи±рование это парадигма программирования, при использовании которой программа или её фрагмент осмысливается как модель какого-либо формального автомата.

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

Определяющими для автоматного программирования являются следующие особенности:

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

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

Название автоматное программирование оправдывается ещё и тем, что стиль мышления (восприятия процесса исполнения) при программировании в этой технике практически точно воспроизводит стиль мышления при составлении формальных автоматов (таких как машина Тьюринга, автомат Маркова и др.)

Втр 21 Май 2013 02:42:42
сажица
Пример с использованием конечного автомата

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


Императивная программа

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

#include <stdio.h>

int main() {
int c;

do {
c = getchar();
while (c == &amp;#39; &amp;#39;) c = getchar();
while (c != &amp;#39; &amp;#39; &amp;&amp; c != &amp;#39;\n&amp;#39; &amp;&amp; c != EOF) putcharY, c = getchar();
putchar(&amp;#39;\n&amp;#39;);
while (c != &amp;#39;\n&amp;#39; &amp;&amp; c != EOF) c = getchar();
} while (c != EOF);

return 0;
}

Программа в автоматном стиле

Ту же задачу можно решить, применив мышление в терминах конечных автоматов. Заметим, что разбор строки разделяется на три фазы: пропуск лидирующих пробелов, печать слова и пропуск символов остатка строки. Назовём эти три фазы состояниями before, inside и after. Программа теперь может выглядеть, например, так:

#include <stdio.h>

int main() {
enum states { before, inside, after } state;
int c;

state = before;
while ((c = getchar()) != EOF) {
switch (state) {

case before:
if (c == &amp;#39;\n&amp;#39;) putchar(&amp;#39;\n&amp;#39;);
else if (c != &amp;#39; &amp;#39;) putcharY, state = inside;
break;

case inside:
switch Y {
case &amp;#39; &amp;#39;:
state = after; break;
case &amp;#39;\n&amp;#39;:
putchar(&amp;#39;\n&amp;#39;), state = before;
break;
default: putcharY;
}
break;

case after:
if (c == &amp;#39;\n&amp;#39;) putchar(&amp;#39;\n&amp;#39;), state = before;

}
}

return 0;
}


Втр 21 Май 2013 02:43:00
сажица
Несмотря на то, что код явно стал более длинным, у него имеется одно несомненное достоинство: чтение (то есть вызов функции getchar()) теперь выполняется ровно в одном месте. Кроме того, необходимо заметить, что вместо четырёх циклов, использовавшихся в предыдущей версии, цикл теперь используется только один. Тело цикла (за исключением действий, выполняемых в заголовке) представляет собой шаг автомата, сам же цикл задаёт цикл работы автомата.
Диаграмма конечного автомата

Программа реализует (моделирует) работу конечного автомата, изображённого на рисунке. Буквой N на диаграмме обозначен символ конца строки, буквой S символ пробела, буквой A все остальные символы. За один шаг автомат делает ровно один переход в зависимости от текущего состояния и прочитанного символа. Некоторые переходы сопровождаются печатью прочитанного символа; такие переходы на диаграмме обозначены звёздочками.

Строго соблюдать разделение кода на обработчики отдельных состояний, вообще говоря, не обязательно. Более того, в некоторых случаях само понятие состояния может складываться из значений нескольких переменных, так что учесть все возможные их комбинации окажется практически невозможно. В рассматриваемом примере можно сэкономить объём кода, если заметить, что действия, выполняемые по символу [конец строкиk, от состояния не зависят. Программа, эквивалентная предыдущей, но написанная с учётом такого замечания, будет выглядеть так:

#include <stdio.h>

int main() {
enum states { before, inside, after } state;
int c;

state = before;
while ((c = getchar()) != EOF) {
if (c == &amp;#39;\n&amp;#39;) putchar(&amp;#39;\n&amp;#39;), state = before;
switch (state) {
case before:
if (c != &amp;#39; &amp;#39;) putcharY, state = inside;
break;
case inside:
if (c == &amp;#39; &amp;#39;) state = after;
else putcharY;
case after:
break;
}
}

return 0;
}

Выделение шага автомата в отдельную функцию

Основополагающим в вышеприведённой программе является по-прежнему чёткое выделение кода, отвечающего за шаг автомата. Это обстоятельство можно подчеркнуть ещё сильнее, если выделить шаг автомата в отдельную функцию.

#include <stdio.h>

enum states { before, inside, after };

void step(enum states *state, int c) {
if (c == &amp;#39;\n&amp;#39;) putchar(&amp;#39;\n&amp;#39;), *state = before;
switch (*state) {
case before:
if (c != &amp;#39; &amp;#39;) putcharY, *state = inside;
break;
case inside:
if (c == &amp;#39; &amp;#39;) *state = after;
else putcharY;
case after:
break;
}
}

int main() {
int c; enum states state = before;

while ((c = getchar()) != EOF) step(&amp;state, c);

return 0;
}

Этот пример наглядно демонстрирует основное свойство, благодаря которому код можно считать оформленным в стиле автоматного программирования:

отдельные шаги автомата выполняются в неперекрывающиеся временные периоды
единственным средством передачи информации между шагами является явно определённое состояние (в данном случае переменная state)

Программа с явно заданной таблицей переходов

Конечный автомат, как известно, может быть задан и таблицей переходов. Вообще говоря, код программы, моделирующей конечный автомат, вполне может отражать и это свойство автомата. В следующей программе массив the_table задаёт таблицу переходов. Строки таблицы соответствуют трём состояниям автомата, столбцы читаемым символам (первый столбец пробел, второй столбец перевод строки, третий столбец все остальные символы). Каждая ячейка таблицы содержит номер нового состояния и признак необходимости печати символа (в приведённом коде используются битовые поля для экономии памяти). Конечно, в реальной задаче могла бы потребоваться гораздо более сложная структура таблицы, содержащая, например, указатели на функции для выполнения каких-либо действий, связанных с переходами, но в рассматриваемом примере это не нужно:

#include <stdio.h>

enum states { before = 0, inside = 1, after = 2 };

struct branch {
enum states new_state:4;
int should_putchar:4;
};

branch the_table[3][3] = {
/* &amp;#39; &amp;#39; &amp;#39;\n&amp;#39; others */
/* before */ { {before, 0}, {before, 1}, {inside, 1} },
/* inside */ { {after, 0}, {before, 1}, {inside, 1} },
/* after */ { {after, 0}, {before, 1}, {after, 0} }
};

void step(enum states *state, int c) {
int idx2 = (c == &amp;#39; &amp;#39;) ? 0 : (c == &amp;#39;\n&amp;#39;) ? 1 : 2;
branch *b = &amp; the_table[*state][idx2];

*state = b->new_state;
if (b->should_putchar) putcharY;
}

int main() {
int c; enum states state = before;

while ((c = getchar()) != EOF) step(&amp;state, c);

return 0;
}


Втр 21 Май 2013 02:43:18
сажица
Использование объектно-ориентированных возможностей

Если используемый язык программирования поддерживает объектно-ориентированные возможности, логично будет инкапсулировать конечный автомат в объект, скрыв детали реализации. Например, аналогичная программа на языке C++ может выглядеть так:

#include <stdio.h>
class StateMachine {
enum states { before = 0, inside = 1, after = 2 } state;
struct branch {
enum states new_state:4;
unsigned should_putchar:4;
};
static struct branch the_table[3][3];
public:
StateMachine() : state(before) {}
void FeedChar(int c) {
int idx2 = (c == &amp;#39; &amp;#39;) ? 0 : (c == &amp;#39;\n&amp;#39;) ? 1 : 2;
struct branch *b = &amp; the_table[state][idx2];
state = b->new_state;
if(b->should_putchar) putcharY;
}
};

struct StateMachine::branch StateMachine::the_table[3][3] = {
/* &amp;#39; &amp;#39; &amp;#39;\n&amp;#39; others */
/* before */ { {before, 0}, {before, 1}, {inside, 1} },
/* inside */ { {after, 0}, {before, 1}, {inside, 1} },
/* after */ { {after, 0}, {before, 1}, {after, 0} }
};

int main()
{
int c;
StateMachine machine;
while((c = getchar()) != EOF)
machine.FeedCharY;
return 0;
}

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

Автоматное программирование широко применяется при построении лексических анализаторов (классические конечные автоматы) и синтаксических анализаторов (автоматы с магазинной памятью)[1].

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

Часто понятие состояний и машин состояний используется для спецификации программ. Так, при проектировании программного обеспечения с помощью UML для описания поведения объектов используются диаграммы состояний (state machine diagrams). Кроме того, явное выделение состояний используется в описании сетевых протоколов (см., например, RFC 793[2]).

Мышление в терминах автоматов (шагов и состояний) находит применение и при описании семантики некоторых языков программирования. Так, исполнение программы на языке Рефал представляет собой последовательность изменений поля зрения Рефал-машины или, иначе говоря, последовательность шагов Рефал-автомата, состоянием которого является содержимое поля зрения (произвольное Рефал-выражение, не содержащее переменных).

Механизм продолжений языка Scheme для своей реализации также требует мышления в терминах состояний и шагов, несмотря на то что сам язык Scheme никоим образом не является автоматным. Тем не менее, чтобы обеспечить возможность [замораживанияk продолжения, приходится при реализации вычислительной модели языка Scheme объединять все компоненты среды исполнения, включая список действий, которые осталось выполнить для окончания вычислений, в единое целое, которое также обычно называется продолжением. Такое продолжение оказывается состоянием автомата, а процесс выполнения программы состоит из шагов, каждый из которых выводит следующее значение продолжения из предыдущего.

Александр Оллонгрен в своей книге[3] описывает так называемый Венский метод описания семантики языков программирования, основанный целиком на формальных автоматах.

В качестве одного из примеров применения автоматной парадигмы можно назвать систему STAT [1]; эта система, в частности, включает встроенный язык STATL, имеющий чисто автоматную семантику.

Существуют также предложения по использованию автоматного программирования в качестве универсального подхода к созданию компьютерных программ вне зависимости от предметной области. Так, авторы статьи[4] утверждают, что автоматное программирование способно сыграть роль легендарной серебряной пули.

Втр 21 Май 2013 02:43:33
сажица
История

Наиболее ранние случаи применения парадигмы автоматного программирования относятся, по-видимому, к предметным областям, в которых наработана алгоритмическая теория, основанная на теории автоматов, и прежде всего к анализу текстов на формальных языках.[1] В качестве одной из наиболее ранних работ на эту тему можно назвать статью.[5]

Одним из первых упоминаний использования техники автоматного программирования независимо от теоретических наработок, основанных на конечных автоматах, является статья Питера Наура.[6] В этой статье автор называет применённый подход [подходом машины Тьюрингаk (Turing machine approach), но реально никакая машина Тьюринга в статье не строится; приведённый в статье подход удовлетворяет вышеприведённому определению автоматного программирования.
Сравнение с императивным и процедурным программированием

Понятие состояния программы не является эксклюзивной особенностью автоматного программирования. Вообще говоря, состояние возникает при выполнении любой компьютерной программы и представляет собой совокупность всей информации, которая во время исполнения может изменяться. Так, состояние программы, выполненной в традиционном императивном стиле состоит из

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

Составные части состояния можно разделить на явные (такие как значения переменных) и неявные (адреса возвратов и значение счётчика команд).

В контексте введённых определений программу, оформленную в виде модели конечного автомата, можно считать частным случаем императивной программы, таким, в котором роль неявной составляющей состояния сведена к минимуму. Если рассмотреть автоматную программу в моменты начала очередного шага автомата, то состояния программы в эти моменты будут различаться только явной составляющей. Это обстоятельство существенно упрощает анализ свойств программы.
Связь с объектно-ориентированным программированием

В теории объектно-ориентированного программирования считается, что объект имеет внутреннее состояние и способен получать сообщения, отвечать на них, отправлять сообщения другим объектам и в процессе обработки сообщений изменять своё внутреннее состояние. Более приближенное к практике понятие вызова метода объекта считается синонимом понятия отправки сообщения объекту.

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

С другой стороны, очевидно, что понятие объекта представляет собой удачный инструмент реализации модели конечного автомата. При применении парадигмы автоматного программирования в объектно-ориентированных языках обычно модели автоматов представляются в виде классов, состояние автомата описывается внутренними (закрытыми) полями класса, а код шага автомата оформляется в виде метода класса, причём такой метод скорее всего оказывается единственным открытым методом (не считая конструкторов и деструкторов), изменяющим состояние автомата. Другие открытые методы могут служить для получения информации о состоянии автомата, но не меняют его. Все вспомогательные методы (например, методы-обработчики отдельных состояний или их категорий) в таких случаях обычно убирают в закрытую часть класса.

Втр 21 Май 2013 02:43:42
>>48514160
ОП, а ты как qbasic на windows 7 запускаешь? он же там не идет

Втр 21 Май 2013 02:43:44
сажица
Специализированные языки программирования

Язык последовательных функциональных схем SFC (Sequential Function Chart) графический язык программирования широко используется для программирования промышленных логических контроллеров PLC.

В SFC программа описывается в виде схематической последовательности шагов, объединенных переходами.

Дракон-схемы графический язык программирования, используется для программирования в ракетно-космической технике ([Буранk, [Морской стартk, [Топольk). Существует бесплатный Дракон-редактор.
Язык Рефлекс Си-подобный язык программирования, ориентированный на описание сложных алгоритмов управления в задачах промышленной автоматизации.

Примечания

1 2 А. Ахо, Дж. Ульман Теория синтаксического анализа, перевода и компиляции = The theory of parsing, translation and compiling. М.: МИР, 1978. Т. 1. 612 с.
Postel, J., ed., Transmission Control Protocol, RFC 793
А. Оллонгрен Определение языков программирования интерпретирующими автоматами = Definition of programming languages by interpreting automata. М.: МИР, 1977. 288 с.
Туккель Н.И., Шалыто А.А. Программирование с явным выделением состояний // Мир ПК. 2001. 9. С. 132138.
Johnson, W. L.; Porter, J. H.; Ackley, S. I.; Ross, D. T. (1968). [Automatic generation of efficient lexical processors using finite state techniquesk (English). Comm. ACM 11 (12): 805813.
Naur, Peter (September 1963). [The design of the GIER ALGOL compiler Part IIk (English). BIT Numerical Mathematics 3: 145-166. DOI:10.1007/BF01939983. ISSN 0006-3835.

Литература

Поликарпова Н.И., Шалыто А.А. Автоматное программирование[2]. СПб.: Питер, 2009. 176 с. ISBN 978-5-388-00692-9

Шалыто А.А. Switch-технология. Алгоритмизация и программирование задач логического управления.. СПб.: Наука, 1998. 628 с.

Practical UML Statecharts in C/C++ Книга о реализации UML2 State Machine на С/C++. Нацелена, главным образом, на программирование встроенных систем реального времени.

Научно-технический вестник СПбГУ ИТМО. Выпуск 53. Автоматное программирование. 2008. https://code.google.com/p/visio2python/

Втр 21 Май 2013 02:44:05
сажица
Электронная таблица[1] компьютерная программа, позволяющая проводить вычисления с данными, представленными в виде двухмерных массивов, имитирующих бумажные таблицы[2]. Некоторые программы организуют данные в "листы", предлагая, таким образом, третье измерение.

Электронные таблицы (ЭТ) представляют собой удобный инструмент для автоматизации вычислений. Многие расчёты, в частности в области бухгалтерского учёта, выполняются в табличной форме: балансы, расчётные ведомости, сметы расходов и т. п. Кроме того, решение численными методами целого ряда математических задач удобно выполнять именно в табличной форме. Использование математических формул в электронных таблицах позволяет представить взаимосвязь между различными параметрами некоторой реальной системы. Решения многих вычислительных задач, которые раньше можно было осуществить только с помощью программирования, стало возможно реализовать через математическое моделирование в электронной таблице.
Содержание

1 История
2 Перечень программных продуктов
3 Примечания
4 Ссылки

История

Идею электронных таблиц впервые сформулировал американский учёный австрийского происхождения Рихард Маттезих (нем. Richard Mattesich), опубликовав в 1961 г. исследование под названием [Budgeting Models and System Simulationk[3]. Концепцию дополнили в 1970 г. Пардо (англ. Rene Pardo) и Ландау (англ. Remy Landau), подавшие заявку на соответствующий патент (U.S. Patent 4 398 249). Патентное ведомство отклонило заявку, но авторы через суд добились отмены этого решения.

Общепризнанным родоначальником электронных таблиц как отдельного класса ПО является Дэн Бриклин, который совместно с Бобом Фрэнкстоном разработал программу VisiCalc в 1979 г. Эта электронная таблица для компьютера Apple II стала очень популярной, превратив персональный компьютер из игрушки для технофилов в массовый инструмент для бизнеса.

Впоследствии на рынке появились многочисленные продукты этого класса SuperCalc, Microsoft MultiPlan, Quattro Pro, Lotus 1-2-3, Microsoft Excel, OpenOffice.org Calc, таблицы AppleWorks и gnumeric, минималистический Spread32.

Существуют электронные таблицы для мобильных телефонов и КПК, в частности SpreadCE.
Перечень программных продуктов
Название Операционные системы Примечание
UNIX Mac OS X Microsoft Windows
Gnumeric Да Да Да Включена в пакет GNOME Office.
KSpread Да Да Да Входит в состав KOffice.
Lotus 1-2-3 Нет Нет Да Самая известная программа, впервые выпущенная 26 января 1983 под DOS.
Microsoft Excel Нет Да Да Впервые выпущена в 1985 под Mac OS.
Numbers Нет Да Нет Входит в состав iWork.
LibreOffice Calc Да Да Да Входит в состав LibreOffice.
OpenOffice.org Calc Да Да Да Входит в состав OpenOffice.org.

Также в своё время были достаточно известны программы: en:Quattro Pro, en:SuperCalc и VisiCalc.
Примечания

Распространён также термин [табличный процессорk, однако в БРЭ (см. словник), Общероссийском классификаторе продукции (см. код 50 2400), в образовательном стандарте [Информационные системы и технологииk (код 230400, см. стр. 23) зафиксировано название [электронная таблицаk.
Encyclop–dia Britannica Spreadsheet (англ.). Encyclop–dia Britannica Online. Архивировано из первоисточника 25 августа 2011. Проверено 15 марта 2011.
Колесников, Е. А. Эволюция электронных таблиц, 2008.


Втр 21 Май 2013 02:44:22
сажица
Объе±ктно-ориенти±рованное, или объектное, программи±рование (в дальнейшем ООП) парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.
Содержание

1 История
2 Основные понятия
3 Определение ООП и его основные концепции
3.1 Сложности определения
3.2 Концепции
4 Особенности реализации
5 Подходы к проектированию программ в целом
6 Родственные методологии
6.1 Компонентное программирование
6.2 Прототипное программирование
6.3 Класс-ориентированное программирование
7 Производительность объектных программ
8 Критика ООП
9 Объектно-ориентированные языки
10 Примечания
11 См. также
12 Литература
13 Ссылки

История
Nuvola apps important recycle.svg
Эта статья или раздел нуждается в переработке.
Пожалуйста, улучшите статью в соответствии с правилами написания статей.


ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).

Формирование КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули независимые части кода до уровня сборки программы, так объекты сформировались в компоненты независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.

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

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

Втр 21 Май 2013 02:44:24
>>48515174
Анону похуй на карму, а ты паразит ебаный, переигравший в игры. Карма какая-то, вообще ебанулся. Проваливай неудачник.

Втр 21 Май 2013 02:44:34
сажица
Основные понятия
Question book-4.svg
В этом разделе не хватает ссылок на источники информации.
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 18 октября 2012.


Абстракция
Абстрагирование это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция это набор всех таких характеристик.[1]
Инкапсуляция
Инкапсуляция это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.[1]
Наследование
Наследование это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс потомком, наследником или производным классом.[1]
Полиморфизм
Полиморфизм это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.[1]

Класс
Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Объект
Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Прототип
Прототип это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

Определение ООП и его основные концепции

В центре ООП находится понятие объекта. Объект это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности для этого требуется наличие наследования.

Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.

Втр 21 Май 2013 02:44:56
>>48515174
Карма улучшится, если пристрелить этого мудака-опа.

Втр 21 Май 2013 02:45:32
>>48515126
> NYPA
> Сажи безмозглому школьнику.
Ты здесь недавно.

Втр 21 Май 2013 02:45:32
сажица
Сложности определения

ООП имеет уже более чем сорокалетнюю историю, но, несмотря на это, до сих пор не существует чёткого общепринятого определения данной технологии[2]. Основные принципы, заложенные в первые объектные языки и системы, подверглись существенному изменению (или искажению) и дополнению при многочисленных реализациях последующего времени. Кроме того, примерно с середины 1980-х годов термин [объектно-ориентированныйk стал модным, в результате с ним произошло то же самое, что несколько раньше с термином [структурныйk (ставшим модным после распространения технологии структурного программирования) его стали искусственно [прикреплятьk к любым новым разработкам, чтобы обеспечить им привлекательность. Бьёрн Страуструп в 1988 году писал, что обоснование [объектной ориентированностиk чего-либо, в большинстве случаев, сводится к ложному силлогизму: [X это хорошо. Объектная ориентированность это хорошо. Следовательно, X является объектно-ориентированнымk.

Тимоти Бадд пишет[3][4]:

Роджер Кинг аргументированно настаивал, что его кот является объектно-ориентированным. Кроме прочих своих достоинств, кот демонстрирует характерное поведение, реагирует на сообщения, наделён унаследованными реакциями и управляет своим, вполне независимым, внутренним состоянием.

По мнению Алана Кея, создателя языка Smalltalk, которого считают одним из [отцов-основателейk ООП, объектно-ориентированный подход заключается в следующем наборе основных принципов (цитируется по вышеупомянутой книге Т. Бадда).

Всё является объектом.
Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
Каждый объект имеет независимую память, которая состоит из других объектов.
Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).
В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.

Таким образом, программа представляет собой набор объектов, имеющих состояние и поведение. Объекты взаимодействуют посредством сообщений. Естественным образом выстраивается иерархия объектов: программа в целом это объект, для выполнения своих функций она обращается к входящим в неё объектам, которые, в свою очередь, выполняют запрошенное путём обращения к другим объектам программы. Естественно, чтобы избежать бесконечной рекурсии в обращениях, на каком-то этапе объект трансформирует обращённое к нему сообщение в сообщения к стандартным системным объектам, предоставляемым языком и средой программирования.

Устойчивость и управляемость системы обеспечивается за счёт чёткого разделения ответственности объектов (за каждое действие отвечает определённый объект), однозначного определения интерфейсов межобъектного взаимодействия и полной изолированности внутренней структуры объекта от внешней среды (инкапсуляции).

Определить ООП можно и многими другими способами[5].

Втр 21 Май 2013 02:45:49
>>48515344
Это шутка такая?

Втр 21 Май 2013 02:45:52
сажица
>>48515372
>Карма улучшится, если пристрелить этого мудака-опа.
этому чаю

Втр 21 Май 2013 02:46:13
сажица
Концепции

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

Необходимость совместного использования объектов разных классов, способных обрабатывать однотипные сообщения, требует поддержки полиморфизма возможности записывать разные объекты в переменные одного и того же типа. В таких условиях объект, отправляя сообщение, может не знать в точности, к какому классу относится адресат, и одни и те же сообщения, отправленные переменным одного типа, содержащим объекты разных классов, вызовут различную реакцию.

Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как [настоящийk обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект.

Однако общность механизма обмена сообщениями имеет и другую сторону [полноценнаяk передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому в большинстве ныне существующих объектно-ориентированных языков программирования используется концепция [отправка сообщения как вызов методаk объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Java, Oberon-2. В настоящий момент именно он является наиболее распространённым в объектно-ориентированных языках.

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

Как уже говорилось выше, в современных объектно-ориентированных языках программирования каждый объект является значением, относящимся к определённому классу. Класс представляет собой объявленный программистом составной тип данных, имеющий в составе:

Поля данных
Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Иногда поля данных объекта называют свойствами объекта, из-за чего возможна путаница. Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.
Методы
Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование порождение класса от двух или более классов-родителей. Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.

Взаимодействие объектов в абсолютном большинстве случаев обеспечивается вызовом ими методов друг друга.

Инкапсуляция обеспечивается следующими средствами

Контроль доступа
Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторы public, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступные только из классов-потомков и скрытые, доступные только внутри класса. Конкретная номенклатура модификаторов и их точный смысл различаются в разных языках.
Методы доступа
Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. access доступ), а по отдельности геттерами (англ. get чтение) и сеттерами (англ. set запись)[6].
Свойства объекта
Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как [умныеk поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной. Например, в C# объявление свойства непосредственно содержит код методов доступа, который вызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступных для непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычные методы с некоторыми дополнительными требованиями к сигнатуре.

Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа [классk может быть присвоен объект любого класса-потомка её класса.

Втр 21 Май 2013 02:46:28
сажица
Подходы к проектированию программ в целом

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

Объектно-ориентированное проектирование состоит в описании структуры и поведения проектируемой системы, то есть, фактически, в ответе на два основных вопроса:

Из каких частей состоит система.
В чём состоит ответственность каждой из частей.

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

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

Большое значение имеет правильное построение иерархии классов. Одна из известных проблем больших систем, построенных по ООП-технологии так называемая проблема хрупкости базового класса. Она состоит в том, что на поздних этапах разработки, когда иерархия классов построена и на её основе разработано большое количество кода, оказывается трудно или даже невозможно внести какие-либо изменения в код базовых классов иерархии (от которых порождены все или многие работающие в системе классы). Даже если вносимые изменения не затронут интерфейс базового класса, изменение его поведения может непредсказуемым образом отразиться на классах-потомках. В случае крупной системы разработчик базового класса просто не в состоянии предугадать последствия изменений, он даже не знает о том, как именно базовый класс используется и от каких особенностей его поведения зависит корректность работы классов-потомков.
Родственные методологии

Компонентное программирование следующий этап развития ООП; прототип- и класс-ориентированное программирование разные подходы к созданию программы, которые могут комбинироваться, имеющие свои преимущества и недостатки.
Компонентное программирование

Компонентно-ориентированное программирование это своеобразная [надстройкаk над ООП, набор правил и ограничений, направленных на построение крупных развивающихся программных систем с большим временем жизни. Программная система в этой методологии представляет собой набор компонентов с хорошо определёнными интерфейсами. Изменения в существующую систему вносятся путём создания новых компонентов в дополнение или в качестве замены ранее существующих. При создании новых компонентов на основе ранее созданных запрещено использование наследования реализации новый компонент может наследовать лишь интерфейсы базового. Таким образом компонентное программирование обходит проблему хрупкости базового класса.

Втр 21 Май 2013 02:46:39
сажица
Прототипное программирование

Прототипное программирование, сохранив часть черт ООП, отказалось от базовых понятий класса и наследования.

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

Класс-ориентированное программирование
Question book-4.svg
в разделе не хватает ссылок на источники информации.
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 31 декабря 2012.


Класс-ориентированное программирование это программирование, сфокусированное на данных, причем данные и поведение неразрывно связаны между собой. Вместе данные и поведение представляют собой класс. Соответственно в языках, основанных на понятии [классk, все объекты разделены на два основных типа классы и экземпляры. Класс определяет структуру и функциональность (поведение), одинаковую для всех экземпляров данного класса. Экземпляр является носителем данных то есть обладает состоянием, меняющимся в соответствии с поведением, заданным классом. В класс-ориентированных языках новый экземпляр создаётся через вызов конструктора класса (возможно, с набором параметров). Получившийся экземпляр имеет структуру и поведение, жёстко заданные его классом.
Производительность объектных программ

Гради Буч указывает[7] на следующие причины, приводящие к снижению производительности программ из-за использования объектно-ориентированных средств:

Динамическое связывание методов.
Обеспечение полиморфного поведения объектов приводит к необходимости связывать методы, вызываемые программой (то есть определять, какой конкретно метод будет вызываться) не на этапе компиляции, а в процессе исполнения программы, на что тратится дополнительное время. При этом реально динамическое связывание требуется не более чем для 20 % вызовов, но некоторые ООП-языки используют его постоянно.
Значительная глубина абстракции.
ООП-разработка часто приводит к созданию [многослойныхk приложений, где выполнение объектом требуемого действия сводится к множеству обращений к объектам более низкого уровня. В таком приложении происходит очень много вызовов методов и возвратов из методов, что, естественно, сказывается на производительности.
Наследование [размываетk код.
Код, относящийся к [оконечнымk классам иерархии наследования (которые обычно и используются программой непосредственно) находится не только в самих этих классах, но и в их классах-предках. Относящиеся к одному классу методы фактически описываются в разных классах. Это приводит к двум неприятным моментам:

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

Инкапсуляция снижает скорость доступа к данным.
Запрет на прямой доступ к полям класса извне приводит к необходимости создания и использования методов доступа. И написание, и компиляция, и исполнение методов доступа сопряжено с дополнительными расходами.
Динамическое создание и уничтожение объектов.
Динамически создаваемые объекты, как правило, размещаются в куче, что менее эффективно, чем размещение их на стеке и, тем более, статическое выделение памяти под них на этапе компиляции.

Несмотря на отмеченные недостатки, Буч утверждает, что выгоды от использования ООП более весомы. Кроме того, повышение производительности за счёт лучшей организации ООП-кода, по его словам, в некоторых случаях компенсирует дополнительные накладные расходы на организацию функционирования программы. Можно также заметить, что многие эффекты снижения производительности могут сглаживаться или даже полностью устраняться за счёт качественной оптимизации кода компилятором. Например, упомянутое выше снижение скорости доступа к полям класса из-за использования методов доступа устраняется, если компилятор вместо вызова метода доступа использует инлайн-подстановку (современные компиляторы делают это вполне уверенно).

Втр 21 Май 2013 02:46:55
сажица
Критика ООП

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

Критические высказывания в адрес ООП:

Исследование Thomas E. Potok, Mladen Vouk и Andy Rindos [1] показало отсутствие значимой разницы в продуктивности разработки программного обеспечения между ООП и процедурным подходом.
Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из-за отсутствия строгого и общепризнанного определения ООП (C. J. Date, Introduction to Database Systems, 6th-ed., Page 650)
Александр Степанов, в одном из своих интервью, указывал на то, что ООП [методологически неправильноk и что [ ООП практически такая же мистификация как и искусственный интеллектk ([2]).
Фредерик Брукс (Frederick P. Brooks, Jr.) в своей статье [No Silver Bullet. Essence and Accidents of Software Engineeringk (Computer Magazine; April 1987) указывает на то, что наиболее сложной частью создания программного обеспечения является [ спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкцийk. ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др.), по его мнению, не является [серебряной пулейk, которая могла бы на порядок величины (то есть примерно в 10 раз, как говорится в статье) снизить сложность разработки программных систем. Согласно Бруксу, [ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природеk. ([3])
Эдсгер Дейкстра указывал: [ то о чём общество в большинстве случаев просит это змеиное масло. Естественно, змеиное масло имеет очень впечатляющие имена, иначе будет очень трудно что-то продать: Структурный анализ и Дизайн, Программная инженерия, Модели зрелости, Управляющие информационные системы (Management Information Systems), Интегрированные среды поддержки проектов, Объектная ориентированность, Реинжиниринг бизнес-процессовk EWD 1175: The strengths of the academic enterprise
Никлаус Вирт считает, что ООП не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных [объектно-ориентированныхk средств, вредит качеству разрабатываемого программного обеспечения.
Патрик Киллелиа в своей книге [Тюнинг веб-сервераk писал: [ ООП предоставляет вам множество способов замедлить работу ваших программ k
Известная обзорная статья проблем современного ООП-программирования перечисляет некоторые типичные проблемы ООП Почему объектно-ориентированное программирование провалилось

Если попытаться классифицировать критические высказывания в адрес ООП, можно выделить несколько аспектов критики данного подхода к программированию.

Критика рекламы ООП.
Критикуется явно высказываемое или подразумеваемое в работах некоторых пропагандистов ООП, а также в рекламных материалах [объектно-ориентированныхk средств разработки представление об объектном программировании как о некоем всемогущем подходе, который магическим образом устраняет сложность программирования. Как замечали многие, в том числе упомянутые выше Брукс и Дейкстра, [серебряной пули не существуетk независимо от того, какой парадигмы программирования придерживается разработчик, создание нетривиальной сложной программной системы всегда сопряжено со значительными затратами интеллектуальных ресурсов и времени. Из наиболее квалифицированных специалистов в области ООП никто, как правило, не отрицает справедливость критики этого типа.
Оспаривание эффективности разработки методами ООП.
Критики оспаривают тезис о том, что разработка объектно-ориентированных программ требует меньше ресурсов или приводит к созданию более качественного ПО. Проводится сравнение затрат на разработку разными методами, на основании которого делается вывод об отсутствии у ООП преимуществ в данном направлении. Учитывая крайнюю сложность объективного сравнения различных разработок, подобные сопоставления, как минимум, спорны. С другой стороны получается что ровно так же спорны и утверждения об эффективности ООП.
Производительность объектно-ориентированных программ.
Указывается на то, что целый ряд [врождённых особенностейk ООП-технологии делает построенные на её основе программы технически менее эффективными, по сравнению с аналогичными необъектными программами. Не отрицая действительно имеющихся дополнительных накладных расходов на организацию работы ООП-программ (см. раздел [Производительностьk выше), нужно, однако, отметить, что значение снижения производительности часто преувеличивается критиками. В современных условиях, когда технические возможности компьютеров чрезвычайно велики и постоянно растут, для большинства прикладных программ техническая эффективность оказывается менее существенна, чем функциональность, скорость разработки и сопровождаемость. Лишь для некоторого, очень ограниченного класса программ (ПО встроенных систем, драйверы устройств, низкоуровневая часть системного ПО, научное ПО) производительность остаётся критическим фактором.
Критика отдельных технологических решений в ООП-языках и библиотеках.
Эта критика многочисленна, но затрагивает она не ООП как таковое, а приемлемость и применимость в конкретных случаях тех или иных реализаций её механизмов. Одним из излюбленных объектов критики является язык C++, входящий в число наиболее распространённых промышленных ООП-языков.

Втр 21 Май 2013 02:47:04
>>48514160
a = [int(input()) for _ in range(0, N)]
k = int(input())
result = sorted([i for i in a if not i % k], reverse=True)

Втр 21 Май 2013 02:47:18
сажица
Объектно-ориентированные языки
Основная статья: Объектно-ориентированный язык программирования

Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для необъектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным.

Современный объектно-ориентированный язык предлагает, как правило, следующий обязательный набор синтаксических средств:

Объявление классов с полями (данными членами класса) и методами (функциями членами класса).
Механизм расширения класса (наследования) порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.
Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООП-языках все методы классов являются виртуальными.

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

Конструкторы, деструкторы, финализаторы.
Свойства (аксессоры).
Индексаторы.
Интерфейсы (например, в Java используются также как альтернатива множественному наследованию любой класс может реализовать сколько угодно интерфейсов).
Переопределение операторов для классов.
Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.

Часть языков (иногда называемых [чисто объектнымиk) целиком построена вокруг объектных средств в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код методом какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков Smalltalk, Python, Java, C#, Ruby, AS3. Другие языки (иногда используется термин [гибридныеk) включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры C++, Delphi и Perl.
Примечания

1 2 3 4 Михаил Пайсон, [ООП с примерами, Часть 2k.
Nobody Agrees On What OO Is
Тимоти Бадд. Объектно-ориентированное программирование в действии = An Introduction to Object-Oriented Programming. СПб.: [Питерk, 1997. 464 с. (В действии). 6000 экз. ISBN 5-88782-270-8
Roger King, My cat is object-oriented
Определения ООП
Следует однако заметить, что использование аксессоров подрывает инкапсуляцию, суть которой состоит не в сокрытии всех и всея членов объекта, а в том, что внутренне состояние объекта используется лишь для работы, совершаемой им непосредственно. В ООП программист работает с понятиями, а не с данными.
Грэди Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ = Object-Oriented Analysis and Design with Applications / Пер. И.Романовский, Ф.Андреев. 2-е изд. М., СПб.: [Биномk, [Невский диалектk, 1998. С. 276278. 560 с. 6000 экз. ISBN 5-7989-0067-3

См. также
v: ООП в Викиверситете?

ORM технология связывания ОО-программ c базами данных
Доменный объект
Объектно-ориентированное проектирование
Сравнение языков программирования

Литература
Логотип Викиучебника
Имеется викиучебник по теме
[Объектно-ориентированное программированиеk

Design Patterns
Иан Грэхем. Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles &amp; Practice. 3-е изд. М.: [Вильямсk, 2004. С. 880. ISBN 0-201-61913-X
Антони Синтес. Освой самостоятельно объектно-ориентированное программирование за 21 день = Sams Teach Yourself Object-Oriented Programming in 21 Days. М.: [Вильямсk, 2002. С. 672. ISBN 0-672-32109-2

Ссылки
Wiki letter w.svg
Внешние ссылки в этой статье не соответствуют правилам Википедии.
Вы можете улучшить эту статью, удалив из неё ссылки, не соответствующие правилам.


Первые Шаги: Введение в ООП
Е. А. Роганов [Основные концепции ООПk (глава из книги [Основы информатики и программированияk)
C.Бобровский [История ООПk (статья)
С. Н. Карпенко Учебные материалы курса [Методы ООПk (ННГУ кафедра МО ЭВМ)
Б.Мейер [Основы ООПk (Бесплатный курс на сайте intuit.ru)
К. И. Шахгельдян Курс [Объектно-ориентированное программированиеk (ВГУЭС кафедра КТС)
А. С. Усов [Внутри Объектной Технологии: Теория, Архитектура, Концепцииk (цикл статей)
Принципы ООП на сайте Weblibrary.biz
[OOP Oversold!k (сайт посвящённый критике ООП)
Ричард П. Гэбриэл [Объектная парадигма провалиласьk
Гай Л. Стил [Объектная парадигма не провалиласьk
[Рабство программистаk. Журнал [Программистk

Втр 21 Май 2013 02:47:36
сажица
Проблемно-ориентированное проектирование (DDD) (англ. Domain-driven design) это набор принципов и схем, помогающих разработчикам создавать изящные системы объектов. При правильном применении оно приводит к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит сложная бизнес-логика, устраняющая промежуток между реальными условиями области применения продукта и кодом.[1]

Проблемно-ориентированное проектирование не является какой-либо конкретной технологией или методологией. DDD это набор правил, которые позволяют принимать правильные проектные решения. Данный подход позволяет значительно ускорить процесс проектирования программного обеспечения в незнакомой предметной области.

Подход DDD особо полезен в ситуациях, когда разработчик не является специалистом в области разрабатываемого продукта. К примеру: программист не может знать все области, в которых требуется создать ПО, но с помощью правильного представления структуры, посредством проблемно-ориентированного подхода, может без труда спроектировать приложение, основываясь на ключевых моментах и знаниях рабочей области.

Данный термин был впервые введен Eric Evans в его книге Domain-Driven Design Tackling Complexity in the Heart of Software[2]
Содержание

1 Основные определения
2 Концепция
2.1 Ограниченные связи
2.2 Целостность
2.3 Взаимосвязь
3 Элементы DDD
3.1 Контекст
3.2 Сущность
3.3 Объект-значение
3.4 Сводный корень
3.5 Службы
4 Взаимосвязь с другими подходами программирования
5 Тестирование
6 Инструменты
7 Примечания
8 См. также
9 Литература
10 Ссылки

Втр 21 Май 2013 02:47:53
>>48514160
10 PRINT "OPHUI"
20 GOTO 10
30 END
И запускай.

Втр 21 Май 2013 02:47:58
сажица
Основные определения

Домен (англ. domain) область знаний. Область знаний, к которой применяется разрабатываемое программное обеспечение.
Модель (англ. model) описывают отдельные аспекты области и могут быть использованы для решения проблемы.
Язык описания используется для единого стиля описания домена и модели.

Концепция

В идеале, при проектировании хочется иметь одну-единственную модель, которая полностью описывает всю предметную область, но в реальности, для упрощения процесса разработки продукта, домен представляют в виде сочетания нескольких взаимосвязанных моделей.

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

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

Решение: Точно определить контекст, в котором используется модель. Определить границы использования данной модели и ее характеристики.
Целостность

Когда над проектом работает большое количество людей, то есть тенденция дробить модель на несколько, более мелких, фрагментов. Чем больше людей, тем более значительна данная проблема. В конечном итоге теряется целостность проекта.

Решение: Постоянное объединение кусков кода от различных разработчиков и проверка работоспособности посредством тестирования. Это позволяет держаться всем разработчикам в одной большой концепции.
Взаимосвязь

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

Решение: На этапе проектирования точно обозначьте, что именно выполняет каждая модель и как она взаимосвязана с другими моделями. В конечном итоге у вас должна получиться карта взаимосвязей моделей.
Элементы DDD

При проектировании на основе проблемно-ориентированного подхода используются следующие понятия:

Втр 21 Май 2013 02:48:22
сажица
Контекст

В большинстве систем для предприятий используются крупномасштабные зоны ответственности. В DDD этот высший уровень организации называется ограниченным контекстом. Рассмотрим пример, система биллинга крупной телекоммуникационной компании. Ключевые элементы системы:

клиентская база
система безопасности и защиты
резервное копирование
взаимодействие с платежными системами
ведение отчетности
администрирование
система уведомлений

Все данные элементы должны быть включены в одну единую систему, которая должна работать без перебоев. Но в данном случае, при проектировании, стоит понимать, что если речь идет о системе уведомлений или о системе безопасности, то говорится совершенно о разных вещах. Системы, в которых не удается разделить и изолировать ограниченные контексты, часто приобретают архитектурный стиль, который имеет красноречивое название [Большой ком грязиk в 1999 г. Брайан Фут (Brian Foot) и Йозеф Йодер (Joseph Yoder).[3]

Сутью проблемно-ориентированного проектирования является конкретное определение контекстов и ограничение моделирования в их рамках.
Сущность

Проще всего сущности выражать в виде существительных: люди, места, товары и т. д. У сущностей есть и индивидуальность, и жизненный цикл. Во время проектирования думать о сущностях следует как о единицах поведения, нежели как о единицах данных. Чаще всего какие-то операции, которые вы пытаетесь добавить в модель, должна получить какая-то сущность, или при этом начинает создаваться или извлекаться новая сущность. В более слабом коде можно найти массу служебных или управляющих классов, проверяющих сущности снаружи.
Объект-значение

Объект-значение это свойства, важные в той предметной области, которую вы моделируете. У них, в отличие от сущностей, нет обозначения; они просто описывают конкретные сущности, которые уже имеют обозначения. Полезность объектов-значений состоит в том, что они описывают свойства сущностей гораздо более изящным и объявляющим намерения способом. Стоит всегда помнить, что значение объекта никогда не изменяется на протяжении выполнения всего программного кода. После их создания, внесение поправок невозможно.
Сводный корень

Сводный корень специальная сущность, к которой напрямую обращаются потребители. Использование при проектирование концепции сводных корней позволяет избегать чрезмерного соединения объектов между собой, составляющих модель, за счет применения правила: сводные корни единственный вид сущностей, на который может ссылаться используемая программа. Это позволяет избежать путаницы и упростить структуру архитектуры кода, потому что теперь у вас есть специальное ограничение, не дающее создавать тесно связанные системы, где все сопряжено со всем.
Службы

Иногда в предметной области есть операции или процессы, у которых нет обозначения или жизненного цикла. Службы области дают инструмент для моделирования этих концепций. Они характеризуются отсутствием состояния и высокой связностью, часто предоставляя один открытый метод и иногда перегрузку для действий над наборами. Если в поведение включено несколько зависимостей, и нет возможности найти подходящего места в сущности для размещения этого поведения, в этом случае используют службу. Хотя сам по себе термин [службаk в мире разработки перегружен различными значениями, но в данной тематике, это обозначает небольшой класс, не представляющий конкретного человека, место или вещь в проектируемом приложении, но включающий в себя какие-то процессы. Использование служб позволяет ввести многослойную архитектуру, так же интегрировать несколько моделей, что вносит зависимость от инфраструктуры.[4]
Взаимосвязь с другими подходами программирования

Объектно-ориентированное программирование

Хотя по концепции проблемно-ориентированное проектирование не должно быть ограничено какими-либо представлениями, но на практике все равно пользуются сильные стороны объектно-ориентированного программирования. Это использования наследования, инкапсуляции, представления в виде методов и классов. Нужно помнить, что объектно-ориентированный подход программирования может быть применен не только к ООП языкам, таким как Java, C# или C++, но так же и с функциональным F#, Erlang.
Тестирование

Неотъемлемой частью разработки является тестирование. Оно позволяет быть уверенным в работоспособности разрабатываемого продукта на всех этапах разработки. Практичнее производить разработку посредством автотестов по технике TDD.

При тестировании сводных корней, применяют модульное тестирование. Причем при использовании проблемно-ориентированного проектирования тесты сводных корней склоняются в сторону парадигмы черного ящика и тестирования состояния. Сводные корни и сущности часто становятся конечными автоматами, и их поведение этому соответствует.
Инструменты

Actifsource плагин для Eclipse, который позволяет разработчикам создавать продукт с управляемыми моделями и генератором кода.

Примечания

Дэйв Лэриби Введение в проблемно-ориентированное проектирование (рус.). Архивировано из первоисточника 17 сентября 2012. Проверено 30 мая 2012.
Evans, E., Domain-Driven Design Tackling Complexity in the Heart of Software, 2004, Addison-Wesley
Brian Foote and Joseph Yoder, Big Ball of Mud, 1999, Urbana, IL 61801 USA
Haywood, D., Domain-Driven Design using Naked Objects, 2009, Pragmatic Programmers


Втр 21 Май 2013 02:48:23
Такие как ты, весёлые социобляди-проёбщики, травили меня в школе, насмехались в институте, теперь я работаю и меня постоянно доёбывают манагеры и прочий скам того же сорта. Почему я должен тебе помогать? Нахуй иди.

Втр 21 Май 2013 02:48:52
>>48515466
Витчеблядь на острие программировании!

Втр 21 Май 2013 02:49:23
>>48514160

Ебать ты мудило. Мало того, что задачу не можешь решить, которую даже нихуя не умея, можно сделать с помощью гугла, тебе ещё и сдавать завтра. Пошёл ка ты нахуй.

Втр 21 Май 2013 02:49:36
>>48515412
Этот содомит либо сагает, либо приумножает свою карму.

Втр 21 Май 2013 02:49:44
>>48515506

Блять, сажу забыл.

Втр 21 Май 2013 02:49:52
>>48514160
Пилишь массив, хуяришь цикл: если число в массиве делится на введенное без остатка - прибавляешь к сумме (задай ее изначально 0). А упорядочивай методом пузырька, сравнивая попарно и переставляя элементы за кучу циклов. Погугли, епт.

Втр 21 Май 2013 02:49:58
>>48515484
Потому что я мирный и добрый социоблядь-проебщик, никого не травлю, всем помогаю по мере возможностей. Ты не должен помогать, но ты можешь.


Втр 21 Май 2013 02:50:06
>>48515493
10 PRINT "A TO!"

Втр 21 Май 2013 02:50:08
>>48515493 и всем


без сажи отписался - пидор

Втр 21 Май 2013 02:51:01
>>48515401
Нет, в натуре не идет - ошибку выдает.

Втр 21 Май 2013 02:51:58
>>48515552
Первая же ссылка в гугле - открыл - скачал - запустил. Все идет.

Втр 21 Май 2013 03:00:17
>>48515753
Ща напишу школьник, не переживай. Qbasic запустилсяю

Втр 21 Май 2013 03:03:29
>>48515814
Круто, спасибо.
Школьник

Втр 21 Май 2013 03:16:37
А вообще, я всегда думал, что мой учитель по информатике - двачер.

Втр 21 Май 2013 03:21:06
>>48515814
Врун.

Втр 21 Май 2013 03:21:36
>>48516202
Ты сука зачем винду снёс в аудитории?

Втр 21 Май 2013 03:23:48
>>48516342
Мимо, я школьник, у нас классы.

Втр 21 Май 2013 03:25:47
>>48516396
Не аттестован будешь в четверти

Втр 21 Май 2013 03:26:25
>>48516450
Полугодии...

Втр 21 Май 2013 03:30:27
>>48516549
Что значит твое 26?

Втр 21 Май 2013 03:31:15
>>48516574
Ответ на твою задачу.

Втр 21 Май 2013 03:32:41
>>48516596
Спасибо, было бы круто увидеть сам скрипт

Втр 21 Май 2013 03:34:59
>>48514160
Все, написал тебе на твой Басике, лови:


PRINT "Vvedite kolichestvo chisel v massive:"

INPUT K

PRINT "V massive budet "; K; " chisel"

DIM massiv(K)

FOR x = 1 TO K
PRINT "Vvedite chislo pod nomerom "; x; "v massive"
K3 = 100
INPUT chislo
PRINT "Vy vveli "; chislo; ", teper ono budet v massive pod nomerom "; x
massiv(x) = chislo
NEXT

K4 = 100
summa = 0

PRINT "Teper vvedite chislo K"
INPUT K2

K3 = K3 * K4

PRINT "Vy vveli chislo K, ono ravno "; K2

PRINT "Nachinaju sobirat summu... please wait"

FOR x = 1 TO K
FOR x2 = 1 TO K3
x3 = x3 * 2
NEXT
IF massiv(x) MOD K2 = 0 THEN
summa = summa + massiv(x)
PRINT "dobavil "; massiv(x)
END IF

NEXT

PRINT "Sobral summu kratnih K chisel, ona ravna "; summa

PRINT "Nachinaju sortirovat massiv... please wait"

notfinished = 1

WHILE notfinished = 1
notfinished = 0
FOR x = 1 TO K
FOR x2 = 1 TO K3
x3 = x3 * 2
NEXT

IF x < K THEN
IF massiv(x) < massiv(x + 1) THEN
tempx = massiv(x + 1)
massiv(x + 1) = massiv(x)
massiv(x) = tempx
notfinished = 1
PRINT "Prodoljadu sortirovku... please wait"
END IF
END IF

NEXT
WEND


PRINT "Otsortiroval massiv, vivoju otsortirovanniy massiv: "

FOR x = 1 TO K
PRINT massiv(x)
NEXT


Втр 21 Май 2013 03:38:25
>>48516689
Ого, а здоровая прога вышла.

Втр 21 Май 2013 03:38:52
Твоя карма улучшилась, спасибо.

Втр 21 Май 2013 03:41:33
>>48516689
Лол, через 123 сообщения двач осилил школьную прогу на Basicе.

Втр 21 Май 2013 03:43:48
>>48516689
Олололо, да это шедевр двачекодерства.

Втр 21 Май 2013 03:45:45
>>48516689
ты умрёшь через 2 дня

Втр 21 Май 2013 03:47:30
>>48516921
Прости, погорячился.
Я заебался это вводить.

Втр 21 Май 2013 03:48:11
>>48516945
Давай введу, зачем тебе утруждаться.

Втр 21 Май 2013 03:49:20
>>48516689

Ты не использовал паттерны MVC, это плохо.

Втр 21 Май 2013 03:50:17
>>48516980
Ты охуел? Сам пиши на Басике с использованием MVC.

Втр 21 Май 2013 03:51:01
>>48516689
Лол, а что все надписи выводятся английскими буквами?

Втр 21 Май 2013 03:52:08
>>48517003
Ебаный Basic не дает вводить русские символы же из под DosBox.

Втр 21 Май 2013 03:53:30
>>48516689
>Nachinaju sortirovat massiv... please wait

Проиграл.

Втр 21 Май 2013 03:53:31
>>48517031
Май тичер охуеет от этого и заставит объяснять каждый шаг, её богу.

Втр 21 Май 2013 03:54:01
>>48517031
> Ебаный Basic не дает вводить русские символы же из под DosBox.
Просто ты НЕ МОЖЕШЬ В ЮНИКОД

Втр 21 Май 2013 03:54:09
>>48517057
ей
фикс

Втр 21 Май 2013 03:54:30
>>48516689
>notfinished = 1
nezakonchil = 1

Пофиксил тебя.

Втр 21 Май 2013 03:58:00
>>48514160
На чем вы ее сдаете?

Втр 21 Май 2013 03:59:15
>>48517130
На компутерах, лол.

Втр 21 Май 2013 04:00:11
>>48517078
Обзмеился.

Втр 21 Май 2013 04:02:04
>>48516689
Вангую, что ты из Microsoft. Охуенная прога.

Втр 21 Май 2013 04:04:40
>>48517210
Да, я Билл Гейтц.

Втр 21 Май 2013 04:08:16
>>48516689
На дваче пишут на говнокубасике. Спешите видеть.

Втр 21 Май 2013 04:10:26
>>48517338
Программисты уровня /b

Втр 21 Май 2013 04:11:38
>>48517368

Да ладно, вы просто завидуете, что так не можете.

Втр 21 Май 2013 04:13:40
>>48517394
Мэдскиллз уровня /b

Втр 21 Май 2013 04:17:39
>>48517460
Ложки Моментом наверное долго приклеивал.

Втр 21 Май 2013 04:25:17
>>48517338
Пишу на кубасике, получаю 100к в месяц. ДС, есть тян.

Втр 21 Май 2013 04:27:57
>>48517612
Брат не умер?

Втр 21 Май 2013 04:29:28
>>48517612
Тян любят кубасик.

Втр 21 Май 2013 04:31:23
>>48517612
А ты смешной. Я убью тебя последним.

Втр 21 Май 2013 04:31:29
>>48517668
Мой кубасик уже 19см, конечно любят.

Втр 21 Май 2013 04:35:06
>>48517690
> кубасик
Это то, что появляется на месте кубиков при злоупотреблении пивом?

Втр 21 Май 2013 04:43:06
>>48516689
Ну нихуя у тебя там циклов. Сложно на qbasic писать, да.

Втр 21 Май 2013 04:48:50
Нахуя вы блять ему домашку решаете. ОП - обычный гопник в худшей в своем мухосранске школе. Нахуя бы ему помогаете?

Втр 21 Май 2013 04:49:48
>>48517848
Он вкурит кубасик и станет великим программистом же.

Втр 21 Май 2013 04:51:41
>>48517858
BolgenOS напишет несомненно.

Втр 21 Май 2013 04:55:23
>>48516689
Ну и говнокод.

Втр 21 Май 2013 04:57:39
>>48517908
На кубасике все говнокод.

Втр 21 Май 2013 04:58:58
>>48517930
Вы просто не умеете в кубасик.

Втр 21 Май 2013 05:02:06
Вы уебки, нахуй вы тупому школьнику помогли?

Втр 21 Май 2013 05:03:41
>>48517968
Чтобы все было лампово и мимими.

Втр 21 Май 2013 05:08:53
>>48517986
Что за плюсач?

Втр 21 Май 2013 05:19:09
>>48518018
Сосач-плюсач.

Втр 21 Май 2013 05:26:42
>>48514160
Открой учебник дебил.

Втр 21 Май 2013 05:59:04
Завтра вся школа узнает про охуенный сайт где решают домашку какие-то дрочилы за фотки младшей сестры

Втр 21 Май 2013 06:18:07
Анон, доставь пасту про высшее образование в it.

Втр 21 Май 2013 06:25:25
>>48514624
ты ахуел пес? в школе токо кубейсик и есть.

кароче на си шарпе я очень люблю сосать сочные хуи и проглатывать вкусную сперму ебашишь массив из n переменных. Потом типо задаешь n, потом вбиваешь массив через console.readline. Потом типо вводишь число, которому должно быть кратно и каждый элемент массива через for делишь на это число и ставишь условие, чтобы кароче без остатка было, и если делится без остатка, то приплюсовываешь этот элемент к заранее созданной переменной S к примеру. Вот. а для сортировки используешь команду sort. я уже нихуя не помню как. вроде array.sort что-ли. заебень в гугле

Втр 21 Май 2013 06:35:18
>>48517725
VisualBasic

Втр 21 Май 2013 07:30:16
>>48516689 уже давно запилили

Втр 21 Май 2013 08:22:28
>>48514160
>Пикрилейт - моя зачетная работа по информатике 10 класс.
Должен страдать

мимо программист

Втр 21 Май 2013 10:49:55
>>48518829
>а для сортировки используешь команду sort. я уже нихуя не помню как. вроде array.sort что-ли.

Вся суть современной школоты. Вот откуда потом говнокодеры берутся. На кубасике выше хоть сами алгоритм сортировки массива написали.

Втр 21 Май 2013 11:08:00
>>48524474
Программеру сортировка щас все равно не нужна, во всех языках она уже реализована, или за 2 минуты в гугле можно готовую библиотеку найти. Это только в кубасиках всяких все руками пишут.

Втр 21 Май 2013 11:29:24
>>48525138
Так это говнокодить только. В гугл без знания всех сортировок не пустят же.

Втр 21 Май 2013 11:35:48
>>48514160
массив A;
целое N, K, SUM;
N = введите N;
K = введите K;

пока i < N делай
--A = введите i элемент массива
--i += 1;
конец

пока i<N
--если (A<em>/K==0)
----SUM += A<em>
конец

вывод SUM

</em></em>

Втр 21 Май 2013 11:37:25
>>48526260
массив A;
целое N, K, SUM;
N = введите N;
K = введите K;

пока i < N делай
--A = введите i элемент массива
--i += 1;
конец

пока i<N
--если (A<em>/K == 0)
----SUM += A<em>
--i += 1
конец

вывод SUM

фикс
</em></em>

Втр 21 Май 2013 11:38:13
Охуеть, тред жив! Оп, ты всё ночь бампал, что ле?

Втр 21 Май 2013 11:47:55
>>48516689
Даже с алгоритмами сортировки.

Втр 21 Май 2013 11:48:56
>>48526318
А сортировка где?

Втр 21 Май 2013 12:18:39
>>48526038
Нахуй нам в гугл, в обычную шарагу пойдем. Дешево и сердито, без алгоритмов берут.

Втр 21 Май 2013 12:35:40
>>48527663
В microsoft идите, там с кубасиком берут.

Втр 21 Май 2013 13:22:04
>>48514624
Поехал что-ли, какой паскаль? Все на православных C# и Java давно пишут.

Втр 21 Май 2013 13:29:28
>>48530193
ООП не нужно! Только pure C, только хардкор!

Втр 21 Май 2013 13:49:17
>>48530528
Да кому твой С сейчас дался, пишу на C#, получаю 80к.

Втр 21 Май 2013 13:50:40
>>48531404
Ебать ты нищеброд!
пишу на С, получаю 150к

Втр 21 Май 2013 14:40:35
>>48531404

Пишу на PHP, получаю 200к. Учите нормальные языки, нищеброды.


← К списку тредов