Твой личный наставник
Помощь с учёбой
Привет, Гость
  Войти…
Регистрация
  Сообщества
Опросы
Тесты
  Фоторедактор
Интересы
Поиск пользователей
  Дуэли
Аватары
Гороскоп
  Кто, Где, Когда
Игры
В онлайне
  Позитивки
Online game О!
  Случайный дневник
BeOn
Ещё…↓вниз
Отключить дизайн


Зарегистрироваться

Логин:
Пароль:
   

Забыли пароль?


 
yes
Получи свой дневник!

Твой личный наставник > Информатика


Пользователи, сообщества c интересом "Информатика".

четверг, 10 октября 2013 г.
ЕГЭ Информатика. ГенийСекса 15:17:17
На интуите курс для подготовки к ЕГЭ по Информатике.
intuit.ru/studies/c­ourses/3531/
773/info­


Категории: Информатика
комментировать 2 комментария | Прoкoммeнтировaть
воскресенье, 14 июля 2013 г.
Python. Лекция 2. ГенийСекса 16:19:44
На этот раз наш ведущий специалист Андрей Гайдель захуярил лекцию про проведение научных исследований с помощью Питона.
Для простых же обывателей данная лекция будет полезна для построения графиков, гистограмм и интегрирования. Приятного освоения.
mediafire.com/?79ld­vuvadsm55in

Категории: Информатика, Python
комментировать 8 комментариев | Прoкoммeнтировaть
среда, 10 июля 2013 г.
Python. Лекция 1. ГенийСекса 16:06:04
Оставляю вам лекцию незабвенного Андрея Гайделя, с уроками по Паскалю которого вы можете ознакомиться в нашем сообществе.
Лекция по основам языка Python.
mediafire.com/?dm51­sody1sgduxb

Так же не забываем, что вы можете углубиться в синтаксис языка с помощью моего авторского справочника для детей. Он хоть и корявый, но сделан из лучших побуждений.
yourowntutor.beon.r­u/43750-624-python-s­pravochnik-dlja-dete­i.zhtml


Категории: Информатика, Python
комментировать 7 комментариев | Прoкoммeнтировaть
четверг, 11 апреля 2013 г.
Pascal: Урок 8. Массивы. ГенийСекса 15:06:33
­­

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

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

В паскале есть иерархия типов, часть из них мы уже знаем. Есть некие группы типов, объединяющие типы со схожими свойствами. Например, можно рассматривать целочисленные типы: Byte, ShortInt, Integer, Word, LongInt, Int64. Над ними можно выделить порядковые типы, на которых есть функции Succ и Pred (то есть следующий и предыдущий элемент множества).
Диапазон - это тип, в который входят значения из заданного диапазона для некоторого другого порядкового типа. Тип данных, как вы помните, определяет множество значений. А такой тип определяет заданное множество значений из диапазона для другого порядкового типа.
Синтаксис такой:
левая_граница .. правая_граница
Например, 10 .. 20 - это тип данных, допускающий целые значения от 10 до 20 включительно.
Можно писать, например,
­­
тогда переменной a можно будет присваивать только такие значения, а если вылезти за границу, будет переполнение (код ошибки 201).

А теперь, насчёт описаний статических массивов:
array [порядковый_тип] of тип;

Здесь порядковый_тип - это тип данных, в котором находятся значения, которые может принимать индекс массива. Например, можно написать
array [Byte] of Integer;
Индексами такого массива будут числа от 0 до 255.

Но обычно используют значения типа диапазон и получается привычная запись
array [начальный_индекс .. конечный_индекс] of тип_данных;
Например,
­­
Переменная a будет иметь тип статического массива на 100500 целых чисел. Обратите внимание, array и of - это ключевые слова.

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

Пользовательские типы - это несколько описаний пользовательских типов через точку с запятой.
Каждое из них имеет вид
название_типа = уже_имеющийся_тип;

Например, можно красиво объявить массив таким образом
­­
Пользовательские типы принято называть, начиная с большой буквы Т.

Если есть переменная a, имеющая тип массив, то можно обратиться к элементам этого массива по индексу: a[индекс]. Это работает как на чтение, так и на запись.
Например, WriteLn(a[i]) выведет i-ый элемент массива; a[i] := i присвоит i-ому элементу массива значение i.
Индекс должен быть из пределов, которые были указаны при объявлении массива
Например, если был объявлен массив array [1 .. N] of Integer, то индекс должен быть от 1 до N включительно.

Если индекс будет не из указанного диапазона, то возникнет ошибка – переполнение, код 201. Это можно отключить с помощью директивы компилятора {$R-} в любом месте программы. Теперь при выхождении за границы диапазона ошибки возникать не будет и программа спокойно скомпилируется, но на вашей совести остается некорректный результат, если индекс берется не из границ диапазона. Казалось бы, зачем тогда нужна эта директива, если программа будет кривой?
Дело в том, что при работе с массивом каждый раз будет проверяться вхождение индекса в диапазон. На это нужно время. А если вы сами позаботились о том, чтобы индекс не вылезал за указанные границы, то можно сэкономить время и отключить проверку директивой {$R-}.

Теперь про динамические массивы. Объявление динамического массива:
array of тип_данных
Динамические массивы ВСЕГДА нумеруются с нуля, как и положено.
Перед использованием переменной типа динамический массив, надо сначала задать длину этого массива. Это делается процедурой SetLength(массив, длина).
Например,
SetLength(a, n);
Напоминаю, что индексируется он с нуля, то есть в нём будут элементы от 0 до n - 1 включительно.

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

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

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

Последняя часть теории – это про то, как эмулировать динамические массивы с помощью статических.
Пока мы тут учимся, мы не будем использовать динамические массивы. В качестве оправдания можно сказать, что они немного медленнее. Но на самом деле, просто потому, что в классическом паскале их не было и из-за этого чуть больше приходилось учитывать, когда пишешь программу.
Например, такая задача: пользователь вводит число N от 1 до 100500, а в следующей строке введёт N чисел через пробел. Организовать массив под это дело.
­­

