СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Особенности программирования линейных алгоритмов

Категория: Информатика

Нажмите, чтобы узнать подробности

Если известны исходные данные, то решить эти задачи «вручную» для Вас не составляет труда. Но Ваша цель – научиться объяснять, как их решать, формальному исполнителю – компьютеру.

Просмотр содержимого документа
«Особенности программирования линейных алгоритмов»

Особенности программирования линейных алгоритмов


Рассмотрим следующие задачи. Алгоритмы их решения являются линейными.

Задача 1. Вычислить значение выражения при разных заданных значениях переменных x и y.

Задача 2. Вычислить среднюю температуру воздуха, измеренную в 900, 1200 и 1500.

Задача 3. Определить сумму цифр некоторого случайного двухзначного числа.

Задача 4. Переставить местами первую и последнюю букву в слове.


Если известны исходные данные, то решить эти задачи «вручную» для Вас не составляет труда. Но Ваша цель – научиться объяснять, как их решать, формальному исполнителю – компьютеру.

Чтобы достичь цели во всех случаях нужно выполнить следующие действия:

  1. определить, что является исходными данными и какого они типа;

  2. определить, что будем считать результатом и какого типа будет это значение;

  3. выбрать обозначения для переменных, в которых будут храниться исходные данные и результаты;

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

  5. выбрать операции, которые необходимо выполнить для решения задачи и выяснить, как эти операции записываются в системе команд исполнителя;

  6. обеспечить ввод исходных данных;

  7. указать порядок выполнения операций;

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

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

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

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

В ЯП Pascal операции сложения и вычитания обозначаются привычными знаками «+» и «–». Операция умножения – знаком «*». А вот операция деления для целых и вещественных чисел обозначается по-разному: для деления вещественных чисел используется знак «/», а для деления целых чисел включено две операции: «div» для обозначения деления нацело и «mod» для получения остатка от целочисленного деления.

Пример

Пусть a, b, c – переменные целого типа, x, y, z – вещественного типа. Значения переменных таковы:

a

b

с

x

y

z

4

27

0

–4

2,5

0

Тогда в результате операции z:=x/y в ячейку z будет помещено значение –4:2,5=–1,6. В результате операции c := b div a в ячейку с будет помещено значение 6. В результате операции с := b mod a в ячейку с будет помещено значение 3.

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

Набор стандартных функций свой для каждой среды программирования.

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

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

Во всех задачах нам придется присваивать значения переменным. Это можно сделать, введя значение с клавиатуры или из файла (для этого служит оператор ввода) или присвоив переменной конкретное или «случайное» значение с помощью оператора присваивания.

Пример

Задать значение переменной х в Pascal можно следующими способами:

x := 5; - в ячейку с именем х будет помещено число 5.

x := random(10); - в ячейку с именем х будет помещено какое-то число от 0 до 9.

read (x); - в ячейку с именем х будет помещено то число, которое пользователь введет с клавиатуры;

read (f, x); - будет открыт файл f и текущее число из этого файла будет помещено в ячейку с именем х.


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

Пример

Правильно записанные в Pascal операторы присваивания (типы переменных как в предыдущем примере):

c:=5; c:=2*b+3*a–6; c:=sqr(a–b); c:=round(x/y); c:=c+1;

z:=10,2; z:=2*x+a; z:=sqrt(y); z:=x+sqrt(sqr(x)+sqr(y-2))/(sqr(y)+1);

Ошибочные операторы присваивания:

c:=x; - переменной целого типа нельзя присвоить вещественное значение.

c:=a/b; c:=sqrt(b); - результат операции «/» и функции «sqrt» вещественного типа.

z:= a mod b; - операция «mod» допустима для переменных целого типа.

с+1 := 6; - слева от знака присваивания может стоять только имя переменной.

Важное замечание. В математике выражение «с=с+1» не будет справедливым ни для какого значения с. В программе такого рода операторы (с:=с+1), где одна и та же переменная встречается справа и слева от знака присваивания, используются достаточно часто. Дело в том, что в математике и справа и слева от знака равенства подразумевается одна и та же переменная в одно и то же время. В программировании переменная означает одну и ту же ячейку памяти, но в разное время. При выполнении оператора с:=с+1; сначала идет обращение к ячейке памяти с; к числу, находящемуся в этой ячейке прибавляется 1; затем полученное значение помещается в ту же ячейку с.


