Линейные алгоритмы

  • docx
  • 10.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-00249.docx

. Линейные алгоритмы

Задача 1. Вывести на экран сообщение «Hello World!»

 

Формулировка. Вывести на экран сообщение «Hello World!».

Некоторые учебные курсы по программированию рассматривают эту задачу как самую первую при изучении конкретного языка или основ программирования.

Решение. Эта задача включает в себя лишь демонстрацию использования оператора вывода write (или writeln), который будет единственным в теле нашей маленькой программы. С помощью него мы будем осуществлять вывод на экран константы 'Hello World!' типа string (или, как допускается говорить, строковой константы). В данном случае будем использовать оператор writeln.

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

«Hello World!», а при использовании оператора writeln на первой позиции слева в следующей строке.


Код:

 

Задача 2. Вывести на экран три числа в порядке, обратном вводу

 

Формулировка. Вывести на экран три введенных с клавиатуры числа в порядке, обратном их вводу.

Другими словами, мы ввели с клавиатуры три числа (сначала первое, потом второе и третье), и после этого единственное, что нам нужно сделать это вывести третье, затем второе и первое.

Решение. Так как с клавиатуры вводится три числа, необходимо завести три переменные. Обо- значим их как a, b и c. Ввиду того, что нам ничего не сказано о том, в каком отрезке могут распола- гаться введенные числа, мы возьмем тип integer, так как он охватывает и положительные, и отри- цательные числа в некотором диапазоне (от –2147483648 до 2147483647). Затем нам нужно исполь- зовать оператор вывода write (writeln), в списке аргументов которого (напомним, что список аргу- ментов write (writeln) может содержать не только переменные, но и константы и арифметические выражения) эти переменные будут находиться в обратном порядке. В данном случае будем исполь- зовать оператор writeln, который после вывода результата переведет курсор на следующую строку:

  writeln(c, b, a);                                                   Однако если мы оставим его в таком виде, то увидим, что при выводе между переменными не будет никакого пробела, и они будут слеплены и визуально смотреться как одно число. Это связано с тем, что при вводе мы использовали пробелы для разделения чисел, а сами пробелы никаким образом не влияют на содержимое переменных, которые будут последовательно выведены оператором writeln без каких-либо дополнений. Чтобы избежать этого, нам нужно добавить в список аргументов


writeln две текстовые константы-пробелы. Проще говоря, пробельная константа – это символ про- бела, заключенный в одиночные апострофы (апостроф – символ «'»). Первая константа будет раз- делять переменные a и b, вторая b и c. В результате наш оператор вывода будет таким:

  writeln(c, ' ', b, ' ', a);                                         Теперь он работает так: выводит переменную c, затем одиночный символ пробела, затем перемен- ную b, потом еще один символ пробела и, наконец, переменную a.


Код:

 

Задача 3. Вывести на экран квадрат введенного числа

 

Формулировка. Дано натуральное число меньше 256. Сформировать число, представляющее собой его квадрат.

Решение. Для ввода числа нам необходима одна переменная. Обозначим эту переменную как

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

В условии задачи дается ограничитель величины вводимого числа фраза «меньше 256». Это означает, что оно может быть охвачено типом byte. Но что произойдет, если в переменную a будет введено число 255, и затем мы попытаемся присвоить ей его квадрат, равный 65025? Естественно, это вызовет переполнение типа данных, так как используемой для переменной a ячейки памяти не хватит для того, чтобы вместить число 65025. Значит, для ее описания мы должны использовать более емкий числовой тип. При этом типом минимальной размерности, охватывающим данный от- резок (от 1 (это 12) до 65025), является тип word. Его мы и будем использовать при описании a.

Далее нужно сформировать в переменной a квадрат. Для этого присвоим ей ее прежнее значе- ние, умноженное само на себя:

  a := a * a;                                                        

Теперь остается вывести результат на экран. Для этого будем использовать оператор writeln.


Код:


Задача 4. Получить реверсную запись трехзначного числа

 

Формулировка. Сформировать число, представляющее собой реверсную (обратную в по- рядке следования разрядов) запись заданного трехзначного числа. Например, для числа 341 таким будет 143.

Давайте разберемся с условием. В нашем случае с клавиатуры вводится некоторое трехзнач- ное число (трехзначными называются числа, в записи которых три разряда (то есть три цифры), например: 115, 263, 749 и т. д.). Нам необходимо получить в некоторой переменной число, которое будет представлять собой реверсную запись введенного числа. Другими словами, нам нужно пере- вернуть введенное число «задом наперед», представить результат в некоторой переменной и выве- сти его на экран.

Решение. Определимся с выбором переменных и их количеством. Ясно, что одна переменная нужна для записи введенного числа с клавиатуры, мы обозначим ее как n. Так как нам нужно пере- ставить разряды числа n в некотором порядке, следует для каждого из них также предусмотреть отдельные переменные. Обозначим их как a (для разряда единиц), b (для разряда десятков) и c (для разряда сотен).

Теперь можно начать запись самого алгоритма. Будем разбирать его поэтапно:

1)      Вводим число n;

2)      Работаем с разрядами числа n. Как известно, последний разряд любого числа в десятичной системе счисления это остаток от деления этого числа на 10. В терминах языка Pascal это означает, что для получения разряда единиц нам необходимо присвоить переменной a остаток от деления числа n на 10. Этому шагу соответствует следующий оператор:

  a := n mod 10;                                                      Получив разряд единиц, мы должны отбросить его, чтобы иметь возможность продолжить работу с разрядом десятков. Для этого разделим число n на 10. В терминах Pascal, опять же, это означает: присвоить переменной n результат от деления без остатка числа n на 10. Это мы сделаем с помощью оператора

  n := n div 10;                                                     

3)      Очевидно, что после выполнения п. 2 в переменной n будет храниться двухзначное число, состоящее из разряда сотен и разряда десятков исходного. Теперь, выполнив те же самые действия еще раз, мы получим разряд десятков исходного числа, но его уже нужно присва- ивать переменной b.

4)      В результате в переменной n будет храниться однозначное число разряд сотен исходного числа. Мы можем без дополнительных действий присвоить его переменной c.

5)     Все полученные в переменных числа – однозначные. Теперь переменная n нам больше не нужна, и в ней нужно сформировать число-результат, в котором a будет находиться в раз- ряде сотен, b – десятков, c – единиц. Легко понять, что для этого нам следует умножить a на 100, прибавить к полученному числу b, умноженное на 10 и c без изменения, и весь этот результат присвоить переменной c. Это можно записать так:

  n := 100 * a + 10 * b + c;                                         

6)      Далее остается только вывести полученное число на экран.


Код:


 

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

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

 

строки

n

a

b

c

7

514

8

514

4

9

51

4

10

51

4

1

11

5

4

1

12

5

4

1

5

13

415

4

1

5

Нетрудно понять, что написанная программа будет выводить правильный ответ для любого заданного трехзначного числа, так как в соответствии с алгоритмом заполнение данной таблицы возможно лишь единственным образом. Это значит, что мы можем представить число в виде аб- страктного трехзначного числа xyz, нем каждая буква должна быть заменена на любое число от 0 до 9, конечно, за исключением тех случаев, когда оно перестает быть трехзначным), и работая с разрядами этого числа, показать, что в результате работы ответом будет число zyx.


 

Скачано с www.znanio.ru