Основы алгоритмизации и программирования в 8 классе

МИНИСТЕРСТВО  ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ 

Учреждение  образования

«МОГИЛЁВСКИЙ  ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ 

им. А.А.КУЛЕШОВА» 

Кафедра математического анализа и вычислительной техники 
 
 
 
 

Курсовая  работа 

Основы  алгоритмизации и  программирования

  в 8 классе. 
 
 
 
 
 
 
 
 

                           Исполнитель:   студент 5 курса группы “Ж”

                                   физико-математического

                                   факультета

                                   Маркевич Алексей  Анатольевич 
       

                Руководитель:   ст.преподаватель Ясень Н. Д. 
                 
                 
                 

                Могилёв 2008

 

Содержание  
§1. Введение

    Система Pascal ABC создавалась как компактная учебная система программирования под Windows для первоначального обучения, имеющая простой интерфейс и богатые возможности для процесса обучения [1,2]. Язык Паскаль выбран как один из наиболее удачных языков для первоначального обучения программированию.

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

    Поскольку разработка компилятора полноценного языка программирования сложна, было принято решение создать front-end компилятор, переводящий текст программы в дерево разбора с последующей интерпретацией программы по полученному дереву. Как показали тесты, подобный подход замедляет выполнение программы в численных приложениях примерно в 50 раз по сравнению с Turbo Delphi, что несущественно для большинства учебных задач. В графических приложениях разница в скорости выполнения значительно меньше и составляет 5-10 раз. Основным недостатком в настоящее время видится отсутствие возможности создавать в результате компиляции исполняемые файлы.

 

§2.  Основы алгоритмизации и программирования. Способ записи алгоритмов.

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

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

    Пример 1. Алгоритм приготовления чая

    Дано: Электрочайник, вода, пакетик чая

    1. Налить в электрочайник воду.
    2. Включить электрочайник в розетку.
    3. Включить электрочайник.
    4. Положить в пустую чашку пакетик чая.
    5. Налить вскипевшую в электрочайнике воду
    6. в чашку с пакетиком чая.
    7. Подождать 3-5 минут пока  чай заварится.

    Результат: Готовый к употреблению чай.

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

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

    Пример 2. Алгоритм вычисления площади прямоугольника

    Дано: периметр прямоугольника Р и длина одной его стороны  A

    1. Вычислить длину 2-й стороны прямоугольника  

      В= P:2-А..

    1. Вычислить площадь прямоугольника

     S= А х В

    Результат: площадь прямоугольника S

    В данном примере  исходными данными  являются периметр Р и длина стороны  А. Промежуточными данными является вычисляемая длина стороны В. Выходными данными (результатом) является площадь прямоугольника S.

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

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

        

    Овал  обозначает «начало» либо «конец»  алгоритма. Параллелограмм обозначает ввод либо вывод данных. Прямоугольник используется для обозначения действий (команд).

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

      
    Начало  алгоритма

    Ввод  исходных данных: периметра (Р) и длины  стороны (А)

    Действие (команда): вычисление длины стороны  В

    Команда: вычисление площади прямоугольника

    Вывод результата: площади прямоугольника

    Конец алгоритма

                          Рис.3.1

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

 

§3.  Среда языка программирования  Pascal ABC 

3.1 Условный оператор 

    Условный  оператор имеет полную и краткую  формы.

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

    if условие  then оператор1

    else оператор2

    В качестве условия указывается некоторое логическое выражение. Если условие оказывается истинным, то выполняется оператор1, в противном случае выполняется оператор2.

    Краткая форма условного оператора имеет  вид:

    if условие then оператор

    Если  условие оказывается истинным, то выполняется оператор, в противном случае происходит переход к следующему оператору программы.

    В случае конструкции вида

    if условие1 then

         if условие2 then оператор1

         else оператор2

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

    if условие1 then 
    begin  
      if условие2 then оператор1 
    end 
    else оператор2
     

3.2 Оператор выбора 

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

case переключатель  of 
  список выбора 1: оператор1; 
  ... 
  список выбора N: операторN; 
  else оператор0 
end;

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

    Оператор case работает следующим образом. Если в одном из списков выбора найдено текущее значение переключателя, то выполняется оператор, соответствующий данному списку. Если же значение переключателя не найдено ни в одном списке, то выполняется оператор по ветке else или, если ветка else отсутствует, оператор case не выполняет никаких действий.

    Список  выбора состоит либо из одной константы, либо из диапазона значений вида a..b (константа a должна быть меньше константы b); можно также перечислить несколько  констант или диапазонов через запятую:

    case DayOfWeek of 
  1..5: writeln('Будний день'); 
  6,7: writeln('Выходной день'); 