Задачи буду поступать по мере моего их решения)
Задача 22. Информация о массиве
Дан массив целых чисел. Найдите следующие его характеристики:
• Минимальный элемент
• Максимальный элемент
• Сумму элементов
• Количество чётных элементов на чётных местах
• Длину самого длинного монотонного отрезка
Входные данные
В первой строке входного потока записано единственное целое число N (1 <= N <= 10^3) – количество элементов массива. Во второй строке через пробел записаны N целых чисел Ai (-10^6 <= Ai <= +10^6) – элементы массива.
Результат
В единственной строке выходного потока должно быть записано 5 целых чисел через пробел: минимальный элемент, максимальный элемент, сумма элементов, количество чётных элементов на чётных местах и длина самого длинного монотонного отрезка.
Примеры
Входные данные Результат
­­

Задача 23. Задом наперёд
Дана последовательность целых чисел. Требуется вывести её в обратном порядке.
Входные данные
В первой строке входного потока записано единственное целое число N (1 <= N <= 10^3) – количество чисел. Далее во второй строке через пробел записаны N целых чисел Ai (-10^6 <= Ai <= +10^6) – элементы последовательности.
Результат
В единственной строке выходного потока должны быть записаны N целых чисел через пробел – последовательность в обратном порядке.
Примеры
Входные данные Результат
5
1 2 3 4 5
5 4 3 2 1

10
10 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 10

15
13 17 112 -1 0 1 666 20 8 1989 42 23 12 1 1
1 1 12 23 42 1989 8 20 666 1 0 -1 112 17 13

/Хинт/ Массив вообще не нужен.

Задача 24. Подсчёт
В конце года профессор X занимался отчётами, рассчитывал, сколько и чего было сделано лично им и его подчинёнными. В частности, ему пришлось готовить отчёт по сдаче заказчику N секретных устройств с кодовым названием «ОБЧР-1». Всего существует M марок этих устройств, отличающихся секретными характеристиками, вроде различных видов вооружения и брони. У профессора X имеется список поставленных устройств, включая их марки. Ему хотелось бы включить в отчёт информацию о том, какая марка устройств «ОБЧР-1» была наиболее успешной, то есть устройств какой марки было произведено больше всего и сколько именно.
Входные данные
В первой строке входного потока записаны два целых числа через пробел: N и M (1 <= N <= 10^3, 1 <= M <= 10^6) – количество произведённых устройств и количество их марок. Далее во второй строке через пробел записаны N целых чисел Ai (1 <= Ai <= M) – марки сданных устройств.
Результат
В единственной строке выходного потока должны быть записаны два числа через пробел – марка самого успешного устройства и количество поставленных устройств этой марки. Если ответов несколько, то можно выбрать любой из них.
Примеры
Входные данные Результат
5 3
1 2 2 2 3
2 3

10 2
1 2 2 1 1 2 2 1 2 2
2 6

15 10
2 3 1 3 4 2 5 2 6 3 7 3 8 9 10
3 4

Задача 25. Решето Эратосфена
Не так давно в одной малоизвестной библиотеке сидел никому не известный математик по кличке Эратосфен. Он не сходил с места, потому что пытался найти все простые числа, не превышающие заранее выбранного им числа M. Это было очень важно для него. От этого зависел успех его карьеры. Сжальтесь над несчастным и помогите ему.
Входные данные
В единственной строке входного потока содержится единственное целое число M (1 <= M <= 10^3) – граница поисков Эратосфена.
Результат
В первой строке выходного потока должно быть записано единственное целое число N – количество простых чисел, не превышающих M. Далее во второй строке через пробел должны быть записаны N целых чисел – искомые простые числа в порядке возрастания.
Примеры
Входные данные Результат
10
4
2 3 5 7

100
25
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

1
0

/Хинт/ Метод решения гуглить по названию задачи.
/Хинт2/ Массив можно задать of Boolean ибо мы никак не используем числа внутри массива.

Андрей Гайдель 2013
ред. Ден Фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 4 комментария | Прoкoммeнтировaть
понедельник, 1 апреля 2013 г.
ГенийСекса 01:32:07
Запись только для зарегистрированных пользователей.
среда, 20 марта 2013 г.
Pascal: Урок 6. Циклические конструкции. ГенийСекса 21:22:08
­­


Подробнее…На первом уроке мы говорили про парадигмы программирования. И там было императивное программирование, в котором операторы просто следовали друг за другом, и можно было делать условные переходы к любому другому оператору. Так устроен, например, язык ассемблера. Было доказано, что так можно накодить любой вычислимый алгоритм. Но идеи развивались, нужно было переходить к более высокому уровню программирования и появилось структурное программирование.
Одним из главных сторонников структурного программирования был Николас Вирт, который, как вы помните, создал паскаль. Так вот, в структурном программировании бывает три типа операторов: следование, ветвление и цикл. Было доказано, что этих трёх операторов достаточно, чтобы записать любой вычислимый алгоритм. Мы рассмотрели только два из трёх.

Чтобы выполнить одну и ту же операцию несколько раз, нужно использовать циклы. Циклы позволяют повторять какой-либо оператор несколько раз.
Бывает 4 вида циклов и все они могут быть реализованы в паскале.

Цикл со счетчиком
Иногда бывает полезно последовательно выполнить какой-то участок кода для всех целых чисел из какого-нибудь отрезка.
Циклическая конструкция со счётчиком в паскале записывается так:

­­

Здесь счётчик - это какая-то переменная (левая граница и правая граница - целочисленные значения), между которыми последовательно будут браться значения счётчика; to и downto - это ключевые слова, символ "|" обозначает, что нужно выбрать ровно одно слово из двух.
:= - это оператор присваивания. Переменная - это идентификатор, за которым стоят какие-то данные. Операция присваивания позволяет задать эти данные.
Нужно отметить, что когда ты объявляешь переменные в декларативной части программы, вообще говоря не гарантируется, что они будут инициализированы какими-то значениями.

