Вход на сайт
Изучаем программирование – советы
2544 просмотров
Перейти к просмотру всей ветки
в ответ AlexNek 04.05.15 21:12, Последний раз изменено 07.05.15 18:47 (AlexNek)
Под программированием подразумевают процесс создания программ и не обязательно только для компьютера. Но нас будут интересовать именно компьютерные программы, где мы будем говорить компьютеру что ему делать. Есть еще и другие способы решения задач но мы не будем отвлекаться на них.
Однако , что бы кому то говорить, что ему делать нужно вначале самому знать, как решить поставленную задачу. В простых случаях решение можно найти самому, в сложных, лучше поискать решения данной задачи и выбрать наиболее подходящее. Нам требуется найти и описать определенный порядок инструкций, определяющий действия исполнителя для достижения нужного нам результата. Желательно его достичь за минимальное количество шагов. Данный порядок действий называют алгоритмом. Для решения одной и той же задачи в каждой конкретной ситуации может быть свой алгоритм. Например, алгоритм приготовления чая может быть следующим:
1. Взять чашку.
2. Положить в чашку требуемое количество сахара
3. Положить в чашку пакетик с чаем.
4. Начать подогрев воды.
5. Ждать пока вода закипит.
6. Залить кипяток в чашку.
7. «Смешать» компоненты.
Казалось бы все понятно, но тем не менее для каждого пункта наберется еще море вопросов. Например для пункта 1. Где лежат чашки? Какого размера чашка нам нужна? Если чашка грязная то где ее помыть? Для пункта 4. Где взять воду? В чем ее подогревать? Сколько нужно воды? Как ее подогреть быстрее всего? Вам нужно будет найти ответы на все вопросы для каждой конкретной ситуации. И фактически для каждого пункта можно написать свой, более подробный алгоритм. При этом, достаточно простая задача для человека превращается в относительно сложный алгоритм для «робота». Однако, как можно заметить, нам требуется произвести определенные действия, в определённой последовательности над определенными предметами. Иногда просто сменив последовательность действий мы можем сделать наш алгоритм более эффективным. Например, начать пункт 4 перед пунктом 1.
Довольно часто, при изучении программирования, этап составления алгоритма считается не важным и проскакивается по верхам. А ведь еще не начав собственно программировать, мы уже столкнулись с проблемами и научились их решать. По крайней мере, надеюсь стало понятно, что решение любой сложной задачи можно разбить на последовательность решений более простых задач, а те в свою очередь разбить на решения еще более простых задач и так до тех пор пока уже не будет иметь смысла дробить задачи на более мелкие. Ведь проще сконцентрироваться на анализе и решении более простой задачи чем сложной. И совсем не беда, если еще неизвестно как решить ту или иную задачу. В конце концов решение найдется. Также не обязательно непременно идти от сложного к простому, рекомендаций на эту тему достаточно много, выбирайте путь который больше всего подходит для конкретной задачи и нравится вам.
Ну ладно алгоритм мы написали, а что дальше? А дальше нужно просто перевести этот алгоритм на язык понятный нашему «роботу». Однако нынешним роботам требуются достаточно примитивные команды, типа поднять манипулятор 1 на 30 см вверх, переместить манипулятор 1 на 20 см влево, закрыть зажим на манипуляторе 1. Перевести наш алгоритм на данный язык будет весьма непросто. Так что желательно либо научить робота исполнять команды более высокого уровня, либо написать программу на каком-то промежуточном языке, который можно было автоматически преобразовать на язык понятный нашему роботу. В большинстве случае выбирают использование некоего промежуточного языка, который будет понятен людям и который можно перевести на язык понятный машине. Язык должен иметь возможность описания данных и описания действий.
Данные могут быть атомарными или неделимыми на более мелкие части (целое число, буква) и составными состоящими из нескольких атомарных данных. Составные данные могут быть в свою очередь фиксированного размера (когда количество данных известно до выполнения программы) и переменного размера, а также они могут состоять как из данных одного типа (только целые числа), так и из комбинации различных типов данных (в том числе и составных).
Весьма желательно иметь представление о том как представлены в вашей машине различные типы данных и какие ограничения они имеют. Например, в тип Byte можно записать числа от 0 до 255. (Интересно, появился ли вопрос почему?)
В некоторых языках используются специальные объекты которые объединяют не только данные но и операции над этими данными. Например в объект «динамический массив» можно добавить данные, удалить данные, найти что то конкретное, отсортировать данные и т.п. Стоит отметить, что конкретный язык только определяет, как описывать объекты, реализации стандартных объектов идут как дополнительные модули.
Действия также можно разбить на основные типы:
- выполнение. Выполнить операцию без каких-либо условий.
- ветвление / развилка. Если некоторое условие на момент выполнения действия правильно (вода нагрелась до 100 С) то выполнить действие1 иначе действие2.
- цикл. Повторяем действие пока выполняется некоторое условие.
- выбор. Выбираем для исполнения некоторое действие согласно текущему состоянию.
Вообще то для построения программы достаточно и первых трех типов действий, но для удобства, каждый язык программирования предоставляет дополнительные типы действий. Часто действия могут объединятся в блоки, которые считаются как бы одним простым действием. Также в многих языках имеются целых три типа различных циклов: для определенного количества раз, с проверкой условия до начала цикла, с проверкой условия после окончания цикла.
Как можно было заметить мы еще ни разу не использовали конкретный язык программирования и совсем неспроста, ведь язык программирования это всего лишь инструмент для постройки программы. Ведь не будете же вы строить дом начав с подробного изучения топора и пилы.
Однако без инструментов и навыков работы с ними также ничего хорошего не получится, даже имея в наличии подробный алгоритм. И остается извечный вопрос с какого языка начать? Увы, но однозначного ответа нет, слишком много определяет конкретная ситуация. Хотя во многих случаях я бы порекомендовал начать с Паскаля. Язык был специально разработан для учебных целей и кроме интернета ничего не понадобится. (1,2,3 – онлайн компиляторы, 4 описание стандартного паскаля на английском, описание расширенной версии паскаля на русском)
1. http://pascalabc.net/WDE/
2. https://ideone.com/
3. http://www.tutorialspoint.com/compile_pascal_online.php
4. http://www.tutorialspoint.com/pascal/index.htm
5. http://pascalabc.net/downloads/pabcnethelp/PABC_Help_Web.html
Часто еще рекомендуют С или С++, как одни из часто используемых. «Опасность» эти языков заключается в том, что они имеют несколько больше возможностей, в которых можно достаточно легко запутаться поначалу. Хотя если Вы можете уже без проблем записать алгоритм программы на своем родном языке, перевести этот алгоритм на конкретный язык программирования не составит большого труда.
Для примера сделаем простейшую программу сложения чисел и проверки результата
Псевдокод:
Ввести число А
Ввести число Б
Записать сумму А+Б в С
Если С больше 10 То вывести текст «Результат >10»
Текст программы:
Однако , что бы кому то говорить, что ему делать нужно вначале самому знать, как решить поставленную задачу. В простых случаях решение можно найти самому, в сложных, лучше поискать решения данной задачи и выбрать наиболее подходящее. Нам требуется найти и описать определенный порядок инструкций, определяющий действия исполнителя для достижения нужного нам результата. Желательно его достичь за минимальное количество шагов. Данный порядок действий называют алгоритмом. Для решения одной и той же задачи в каждой конкретной ситуации может быть свой алгоритм. Например, алгоритм приготовления чая может быть следующим:
1. Взять чашку.
2. Положить в чашку требуемое количество сахара
3. Положить в чашку пакетик с чаем.
4. Начать подогрев воды.
5. Ждать пока вода закипит.
6. Залить кипяток в чашку.
7. «Смешать» компоненты.
Казалось бы все понятно, но тем не менее для каждого пункта наберется еще море вопросов. Например для пункта 1. Где лежат чашки? Какого размера чашка нам нужна? Если чашка грязная то где ее помыть? Для пункта 4. Где взять воду? В чем ее подогревать? Сколько нужно воды? Как ее подогреть быстрее всего? Вам нужно будет найти ответы на все вопросы для каждой конкретной ситуации. И фактически для каждого пункта можно написать свой, более подробный алгоритм. При этом, достаточно простая задача для человека превращается в относительно сложный алгоритм для «робота». Однако, как можно заметить, нам требуется произвести определенные действия, в определённой последовательности над определенными предметами. Иногда просто сменив последовательность действий мы можем сделать наш алгоритм более эффективным. Например, начать пункт 4 перед пунктом 1.
Довольно часто, при изучении программирования, этап составления алгоритма считается не важным и проскакивается по верхам. А ведь еще не начав собственно программировать, мы уже столкнулись с проблемами и научились их решать. По крайней мере, надеюсь стало понятно, что решение любой сложной задачи можно разбить на последовательность решений более простых задач, а те в свою очередь разбить на решения еще более простых задач и так до тех пор пока уже не будет иметь смысла дробить задачи на более мелкие. Ведь проще сконцентрироваться на анализе и решении более простой задачи чем сложной. И совсем не беда, если еще неизвестно как решить ту или иную задачу. В конце концов решение найдется. Также не обязательно непременно идти от сложного к простому, рекомендаций на эту тему достаточно много, выбирайте путь который больше всего подходит для конкретной задачи и нравится вам.
Ну ладно алгоритм мы написали, а что дальше? А дальше нужно просто перевести этот алгоритм на язык понятный нашему «роботу». Однако нынешним роботам требуются достаточно примитивные команды, типа поднять манипулятор 1 на 30 см вверх, переместить манипулятор 1 на 20 см влево, закрыть зажим на манипуляторе 1. Перевести наш алгоритм на данный язык будет весьма непросто. Так что желательно либо научить робота исполнять команды более высокого уровня, либо написать программу на каком-то промежуточном языке, который можно было автоматически преобразовать на язык понятный нашему роботу. В большинстве случае выбирают использование некоего промежуточного языка, который будет понятен людям и который можно перевести на язык понятный машине. Язык должен иметь возможность описания данных и описания действий.
Данные могут быть атомарными или неделимыми на более мелкие части (целое число, буква) и составными состоящими из нескольких атомарных данных. Составные данные могут быть в свою очередь фиксированного размера (когда количество данных известно до выполнения программы) и переменного размера, а также они могут состоять как из данных одного типа (только целые числа), так и из комбинации различных типов данных (в том числе и составных).
Весьма желательно иметь представление о том как представлены в вашей машине различные типы данных и какие ограничения они имеют. Например, в тип Byte можно записать числа от 0 до 255. (Интересно, появился ли вопрос почему?)
В некоторых языках используются специальные объекты которые объединяют не только данные но и операции над этими данными. Например в объект «динамический массив» можно добавить данные, удалить данные, найти что то конкретное, отсортировать данные и т.п. Стоит отметить, что конкретный язык только определяет, как описывать объекты, реализации стандартных объектов идут как дополнительные модули.
Действия также можно разбить на основные типы:
- выполнение. Выполнить операцию без каких-либо условий.
- ветвление / развилка. Если некоторое условие на момент выполнения действия правильно (вода нагрелась до 100 С) то выполнить действие1 иначе действие2.
- цикл. Повторяем действие пока выполняется некоторое условие.
- выбор. Выбираем для исполнения некоторое действие согласно текущему состоянию.
Вообще то для построения программы достаточно и первых трех типов действий, но для удобства, каждый язык программирования предоставляет дополнительные типы действий. Часто действия могут объединятся в блоки, которые считаются как бы одним простым действием. Также в многих языках имеются целых три типа различных циклов: для определенного количества раз, с проверкой условия до начала цикла, с проверкой условия после окончания цикла.
Как можно было заметить мы еще ни разу не использовали конкретный язык программирования и совсем неспроста, ведь язык программирования это всего лишь инструмент для постройки программы. Ведь не будете же вы строить дом начав с подробного изучения топора и пилы.
Однако без инструментов и навыков работы с ними также ничего хорошего не получится, даже имея в наличии подробный алгоритм. И остается извечный вопрос с какого языка начать? Увы, но однозначного ответа нет, слишком много определяет конкретная ситуация. Хотя во многих случаях я бы порекомендовал начать с Паскаля. Язык был специально разработан для учебных целей и кроме интернета ничего не понадобится. (1,2,3 – онлайн компиляторы, 4 описание стандартного паскаля на английском, описание расширенной версии паскаля на русском)
1. http://pascalabc.net/WDE/
2. https://ideone.com/
3. http://www.tutorialspoint.com/compile_pascal_online.php
4. http://www.tutorialspoint.com/pascal/index.htm
5. http://pascalabc.net/downloads/pabcnethelp/PABC_Help_Web.html
Часто еще рекомендуют С или С++, как одни из часто используемых. «Опасность» эти языков заключается в том, что они имеют несколько больше возможностей, в которых можно достаточно легко запутаться поначалу. Хотя если Вы можете уже без проблем записать алгоритм программы на своем родном языке, перевести этот алгоритм на конкретный язык программирования не составит большого труда.
Для примера сделаем простейшую программу сложения чисел и проверки результата
Псевдокод:
Ввести число А
Ввести число Б
Записать сумму А+Б в С
Если С больше 10 То вывести текст «Результат >10»
Текст программы:
Program SumSample;
var
a:integer;
b:integer;
c:integer;
begin
Write('Input integer A:');
Readln(a);
Write('Input integer B:');
Readln(b);
c := a + b;
Writeln('Result A+B=',c);
if(c > 10) then begin
Writeln('Result >10');
end;
end.
Давайте разбирайтесь, а я пока пошел готовить кофе.
Успехов!