end;

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

    case i of 
  2,5: write(1); 
  4..6: write(2); 
end;

    приведет  к ошибке компиляции "Пересечение  диапазонов меток в операторе case". 

3.3 Оператор цикла for 

    Оператор  цикла for имеет одну из двух форм:

    for переменная:=начальное значение to конечное  значение do 
  оператор

    или

    for переменная:=начальное значение downto конечное значение do 
  оператор

    Текст от слова for до слова do включительно называется заголовком цикла, а оператор после do - телом цикла. Переменная после слова for называется параметром цикла. Для первой формы цикла с ключевым словом to параметр цикла меняется от начального значения до конечного значения, увеличиваясь всякий раз на единицу, а для второй формы ключевым словом downto - уменьшаясь на единицу. Для каждого значения переменной-параметра выполняется тело цикла. Однократное повторение тела цикла называется итерацией цикла.

    Значение параметра цикла после завершения цикла считается неопределенным.

    Если  для цикла for ... to начальное значение переменной цикла больше конечного  значения или для цикла  for ... downto начальное значение переменной цикла меньше конечного значения, то тело цикла не выполнится ни разу.

    Если  цикл используется в процедуре или  функции, то переменная-параметр цикла  должна быть описана как локальная.

    Тело  цикла for в Pascal ABC не может быть пустым. Это сделано для защиты от часто  встречающейся у начинающих ошибки ставить после do точку с запятой.

    Изменение переменной-параметра цикла внутри цикла является логической ошибкой. Например, следующий фрагмент со вложенным  оператором for является ошибочным:

    for i:=1 to 10 do 
   for i:=1 to 5 do

    write(i);

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

    var

    en: (red,green,blue,white);

    c: char; 
... 
for en:=red to blue do 
  write(Ord(en):2); 
for c:='a' to 'z' do 
  write(c);
 
 
 

3.4 Оператор цикла while 

    Оператор  цикла while имеет следующую форму:

    while условие do

    оператор

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

    Если  условие всегда оказывается истинным, то может произойти зацикливание:

    while 2>1 do

    write(1);

    Чтобы прервать зациклившуюся программу, следует использовать комбинацию клавиш Ctrl-F2.

    Тело  цикла while в Pascal ABC не может быть пустым. Это сделано для защиты от часто  встречающейся у начинающих ошибки ставить после do точку с запятой. 

3.5 Оператор цикла repeat 

    Оператор  цикла repeat имеет следующую форму:

    repeat

    операторы

    until условие

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

    Если  условие всегда оказывается ложным, то может произойти зацикливание:

    repeat

    write(1);

    until 2=1;

    Чтобы прервать зациклившуюся программу, следует использовать комбинацию клавиш Ctrl-F2. 

3.6 Операторы break, continue и exit 

    Операторы break и continue используются только внутри циклов.

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

flag:=False;

  for i:=1 to 10 do

    begin

    read(x);

    if x<0 then continue; // пропуск текущей итерации цикла

    if x=5 then

    begin

    flag:=True;

    break; // выход из цикла

   end;

end;

    Использование операторов break и continue вне тела цикла ошибочно.

    Оператор exit предназначен для досрочного завершения процедуры или функции. Например

    function Analyze(x: integer): boolean; 
begin 
  if x<0 then  
  begin 
    Result:=False; 
    exit 
  end; 
  ... 
end;

    Вызов exit в разделе операторов основной программы приводит к ее немедленному завершению.

    Следует отметить, что в Pascal ABC (в отличие  от Borland Pascal и Borland Delphi) break, continue и exit являются не процедурами, а операторами и  входят в число служебных слов языка.

 

§4.  Практическое применение 

4.1 Условный оператор

    If1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.

    If2. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае вычесть из него 2. Вывести полученное число.

    If3. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.

    If4. Даны три целых числа. Найти количество положительных чисел в исходном наборе.

    If5. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.

If6. Даны два числа. Вывести большее из них.

If7. Даны два числа. Вывести порядковый номер меньшего из них.

If8. Даны два числа. Вывести вначале большее, а затем меньшее из них.

    If9. Даны две переменные вещественного типа: A, B. Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B — большее. Вывести новые значения переменных A и B.

    If10. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

    If11. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

If12. Даны три числа. Найти наименьшее из них.

    If13. Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).

    If14. Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел.