Так вот, что делает конструкция for:
1. Переменной Счетчик присваивается значение Левая_граница.
2. Осуществляется проверка условия выполнения цикла. Если записано слово to и левая граница больше правой или если записано слово downto и левая граница меньше правой, то завершает работу оператора цикла.
3. Выполняет Тело цикла.
4. Увеличивает значение Счётчика на единицу, если было записано слово to, или уменьшает, если downto.
5. Переходит к шагу 2.

Итак, to пишется, если нужно увеличивать значение счётчика от меньшего к большему, а downto, если его нужно уменьшать.
Например,
­­
выводит все числа от 1 до 10 на экран.
Переменная счётчика должна быть объявлена в декларативной части.
Тело цикла принято писать с отступом, потому что это как бы следующий уровень структуры.
Если нужно выполнить не один оператор, а несколько, то используем блок операторов.

­­

Цикл с предусловием

­­

Условие - логическое значение. Тело цикла выполняется, если условие истинно.

­­

Цикл с постусловием

­­

Блок кода будет выполняться, пока не выполнится условие выхода.
Блок_кода - это действительно блок кода, то есть такой оператор цикла сам по себе действует, как блок операторов. begin и end здесь не требуются.
Условие_выхода - это условие выхода, а не продолжения цикла, как это было в предыдущем случае.
И последнее: блок кода гарантированно выполнится один раз.

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

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

­­

А теперь задачи. Жалко, что их никто не решает, ведь они дают отличную практику.
Задача 12. Интересные числа
Вася считает интересными только те натуральные числа, которые делятся либо на три, либо на пять (но не на то и другое одновременно). Теперь ему хочется узнать, как много таких чисел на отрезке от L до R включительно. Ваша задача – помочь ему в этом.
Входные данные
В единственной строке входного потока через пробел записаны два целых числа L и R (-10000 <= L <= R <= +10000).
Результат
Единственное число – количество интересных чисел на отрезке от L до R включительно.
Примеры
Входные данные Результат
0 10 5
10 20 4
28 32 0

Задача 13. Сумма делителей
Дано натуральное число N. Его делители – это натуральные числа, на которые N делится без остатка. Ваша задача подсчитать для данного числа N сумму его делителей.
Входные данные
В единственной строке входного потока записано единственное число N (1 <= N <= 10^8).
Результат
Единственное число – сумма делителей числа N.
Примеры
Входные данные Результат
6 12
7 8
9 13

Задача 14. Простое число
Простое число – это натуральное число, имеющее ровно два различных делителя. Дано натуральное число N. Требуется определить, является ли оно простым.
Входные данные
В первой строке входного потока записано единственное целое число N (1 <= N <= 10^9).
Результат
В единственной строке выходного потока должно быть записано слово «YES» без кавычек, если число N является простым, иначе слово «NO» без кавычек.
Примеры
Входные данные Результат
7 YES
9 NO
1 NO

Задача 15. Цифровой корень
Пусть имеется натуральное число N. Найдём сумму его цифр N1. Далее найдём сумму цифр этой суммы цифр N2. Будем продолжать эту процедуру, пока очередная сумма цифр Nk не окажется равной предыдущей сумме цифр Nk-1. Получившуюся сумму будем называть цифровым корнем числа N. Ваша задача – вычислить цифровой корень заданного числа.
Входные данные
В единственной строке входного потока записано единственное число N (1 <= N <= 10^9).
Результат
Единственное число – цифровой корень числа N.
Примеры
Входные данные Результат
1 1
29 2
357 6

Задача 16. Число-палиндром
Целое неотрицательное число X будем называть палиндромом, если оно совпадает с числом, записанном теми же цифрами справа налево. Требуется определить, является ли входное число палиндромом.
Входные данные
В единственной строке входного потока записано единственное число X (0 <= X <= 10^9).
Результат
Слово «YES» (без кавычек), если X является палиндромом, или слово «NO» (без кавычек), если это не так.
Примеры
Входные данные Результат
1101 NO
123321 YES
666 YES

Задача 17. Числа Армстронга
Числа Армстронга (самовлюблённые числа, совершенные цифровые инварианты) – это натуральные числа, равные сумме своих цифр, возведённых в степень, равную количеству цифр в числе. Например, число 153 = 1^3 + 5^3 + 3^3 является числом Армстронга. Найдите все числа Армстронга на заданном отрезке.
Входные данные
В единственной строке входного потока через пробел записаны два целых числа L и R (1 <= L <= R <= 10^9).
Результат
Числа Армстронга, лежащие на отрезке от L до R включительно, в порядке возрастания по одному в строке.
Примеры
Входные данные Результат
100 200 153
300 500 370
371
407
1 2 1
2

Андрей Гайдель 2011
Ред. Ден Фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 23 комментария | Прoкoммeнтировaть
вторник, 19 марта 2013 г.
Pascal: Урок 5. Условные операторы. ГенийСекса 15:14:01
­­


Подробнее…
Условные операторы
Условный оператор - это один из трёх ключевых операторов в структурном программировании.
В паскале есть два условных оператора - это if и case. Первый называется оператором ветвления, а второй оператором выбора.

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

Оператор ветвления

­­

Сначала вычисляется Выражение, оно должно быть логического типа. Если выражение истинно, то выполняется Оператор1, в противном случае выполняется Оператор2.
Вторую ветку можно не писать:

­­

Тогда Оператор выполнится, если выражение истинно, в противном случае не выполнится.

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

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

­­

и это будет работать.

Обратите внимание: перед else точка с запятой тоже не ставится, потому что else относится к оператору ветвления, который начался со слова if. Постановка там точки с запятой приведет к ошибке.

В паскале, как и в большинстве языков программирования, переводы строк роли не играют.
Поэтому можно написать даже так:
begin WriteLn("Hello, World!") end.
Только это некрасиво и отстой :3

Ветки оператора ветвления могут исполнять не только 1 оператор, но и несколько. Для этого используется конструкция begin end. Это специальная синтаксическая конструкция под названием "блок операторов". Блок операторов - это тоже оператор, который выполняет поочерёдно входящие в него операторы.
С блоком операторов можно красиво писать, например, так:

