Это не столько продолжение, сколько дополнение (в виде набросков) первой части.

Что очень желательно для изучения программирования:

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

Термин информация происходит от латинского слова informatio, что означает - разъяснение, сообщение, осведомленность.

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

Под информацией в теории информации понимают не любые сведения, а лишь те которые, снимают полностью или уменьшают существующую неопределенность. По определению К. Шеннона информация – это снятая неопределенность.

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

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

Информация - это отражение внешнего мира с помощью знаков и сигналов.

Понятие алгоритма. Свойства алгоритма, способы записи.

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

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

«Алгоритм – точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату» - по ГОСТу.

Название «алгоритм» связано с именем выдающегося математика древности Мухамеда бен- муса ал - Хорезма (I Х в. н. э). Предполагается, что он изложил общие правила выполнения действий над числами, представленными в десятичной форме. Существенным было то, что эти правила могли быть применены к любым числам. До этой поры существовало очень много приемов выполнения - арифметических операций, в которых учитывались те или иные особенности конкретных чисел, над которыми проводились эти операции. Например, если один из сомножителей представляет число, состоящее из одних девяток, то к другому сомножителю нужно дописать число нулей, равное числу девяток в первом сомножителе, и затем из получившегося числа вычесть второй сомножитель. Тем самым мы получим нужный результат. Например, если число 999 нужно умножить на 5, мы к цифре 5 добавим три нуля (так. как в первом сом­ножителе три девятки), получим 5000 и затем вычтем второй сомно­житель, т. е. число 5. Результатом будет число 4995, которое и является произведением чисел 999 и 5. Мы и сейчас многими приемами быстрого устного счета. Например, чтобы умножить любое число на 5, надо приписать к нему 0 а и разделить полученное число пополам. Или чтобы умножить число на 25, достаточно умножить это число на 100, т.е. приписать к нему два нуля, и разделить результат на 4. Однако такого рода приемы можно применять только в тех случаях, когда хотя бы один из сомножителей имеет специальный вид (все девятки, 5, 25 и: т. д). Аль-Хорезми предложил правила, пригодные во всех случаях и одинаковые для любых пар чисел. Сторонников методики Аль-Хорезми начали называть алгоритмиками, а под словом «алгоритм» стали понимать систему правил, обладающих некоторыми определенными свойствами. Действия согласно той или иной инструкции, являющейся алгоритмом, для получения определенного результата предполагают наличие некоторых исходных данных. ; Например исходными данными при выполнении арифметической операции над двумя числами является эта пара чисел, а результатом дно число.

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

Первым свойством алгоритма является дискретный, т. е. пошаговый характер определяемого им процесса. Другим важнейшим свойством алгоритмов является массовость. Смысл данного понятия заключается в том, что существует некоторое множество объектов, которые могут служить исходными данными для рассматриваемого алгоритма. Например, для алгоритмов выполнения арифметических действий такими данными - являются все действительные числа. Перемножая цифры мы пользуемся лишь хорошо известной нам таблицей умножения. Если же мы перемножаем многозначные числа, то тут приходится применять алгоритм умножения столбиком. Здесь мы пользуемся таблицей умножения, есть и запоминание результата умножения цифр, и перенос в старшие разряды, и алгоритм сложения столбиком. Заметим, что алгоритм умножения столбиком включает в себя как составную часть алгоритм сложения Подчеркнем еще раз, что алгоритм умножения остается одним и тем же для любых пар чисел. Иными словами, исходными данными для этого алгоритма могут быть любые пары чисел. В свое время противники методов Аль-Хорезми именно за это пренебрежительно относились к «алгоритмикам", снявшим покров таинственности с искусства выполнять арифметические операций. Приведем пример еще одного алгоритма, а именно алгоритма деления отрезка пополам с помощью циркуля и линейки. Исходными данными здесь уже являются не числа, а заданный отрезок. Действия - построение с помощью циркуля и линейки. Для того чтобы разделить отрезок пополам, возьмем раствор циркуля равный длине отрезка, и из концов отрезка опишем этим радиусом окружности. Через точки пересечения окружности проведем впрямую. Эта прямая пересечет заданный отрезок в точке, которая, как известно, и является серединой данного отрезка. Подчеркнем, что приведенная последовательность действий обла­дает свойством массовости, Поскольку ее можно применять к любому отрезку для отыскания его середины.: Вы, конечно же, заметил, что для решения поставленной задачи вовсе не обязательно, чтобы радиус описываемых окружностей  был равен длине заданного отрезка. Достаточно, чтобы эти радиусы были одинаковым и большими, чем половина длины отрезка. Наше ограничение преследовало цель сделать алгоритм четким и однозначным.

