ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ВЫСШИЙ КОЛЛЕДЖ ИНФОРМАТИКИ НОВОСИБИРСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА Программа «Молодые информатики Сибири» Заочная школа информатики Л. Г. АЛСЫНБАЕВА, Л. А. ГОЛУБЕВА, Л. А. МОСКВИНА, Основы алгоритмизации и программирования Выпуск 1 НОВОСИБИРСК 1995 1 ВВЕДЕНИЕ Методическое пособие ориентировано на обучение основам алгоритмизации и записи алгоритмов на языке программирования Паскаль. Особенность предлагаемой методики в том, что необходимые знания приобретаются в процессе решения большого числа достаточно простых и интересных задач, которые развивают творческий потенциал и алгоритмическое мышление учащихся. Обучаемые осваивают средства реализации линейных, ветвящихся и циклических алгоритмов, приемы модульного программирования: разбиение задачи на совокупность подзадач и их реализацию в виде модулей (процедур или функций) на языке программирования. В качестве языка программирования выбран язык Паскаль достаточно эффективный для начального обучения программированию. Пособие состоит из отдельных занятий, каждое из которых включает материал по основам алгоритмизации и реализации рассматриваемых понятий (типов данных и алгоритмических структур) на языке Паскаль, а также контрольные задания. В занятиях приводятся ы записи изучаемых алгоритмов в виде программ на языке Паскаль, а также рекомендации, которые могут быть полезны учащимся при самостоятельном выполнении заданий. Пособие построено последующему плану: Выпуск 1. Занятие 1. Линейный алгоритм. Занятие 2. Разветвляющийся алгоритм. Выпуск 2. Занятие 3. Циклический алгоритм. Занятие 4. Массивы. Выпуск 3. Занятие 5. Средства работы с текстовой информацией. Занятие 6. Процедуры и функции. В процессе выполнения заданий, возможно, потребуется самостоятельное изучение литературы, список которой приведен в конце этого выпуска. Желаем успехов в освоении материала. 2 ЗАНЯТИЕ 1. ЛИНЕЙНЫЙ АЛГОРИТМ ЦЕЛИ Получить представление об алгоритме и различных способах его записи. Познакомиться с понятием «Типы данных». Научиться писать программы, реализующие линейные алгоритмы. 1. ПОНЯТИЕ АЛГОРИТМА Основным назначением электронно-вычислительных машин (ЭВМ) является хранение и обработка информации. В процессе обработки информации происходит преобразование данных в соответствии с алгоритмом (см. рис. 1.1.). Алгоритм — это упорядоченная последовательность действий, которые исполнитель (в данном случае ЭВМ) должен произвести, чтобы достичь определенной цели. К самым распространенным способам описания алгоритма относятся следующие: словесное: с помощью обычных предложений русского языка; графическое: с помощью блок-схем (см. табл. 1.); программное (программа): запись алгоритма на языке программирования. В учебной и повседневной деятельности нам приходится разрабатывать алгоритмы или использовать ранее созданные. На, для нахождения корней квадратного уравнения Ах2+Вх+С =0 мы используем следующий алгоритм: 1. вычисляем дискриминант D; 2. если D < 0, то корней не существует, иначе 3. вычисляем корни по формулам: х1 = (-В + D)/2A; х2=(-В - D)/2A. 4. При поступлении в ВКИ НГУ мы действуем по алгоритму: 5. сдаем документы в приемную комиссию; 6. сдаем экзамены; 7. участвуем в конкурсе; 8. проходим зачисление. Естественно, каждое следующее действие выполняется при успешном завершении предыдущего. Эти ы иллюстрируют словесное описание алгоритма. Рассмотрим более подробно способы графического и программного описания алгоритмов. Простейшим алгоритмом является линейный, который состоит из упорядоченной последовательности действий, не зависящей от значений исходных данных. В этом занятии мы познакомимся с различными способами описания именно таких алгоритмов. Блок-схема линейного алгоритма приведена на рис. 1.2. 3 При изображении алгоритма с помощью блок-схем используются геометрические фигуры, называемые блоками (см. табл. 1.). Все фигуры снабжаются номерами. Стрелки указывают последовательность действий (операторов). Запись алгоритма в виде программы зависит от языка программивания. На языке Паскаль она начинается служебным словом PROGRAM и имеет следующий вид: PROGRAM NameProgram; {Раздел описаний} BEGIN {Раздел операторов} END. Раздел операторов содержит запись алгоритма, а раздел описаний — используемые в нем данные. Служебные слова BEGIN и END определяют, соответственно, начало и конец раздела операторов. Алгоритм может содержать пояснения (называемые обычно комментариями), которые представляют собой текст, поясняющий производимые действия, служащий исключительно для удобства чтения и понимания алгоритма и не подлежащий выполнению. Последнее обеспечивается специальной формой записи, различной для разных языков программирования. В языке Паскаль, на, комментарии заключаются в фигурные скобки: { комментария} 2. ДАННЫЕ 2.1. Константы и переменные Вся информация, с которой работает ЭВМ, называется данными. Каждый элемент данных является либо константой, либо переменной и указывается в программе своим именемидентификатором. Константы — это данные, не изменяющиеся в процессе выполнения алгоритма. Во многих языках программирования имеются специальные средства, дающие возможность указывать имена, значения которых не могут меняться в процессе исполнения программы. Переменные — это данные, принимающие различные значения в процессе выполнения программ. К переменным обращаются по идентификаторам. . Идентификатор записывается по определенным правилам, которые зависят от языка программирования. Согласно правилам языка Паскаль идентификаторы: строятся из букв, цифр и спецсимволов (на, подчерк),но начинаться должны с буквы; не могут быть служебными (зарезервированными) словами языка программирования; не должны содержать пробелов. Желательно использовать осмысленные идентификаторы, что облегчает понимание программы и является признаком хорошего стиля программирования. Заметим, что строчные и заглавные буквы в идентификаторах языка Паскаль не различаются, поэтому два имени ALFA и alfa определяют один и тот же элемент. ы идентификаторов в языке Паскаль: 2.2. Типы данных Тип данных определяет множество значений, которые могут принимать данные, и набор операций над ними. Данные различного типа имеют различное внутреннее представление в ЭВМ и 4 занимают определенное, количество ячеек памяти в зависимости от типа. Здесь мы рассмотрим лишь переменные целого и вещественного типов. Очень часто их называют арифметическими данными. К целому типу относятся данные, которые могут принимать значения положительных или отрицательных целых чисел. К вещественному типу относятся данные, значениями которых могут быть положительные или отрицательные числа, имеющие целую и дробную части. Переменные этих типов можно сравнивать по величине, а также выполнять над ними арифметические операции: складывать, вычитать, умножать и делить (над данными целого типа в языке Паскаль определены операции деления нацело (div) и остаток от деления (mod)). Их можно использовать в качестве аргументов и результатов различных математических функций. При выполнении операций над данными разных типов иногда происходит автоматическое преобразование данных одного типа в данные другого. Для выполнения такого преобразования явным образом предусмотрены специальные функции. Кроме рассмотренных типов, в языке Паскаль определены также логический, символьный, строковый, фа иловый и другие типы данных. Некоторые из них мы изучим на следующих занятиях. Тип переменной задается либо явным описанием (Паскаль, Си), либо по имени идентификатора (Бейсик, Фортран). Тип константы задается ее значением и не требует описания. При записи вещественных констант дробная и целая части отделяются друг от друга точкой. Целые константы записываются как целые числа со знаком или без знака и не могут содержать точки. На, 2 -23 456 -2541 - целые константы; 2.0 27.5-0.67 0.02 - вещественные константы. 2.3. Описание данных в языке Паскаль Все данные, используемые в программе (константы, переменные и другие объекты), должны быть указаны в разделе описаний. Описание констант начинается служебным словом CONST, и включает объявления имен констант и их значений, на: CONST РI= 3.1415926535; MaxData= 1024*64-16; Здесь: PI— постоянная вещественного типа; Max Data — постоянная целого типа. Описание переменных начинается служебным словом Var и содержит список идентификаторов переменных и их типов. Переменные целого типа описываются с помощью служебных слов Integer — для целого со знаком и Word — для целого без знака; переменные вещественного типа— с помощью служебного слона Real. Следующий фрагмент программы является ом описания переменных на языке Паскаль: Var M.N : integer; Fl.Gr : real; Таким способом мы описали переменные М и N целого типа и вещественные переменные F1 и Gr. 3. ОПЕРАТОРЫ Основные операторы, используемые при написании любых алгоритмов, в том числе линейных— это оператор присваивания и операторы ввода/вывода. В них могут быть использованы стандартные функции и выражения. 3.1. Стандартные математические функции Для вычисления значений наиболее распространенных функций в языки программирования включены стандартные функции. Состав библиотеки стандартных функций зависит от языка программирования и соответствующего математического обеспечения. Каждая функция определяется именем и аргументами. Вызов функции происходит по имени, в скобках указываются значения аргументов. При использовании функций следует обращать внимание на тип величины, вычисляемой функцией, и типы аргументов. В табл. 2 приведены основные стандартные математические функции в языке Паскаль. 3.2. Выражения Из констант, переменных и обращений к функциям (операндов) можно строить выражения с 5 помощью операций и скобок/Основные операции для языка Паскаль приведены в табл. 3 Приложения. Частным случаем выражения может быть константа, переменная или обращение к функции. ы выражений: у, 21, (a+b)*c, sin(x), 21.0, 2 *а. Последовательность действия при вычислении выражения определяется обычными правилами приоритета, принятыми в математике. 3.3. Оператор присваивания С помощью этого оператора переменной присваивается некоторое значение. Синтаксис (правила записи) оператора присваивания в языке Паскаль: переменная := выражение; Семантика (смысл выполняемых действий) данного оператора заключается в следующем: вычислить значение выражения в правой части, присвоить это значение переменной, указанной в левой части. ы: ADD := 3; RESULT := a+(4*b+c)*d; SUMMA := SUMMA + 4; Замечания: 1.Если некоторой переменной дважды присвоить значение, то первое значение теряется бесследно. В памяти ЭВМ хранится только последнее присвоенное значение. . 2. Переменная рассматривается как неопределенная, если она описана, но значение ее не задано. Попытка использовать в выражениине определенную переменную может привести к ошибке, поскольку такая переменная может иметь произвольное значение. Некоторые реализации языков программирования предупреждают об использовании неопределенных переменных: выдают ошибку, обнаружив в выражении переменную, не имеющую конкретного значения. Не используйте в выражении неопределенную переменную. 3.Обратите внимание на оператор SUMMA := SUMMA + 4;. Этот оператор к старому значению переменной SUMMA прибавляет 4 и полученное значение заносит в переменную SUMMA. Старое значение теряется. 3.4. Операторы ввода/вывода Операторы ввода обеспечивают ввод необходимой информации с различных внешних устройств (клавиатуры, дисков и т.п.) в оперативную память ЭВМ. Операторы вывода позволяют вывести необходимую информацию, имеющуюся в памяти ЭВМ, на экран, принтер, диск и т.п. Оператор ввода на языке Паскаль указывается служебным словом READ или READLN. Оператор вывода — служебным словом WRITE или WRITELN. READLN, в отличие от READ, после ввода данных с клавиатуры переводит курсор на пользовательском экране на новую строку. Аналогичным образом различаются операторы вывода WRITELN и WRITE. Поскольку в языке программирования для хранения информации используются данные, то в операторах ввода/вывода используются их имена в качестве аргументов. В одном операторе ввода/вывода можно использовать несколько аргументов, разделенных запятыми. На, оператор READLN (A.B.C);считаете клавиатуры последовательно значения трех переменных А, В и С/ Оператор WRITELN может выводить на пользовательский экран не только значения переменных или выражений, но и любые сообщения. Допустим, что с клавиатуры введены значения переменных А1, В-5, С-3. В этом случае оператор WRITELN С Сумма чисел ' ,А, 7 ,В, 7 .С,' равна '.А+В+С,'.'); выведет на экран следующее сообщение: Сумма чисел 1,2,3 равна 6. Более подробно см. литературу (I -—9 ]. 4. ПРИМЕРЫ ЛИНЕЙНЫХ АЛГОРИТМОВ 6 Дан угол в радианах. Вычислить синус и косинус угла. Словесное описание алгоритма решения этой задачи следующее: Ввести ANGLE; (угол) Вычислить RESULT 1 по формуле sin.(ANGLE); Вычислить RESULT2 по формуле cos (ANGLE); Вывести RESULT1.RESULT2 Этот алгоритм можно представить в виде блок-схемы (рис. 1.4.). Этот же алгоритм на языке Паскаль: PROGRAM TRIG; { Эта программа вычисляет значение синуса (Result 1) и косинуса (Result2) для угла Angle, заданного в радианах.} VAR Angle : real; Result 1, Result 2: real; BEGIN WriteLn ( 'задайте значение утла в радианах '); Read (Angle); Result 1 := sin(Angle); Result 2 := cos (Angle); WriteLn(fCHHyc равен '.Result 1:6:3); WriteLnj'KocHnyc равен ',Result2:6:3); END. В данной программе значения переменных Result 1 и Result2 печатаются в таком формате (:6:3), где 6 позиций отводится на вывод всего числа, включая знак числа, а 3 позиции — под дробную часть. Задача 2. Дан радиус круга. Определить длину окружности и площадь круга. Программа на языке Паскаль: PROGRAM Circle; {Эта программа по заданному радиусу вычисляет длину окружности и плопчдь круга } CONST PI = 3.14159; VAR Radius : Real; Square, Len ; Real; BEGIN WriteL.n{' введите радиус крута '); Read (Radius); 7 Len := 2 * PI * Radius;• . Square :e PI * Radius * Radius; WriteLn(' Длина окружности =»', Len :6:2); WriteLn(' Площадь круга =', Square :6:2); END. Задача 3. Описать алгоритм для вычисления двух значений Х иХ используя четыре операции умножения для заданного значения X. Словесное описание алгоритма решения этой задачи следующее: Ввести X; Вычислить Х2-ХФХ; Вычислить ХЗ-Х*Х2; Вычислить Х5-Х2*ХЗ; Вычислить Х1О»Х5*Х5; Выдать на печать ХЗ.Х10. Программа на языке Паскаль: PROGRAM Power; { Эта программа по заданному значению X вычисляет два значения Х^3 и Х^10, используя четыре операции умножения } VAR х,х2,хЗ,х5,х10 : real; BEGIN Writeln (Введите значение X'); Readln(x); х2:-х*х; хЗ:-х2*х; х5:-х2*хЗ; х10:-х5*х5; writelnCx в 3-ей степени -' ,хЗ); writelnCx в 10-ой степени -' ,х10); END. ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ Напишите алгоритмы и программы следующих задач. Если есть, возможность, проверьте правильность вашей программы на компьютере. Исходные данные должны вводиться с клавиатуры в процессе выполнения программы, а результаты выводиться на экран. 1. Составить алгоритм (программу) для вычисления двух значений X и Х используя пять операций умножения для заданного значения Даны с-А*В и d-A*B , при этом А и В неизвестны. Составить один алгоритм (программу) для вычисления двух величин f-A *Bи g-A *B так, чтобы в алгоритме (программе) было использовано четыре операции умножения. Даны с-А*В и d-A*B , при этом А и В неизвестны. Составить один алгоритм (программу) для вычисления двух величин f»A *B и g-А *В так, чтобы в алгоритме (программе) было использовано четыре операции умножения. Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь. Даны основание треугольника а и высота А. Найти площадь треугольника. Даны действительные числа а, Ъ, с. Найти сумму и произведение этих чисел. ' 2 Тело движется прямолинейно с ускорением. Даны а (м/с ) —ускорение, v (м/с) — начальная скорость. Требуется определить, какой путь пройдет тело за /секунд. Вычислить период колебания маятника длины L. Определить время, через которое встретятся два тела, равномерно движущиеся навстречу друг другу. Известны начальные расстояния между ними и скорости. Определить силу притяжения между телами массы т 1 и ml, находящимися на расстоянии R друг от друга. Вычислить расстояние между двумя точками, заданными координатами (а, Ь) и (с, d). Дано вещественное число х. Вычислить: а) 2х + Зх2 — 4х3 + 5х4 + 6; б) 1 — 2х + Зх2 — 4х3 + х4; в) 1 + 2х + Зх2 + 4х4 — х6; г) Зх8 — 2х4 - 4; Найти площадь равнобочной трапеции с основаниями а и b и углом при большем основании а. 8 Найти площадь кольца, внутренний радиус которого RJ, а внешний R2. Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника. Даны стороны треугольника а, Ь, с. Вычислить его площадь. Дан радиус /-окружности, вписанной в правильный n-у гольник. Найти стороны правильного прямоугольника. 9 ЗАНЯТИЕ 2. РАЗВЕТВЛЯЮЩИЙСЯ АЛГОРИТМ ЦЕЛИ: Познакомиться с понятиями: логический тип ,данных, разветвляющийся алгоритм. Освоить средства реализации разветвляющихся алгоритмов на языке Паскаль, На первом занятии мы познакомились с понятием алгоритма и научились писать линейные алгоритмы на языке Паскаль. Приведенных средств явно недостаточно для реализации большинства алгоритмов. На, квадратное уравнение может иметь два корня ил и не иметь корней в зависимости от знака детерминанта данного уравнения. В общих чертах сдача первого вступительного экзамена происходит по следующему алгоритму: пишем письменную работу по математике; получаем оценку; —если оценка удовлетворительная, то—готовимся к следующему экзамену, иначе — забираем документы; В рассмотренных алгоритмах последовательность действий зависит от значений некоторых величин. Такие алгоритмы называются разветвляющимися. При написании их используется логический тип данных. . 1, ЛОГИЧЕСКИЙ ТИП ДАННЫХ К логическому типу относятся данные, которые могут иметь одно из двух значений: true (истина) или false (ложь). Над данными логического типа определены следующие операции: NOT — логическое НЕ; AND —логическое И; OR—логическое ИЛИ; XOR — исключающее ИЛИ. Операция NOT имеет один операнд, все остальные—два операнда. На: NOT A, A OR В. Операнды А и В являются данными логического типа. В языке Паскаль данные логического типа описываются с помощью служебного слова BOOLEAN, на: Var L: Boolean;. 1.1. Выражения отношения Выражениями отношения называются арифметические выражения, связанные следующими операциями отношения: Операция отношения Обозначение равно = неравно <> больше > больше или равно >= 10 меньше < меньше или равно <= Примеры выражения отношения: (а+b)*с>= 1000; c*d>x + (y*c)*b. Результатом выражения отношения являются логические величины false и true: если отношение выполняется, то результат есть величина true, в противном случае — false. На, при а == 4, b = 45 выражение отношения а + 16 < b принимает значение true, a a*а = 100 +b принимает значение false. 1.2. Логические выражения Логическое выражение состоит из логических элементов и логических операций. Логический элемент может быть одним из следующих: логическая константа (true или false); логическая переменная; выражение отношения. Вычисление значения логического выражения происходит по старшинству операций и его результатом может быть true или false. В Паскале определены следующие операции, которые можно разбить на группы по приоритетам: l. Not; 2.*, /,Div, Mod, And; 3. +, -, Or, Xor; 4. =,<>,<,>,<=>=. Приоритет операций убывает в указанном порядке, т. е. наивысшим приоритетом обладают операции группы 1,они выполняются первыми при вычислении выражений, а самым низшим — операции группы 4, они выполняются последними. Порядок выполнения операций может быть изменен с помощью скобок, так же, как и при вычислении арифметических выражений. Советуем активно использовать скобки для указания порядка действий. Рассмотрим вычисления логического выражения (а * b + с = х + y)and (к *b > t), Пусть а=*3.0, b = 4.1, с =4, х = 2.5, у =5, k=3, t =10, тогда логическое выражение вычисляется в следующем порядке: 1. a* b + с равно 16.3; 2. x + у равно 7.5; 3. k*b равно12.3; 4.(16.3 =7.5) равно false; 5. (7.5 > 10) равно false; 6. false and false равно false. Таким образом, результатом вычисления всего выражения будет false. Логические выражения можно использовать для записи условий, которые применяются в математике. ы записи логических условий и соответствующих им логических выражений: Условие Логическое выражение 5 < х <== 25 ((х > 5) and (х <= 25)> х > 25 или х <= 5 a) not ((x > 5)and (x <= 25)) б)((х<=5)ог(х>25))' 2, РАЗВЕТВЛЯЮЩИЕСЯ АЛГОРИТМЫ Разветвляющийся алгоритм содержит одно или несколько логических выражений и имеет несколько ветвей вычисления. Простейший разветвляющийся алгоритм можно представить в виде блоксхемы, изображенной на рис.3.1. На такой блок-схеме ветвь, соответствующая значению true логического выражения, отмечается точкой и словом «да», а соответствующая значению false—словом «нет» (см. табл. 1, Приложения). В этом алгоритме логическое выражение вычисляется, и если оно принимает значение true, то выполняется ветвь 1, иначе — ветвь 2. Каждая из ветвей состоит из последовательности действий, которая в свою очередь может содержать логическое выражение и две ветви вычисления и т. д. Таким образом могут быть 11 организованы сложные разветвляющиеся алгоритмы. Для записи разветвляющихся алгоритмов на языке Паскаль используются условный оператор и оператор выбора. Условный оператор позволяет проверить некоторое условие и в зависимости от результата выполнить то или иное действие. Условный оператор имеет следующий синтаксис: IF < условие > THEN <оператор1> ELSE <оператор2>; Где IF, THEN, ELSE — зарезервированные слова (если, то, иначе); <условие> — произвольное логическое выражение; <оператор1>, <оператор2> — любые операторы языка Паскаль, реализующие ветви. <Оператор1>представляет ветвь 1, а<оператор2>—ветвь 2. Часть оператора — ELSE <оператор2> — может отсутствовать. Семантика условного оператора: вычисляется логическое выражение, если оно принимает значение true, то выполняется <оператор1>, иначе — <оператор2>. Оператор выбора имеет следующий синтаксис: CASE<выражение) OF <значение 1> : < оператор 1>; <значение2> : <оператор2>; <значениеN> : < операторы > ELSE < оператор > END; Значение <выражения> в операторе CASE может быть целого или символьного типов. Нельзя использовать вещественный и строковый типы. Оператор выбора позволяет организовать несколько альтернативных ветвей. Семантика оператора выбора: вычисляется <выражение>; последовательно просматриваются <значенис1>, <значение2>, .,., значениеN > и отыскивается первое, которое совпадает со значением выражения; выполняется соответствующий оператор; оператор выбора завершает работу. Если среди <значение1>, <значение2>, ... , <значениеN> не найдется совпадающего со значением выражения, то выполняется <оператор>. Следует обратить внимание, что в каждом из операторов ветвления выполняется только один оператор. При необходимости выполнить несколько операторов в одной ветви оператора ветвления надо создать составной оператор. Составной оператор — это последовательность операторов программы, заключенная в операторные скобки BEGIN ... END. Для наглядности советуем эти операторные скобки размещать друг под другом, а последовательность операторов между ними сдвигать вправо. Среди операторов, входящих в составной оператор, могут быть использованы другие составные операторы: допускается произвольная глубина их вложенности. Тело вложенного составного оператора рекомендуем также сдвигать относительно операторных скобок BEGIN и END. В этом случае запись алгоритма приобретет приблизительно следующий вид: BEGIN. < оператор 1 >; 12 BEGIN <оператор2>; <оператор3 >; BEGIN <оператор4>; <оператор5 >; END END END; Такая форма записи алгоритма позволяет легко ориентироваться в структуре программы и, следовательно, избегать логических и синтаксических ошибок. Примеры разветвляющихся алгоритмов Задача 3.1. Для заданного значения X вычислить значение функции F(X)=Y, которая определяется следующим образом: 4 x, еслиX 0 y 0, еслиX 0 В этом алгоритме для организации ветвления можно использовать условие X >=0. Если это условие верно, то надо вычислять У по формуле У= 4Х, если не верно, то Y = 0. Блок-схема алгоритма приведена на рис.3.2. На языке Паскаль этот алгоритм может быть записан следующим образом: PROGRAM vetvlen; { Эта программа демонстрирует ветвление }VAR x, y : real; BEGIN Writeln (' введите значение x'); Read(x); IF x >= 0 THEN y:=4*x ELSE y:=0; Writeln('y=y:6:3); END. Задача З.2. Даны действительные числа а, b, с. Вычислить корни уравнения ах2 + bх + с = 0. На языке Паскаль этот алгоритм может быть записан следующим образом: Program root; {Эта программа вычисляет корни квадратного трехчлена а*х*х+Ь*х+с=0. при заданных а, о, с} Var a,b,c,D,xl,x2:Real; 13 Begin WriteLn (введите коэффициенты квадратного трехчлена'); Read(a,b,c); D:=b*b-4 *a*c; if D<0 then WriteLn('пpи данных коэффициентах квадратный трехчлен не имеет рациональных корней') else if D = 0 then WriteLn('при данных коэффициентах квадратный трехчлен b/(2*а):6:3) : else begin xl :=(-b + sqrt(D))/(2*a); x2:=(-b-sqrt(D))/(2*a); WriteLn('Kopни квадратного трехчлена', xl :6:3,' ',x2:6:3) end; end. 14 имеет только один корень) Задача 3,4. Чтобы получить одну молекулу серной кислоты Н2 SO4 нужно 2 атома водорода (Н), 1 атом серы (S) и 4 атома кислорода (О). В химическом реакторе имеется А атомов водорода, В атомов кислорода и С атомов серы. . Составьте алгоритм или напишите программу, вычисляющую, сколько молекул серной кислоты может получиться из такого количества атомов? ; Алгоритм решения этой задачи может быть записан следующим образом: Переменные А,В.С.М1,М2,К : тип — целый; Ввести А.В.С; Вычислить целую часть от деления А на 2 М1=* цел.часть (А/2); Вычислить целую часть от деления В на 4' М2== цел.часть (В/4);' Найти минимальное из трех чисел С, M1V-M2 K=min(C,Ml,M2); Выдать на печать:, В реакторе образуется К молекул кислоты. Алгоритм нахождения минимального из трех заданных чисел напишите самостоятельно. Задача 3.5. Два прямоугольника, расположенные в первом квадранте, со сторонами, параллельными осям координат, заданы координатами своих левого верхнего и правого нижнего углов. Для первого прямоугольника, это точки (xl,yl> и <х2,0), для второго— (хЗ.уЗ), (х4,0). Составьте алгоритм или напишите программу, определяющую, пересекаются ли данные прямоугольники, и вычисляющую общую площадь, если они пересекаются. Алгоритм решения этой задачи может быть записан следующим образом: Нарисовать первый квадрант декартовой системы координат и пересекающиеся прямоугольники. Обозначить левую точку пересечения (а,b), правую точку (лежащую на оси X)— (c,d). Переменные xl,у 1,х2,x3,y3lx4,a,b,c,d,S : тип — вещественный; Вычислить минимальное из чисел у 1 и уЗ: b=min(yl,y3); Вычислить максимальное из чисел xl и хЗ: a=max(xl,x3); Вычислить минимальное из чисел х2 и х4: c=min(x2,x4); Присвоить d=0 (по условию задачи); Если а<с то выдать на печать: Прямоугольники пересекаются; Вычислить общую площадь S=(c-a)/b; Выдать на печать S. Задача 3.6. Дан треугольник ABC с координатами вершин А(Ах,Ау), В(Вх,Ву), С(Сх,Су), где числа Ах, Ау, 15 Вх, By, Сх, Су — целые. Составьте алгоритм, определяющий, является ли этот треугольник равнобедренным. Алгоритм решения этой задачи может быть записан следующим образом: Ввести координаты вершин Ах, Ау, Вх, By, Сх, Су; Вычислить квадраты длин сторон АВ, ВС и АС по формулам АВ2 = (Вх-Ах)2+ (Ву-Ау)2 ; ВС2= (Сх-Вх)2 + (Су-Ву)2; AC2= (Ax-Cx)2+(Ay-Су)2; Сравнить: если АВ2 = ВС2 или ВС2 = AC2 или АВ2 = АС2,то Вывести на печать"Треугольник ABC равнобедренный" иначе Вывести на печать "Треугольник ABC не равнобедренный". Программа на языке Паскаль: PROGRAM Trian; VAR Ах,Ау,Вх,Ву,Сх,Су:Real; АВ2,ВС2,АС2:Real; { квадраты сторон } BEGIN Writeln ('Введите координаты точки А '); Readin (Ax.Ay); Writeln ('Введите координаты точки В '); Readin (Bx.By); Writeln ('Введите координаты точки С '); Readin (Cx,Cy); AB2:=sqr(Ax-Bx)+sqr(Ay-By); BC2:=sqr(Cx-Bx)+sqr(Cy-B>); AC2:=sqr(Ax-Cx)+sqr(Ay-Cy); ; { проверка условия } if ((AB2=BC2) or (АС2=ВС2) or (AB2==AC2)) then Writeln(' Tpeyгольник равнобедренный ') else Writeln ('Треугольник не равнобедренный '); END. ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ Даны действительные числа х, у, z. Проверить, выполняется линеравенство х < у < z. . Даны действительные числа х, у. Определить: а) max Ос, у); б) min (x, у). Даны три действительных числа А,В,С. Составить алгоритм или написать программу, выбирающую из заданных чисел те, которые больше 1, но меньше 3. Даны три натуральных числа А,В,С. Составить алгоритм или напишите программу, определяющую образуют ли они геометрическую прогрессию и выдающую на печать ее знаменатель, если это прогрессия. Определить, является ли заданное целое число п четным и двузначным. В декартовой системе координат заданы две окружности радиуса R1 и R2 с центрами в точках А (Ах, Ау) и В(Вх,Ву). Определить, пересекаются ли эти окружности. . В декартовой системе координат заданы две окружности радиуса R1 иЯ2сце^ромвточкеА (Ах,Ay), образующие кольцо. Определить, лежит ли точка В (Вх.Ву) внутри кольца. Определить, находится ли точка М с координатами (в, Ь) внутри верхней части единичного круга с центром в начале координат. Для образования одной молекулы щелочи Са (ОН) i нужно 1 атом кальция (Са), 2 атома кислорода (О) и 2 атома водорода (Н). В химическом реакторе имеется А атомов кальция, В атомов водорода и С атомов кислорода. Составить алгоритм или написать программу, вычисляющую, сколько молекул щелочи может получиться из такого количества атомов, Для пошива одного пальто требуются 3 метра драпа, 4 метра подкладочной ткани, 2 метра ватина и 7 пуговиц. Цех по пошиву пальто получил N метров драпа, М метров подкладочной ткани, К метров ватина и L десятков пуговиц. Какое количество пальто можно сшить из полученных материалов? Для приготовления одноготорта необходимо 3 яйца, 200 г муки, 50 г сливочного масла и 150 г 16 сметаны.. Кондитерский цех получил N десятков яиц, М кг муки, К кг сливочного масла и L кг сметаны. Сколько тортиков можно испечь из полученных продуктов? Определить, может ли кирпич, имеющий форму прямоугольного параллелепипеда с ребрами а, Ь, с, пройти через круглое отверстие радиуса Л. Два прямоугольника, расположенные в первом квадранте, со сторонами, параллельными осям координат, заданы координатами своих левого верхнего и правого нижнего углов. Для первого прямоугольника это точки (0,у!) и (х2,у2), для второго — (О,уЗ), (х4,у4). Составьте алгоритм или напишите программу, определяющую, пересекаются ли данные прямоугольники, и вычисляющую общую площадь. Пусть D — заштрихованная часть плоскости, как показано на рисунке. Определить, принадлежит ли заданная точка с координатами (X0.Y0) областг- л -1 i Пусть D — заштрихованная часть плоскости, как показано на рисунке. Определить, принадлежит ли заданная точка с координатами (X0.Y0) области D. Пусть D — заштрихованная часть плоскости, как показано на рисунке. Определить, принадлежит ли заданная точка с координатами (X0.Y0) области D. Пусть D — заштрихованная часть плоскости, как показано на рисунке. Определить, принадлежит ли заданная точка с координатами (X0.Y0) области D. Дан четырехугольник ABCD с координатами вершин А (Ах, Ау),В(Вх.Ву), С(Сх.Су) и D(Dx,Dy), где Ах, Ay, Bx, By, Сх.Су, Dx, Dy —целые числа. Составьте алгоритм, определяющий, является ли этот четырехугольник квадратом. ; Дан четырехугольник ABCD с координатами вершин А (Ах, Ау), В(Вх,Ву), С(Сх,Су) и D(Dx,Dy), где Ах, Ay, Bx, By, Сх, Су, Dx, Dy ~ целые числа. Составьте алгоритм, определяющий, является ли этот четырехугольник трапецией. Даны два треугольника ABC и DEF с координатами вершин (Ах,Ау), (Вх.Ву), (Сх.Су); (Dx.Dy), (Ех.Бу), <Fx,FyK Составьте алгоритм или напишите программу, определяющую, ка-хой из треугольников имеет больший периметр.^8^ Даны два треугольника ABC и DEF с координатами вершин (Ах.Ау), (Вх.Ву), (Сх.Су); (Dx.Dy), (Ex.Ey), (Fx.Fy). Составить алгоритм или написать программу, определяющую, какой из треугольников имеет большую площадь. Использовать формулу Герона: S-sqrt(P*(P-a)*(P-b)*(P-c>), где Р — полупериметр; а,Ь,с — длины сторон треугольника. J "^ВцДан отрезок АВ с координатами концов А (Ах,Ау) и В (Вх.Ву). , Определить, находится ли отрезок внутри области D, показанной на рисунке. 17 ■Для заданного действительного числа х вычислить значение функции/(х)=у, если х +5 , если х > 1 , у = ■ 50 , если — 1 'S х ^ 1 , х — S , если х < — 1 . Для заданного действительного числа х вычислить значение функции/fх)=у, если _ Г1 — sin х, если — 1 < х < 1 \ 0, в остальных случаях. Дана дата (День, Месяц, Год). Проверитьдату на корректность. ^6. Дано натуральное число п (п SS 1000). Определить: а) сколько цифр в числе; б) чему равна сумма его цифр; г) найти последнюю цифру числа; д) найти первую цифру числа. Поле шахматной доски определяется парой (т, п) натуральных чисел (1 < m < 8, 1 < л < 8). Первое число — номер строки (номер горизонтали), второе число — номер столбца(номер вертикали).Даны натуральные числа к, I, т, п, каждое из которых не больше 8. Определить: а) являются ли поля (к, D и (/л, п) полями одного цвета; б) угрожает ли полю (т, п) ферзь, находящийся на поле (к, /). 18 19 СПИСОК ЛИТЕРАТУРЫ Фаронов В. В. Программирование на персональных ЭВМ в средеТУРБО-ПАСКАЛЬ. — М.: МГТУ, 1992. Абрамов В. Г., Трифонов Н. П., Трифонова Г. Н. Введение в языкПаскаль. — М.: Наука, 1988. Грайс Д. Графические средства персонального компьютера. — М.:Мир, 1989. А. Фигурнов В. Э. IBM PC для пользователей. — М.: Финансы и статистика, 1990. Абрамов С. А., Зима Е. В. Начала программирования на языке Паскаль. — М.: Наука, 1987. Этюды о персональных компьютерах / Пер. с венгерского. — М.:Знание, 1988. Персональный компьютер в играх и задачах. — М.: Наука, 1988. Фаронов В. В. Основы ТУРБО-Паскаля 6.0. — М.: МВТУ-ФЕСТОДИДАКТИК, 1992. Косневски Ч. Занимательная математика и персональный компьютер. — М.: Мир, 1987. 20