­­

Обратите внимание, как соблюдаются отступы.

Для вложенных операторов рекомендуется такая форма записи:

­­

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

Этот оператор называется оператором выбора. Его синтаксис:

­­

Сначала вычисляется Выражение, потом его значение последовательно сравнивается со Значениями. Как только найдено совпадение, выполняется соответствующий Оператор. Если совпадений не найдено, то выполняется Оператор в ветке else. Опять же ветку else можно опустить.
В качестве Выражения могут быть использованы целочисленные типы данных и Char. Вместо единичного оператора может быть использован блок операторов (в этом случае принято begin писать на той же строке где и значение).
Обратите внимание на точки с запятыми. Их простановка в этом операторе ошибки не вызовет.

Пример.

­­

Ну вот и вся теория, решаем задачки :3
Задача 5. Модуль числа
Модуль (абсолютная величина) целого числа – это корень из его квадрата. При этом квадрат целого числа – это произведение его само на себя, а корень – это такое положительное число, квадрат которого равен исходному числу. Более формально это записывается такими формулами:
|x| = sqrt(x^2);
x^2 = x * x;
sqrt(x) = y <=> y^2 = x.
Ваша задача – вычислить модуль данного целого числа.
Входные данные
В единственной строке входного потока записано единственное целое число X (-10000 <= N <= 10000).
Результат
Единственное целое число – модуль числа X.
Примеры
Входные данные Результат
13 13
-13 13
0 0

Задача 6. Максимум двух чисел
Дано два целых числа: A и B. Нужно найти наибольшее из них.
Входные данные
В единственной строке входного потока через пробел записаны два числа A и B (-10000 <= A, B <= 10000).
Результат
Наибольшее из чисел A и B.
Примеры
Входные данные Результат
13 666 666
666 13 666
0 0 0

Задача 7. Минимум трёх чисел
Дано три целых числа. Нужно найти наименьшее из них.
Входные данные
В единственной строке входного потока через пробел записаны три целых числа A, B и C (-10000 <= A, B, C <= 10000).
Результат
Наименьшее из чисел A, B и C.
Примеры
Входные данные Результат
13 666 1024 13
666 13 -1 -1
13 -666 -666 -666

Задача 8. Месяц
Требуется вывести английское название месяца по номеру этого месяца.
Входные данные
В единственной строке входного потока записано единственное целое число N (1 <= N <= 12).
Результат
Английское название месяца, идущего в году под номером N, с большой буквы.
Примеры
Входные данные Результат
1 January
3 March
8 August

Задача 9. Координатная плоскость
Дана точка с целыми координатами на декартовой координатной плоскости. Нужно определить её положение относительно центра координат.
Входные данные
В единственной строке входного потока через пробел записаны два целых числа X и Y (-10000 <= X, Y <= 10000) – координаты точки.
Результат
Единственное число – номер координатной четверти, большая латинская буква X, если точка находится на оси Ox, большая латинская буква Y, если точка находится на оси Oy, либо число 0, если точка находится в центре координат.
Примеры
Входные данные Результат
1 2 1
-1 -1 4
0 666 X

Задача 10. Високосный год
Изначально високосным считался только тот год, номер которого от рождества Христова делился нацело на 4. Но чтобы компенсировать систематически возникающую при таком подстчёте ошибку и избежать смещения в будущем, в 1582 году римский папа Григорий XIII провёл реформу календаря. Чтобы средний календарный год лучше соответствовал солнечному, было решено изменить правило високосных лет. По-прежнему високосным оставался год, номер которого кратен четырём, но исключение делалось для тех, которые были кратны 100. Отныне такие годы были високосными только тогда, когда делились ещё и на 400. Ваша задача по номеру года определить, является ли он високосным.
Входные данные
В единственной строке входного потока записано единственное целое число Y (-10000 <= Y <= 10000) – год от рождества Христова. Отрицательный год означает соответствующий год до нашей эры.
Результат
Слово «LEAP» (без кавычек), если год Y является високосным, или слово «NORMAL» (без кавычек), если это не так.
Примеры
Входные данные Результат
2009 NORMAL
2004 LEAP
2000 LEAP

Задача 11. Треугольник
Имеются длины сторон треугольника: A, B и C. Нужно описать этот треугольник как можно подробнее.
Входные данные
В единственной строке входного потока через пробел записаны три целых числа A, B и C (1 <= A, B, C <= 10000).
Результат
В каждой строке выходного потока должно располагаться одно слово, описывающее треугольник с указанными сторонами. Порядок слов не важен, но если треугольник удовлетворяет некоторому свойству, то слово, свидетельствующее об этом непременно должно быть на одной из строк выходного потока. Соответствие слов и свойств такое:
ERROR – не существует треугольника с указанными сторонами;
OBTUSE – тупоугольный треугольник;
ACUTE – остроугольный треугольник;
RIGHT – прямоугольный треугольник;
SCALENE – разносторонний треугольник;
ISOSCELES – равнобедренный треугольник;
REGULAR – правильный треугольник.
Примеры
Входные данные Результат
3 4 5 RIGHT
SCALENE
1 2 3 ERROR
5 5 6 ACUTE
ISOSCELES


Андрей Гайдель 2011
Ред. Ден Фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 6 комментариев | Прoкoммeнтировaть
воскресенье, 17 марта 2013 г.
ГенийСекса 14:27:24
Запись только для зарегистрированных пользователей.
пятница, 15 марта 2013 г.
Pascal: Урок 4. Логические и побитовые операции. ГенийСекса 12:00:10
­­


Подробнее…Алгебра высказываний
Начнём издалека. Ещё в Древней Греции появилась хитрая алгебра высказываний.
Высказывание - это некоторое выражение на естественном языке, которое либо истинно, либо ложно. Например, "2 + 2 = 4" или "вчера я был в Пятигорске" - это высказывания, а "вечность пахнет нефтью" или "брадобрей, который бреет только тех, кто не бреется сам, бреет себя сам" - это не высказывания, а просто некие синтаксически правильные конструкции, лишённые возможности быть истинными или ложными.