Блок-схема и программа задачи 1.

var x, y, z : real;

begin

read(x, y);

z:=x+sqrt(sqr(x)+sqr(y-2))/(sqr(y)+1);

write(‘z=’, z);

end.



Задача 2 сводится к вычислению среднего арифметического трёх чисел. Обозначим переменные для значений температур t9, t12, t15 и Sr для результата. Поскольку будет операция деления, то Sr может быть только вещественного типа.

Блок-схема и программа задачи 2.

var t9, t12, t15: integer;

Sr : real;

begin

read(t9, t12, t15);

Sr:=(t9+t12+t15)/3;

write(‘Средняя температура =’, Sr);

end.



Особенность решения задачи 3 заключается в том, что числа в памяти компьютера хранятся в двоичном коде. Поэтому нужны специальные действия, чтобы выделить цифры числа. Например, число единиц можно получить, если взять остаток от деления на 10, а число десятков в двузначном числе – это целое частное от деления на 10.

Другая особенность заключается в том, чтобы получить случайное число. Компьютер работает только по программам. Поэтому ни о какой «случайности» вести речь не приходится. Но для отладки программ иногда бывает полезно, чтобы значения переменных не вводились пользователем, а выбирались «случайным образом» из некоторого заданного диапазона. Для этого служит стандартная функция random(b-a)+a, которая по специальному алгоритму позволяет выбрать какое-нибудь число из диапазона [a, b], где a и b – конкретные целые числа. Для нашей задачи а=10, b=99.

Обозначим Х – случайное двузначное число, d1 и d2 – цифры этого числа.

Блок-схема и программа задачи 3.

var X, d1, d2 : integer;

begin

X := random(89)+10;

d1 := X mod 10; d2 := X div 10;

write(‘Сумма цифр числа ’, X, ‘=’, d1+d2);

end.



Решение задачи 4.

Слово – это строка символов, каждый из которых имеет свой код в таблице кодировки. Обозначим переменную, в которой будет хранится строка, S.

Особенности решения задачи 4 состоят в следующем:

- поскольку можно ввести строку произвольной длины, то нужно уметь определять количество символов в ней. Для этого служит стандартная функция length(s);

- выделить символы из строки можно с помощью стандартной функции copy (s, k, n), но один символ проще выделить, если указать его номер в квадратных скобках после имени строки: s[1] – первый символ строки s, s[n] – n-ый символ строки s и т.п.;

- поменять местами значения двух ячеек памяти можно с помощью вспомогательной переменной, например: x:=s[1]; s[1]:=s[2]; s[2]:=x;. Это позволяет не потерять значения при переприсваивании (чтобы лучше понять, представьте себе ваши действия, если у Вас есть стакан с кофе и чашка с чаем и Вам нужно поменять содержимое посуды).

Обозначим S – строка символов, n – количество символов в строке и одновременно номер последнего символа, Х – вспомогательная переменная символьного типа.

Блок-схема и программа задачи 4.

var S : string;

n : integer;

X : char;

begin

read(S); n:= length(S);

X := S[1]; S[1] := S[n]; S[n] := X;

write(‘Получилась строка ’, S);

end.




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


ПРАКТИКУМ


1

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


2

Составьте алгоритмы и программы для решения следующих задач:

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

  2. Даны координаты вершин треугольника на координатной плоскости. Найти периметр и площадь треугольника.

  3. Определите сумму цифр случайного целого трёхзначного числа.

  4. Известно, что X кг шоколадных конфет стоит Sx рублей, а Y кг карамели стоит Sy рублей. Определить, во сколько раз 1 кг шоколадных конфет дороже 1 кг карамели.

  5. Два автомобиля находятся на расстоянии S и движутся навстречу друг другу со скоростями V1 и V2. Определить, на каком расстоянии они будут друг от друга через T часов, если после встречи они продолжают двигаться в том же направлении (разъезжаются).