If15. Даны три числа. Найти сумму двух наибольших из них.

    If16. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые

    значения переменных А, В, С.

    If17. Даны три переменные вещественного типа: А, В, С. Если их значения упорядочены по возрастанию или убыванию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных А, В, С.

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

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

    If20. На числовой оси расположены три точки: А, В, С. Определить, какая из двух последних точек (В или С) расположена ближе к А, и вывести эту точку и ее расстояние от точки А. 

4.2 Оператор выбора

    Case1. Дано целое число в диапазоне 1-7. Вывести строку — название дня недели, соответствующее данному числу (1 — «понедельник», 2 — «вторник» и т. д.).

    Case2. Дано целое числом. Вывести строку-описание оценки, соответствующей числу К (1 — «плохо», 2 — «неудовлетворительно», 3 — «удовлетворительно», 4 — «хорошо», 5 — «отлично»). Если К не лежит в диапазоне 1-5, то вывести строку «ошибка».

    Case3. Дан номер месяца — целое число в диапазоне 1-12 (1 — январь, 2 — февраль и т. д.). Вывести название соответствующего времени года («зима», «весна», «лето», «осень»).

    Case4. Дан номер месяца — целое число в диапазоне 1-12 (1 — январь, 2 — февраль и т. д.). Определить количество дней в этом месяце для невисокосного года.

    Case5. Арифметические действия над числами пронумерованы следующим образом: 1 — сложение, 2 — вычитание, 3 — умножение, 4 — деление. Дан номер действия N (целое число в диапазоне 1-4) и вещественные числа А и В (В не равно 0). Выполнить над числами указанное действие и вывести результат.

    Case6. Единицы длины пронумерованы следующим образом: 1 — дециметр, 2 — километр, 3 — метр, 4 — миллиметр, 5 — сантиметр. Дан номер единицы длины (целое число в диапазоне 1-5) и длина отрезка в этих единицах (вещественное число). Найти длину отрезка в метрах.

    Case7. Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна, 5 — центнер. Дан номер единицы массы (целое число в диапазоне 1-5) и масса тела в этих единицах (вещественное число). Найти массу тела в килограммах.

    Case8. Даны два целых числа: D (день) и М (месяц), определяющие правильную дату невисокосного года. Вывести значения D и М для даты, предшествующей указанной.

    Case9. Даны два целых числа: D (день) и М (месяц), определяющие правильную дату невисокосного года. Вывести значения D и М для даты, следующей за указанной.

    Case10. Робот может перемещаться в четырех направлениях («С» — север, «З» - запад, «Ю» - юг, «В» - восток) и принимать три цифровые команды: 0 — продолжать движение, 1 — поворот налево, 1 — поворот направо. Дан символ С — исходное направление робота и целое число N — посланная ему команда. Вывести направление робота после выполнения полученной команды.

    Case11. Локатор ориентирован на одну из сторон света («С» — север, «З» — запад, «Ю» — юг, «В» — восток) и может принимать три цифровые команды поворота: 1 — поворот налево, 1 — поворот направо, 2 — поворот на 180°. Дан символ С — исходная ориентация локатора и целые числа N\ и N2 — две посланные команды. Вывести ориентацию локатора после выполнения этих команд.

    Case12. Элементы окружности пронумерованы следующим образом: 1 — радиус R, 2 — диаметр D = 2 *R, 3 — длина L = 2πR, 4 — площадь круга S = πR2. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке). В качестве значения π использовать 3.14.

    Case13. Элементы равнобедренного прямоугольного треугольника пронумерованы следующим образом: 1 — катет а, 2 — гипотенуза с = а h 2, 3 — высота h, опущенная на гипотенузу (h = с/2), 4 — площадь S = ch/2. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).

    Case13. Дано целое число в диапазоне 20-69, определяющее возраст (в годах). Вывести строку-описание указанного возраста, обеспечив правильное согласование числа со словом «год», например: 20 — «двадцать лет», 32 — «тридцать два года», 41 — «сорок один год».

    Case14. Дано целое число в диапазоне 10-40, определяющее количество учебных заданий по некоторой теме. Вывести строку-описание указанного количества заданий, обеспечив правильное согласование числа со словами «учебное задание», например: 18 - «восемнадцать учебных заданий», 23 — «двадцать три учебных задания», 31 — «тридцать одно учебное задание».

    Case15. Дано целое число в диапазоне 100-999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть», 814 — «восемьсот четырнадцать».

    Case16. В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года определить его название, если 1984 год — начало цикла: «год зеленой крысы».

Основы алгоритмизации и программирования в 8 классе