Рассмотрим множество всех высказываний и введем на нем некоторые операции.
1. Операция отрицания. Отрицание высказывания – это высказывание противоположное ему.
2. Операция "и". Высказывание (A и B) истинно, когда истинны оба высказывания - и A, и B.
3. Операция "или". Высказывание (A или B) истинно, если хотя бы одно из высказываний - или A, или B - истинно. Если и А, и В истинны, то высказывание (A или B) тоже истинно.
4. Операция "либо". (A либо B) истинно тогда и только тогда, когда истинно ровно одно из высказываний - либо A, либо B.
5. Операция следования. Высказывание (если A, то B) ложно, если A истинно, а B ложно. В противном случае, оно истинно.
Это действительно хитрая операция. В этой связи есть так называемый Парадокс Карри. Парадокс звучит как "если это высказывание истинно, то русалки существуют".
Высказывания, ссылающиеся сами на себя, называются автореферентными.

Пусть есть множество всех высказываний, тогда справедливы три аксиомы логики Аристотеля:
1. Закон тождества (A = A). Иными словами, любое высказывание - это только это самое высказывание, а не какое-то другое.
2. Закон отрицания (не не A = A). То есть, дважды противоположное высказывание даёт то же высказывание.
3. Закон исключённого третьего. A либо истинно, либо ложно. Третьего не дано
Когда говорят о женской логике, обычно подразумевают, что в ней нарушаются какие-то из этих аксиом.

Булева алгебра
Абстрагируемся от высказываний вообще, и обозначим ложь будем нулем, а истину - единицей.
Операция - это закон, который переводит элементы множества в само это множество. Унарные операции работают с одним операндом (например, унарный минус (-10)). Бинарные операции берут два операнда и ставят им в соответствие какой-то элемент множества

Итак, пусть есть множество {0, 1}. На таком множестве можно задать конечное число операций (унарных и бинарных).

Унарных операций на этом множестве 4:
1. Тождественный 0 – операция, всегда возвращающая 0.
0(0) = 0, 0(1) = 0
2. Тождественное преобразование – оператор, возвращающий свой аргумент.
­­
3. Отрицание
– операция, возвращающая противоположный элемент множества.
­­
4. Тождественный 1 – оператор, всегда возвращающий 1.
1(0) = 1, 1(1) = 1

Если представить в виде схемы, где номера 1-4 – номера операций:
­­

Бинарных операций для множества {0, 1} – 16, вот как это выглядит с таблице (x/y – операнды на входе, все операции обозначены):
­­

Давайте разбираться.
Операции 0 и 15 - это операции тождественный 0 и тождественный 1 соответственно.
Операции 3 и 5 – аналоги унарной тождественной операции для левого и правого операнда соответственно.
Операции 10 и 12 – отрицание для правого и для левого операнда соответственно.
Всё неинтересные операции. Формально бинарные, но фактически унарные. Но остальные интереснее.

1. Конъюнкция – аналог операции "и".
2. Отрицание импликации.
4. Отрицание обратной импликации.
6. Сложение по модулю два – как бы двоичное сложение – "исключающее или".
7. Дизъюнкция – аналог операции "или".
8. Стрелка Пирса - отрицание дизъюнкции.
9. Эквиваленция – оператор сравнения на одинаковость операндов (помним, что 0 – это ложь, 1 –истина). Если операторы равны, то возвращает 1, если нет – 0.
11. Обратная импликация.
13. Импликация – аналог операции "если, то".
14. Штрих Шеффера - отрицание конъюнкции.
Все обозначения операций смотрите в таблице.

Предикат - это функция, переводящая элементы произвольного множества в множество {0, 1}.
Например, предикат P(x, y) = "x и y женаты". В зависимости от различных x и y из множества людей этот предикат будет принимать значение 0 или 1. Если они действительно женаты, он вернёт 1, иначе - 0.
Поэтому, все операции сравнения чисел - это предикаты.
Операции сравнения: >, <, >=, <=, =, <> - каждая из них берёт два операнда и возвращает истину или ложь.
Пример:
P(x, y) = x > y
P(100, 200) = 0
P(200, 100) = 1
P(0, 0) = 0
Предикаты могут принимать сколько угодно аргументов.

Итак, в паскале есть тип Boolean – это логический тип. Переменные этого типа принимают два значения: true и false. true и false - это ключевые слова, которые являются литералами.

На этом типе данных определены 4 операции:
not - отрицание (унарная)
and - конъюнкция
or - дизъюнкция
xor - сложение по модулю 2

Кстати, xor представим первыми тремя операторами:
a xor b = a and not b or not a and b
Эти операции выполняются в порядке: not, and, or.
Операция эквиваленции реализована с помощью оператора сравнения =.

Как домашнее задание:
1. Выразить через все эти операторы операцию следования (импликации).
2. Решить ((a and not b) xor (a or not b)) and (a or not b and not a) при a = true, b = false.
Логический тип данных в программировании используется как флаг, который можно ставить и снимать в процессе. Следует понимать, что любая операция сравнения возвращает значение логического типа (вспомните предикаты).
В паскале у логических операций приоритет выше, чем у операций сравнения, поэтому имеет смысл разумно расставлять скобки.

Побитовые операции
Целые числа в компьютере хранятся в двоичном коде. Операции and, or, xor и not применимы к целым числам. В этом случае, они делают ту логическую операцию, за которую отвечают, но над каждым битом двоичного представления числа.
Например, 10 and 12 = 1010 and 1100 = 1000 = 8.
Кстати, not 5 = -6, что весьма внезапно (учитывайте, что двоичное представление числа 5 – это куча нулей в начале и в конце 101). Асло, если самый старший бит числа - единица, то оно отрицательное.
Объяснение, собственно, такое. -5 получится из числа 5, если инвертировать и прибавить единицу. А если просто инвертировать (операция not), то получится на единицу меньше. То есть not 5 = -5-1 = -6.
^_^
Таким образом, not x = -x – 1.