Остановимся еще на одной важной особенности, присущей каждому алгоритму. Предполагается, что алгоритм понятен для исполнителя, т. е. исполнитель алгоритма знает, как его выполнить При этом исполнитель алгоритма, выполняя его, действует «механически». Очевидно, что формулировка алгоритма должна быть настолько точна и однозначна, чтобы могла полностью определять все действия исполнителя. Анализ приведенных выше алгоритмов показывает, что если применять алгоритмы повторно к одним и тем же исходным данным то мы всегда будем получать один и тот же результат. Например, если применять рассмотренный ранее алгоритм деления отрезка пополам к одному и тому же отрезку, то каждый раз будем получать одну и ту же точку. И если при этом каждый раз сравнивать результаты, полученные после соответствующих шагов алгоритмического процесса, то окажется, что при одних и тех же исходных данных эти эти результаты всегда будут одинаковыми. Таким образом, можно говорить об определенности и однозначности алгоритмов. Теперь можно более точно определить алгоритм как систему правил, сформулированную на языке, понятном исполнителю и определяющую цепочку действий, в результате выполнения которых мы приходим от исходных данных к искомому результату. Такая цепочка действий называется алгоритмическим процессом, а каждое действие- его шагом. Число шагов для достижения результата обязательно должно быть конечным. Кроме того, алгоритм должен обладать свойствами массовости, определенности и однозначности Механический характер алгоритма, его определенность и одно­значность позволяют в качестве исполнителя рассматривать и специальные машины-автоматы. Неправильно было бы думать, что для любой задачи существует лишь один алгоритм ее решения. Пусть, например, надо сосчитать количество зрителей на трибунах стадиона. Можно сосчитать количество зрителей в каждом секторе потом их сложить. А можно посчитать количество зрителей, сидящих в первом ряду по всему периметру стадион», сложить с количеством зрителей, сидящих во втором ряду затем в третьем и т. д. Результат в обоих случаях, естественно должен получиться одинаковым.

Итак:

Свойства алгоритмов (требования к алгоритмам):

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

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

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

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

5. Массовость. Разработка алгоритмов — процесс интересный, творческий, но непростой, требующий многих, часто коллективных, умственных усилий и затрат времени. Поэтому предпочтительно разрабатывать алгоритмы, обеспечивающие решение всего класса задач данного типа. Например, если составляется алгоритм решения квадратного уравнения АХ2 + ВХ+ С= 0, он должен обеспечивать возможность решения для любых допустимых исходных значений коэффициентов А, В. С.

Важно помнить, что компьютер выполняет операции последовательно, а не параллельно!

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

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

 

НАВЕЯННОЕ Э.Дейкстером

Мы говорили о свойстве массовости алгоритма. Например, нам надо сделать машину для вычисления НОД(111,259). Но усилий, потраченных на создание этой машины, может быть просто жалко. Проще взять листочек, ручку, и посидеть да посчитать. Другое дело, если нам надо сделать машину для вычисления НОД(a,b). Можно потратить время на придумывание и реализацию этой машины. Что может представлять из себя эта машина? Например, лист с таблицей из 250000 ячеек, в каждой из которых было бы соответствующий НОД(x,y). Такая машина обеспечит возможность находить НОД от 1 до 500. А дальше?

Значительно лучше, если мы сумеем найти компактный набор правил, по которым можно находить НОД от любого числа!

