Л. И. Долинер основы программирования в среде pascalabc. Net учебное пособие
Скачать 1.88 Mb.
|
lab5_39.pas и запустите ее на выполнение; в) запишите в тетрадь новую для вас информацию; 36 г) составьте программу, которая по заданным сторонам треугольника определяет его площадь (напомним, что это можно сделать с помощью формулы Герона ) )( )( ( c p b p a p p S , где p – полупериметр; a, b, c – стороны треугольника); д) результат выведите, используя форматированный вывод. Задачи для самостоятельной работы 1. Составьте программу: а) которая определяет целое количество недель, которое осталось до Нового года. Для простоты считать количество дней в месяце равным 30 дням; б) вводит двузначное число и определяет сумму его цифр; в) вводит трехзначное число и выводит цифры этого числа в обратном по- рядке; г) вводит трехзначное число и определяет сумму его цифр. 2. Даны координаты вершин треугольника. Вычислите его площадь и периметр. 3. Напишите программу, переводящую время, указанное в минутах, во время в часах и минутах. 4. Ипотека обычно берется на большое количество лет (10, 15 и более). Со- ставьте программу вычисления суммы, которая будет выплачена банку (срок выберите сами, скажем, 15 лет), если в год предполагается платить, кроме части долга, еще и 15 % годовых. 5. Длина отрезка задана в дюймах. Один дюйм равен 2,54 см. Перевести значе- ние длины в метрическую систему, т. е. выразить ее в метрах, сантиметрах и миллиметрах. Например, 21 дюйм = 0 м 53 см 3,4 мм. 6. В языке Паскаль отсутствует стандартная операция «возведение в степень». Это сделано потому, что при определенной математической подготовке мож- но получить требуемый результат, используя имеющиеся возможности языка. Пусть нам необходимо возвести число a в степень х: y = a x Возмем натуральный логорифм от обеих частей равенства: 37 ln y = ln a x ln y =x ln a. Теперь воспользуемся этим равенством: е ln y = е еx ln a y = е x ln a . Запись этой формулы на языке Паскаль будет выглядеть следу- ющим образом: y:=exp(x*ln(a)). Напишите программу, которая возводит любое число в любую степень. Про- верьте правильность вычислений по этой формуле для положительных и от- рицательных чисел. Какие ограничения накладываются на вводимые данные? 7. Составьте программу, которая выводит на экран день недели по дате. Вос- пользуйтесь следующим алгоритмом вычисления дня недели: день недели = остаток от деления X на 7, где X = abs(trunc(2.6*m-0.2)+d+y/4+y+c/4-2*c); m – номер месяца (см. ниже); d – число (день месяца); у – номер года в столетии; с – номер столетия (см. ниже). Формула верна для григорианского календаря нового стиля (от 1582 до 4903 го- да). Год и месяц следует предварительно преобразовать так, как если бы начало года приходилось на 1 марта. Иными словами, март в этой формуле имеет по- рядковый номер 1, апрель 2, ..., январь 11 и февраль 12, причем январь и февраль следует отнести к предыдущему году. Например, для 1 февраля 1991 года номер месяца должен быть равен 12, а год 1990, в то время как для 31 декабря 1991 года номер месяца – 10, а год – 1991. Результат вычисления дается в виде целого чис- ла в диапазоне от 0 до 6, причем 0 соответствует воскресенью. Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы и выйдите из среды PascalABC.NET. Будьте готовы ответить на его вопросы. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, просто вышлите все файлы с подготовленными вами про- граммами преподавателю (если это предусмотрено технологической кар- той). 38 Глава 6 ОПЕРАТОР ВЕТВЛЕНИЯ Задание 40 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Условный оператор». Ответьте на приведенные там вопросы. Выполните тест по теме и продемонстрируйте оценку преподавателю. 1. Ветвление и его организация в языке Паскаль При разработке алгоритмов очень часто возникают ситуации, когда выпол- няемые действия зависят от некоторого условия, т. е. сначала требуется прове- рить условие (или несколько условий) и в зависимости от того, выполняется оно или нет, выполнить различные действия. Например, при начислении стипендии проверяется, как студент сдал сессию. Если у него остались «хвосты», то ему будет назначена нулевая стипендия, если он сдал все на «отлично», то – повы- шенная, в остальных случаях – обычная. Для организации таких действий в языке Паскаль имеется оператор ветвле- ния (условный оператор, оператор IF). 2. Условный оператор IF Задание 41 Запустите среду PascalABC.NET. Войдите в Помощь, в справочнике найдите раздел «Справочник по языку», подраздел «Операторы», в нем статью «Условный оператор». Просмотрите предложенный материал. Задание 42 Запустите среду PascalABC.NET. Загрузите файл lab6_41.pas. Прочитайте и проанализируйте текст программы. Запустите программу на выполнение и проверьте ее работу для различных данных. Для каких данных программа выдает некорректный результат? Модифицируйте программу таким образом, чтобы она в случае ввода одинаковых чисел выдавала сообщение: «Числа равны!» Покажите результат преподавателю. 39 Задание 43 Психологи рекомендуют учитывать оптимальное соотношение возрастов при вступлении в брак. Оно таково: возраст невесты равен половине возраста жениха плюс 7. Составьте программу для определения, подходят ли жених и невеста друг другу по возрасту. Задание 44 1. Составьте программу, которая позволяет найти максимальное из трех заданных чисел. 2. Протестируйте эту программу (проверьте корректность ее работы в разных случаях). Сколько наборов входных данных нужно проверить? Запишите их в тетрадь. 3. Загрузите файл lab6_44.pas. В данной программе реализован оптимальный, на наш взгляд, алгоритм нахождения максимального числа. Сравните этот алгоритм со своим. Попробуйте оценить, какой из алгоритмов является оптимальным. (Оптимальным мы считаем тот алгоритм, который позволяет либо сократить время выполнения программы за счет уменьшения количества выполняемых команд, либо уменьшить объем памяти за счет уменьшения количества переменных.) Задание 45 1. Загрузите файл lab6_45.pas. 2. Прочитайте и проанализируйте текст программы. Обратите внимание на составное условие. 3. Модифицируйте эту программу так, чтобы в том случае, когда введены значения сторон (такие, что из них можно построить треугольник, помимо выдачи текста «можно»), еще подсчитывался периметр треугольника. Задание 46 Составьте программу, которая умеет решать квадратные уравнения (по заданным коэффициентам уравнения А, В, С находит корни уравнения). Рассматриваются различные случаи: нет корней, есть один корень, два различных корня. 40 Задание 47 По заданной стороне квадрата и радиусу круга выяснить, поместится ли: а) круг в квадрат; б) квадрат в круг. Результаты вывести на экран. Задание 48 Составьте программу, которая умеет решать линейные уравнения (уравнения вида Ах + В = 0). Рассматриваются различные случаи: нет решений, решением является любое х, единственное решение (вычисляет его). Задачи для самостоятельной работы 1. Программист должен был написать программу для решения неравенства ax + b > 0 относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. var a, b, x: real; begin readln (a,b,x); If a=0 then if b> 0 then write(‘любое число’) else write (‘нет решений’); else write(‘x>’,-b/a) end. Программист допустил ошибку в программе. Последовательно выполните три задания. 1) Укажите числа a, b, x, при которых программа неверно решает постав- ленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев неправильной работы (это можно сделать несколькими способами, по- этому можно указать любой способ доработки исходной программы). 41 2. Требовалось написать программу, которая определяет, существует ли тре- угольник со сторонами a, b и с. Программист торопился и написал про- грамму неправильно. Var a,b,c:real; Begin Write(‘a=’); Readln(a); Write(‘b=’); Readln(b); Write(‘c=’); Readln(c); If (a+b)>c then If (a+c)>b then Wrieln(‘треугольник существует’) Else Writeln(‘треугольник не существует’); End. Последовательно выполните следующее. 1) Приведите пример таких чисел a, b, c, при которых программа неверно решает поставленную задачу. 2) Укажите, как надо доработать программу, чтобы не было случаев неправильной работы (можно любым способом) 3) Напишите программу, в которой вложенные условные операторы за- мените условным опреатором с логическими операциями OR, AND. 3. Дан массив натуральных чисел. Составьте программу, которая позволяет подсчитать и вывести среднее арифметическое элементов массива, имею- щих нечетное значение. 4. Напишите программу, которая определяет, попадает ли точка с координа- тами (x, y) в круг радиусом R и центром в начале координат. 5. Напишите программу, которая определяет, в какой координатной четверти (квадрант) находится точка с координатами (x, y). Выведите на экран номер квадранта. Учтите случай, когда точка лежит на одной из координатных осей или в начале координат. 6. Напишите программу, которая определяет, принадлежит ли точка с коорди- натами (x, y) прямой y = 1 – x. Если это имеет место, то программа должна 42 вывести на печать координаты точки, в противном случае – сообщение: «Точка не принадлежит прямой». 7. Известны координаты трех точек. Напишите программу, которая определя- ет, находятся ли точки на одной прямой. 8. Напишите программу, которая определяет по введенным значениям длин сторон квадрата и радиуса круга, верно ли утверждение: «Круг вписан в квадрат». 9. С клавиатуры вводится трехзначное число. Напишите программу, которая проверяет, равна ли сумма его цифр значению 9. 10. Дано трехзначное число. Определить, равен ли квадрат этого числа кубам его цифр. 11. Даны два числа а и b. Составьте программу, которая определяет, является ли первое число делителем второго. А наоборот? 12. Дано трехзначное число. Составьте программу, которая определяет, есть ли среди его цифр одинаковые. 13. Год является високосным, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400 (например, 1700, 1800 и 1900 – невисокосные, а 2000 – високосный). Составьте программу, которая вводит число и определяет, является ли год с таким номером високосным. 14. Составьте программу, которые вводит три числа и определяет, является ли треугольник со сторонами данной длины прямоугольным. Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы и выйдите из среды PascalABC.NET. Будьте готовы ответить на его вопросы. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, просто вышлите все файлы с подготовленными вами про- граммами преподавателю (если это предусмотрено технологической кар- той). 43 Глава 7 ОПЕРАТОР ВЫБОРА 1. Цель использования оператора выбора В ряде задач возникают ситуации, при которых нужно использовать оператор ветвления, поскольку в зависимости от некоего условия нужно выполнять то или иное действие, но при этом число условий достаточно большое. Например, если необходимо определить название для недели по его номеру, то решение задачи с помощью оператора ветвления будет выглядеть не очень красиво: … Write(‘Номер дня недели = ’); Readln(n); If n=1 then writeln(‘понедельник’) else if n=2 then writeln(‘вторник’) else if n=3 then writeln(‘среда’) else if n=4 then writeln(‘четверг’) else if n=5 then writeln(‘пятница’) else if n=6 then writeln(‘суббота’) else if n=7 then writeln(‘воскресенье’) else writeln(‘неверный номер’); … Можно, конечно, решать подобные задачи рассмотренным способом. Одна- ко для описания подобных действий в языке Паскаль имеется оператор выбора (оператор CASE). Задание 49 В электронном пособии ( Пособие\index.html ) прочитайте раздел «Оператор CASE». Ответьте на приведенные там вопросы. Выполните тест и продемонстрируйте оценку преподавателю. 2. Оператор выбора CASE Задание 50 Запустите среду PascalABC.NET. Войдите в Помощь, в справочнике найдите раздел «Справочник по языку», подраздел «Операторы», в нем статью «Оператор выбора». Повторите предложенный там материал. Задание 51 1. Загрузите файл lab7_48.pas. Прочитайте текст программы и проанализируй- те его. Запустите программу на выполнение и посмотрите, как она работает. 44 2. Модифицируйте данную программу таким образом, чтобы она при вводе числа 0 выводила сообщение черным цветом (clBlack), а при вводе числа 8 – розовым (clPink). Задание 52 Составьте программу, которая позволяет для любых двух заданных чисел А и В и операции («+» – сложение, «-» – вычитание, «*» – умножение, «/» – деление) получать на экране результат. Подсказка В данной задаче для хранения знака операции лучше всего использовать переменную типа char. Задание 53 Составьте программу, которая позволяет определить, является введенная буква гласной или согласной. Задание 54 Составьте программу, которая позволяет по возрасту определить, к какой группе относится данный человек (моложе 3 лет – совсем маленький, от 4 до 7 – детсадовский возраст, следующие 7 лет – подросток, от 15 до 20 – самый цвет и т. д. по вашему усмотрению). Задание 55* Известно, что астрологи делят год на 12 периодов и ставят каждому из них в соответствие знак зодиака: 20.1 – 18.2 Водолей 23.7 – 22.8 Лев 19.2 – 20.3 Рыбы 23.8 – 22.9 Дева 21.3 – 19.4 Овен 23.9 – 22.10 Весы 20.4 – 20.5 Телец 23.10 – 22.11 Скорпион 21.5 – 21.6 Близнецы 23.11 – 21.12 Стрелец 22.6 – 22.7 Рак 22.12 – 19.1 Козерог Составьте программу определения знака зодиака для любого человека. Подсказка Идеальное решение для данной задачи – преобразовать дату в одно число: месяц умножить на 100 и прибавить день. Тогда, например, для Водолеев можно указать точный диапазон: 120..218. 45 Задачи для самостоятельной работы 1. Составить программу, которая вводит номер месяца и выводит название времени года, к которому относится этот месяц. 2. Составить программу, которая вводит номер года и номер месяца, а выводит количество дней в этом месяце. Предусмотреть ситуации, когда год високос- ный, когда – нет (пояснения см. в задаче 13 для самостоятельной работы на с. 42). 3. Игральным картам условно присвоены следующие порядковые номера в за- висимости от их достоинства: «валету» – 11, «даме» – 12, «королю» – 13, «тузу» – 14. Порядкое номера остальных карт соответствуют их названию («шестерка», «девятка» и т. п.). Составьте программу, с помощью которой можно будет определить карту по ее номеру. 4. Составить программу, которая вводит числовое значение оценки (от 1 до 5) и выводит ее название (1 – «плохо», 2 – «неудовлетворительно», 3 – «удовле- творительно», 4 – «хорошо», 5 – «отлично»). 5. Дано целое число в диапазоне от 10 до 40, определяющее количество зада- ний теста. Вывести текстовое описание заданного количества заданий, обес- печив согласование числа со словами «учебное задание», например: 18 – «восемнадцать учебных заданий», 21 – «двадцать одно учебное задание». 6. Дано целое число в диапазоне от 100 до 999. Составить программу, которая выводит текстовое описание данного числа, например: 145 – «сто сорок пять», 768 – «семьсот шестьдесят восемь». Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы и выйдите из среды PascalABC.NET. Будьте готовы ответить на вопросы преподавателя. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, просто вышлите все файлы с подготовленными вами про- граммами преподавателю. 46 Глава 8 ЦИКЛ С ПАРАМЕТРОМ Задание 56 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Введение в систему типов языка Паскаль». Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. Задание 57 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Циклы с параметром: быстрое начало». Запустите среду PascalABC.Net и проверьте работу всех типовых алгоритмов, приведенных в разделе. Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. Задание 58 Считайте с диска файл с именем lab8_55.pas. Содержащаяся в нем программа 15 раз печатает на экране слово « Халва... » (убедитесь в этом, запустив программу). Модифицируйте программу так, чтобы: а) слово печаталось не 15, а 10 раз; б) слова печатались в одну строку; в) перед первым словом печаталось слово « Начало », а после последнего – слово « Конец »; г) каждое слово печаталось с новой строки и между ними была пустая строка; д) перед каждым словом « Халва... » печатался его порядковый номер (значение переменной i ). Задание 59 В файле |