Еще две побитовые операции, которые не являются логическими: shl и shr от слов shift left и right соответственно. Сдвиги влево и вправо - это бинарные операции.
x shl y - сдвигает число x на y двоичных разрядов влево. shr соответственно вправо.
Например, пусть есть 8 разрядов:
5 shl 1 = 00000101 shl 1 = 00001010
100 shr 3 = 11001100 shr 3 = 00011001
Все эти операции делает не паскаль, а непосредственно процессор, поэтому аналогичные операции на других языках программирования выполняются точно так же, хотя и синтаксически могут отличаться.
В принципе, процессорные операции выполняются очень быстро, примерно одинаково быстро. Но когда этих операций дофига, то становится заметно, что побитовые операции выполняются быстрее арифметических, а в арифметических сложение и вычитание выполняется быстрее, чем умножение и деления. Поэтому, если есть возможность записать что-то с помощью битовых операций, надо это сделать.

Рассмотрим три классических примера:
1. С помощью сдвигов можно умножать и делить на степени двойки.
Тут есть один подводный камень – переполнение. Число разрядов ограничено, поэтому, если разряды выйдут за пределы выделенной памяти, они потеряются, из-за чего будут ошибки.
100 shl 1 = 11001100 shl 1 = 10011000 = -52, а должно было на 2 умножить.
Кстати, в паскале нет оператора возведения в степень.
2. Проверить четное ли число можно с помощью операции дизъюнкции. Заметьте, что четные числа в двоичном коде заканчиваются на 0, а нечетные – на 1. Поэтому, если n and 1 возвратит 0, значит число n четное, иначе – нечетное.
3. Двоичный код числа, являющегося степенью двойки, являет собой единицу и какое-то число нулей после нее. 2 = 10, 4 = 100, 8 = 1000 и так далее. Проверить, является ли число степенью двойки, можно вычислив n and (n - 1). Если это выражение равно 0, то n является степенью двойки, иначе – не является.
Все эти три случая крайне просты и выводятся из простого наблюдения и нехитрых экспериментов. Советую убедиться в работе всех побитовых операций и объяснить полученные результаты.

Андрей Гайдель 2011
Ред. Ден фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 2 комментария | Прoкoммeнтировaть
среда, 13 марта 2013 г.
Pascal: Урок 3. Целочисленное программирование. ГенийСекса 07:48:33
­­


Подробнее…­­Заголовок программы можно добавить перед блоком программы с помощью ключевого слова program. Зачем нужно слово program и заголовок теперь уже никто не скажет. Изначально задумывалось, что в этой инструкции могут передаваться параметры командной строки, что в ней определяются подключаемые модули и что имя программы можно как-то использовать в других программах. На самом деле, всё это так и не реализовано и инструкция program осталась пустой. Ну вроде как она задаёт заголовок программы.

Ещё одна важная часть языка программирования – комментарии. В паскале комментарии выделяются в фигурные скобки {}. Комментарии игнорируются компилятором. Положено писать комментарии перед началом того, что комментируешь.