Чем хороша десятеричная система счисления? Тем, что увеличение числа на порядок приводит к появлению всего только одной цифры в записи числа! В двоичной системе 1- 1, 10 – 1010, 100 - 1100100, 1000 – 1111101000,  10000 – 10011100010000.  А в чем суть? Представьте, что вы создаете механическую  машину, которая должно воспроизводить эти числа. Для воспроизведения чисел до 100 в двоичной системе вам понадобится 7 колес с 2-мя состояниями (1/0). Если же у вас каждое колесо может иметь 10 позиций с нарисованными цифрами от 0 до 9, то вам достаточно всего 3 колес!

Теперь о компактности алгоритма. Представьте себе алгоритм умножения 2 чисел, если бы вы не знали таблицы умножения. Например 3*5= 3+3+3+3+3. То есть алгоритм выглядел бы примерно так:

3+3=6

6+3=9

9+3=12

12+3=15

Мы можем сделать машину, которая выполняет этот алгоритм. Но он не годится для вычисления 3*3 или 3*6 и т.д. Более того, представьте себе алгоритм умножения 12345*12345! Для этого потребуется 12344 строки в программе!

Мы же поступим по-другому. Разобьем этот алгоритм на возможно более мелкие шаги. Таким шагом будет сложение умножаемого числа и результата предыдущего сложения. И все! Нам только надо повторить этот шаг n-1 раз. (Пример)

То есть мы разбиваем алгоритм на правило выполнения шага в сочетании с критерием того, должен ли этот шаг быть выполнен в следующий раз. При этом мы можем проводить вычисления любой продолжительности. Можно вспомнить растерянность начинающих программистов, когда они в первый раз «зацикливают машины» - «У меня программа такая маленькая!».

Вообще говоря , сколько людей, столько и мнений.

 

 

Что такое ЭВМ? Это набор микросхем, проводов и т.д.  Первые ЭВМ выполняли только одну задачу. Для того, чтобы они могли выполнять другую задачу, их надо было перепаивать. Были ЭВМ, которые программировались с помощью штекерных панелей. Потом распространение получили ЭВМ, у которых ввод программы происходил с помощью перфокарт или перфолент. И только затем научили общаться с клавиатурой и выводить на экран. Сейчас для этого пишут программы на каком-либо языке программирования. Но для этого необходимо научить ЭВМ общаться с внешним миром. Для этого придумали операционные системы. ОП – это обычная программа. Когда вы набираете текст на экране, вы общаетесь с другой программой – редактором текста. Когда вы ищете информацию в Internete, вы работаете с программой Internet Explorer. И т.д. И все эти программы кем-то когда-то написаны.

Принцип двоичного кодирования

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

Кодирование данных двоичным кодом

По мере развития техники появлялись разные способы кодирования информации. Во второй половине XIX века американский изобретатель Сэмюэль Морзе изобрел код, который так и называется – азбука Морзе. Информация кодируется тремя символами: длинный сигнал (тире), короткий сигнал (точка), нет сигнала (пауза) — для разделения букв.

В вычислительной технике используется двоичное кодирование. Вся информация записывается с помощью двух знаков: 0 и 1. Эти знаки называются двоичными цифрами, по-английски — binary digit или сокращенно bit (бит). Одним битом могут быть выражены два понятия: 0 или 1 (да или нет, черное или белое, истина или ложь и т.п.). Если количество битов увеличить до двух, то уже можно выразить четыре различных значения:

или 00 или 01 или 10 или 11

Тремя битами можно закодировать восемь различных значений:

000,  001,  010,  011,  100,  101,  110,  111

Увеличивая на единицу количество разрядов в системе двоичного кодирования, мы увеличиваем в два раза количество значений.

Кодирование целых и действительных чисел

