Задачи на программирование циклов в паскале

Сравнение Паскаля и Карела


Карел: Метод обучения Карела решению задач в виртуальном мире.
ПАСКАЛЬ: Метод обучения компьютера решению задач в реальном мире.

Программирование на Кареле и программирование на Паскале тесно связаны. Например, ЕСЛИ test THEN и WHILE test DO одинаковы для Карела и Паскаля. Кроме того, общий метод программирования. Начиная с основного блока выполнения и уточняя программу с помощью новых инструкций. Одинаков на обоих языках. Однако есть несколько отличий, которые перечислены ниже.

Карел

Паскаль

НАЧАЛО ПРОГРАММЫ

ИМЯ ПРОГРАММЫ;

ОПРЕДЕЛИТЕ-НОВОЕ-ИМЯ ИНСТРУКЦИИ КАК

ПРОЦЕДУРА ProcedureName; или ФУНКЦИЯ functionName;

(подробности будут рассмотрены позже)

НАЧАЛО ИСПОЛНЕНИЯ

НАЧАТЬ

 поворот ОКОНЧАНИЕ ИСПОЛНЕНИЯ ОКОНЧАНИЕ ПРОГРАММЫ 

КОНЕЦ.

Карел не умеет считать или делать какие-либо вычисления Паскаль может выполнять любые математические вычисления и знает о большинстве математических функций. Скобки можно использовать, и Паскаль знает о порядке операций.
Карел ничего не помнит Паскаль может запоминать целые и действительные числа, символы, строки и многое другое. Все, что следует помнить, должно храниться в переменных.
Имена не могут включать пробелы, но они могут включать знак минус ‘-‘ Имена не могут содержать ни пробелов, ни знаков минус
Вы не можете использовать какие-либо комментарии для программы Karel. Программа должна использовать описательные имена, чтобы комментировать себя. Вы всегда должны использовать описательные имена внутри программы Pascal. Однако вы можете — и должны — также использовать комментарии. Чтобы проиллюстрировать некоторые основные функции вашей программы.

Структура программы Pascal

Каждая программа Pascal должна следовать базовой структуре. Хотя эта структура очень похожа на карельское программирование, есть несколько отличий. Ниже приведена базовая структура, которой должна следовать каждая программа Pascal.

ПРОГРАММА ProgramName; VAR variableName : VariableType; variableName : VariableType; ... ПРОЦЕДУРА ProcedureName; переменные здесь при необходимости НАЧИНАЙТЕ Какой-то Код; END; FUNCTION functionName(variableList): VariableType; переменные здесь при необходимости НАЧИНАЙТЕ Какой-то код. Если это необходимо; functionName := некоторое выражение Больше кода. Если это необходимо; КОНЕЦ; .. дополнительные функции и процедуры, если это необходимо ... НАЧИНАЙТЕ основной программный блок. Он должен быть небольшим, и вся работа должна быть делегирована процедурам и функциям. Он часто состоит из цикла WHILE, который по очереди вызывает процедуры и функции в соответствующем порядке. КОНЕЦ. 

Примечание: Функции и процедуры могут появляться в любом порядке. Единственное требование состоит в том, что если одна процедура или функция использует другую. То последняя должна быть уже определена.

Типы переменных

Существует пять основных типов переменных в Pascal: INTEGER, REAL, CHAR, BOOLEANи STRING. Они определяются следующим образом:

ЦЕЛОЕ ЧИСЛО Положительное или отрицательное целое число между наименьшим (отрицательным) и наибольшим числом. В общем случае наименьшее и наибольшее возможное число зависит от машины; для IBM PC и Turbo Pascal они равны:


наименьшее целое число: -32766
наибольшее целое число: 32767

РЕАЛЬНЫЙ Может содержать действительное число в научной или десятичной системе счисления. Существует ограничение на размер и точность действительного числа, которое будет рассмотрено позже. Допустимыми вещественными числами являются, например:


Десятичная система счисления: 1.234 или -34.5507
Научная нотация: 5.0 E-3 или -7.443E3

ОБУГЛИТЬ Любая клавиша на клавиатуре считается допустимым символом. Символы обычно заключаются в одинарные кавычки. Например: — это символ, а 1-целое число.
ЛОГИЧЕСКИЙ С булевыми переменными мы разберемся позже
СТРОКА Строка-это набор из 255 символов, заключенных в одинарные кавычки. Например: — это строка из 4 символов. Более подробная информация о строках будет приведена позже.

Присвоение значений переменным

Переменные-это просто имя блока ячеек памяти в основной памяти. Если значение присваивается переменной, это значение должно быть того же типа, что и переменная. И будет храниться в адресе памяти. Назначенном именем переменной. Оператор присваивания является точкой с запятой-равным :=.


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