Комментарии используются в следующих случаях:
1. Нужно пояснить, что делает некий программный модуль (тогда они пишутся перед его заголовком):
­­
2. Нужно пояснить, что происходит в некоторой строчке кода (тогда комментарий пишется в той же строчке после неё):
a := a xor (b or (a + c) and 1); {It's blah-blah-blah algorithm}
3. Нужно полностью документировать модуль. Тогда пишется полный комментарий, очень длинный, с примерами использования, который можно просто сразу в документацию копировать.
4. Нужно поставить заглушку в коде, который ещё не написан:
{TODO: blah-blah-blah algorithm}
TODO - это принятое обозначение для таких комментариев.
5. Нужно указать на место в коде, содержащее ошибку:
c := a + b; {FIXME}

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

Операторы в программе разделяются точкой с запятой.

Процедуры ввода/вывода
Вывод осуществляется процедурами Write/WriteLn. Ln в конце названия процедуры говорит о том, что после выполнения вывода осуществится переход на новую строку. В скобках через запятую записываются данные, которые нужно вывести. Строки пишутся в кавычках (одинарных), чтобы вместо переменной вывелось ее значение, записывают только ее идентификатор. Например, WriteLn(a, ' + ', b, ' = ', a + b).

Ввод, аналогично, выполняется процедурами Read/ReadLn. В скобках через запятую записываются переменные, куда сохраняются вводимые данные. ReadLn желательно использовать для чтения всей строки до конца, а если надо просто последовательно считывать числа через пробел или перевод строки, то можно всегда использовать Read. Например, Read(a, b, c, d, e).
После выполнения программы, окно с ней сразу закрывается. Поэтому, чтобы увидеть результат, в конце программы пишут строку
ReadLn;

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

А теперь вспомним, что информация в компьютере хранится в двоичном коде. 0 и 1 легко представляются аппаратно как есть контакт / нет контакта.
Когда мы заводим переменную данного целого типа, под неё выделяется конкретное число байт в памяти.
Какие целые типы данных имеются в паскале:

­­

ShortInt = короткое целое
Integer = целое
LongInt = длинное целое
Byte = байт (так как под хранение выделяется 1 байт)
Word = слово (речь идет о машинном слове, которое зависит от процессора)
Таким образом, данные типа Byte принимают значения 0…255 (2^8 = 256), только положительные (без знака то есть, точнее только со знаком плюс). Данные типа ShortInt принимаю значения -128…127. На самом деле, сейчас под тип Integer выделяется тоже 4 байта, чего предостаточно.

Теперь касательно отрицательных чисел. Отрицательные числа хранятся в инверсном коде.
Пусть, например, есть 1 байт памяти. Надо записать туда число -100. Число 100 занимает 7 бит: 1100100.
Пусть есть операция инверсии двоичного числа, которая просто побитово на место 0 ставит 1, а на место 1 ставит 0.
Значит мы будем хранить -100, как 100, но при этом инвертированное и с прибавленной единицей.

1. Инвертируем число 100 в двоичном представлении. Обратите внимание на 0 в начале. Под число 100 отведено 8 бит, то есть 8 ячеек.
~ 01100100 = 10011011

2. Прибавляем к инвертированной форме единицу:
10011011
+
00000001
_______
10011100

Таким образом, число -100 хранится как 10011100.
Чтобы из -100 снова получить 100, нужно еще раз проделать эти 2 шага.

Можно сделать проверку 100 + (-100) = 0:
01100100
+
10011100
_______
100000000
Единица входит уже в 9 ячейку и нам не нужна. Ответ 0, всё сходится.

Integer сделали 4-байтным, чтобы не было много проблем с переполнением. И сделали ещё один 8-байтный целый тип - он называется int64. Он хранит 2^64 значений со знаком.

Операции определенные на множестве целых типов
Прежде всего арифметические операции: +, -, *, div и mod.
Обратите внимание: операция / не определена на множестве целых чисел: только на множестве вещественных. То есть, 5 / 2 означает, что 5 и 2 приводятся к вещественным 5.0 и 2.0, и потом делятся уже вещественные типы, получается 2.5.
Для целых чисел используются
div - целочисленное деление (деление с округлением вниз)
mod - взятие остатка от деления
На ноль в программировании делить нельзя!
Отметим операцию присвоения (:=), которая создает большую часть ошибок на начальном этапе (ибо все забываю ставить двоеточие). Простое = - это знак сравнения, применяется в проверке равенства переменных.

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

Задача 1. Перестановка цифр
Дано двухзначное число. Требуется найти число, полученное перестановкой цифр исходного числа.
Входные данные
В единственной строке входного потока записано единственное число N (10 <= N <= 99).
Результат
Единственное число, полученное перестановкой цифр числа N.
Примеры
Входные данные Результат
12 21
66 66
98 89

Задача 2. Секундомер
Секундомер показывает время в секундах. Требуется вывести время в формате «часы:минуты:секунды».
Входные данные
В единственной строке входного потока записано единственное число N (0 <= N <= 30000) – время в секундах.
Результат
Время в формате «часы:минуты:секунды».
Примеры
Входные данные Результат
100 0:1:40
666 0:11:6
3666 1:1:6

Задача 3. Округление
При делении целого числа на целое происходит округление результата в меньшую сторону. Реализуйте деление с округлением в большую сторону.
Входные данные
В единственной строке входного потока через пробел записаны два числа A и B (-10000 <= A, B <= 10000).
Результат
Единственное число, полученное делением A на B и округлением результата до целых в большую сторону.
Примеры
Входные данные Результат
10 2 5
10 3 4
100 99 2

Задача 4. Бесконечный дом
Однажды программист Ваня собрался в гости к своему другу программисту Коле. Коля жил в очень длинном M-этажном доме. Будем для простоты считать его бесконечно длинным. Ваня знает, что Коля живёт в N-ой квартире. Кроме того, ему известно, что на каждом этаже в этом доме имеется K квартир. Теперь, чтобы долго не искать Колю, Ваня хочет понять, в какой подъезд ему нужно зайти и на какой этаж подняться, чтобы попасть в квартиру своего друга.
Входные данные
В единственной строке входного потока через пробел записаны три числа: N, M и K, описанные в условии задачи (1 <= N, M, K <= 30000).
Результат
Два числа через пробел: номер подъезда, в который нужно войти Ване и номер этажа, на который ему нужно подняться.
Примеры
Входные данные Результат
10 3 4 1 3
20 5 2 2 5
15 2 4 2 2

Андрей Гайдель 2011
Ред. Ден Фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 1 комментарий | Прoкoммeнтировaть
Pascal: Компилятор. ГенийСекса 06:17:12
­­


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

Ссылка на установочный файл FreePascal:
www.mediafire.com/?­r6ei2791ix23x2w

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

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

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

Категории: Информатика, Pascal
Прoкoммeнтировaть
понедельник, 11 марта 2013 г.
Pascal: Урок 2. Основы языков программирования. ГенийСекса 15:33:47
­­


Подробнее…Любая программа в паскале начинается с ключевого слова begin, а заканчивается словом end. (с точкой). Таким образом, минимальная компилируемая программа на паскале – это пустая программа, которая ничего не делает.
begin
end.

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

­­


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

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

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

Как домашнее задание - разобрать по компонентам программу A+B. Вы сможете это сделать после третьего урока.
­­
(так как беон ржет пробелы, возможно все коды придется выкладывать картинками. пока я не знаю как решить эту проблему)


Обратим внимание на культуру написания кода. Не обязательно так писать, тем более паскаль вообще регистронечувствительный язык, но это простые соглашения, общие для большинства языков программирования. В общем, мы настоятельно рекомендуем им следовать, ибо это красиво и восхитительно.
Ключевые слова пишутся маленькими буквами.
Имена процедур и типов данных - с большой. Например, VeryLongNameForSomeVeryUsefulProcedure.
Имена переменных - с маленькой буквы.
Соблюдается отступ в 4 пробела.
Запятые, двоеточия, точки, точки с запятой ставятся как в обычных естественных языках (примыкают к слову, после которого идут, после них стоит пробел).
Операции, например '+', выделяются пробелами с двух сторон.

Андрей Гайдель 2011
Ред. Ден Фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 1 комментарий | Прoкoммeнтировaть
Pascal: Урок 1. Введение в программирование на языке Паскаль. ГенийСекса 13:32:25
­­


Подробнее…Ключевыми в философии программирования являются два понятия: алгоритм и вычислительный процесс.
Алгоритм - это набор точных предписаний, определяющих вычислительный процесс, ведущий от начальных данных к конечному результату. А вычислительный процесс - это протекающие во времени преобразования данных.
Действия в алгоритме могут происходить в каком-то странном порядке или даже одновременно. Если в алгоритме действия могут происходить одновременно, то он называется параллельным.
Программа - это данные, которые загружены в вычислительную машину и сами собой определяют действия над другими данными.
Тут есть тонкость, которая называется принцип фон Неймана. Дело в том, что никто никогда не думал сначала писать программы: всё вычислялось на месте, как на калькуляторе, а математик по имени фон Нейман предложил сохранять часто повторяющиеся действия в память, а потом заново запускать. Сначала все довольно скептически относились к этой идее, но она успешно прижилась.
Парадигма - это способ постановки вопросов и поиска ответа на них. Например, мифология - это парадигма мировоззрения. Если человек считает, что всё происходит из-за неких духов, мелких богов и т.п., тогда он и вопросы ставит в этом ключе и ответы формулирует так же. То есть он уже не может поставить вопрос, "свет - это волна или частица?"
А есть парадигмы программирования, определяющие способ мышления в процессе программирования, способы ставить задачи и решать их.
Расскажем о некоторых парадигмах, завязанных на представлении данных и действий над ними.
1. Императивное программирование
Данные хранятся в некоторых участках памяти, можно их называть регистрами, а действия следуют одно за другим. То есть в императивном программировании ты просто записываешь одну инструкцию за другой. Кроме того, у тебя есть оператор условного перехода, который переходит в любую указанную точку программы при выполнении некоторого условия
Пример чисто императивного языка – ассемблер.
Утверждается, что если у тебя есть только лишь два оператора (не считая ввод/вывод): следование и условный переход, то ты сможешь написать любую мыслимую программу.
Но такие программы неудобны и слишком запутаны.
2. Структурное программирование
В структурном программировании данные хранятся в переменных, а действия над ними - это некоторые операции.
Тут есть три основных оператора:
1) следование
2) ветвление
3) цикл
Утверждается, что, имея эти три оператора, ты тоже можешь написать любую мыслимую программу (причём условный переход тебе уже не нужен).
Структурные программы выглядят гораздо приятнее императивных, они выше уровнем.
3. Процедурное программирование
В процедурном программировании имеются процедуры, как действия над своими аргументами.
4. Модульное программирование
Основной идеей было разбить программу на несколько самостоятельных частей. Поэтому в модульном программировании осуществлена поддержка неких крупных компонентов, называемых модулями. То есть, чтобы не писать монолитный кусок кода, писать несколько независимых модулей, связывающихся друг с другом.
5. Объектно-ориентированное программирование
Такое программирование построено на понятии объекта. Объект - это некая абстракция сущностей предметной области.

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