Кодирование целых чисел производиться через их представление в двоичной системе счисления: именно в этом виде они и помещаются в ячейке. Один бит отводиться при этом для представления знака числа (нулем кодируется знак "плюс", единицей — "минус"). Строго говоря, двоичная система в чистом виде позволяет кодировать только целые числа. Для кодирования действительных чисел были разработаны разные способы кодирования. Например, существует специальный формат чисел с плавающей запятой. Число представляется в виде y=a*rp, где a – мантисса, r - основание системы счисления (равно 10 для десятеричной системы и равно 2 для двоичной), p – порядок (степень, в которую возводится основание). Например, 4900000 можно представить как 0.49*107, а 0.00023 – 0.23*10-3. При таком способе кодирования достаточно записать в память мантиссу и порядок числа. Память, отводимая  для хранения числа, делится на 2 части. Важно отметить, что вне зависимости от способа кодирования, в памяти они представлены только набором нулей и единиц. В ячейке нет признака, позволяющего определить способ представления числа. Именно программист должен указать компьютеру, в каком  виде число записывается в память. Сделать это можно, определив ТИП данных.

Кодирование текстовой информации

Если каждому символу алфавита сопоставить определенное целое число (например, порядковый номер), то с помощью двоичного кода можно кодировать и текстовую информацию. Для хранения двоичного кода одного символа выделен 1 байт = 8 бит. Учитывая, что каждый бит принимает значение 0 или 1, количество их возможных сочетаний в байте равно 28 = 256. Значит, с помощью 1 байта можно получить 256 разных двоичных кодовых комбинаций и отобразить с их помощью 256 различных символов. Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и заглавные буквы русского и латинского алфавита, цифры, знаки, графические символы и т.д. Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом, человек различает символы по их начертанию, а компьютер — по их коду. Важно, что присвоение символу конкретного кода — это вопрос соглашения, которое фиксируется в кодовой таблице. Кодирование текстовой информации с помощью байтов опирается на несколько различных стандартов, но первоосновой для всех стал стандарт ASCII (American Standart Code for Information Interchange), разработанный в США в Национальном институте ANSI (American National Standarts Institute). В системе ASCII закреплены две таблицы кодирования — базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255. Первые 33 кода (с 0 до 32) соответствуют не символам, а операциям (перевод строки, ввод пробела и т. д.). Коды с 33 по 127 являются интернациональными и соответствуют символам латинского алфавита, цифрам, знакам арифметических операций и знакам препинания. Коды с 128 по 255 являются национальными, т.е. в национальных кодировках одному и тому же коду соответствуют различные символы. В настоящее время существует несколько различных кодовых таблиц для русских букв (КОИ-8, СР1251, СР866, Mac, ISO), поэтому тексты, созданные в одной кодировке, могут неправильно отображаться в другой.

 

 

Вы все увлекаетесь музыкой в той или иной степени. Так вот немалая часть современной музыки создается на компьютере. Как же это происходит.

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

• цифровая запись, когда реальные звуковые волны преобразуются в цифровую информацию путем измерения звука тысячи раз в секунду;

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

Для оцифровки звука на компьютере обычно используется звуковая карта. На ней расположены АЦП (аналого-цифровой преобразователь) и ЦАП (цифро-аналоговый преобразователь).

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

MIDI-запись была разработана в начале 80-х годов (MIDI — Musical Instrument Digital Interfase — интерфейс цифровых музыкальных инструментов). MIDI-информация представляет собой команды, а не звуковую волну. Эти команды — инструкции синтезатору. МЛDI-команды гораздо удобнее для хранения музыкальной информации, чем цифровая запись, но совершенно не подходит для хранения, например, голоса человека.

А как сейчас происходит проектирование самих ЭВМ? – с помощью специальных программ. Создание новых автомобилей, самолетов и т.д. Создание фильмов ( не только спец эффекты). Даже картины и фотография не обошлись без ЭВМ. И всю эту работу делают программы.

Для выполнения задач на ЭВМ необходимо описать эту задачу на языке, понятном для ЭВМ. Это язык машинных команд - набор двоичных чисел. Писать, а тем более исправлять такую программу достаточно сложно. На это способны только люди, занимающиеся исключительно программированием. Для специалистов других специальностей – инженеров, техников и др. необходимо придумать более простой способ работы с ЭВМ. Поэтому были придуманы, разработаны языки, более удобные для описания алгоритмов. К ним относятся, в частности, Fortran, Бэйсик, Паскаль, PL/1, Cobol, Algol и др.

 

НА ГЛАВНУЮ ДАЛЕЕ
Hosted by uCoz