Пример:

Тест ПРОГРАММЫ; VAR x : REAL; { имя переменной x, тип является реальным i : INTEGER: { имя переменной-i, тип-integer c : CHAR; { имя переменной c, тип-символ s : STRING; { имя переменной s, тип-string НАЧАТЬ x := -34.55;  x := -3.9 E-3;  WRITELN(x);  i := 10;  i := i * i;  i := 9933;  i := -99999; { недопустимое i := 999.44; { недопустимые c := '1';  c := 1; { недопустимые c := 'Bert'; { недопустимые c := 'd';  WRITELN(c);  d := 'c'; { неизвестная WRITELN(s); { недействительно КОНЕЦ. 

Форматированный ввод и вывод

Чтение информации

Для считывания информации с клавиатуры можно выполнить команду READLN, как в следующем примере:

Тест ПРОГРАММЫ; VAR x : REAL;  i : ЦЕЛОЕ ЧИСЛО;  c : CHAR;  НАЧАТЬ READLN(x); { пользователь может ввести действительное число, за которым следует клавиша возврата. Значение будет сохранено в переменной x. Если пользовательский ввод не является действительным (или целочисленным) числом. Произойдет ошибка выполнения (недопустимое присвоение). } READLN(i); { пользователь может ввести целое число. А затем ключ возврата. Значение будет сохранено в переменной i. Если пользовательский ввод не является целым числом. Произойдет ошибка выполнения (недопустимое назначение). } READLN(c); { пользователь может ввести любой символ. А затем ключ возврата. Значение будет сохранено в переменной c и будет символом. Если пользователь вводит 1 READLN; { пользователь может ввести одно возвращение. } КОНЕЦ. 

Точная работа команды READLN будет обсуждена позже.

Запись Информации

Для записи информации на экран можно использовать команду WRITE или WRITELN. Вы можете написать содержимое переменных или простой текст. Существует несколько вариантов:

Написание Текста WRITE('любой текст'); записывает на экран любой текст, заключенный в простые кавычки
Запись целых чисел в неформатированном виде НАПИШИТЕ(I); I — целочисленная переменная
Запись целых чисел в формате НАПИШИТЕ(I:num); I-это целое число, а num указывает общее количество используемых позиций. Если значение, содержащееся в переменной I, нуждается в большем количестве цифр, num игнорируется.
Написание реалов неформатированных WRITELN(x); x — это реальная переменная. Всегда будет писать действительное число в научной нотации и почти никогда не будет тем, что вы хотите.
Запись реалов в формате WRITELN(X:num1:num2); X — вещественная переменная, num1-общее количество используемых цифр (включая знак и точку), а num2-количество цифр после точки.

Примечание: Те же правила применимы и к команде WRITELN, но эта команда также помещает курсор в первую позицию следующей строки.

Вы можете комбинировать текст записи и несколько переменных, разделяя отдельные компоненты запятой. Вот пример:

Тест ПРОГРАММЫ; VAR x : РЕАЛЬНЫЙ; i : ЦЕЛОЕ ЧИСЛО; j : ЦЕЛОЕ ЧИСЛО; НАЧАТЬ x := 12.449; i := 10; j := -300; НАПИШИТЕ('Это какой - то текст'); WRITELN('Unformatted integer ',i); WRITELN('Unformatted integer computation ',i*i); WRITELN('форматированное целое число',i:4); WRITELN('форматированное целое число',j:4); WRITELN('Unformatted real ',x); ЗАПИСЬ('Форматированный реальный'); НАПИШИТЕ(x:8:2); WRITELN('все в одной строке'); КОНЕЦ. 

что приведет к следующему результату:

Это какое-то текстовое целое число 10 Неформатированное целочисленное вычисление 100 форматированное целое число 10 форматированное целое число-300 Неформатированный реальный 1.24490000000 E+01 Форматированный реальный 12.45 все в одной строке 

Функции

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


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

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

ФУНКЦИЯ functionName(variableName: VariableType): VariableType; НАЧАТЬ какой-нибудь код. Если понадобится; functionName := некоторые вычисления; больше кода. Если это необходимо; КОНЕЦ; 

Обратите внимание. Что каждая функция должна содержать имя функции по крайней мере дважды: один раз в определении функции и один раз для присвоения функции результата вычисления. Функции можно использовать аналогично переменным. Вы можете присвоить результат функции новой переменной. Вы можете распечатать результат функции с помощью WRITE или WRITELN, или вы можете использовать результат функции в другом вычислении или тесте. Вот пример:

Тест ПРОГРАММЫ; Радиус VAR: РЕАЛЬНЫЙ; ФУНКЦИЯ circleArea(r : REAL): REAL; НАЧАТЬ circleArea := 3.1415 * r * r; КОНЕЦ; НАЧАТЬ НАПИШИТЕ('Площадь окружности с радиусом 2.0: '); WRITELN(circleArea(2.0):6:1); НАПИШИТЕ('Площадь окружности с радиусом 5.0: '); WRITELN(circleArea(5.0):6:1); НАПИШИТЕ('Введите свой собственный радиус: '); READLN(радиус); НАПИШИТЕ('Площадь окружности с радиусом ', радиус:3:1,': '); WRITELN(circleArea(radius));  радиус := 5,0; радиус := circleArea(радиус); WRITELN(radius);  КОНЕЦ. 

Расширенный пример: Преобразование единиц измерения

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

{* в градус Фаренгейта и обратно. 

Начало программы. Обратите внимание. Что имя программиста и дата завершения программы являются частью комментариев. Также приводится краткое описание программы.

VAR 

Список переменных. Есть две реальные переменные, одна для входного номера пользователя и одна для преобразованного номера. Даже если позже будет добавлено больше формул преобразования, потребуется только две переменные.

НАЧАТЬ WRITELN; WRITELN(WRITELN(' ---------------'); WRITELN(' a) Celcius to Fahrenheit'); WRITELN(' b) Fahrenheit to Celcius'); WRITELN; WRITELN(' x) Для выхода из программы'); WRITELN; КОНЕЦ; 

Меню, которое увидит пользователь. Обратите внимание на пустую строку, созданную WRITELN сверху и снизу, а также на интервал впереди. Чтобы переместить текст в середину экрана.

НАЧАТЬ НАПИШИТЕ('Введите свой выбор: '); READLN(UserChoice); КОНЕЦ; 

Эта процедура запрашивает у пользователя его выбор и сохраняет результат в переменной UserChoice. Обратите внимание. Что при использовании WRITE вместо WRITELN ввод пользователя будет отображаться в той же строке. Что и приглашение. Кроме того, пустое пространство после приглашения выровняет эту букву со следующим пользовательским вводом.

НАЧАТЬ WRITE('Введите число для преобразования: '); READLN(userInput); КОНЕЦ; 

Эта процедура запрашивает число для преобразования. Опять же, использование WRITE вместо WRITELN приведет к тому, что номер пользователя появится в той же строке. Что и приглашение. Номер будет сохранен в переменной userInput

НАЧАТЬ WRITE('Нажмите RETURN, чтобы продолжить ...'); READLN; КОНЕЦ; 

READLN без переменной будет ждать, пока пользователь не нажмет клавишу ВОЗВРАТА. Нажатие клавиши не хранится ни в одной переменной.

НАЧАТЬ ToFahrenheit := 9/5 * x + 32; КОНЕЦ; 

Эта функция преобразует свой вход x в градус Фаренгейта. Результат вычисления может быть использован любой другой процедурой или функцией. А также основной программой.

НАЧАТЬ Тоцелций := 5/9 * (x - 32); КОНЕЦ; 

Эта функция преобразует свой вход x в степень Цельсия. Результат вычисления может быть использован любой другой процедурой или функцией. А также основной программой.

НАЧАТЬ IF (UserChoice = 'a') ЗАТЕМ ответьте := ToFahrenheit(userInput); IF (UserChoice = 'b') ЗАТЕМ ответьте := ToCelcius(userInput); КОНЕЦ; 

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

{ хороший числовой формат. НАЧАТЬ WRITELN; WRITELN(' Степень'); IF (UserChoice = 'a') ЗАТЕМ WRITELN('Celcius | Fahrenheit'); IF (UserChoice = 'b') ЗАТЕМ WRITELN('FahrenHeit | Celcius'); WRITELN('------------------------'); WRITE(userInput:8:2); НАПИШИТЕ(' | '); ПИШИТЕ(Ответ:8:2); WRITELN; WRITELN; КОНЕЦ; 

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

UserChoice := 'q'; ShowTheMenu; GetUserChoice; IF (UserChoice = 'a') ИЛИ (UserChoice = 'b') ТОГДА НАЧИНАЙТЕ GetNumberToConvert; DoTheConversion; DisplayTheAnswer; Подождите; КОНЕЦ; КОНЕЦ; КОНЕЦ. 

Основной блок выполнения, или основная программа. Он состоит из простого цикла, который выполняется до тех пор, пока переменная UserChoice не содержит символ x. Однако пользователь впервые запрашивается внутри цикла. Поэтому переменная UserChoice должна быть инициализирована вручную, прежде чем цикл может быть запущен. Если пользователь вводит x, то многие процедуры не нужны и поэтому блокируются внутри оператора IF. Обратите внимание. Что оператор IF использует логический оператор OR. Почему мы не использовали внешне более простую форму ?

(bgw)