Теперь ещё несколько слов про альтернативную линейку парадигм.
От процедурного программирования отделилось функциональное. Функции - это не процедуры. Если процедуры - это просто какие-то наборы действий над аргументами, то функции - это именно описания вычислений. Языки, где всё программирование ведётся определением функций и передачей их друг другу называются функциональными. Как правило, там нет переменных, то есть аргументы функций однажды определены и не меняются, как в математике, зато можно функции передавать в другие функции в качестве аргументов.
Примеры функционального языка - Haskell или Lisp.
Языки, в которых описываются данные, а действия не описываются вообще, называются декларативными. Декларативные языки ставятся в оппозицию императивным, в которых наоборот описываются только действия, а данные примитивны.
Другая идея: зачем описывать вообще какие-то вещи кроме условия задачи – давайте будем формально записывать постановку задачи, и пусть компьютер сам её решает. Такая парадигма программирования называется "логическое программирование".
Самый известный язык, реализующий эту парадигму, - это Пролог.
Естественно, есть много других парадигм, как то параллельное программирование, сетевое программирование, распределённое программирование и другие. Один и тот же язык может реализовать несколько парадигм.

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

История паскаля. Обозначим самые важные пункты.
1. Паскаль придумал математик Николас Вирт в 1970-м году, чтобы наглядно учить студентов математике.
2. Первый компилятор Паскаля написали студенты этого самого Вирта.
3. В 1989 году компания Borland выпустила Borland Pascal и урезанный, но бесплатный, Turbo Pascal.
4. Именно Borland разработали Delphi - популярную в своё время среду промышленного программирования на Паскале.
5. Есть современные свободные реализации Паскаля: Free Pascal, Gnu Pascal и Lazarus - свободный аналог Делфи.

Андрей Гайдель 2011
Ред. Ден Фарадей 2013


Категории: Информатика, Уроки, Pascal
комментировать 6 комментариев | Прoкoммeнтировaть
Pascal. ГенийСекса 12:15:09
Имея целью охватить все языки программирования на букву P, мы решили сделать в сообществе целый ряд уроков по Паскалю. Эти уроки сделаны из переписки между мной и магистром информатики, то есть за его слова я ручаюсь.
Понимаю, что мало кому хочется учиться, но вдруг. Начиная урока с 2-3 я буду предлагать задачи для решения. Гарантирую проверку и помощь онлайн.
В общем-то это уроки не только паскаля, но и программирования, что ценно.

Категории: Информатика
комментировать 3 комментария | Прoкoммeнтировaть
суббота, 9 марта 2013 г.
Python. ГенийСекса 11:14:23
Ребятки, я пишу годный самоучитель по питону, он еще в разработке, но я стараюсь быстро писать его. Если кому нужно - просите.

Категории: Информатика
комментировать 18 комментариев | Прoкoммeнтировaть
четверг, 5 мая 2011 г.
Кабинет: Информатика. ГенийСекса 19:59:43
В этой теме вы можете спрашивать свои ответы по предмету Информатика или ИКТ (по-разному называют на самом деле).


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


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


Категории: Информатика, Кабинет
комментировать 246 комментариев | Прoкoммeнтировaть


Твой личный наставник > Информатика

читай на форуме:
ТоТ
голосуй нах хД
пройди тесты:
Я люблю тебя, Сасори... ( 12 часть)
читай в дневниках:

  Copyright © 2001—2018 BeOn
Авторами текстов, изображений и видео, размещённых на этой странице, являются пользователи сайта.
Задать вопрос.
Написать об ошибке.
Оставить предложения и комментарии.
Помощь в пополнении позитивок.
Сообщить о неприличных изображениях.
Информация для родителей.
Пишите нам на e-mail.
Разместить Рекламу.
If you would like to report an abuse of our service, such as a spam message, please contact us.
Если Вы хотите пожаловаться на содержимое этой страницы, пожалуйста, напишите нам.

↑вверх