Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задачи для самостоятельного выполнения

Линейные программы

Методические указания к практической работе № 2
по дисциплине «Основы алгоритмизации и программирования»

 

Ростов-на-Дону


Составитель: С.В.Шинакова

 

 

Методические указания и задания к выполнению практической работы по теме "Линейные программы" / ДГТУ, Ростов-на-Дону, 2009. ** с.

 

 

Излагаются теоретические и технологические сведения, необходимые для создания программ на языке Паскаль. Целью работы является выработка навыков структурного программирования.

 

Рецензент:

 

 

Печать оперативная. Формат 60х84/16. Бумага офсетная.

Объем 0,7 усл.-п.л., 0,7 уч.-изд.л.

Тираж ** экз.

____________________________________________________________________

ã ДГТУ, 2009

 


Целью данной практической работы является изучение ввода-вывода во время выполнения линейных программ на языке Pascal. Самостоятельное выполнение предлагаемых задач и разбор контрольных вопросов призваны закрепить усвоенный материал в форме навыков программирования.

Линейные программы

Линейная программа (следование) эта программа, которая образуется из последовательных блоков, следующих друг за другом, причём каждый блок может представлять собой или простую команду или любую более сложную конструкция базовых элементов.

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

Ввод и вывод

Любая программа (алгоритм) должна быть результативна. В общем случае это означает, что она должна сообщать результат своей работы потребителю: пользователю-человеку или другой программе (например, программе управления принтером). В программировании существует специальное понятие консоль, которое обозначает клавиатуру при вводе и монитор при выводе.

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

read(<список_ввода>) и readln(<список_ввода>).

Ввод данных выполняется через буфер – специальную область оперативной памяти. Фактически данные сначала заносятся в буфер, а затем считываются оттуда процедурами ввода. Занесение в буфер выполняется по нажатию клавиши Enter вместе с кодом (#13#10). Процедура read, в отличии от readln, не очищает буфер, поэтому следующий за ней ввод будет выполняться с того места, на котором закончился предыдущий, т.е. с символа конца строки. В остальном же их действия полностью совпадают.

Список ввода - это последовательность имен переменных, разделенных запятыми. Например, при помощи команды

readln(k,x,c,s); {k:byte; x:real; c:char; s:string}

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

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

Типы вводимых значений должны совпадать с типами указанных переменных, иначе возникает ошибка. Поэтому нужно внимательно следить за правильностью вводимых данных.

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

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

Примером неплохого приглашения служит, скажем, такая строчка:

Введите два вещественных числа (0.1<x,y<1000000) - длины катетов.

Впрочем, и ее можно улучшить, сообщив пользователю не только допустимый диапазон ввода, но и ожидаемую точность (количество знаков после запятой).

Средства, позволяющие организовать выдачу информации на экран, мы здесь и рассмотрим.

Для того чтобы вывести на экран какое-либо сообщение, воспользуйтесь процедурой

write(<список_вывода>) или writeln(<список_вывода>).

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

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

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

Если для вывода информации воспользоваться командой, приведенной в конце предыдущего пункта, то выводимые символы окажутся "слепленными". Чтобы этого не случилось, нужно либо позаботиться о пробелах между выводимыми переменными:

writeln(a,' ',b,' ',c);

либо задать для всех (или хотя бы для некоторых) переменных формат вывода:

writeln(a:5,b,c:20:5);

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

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

Например, если a = 25, b = 'x', а c = 10.5, то после выполнения команды writeln(a:5,' ',b,c:10:5) на экране или в файле будет записано следующее (подчерки в данном случае служат лишь для визуализации пробелов):

_ _ _25_x_ _10.50000

Особенно важен формат при выводе вещественных переменных. К примеру, если не указать формат, то число 10.5 будет выведено как _1.05000000000000Е+0001. Такой формат называется записью с плавающей точкой.

Если же задать только общую длину вещественного числа, не указывая длину дробной части, то оно будет занимать на экране заданное количество символов (в случае надобности, спереди будет добавлено соответствующее количество пробелов), но при этом останется в формате плавающей точки. Минимальной длиной для вывода вещественных чисел является 10 (при формате _x.xE+yyyy). Первая позиция зарезервирована под знак "-".

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

Оператор форматного вывода Результат вывода на экран
write (125.2367:10); _1.2E+0002
write (125.2367:11); _1.25E+0002
write (125.2367:12); _1.252E+0002
write (125.2367:13); _1.2524E+0002
write (125.2367:14); _1.25237E+0002
write (125.2367:15); _1.252367E+0002
write (125.2367:16); _1.2523670E+0002

Теперь, когда мы познакомились с примерами, можно сформулировать общее правило записи процедур вывода:

· Список вывода разделяется запятыми;

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

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

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

· Если форматы не указаны, под целое число, символ и строку отводится минимальный необходимый для их представления количество позиций. Под вещественное число всегда отводится 23 позиции, причем 14 из них – под его дробную часть.

· Форматы могут быть выражениями целого типа.

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

Пример. Написать программу, которая переводит температуру в градусах по Фаренгейту в градусы по Цельсия по формуле: С=5/9(F-32), где С – температура по Цельсию, F – температура по Фаренгейту.

program Project1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

fahr, cels: real;

Begin

{ TODO -oUser -cConsole Main: Insert code here }

Writeln('Введите температуру по Фаренгейту');

Readln(fahr);

cels:=5/9*(fahr-32);

Writeln('По Фаренгейту: ', fahr:6:2,

' в градусах Цельсия: ',cels:6:2);

Readln;

end.

Задания для выполнения

1. Введите положительное число а. Вычислите:

a) площадь равностороннего треугольника со стороной а;

b) площадь квадрата со стороной а;

c) площадь круга, радиус которого равен а.

2. Вычислите расстояние между двумя точками на плоскости с данными координатами (х1, у1) и (х2, у2).

3. Составить программу вычисления значения функции y= (а^2+7)/sqrt(a+3) при любом значении а.

4. Дано целое положительное число n>999. Найти число единиц в нем, число десятков в нем, сумму цифр числа.

5. В трехзначном числе N зачеркнули первую цифру. Когда новое число умножили на 10, а произведение сложили с первой цифрой числа, то получилось число 564. Найти число N.

6. Товар до деноминации (до 1 января 1998 года) стоил r рублей. Какова его цена после деноминации (в рублях и копейках) при условии, что r >= 10?

7. Поменяйте местами значения целых переменных m и n, не используя дополнительные переменные.

Контрольные вопросы

1. Назовите процедуру ввода информации?

2. Каково назначение процедур write и writeln?

3. Чем различаются процедуры read и readln?

4. Можно ли с помощью процедуры writeln напечатать значение выражения?

5. Выберите все правильные варианты. При использовании в программе оператора read требуется разделить числовые значения величин при вводе с помощью:

a) только одного пробела;

b) произвольного количества пробелов;

c) запятой

d) нажатия клавиши Enter;

e) нажатия клавиши Tab;

6. Что из перечисленных ниже вариантов будет выведено на экран в результате работы программы?

program Project1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

k:byte; x: real;

Begin

k:=2; x:=1;

write('*', '*',x:3:1,k:k*2,'* *');

readln;

end.

a) **1.0 2* *

b) *1.0 2**

c) **1.02* *

d) * *1.0 2* *

e) *1.02* *

7. Найдите операторы вывода, не содержащие синтаксических ошибок (var k:integer; x,y: real;)

a) write('''*', x:4,k,y:k:2,'*');

b) write('*', x,k,y*k*x:4:2,'*');

c) write(k:4:2,y:4:2,'*');

d) write('*k-x,y:4:2,,*');

e) write('*',x,k:2,y:4:2,'*':5:2);

8. Выберите все правильные утверждения. В процедуре write для величин вещественного типа можно задавать формат вида A:K:M, где A – переменная или выражение,

a) K – общее количество позиций, отводимое под А.

b) K – количество позиций, отводимое под целую часть А

c) K и M могут быть только константами

d) K и M должны быть выражениями целого типа

e) K – количество позиций, отводимое под дробную часть А

Задачи для самостоятельного выполнения

1. Дано трехзначное число. В нем зачеркнули последнюю цифру и приписали ее вначале. Найти полученное число.

2. Составьте программу для вычисления времени t встречи автомобилей, движущихся равноускоренно навстречу друг другу, если известны их скорости V1 и V2, ускорения а1 и а2 и начальное расстояние S между ними. Расстояние S1 пройденное первым автомобилем, вычисляется по формуле
;
расстояние S2, пройденное вторым автомобилем, вычисляется по формуле

Время t встречи автомобилей определяется из уравнения
откуда .

3. Пусть даны числа а, b, f. Найдите площадь треугольника, две стороны которо­го равны а и b, а угол между этими сторонами равен f. Считайте, что f — это градусная мера угла.

4. Пусть даны четыре целых числа (hour, min, sec, time). Первые три из них (hour, min, sec) — это время запуска ракеты в часах, минутах и секундах, четвертое (time) определяет время полета в секундах. Найдите и напечатайте время возвращения ракеты на землю.

5. Введите два вещественных числа. Напечатайте коэффициенты приведенного квадратного уравнения, корнями которого являются эти числа.

6. В бригаде, работающей на уборке сена, имеется n косилок. Первая из них работала m часов, а каждая следующая на 10 мин больше, чем предыдущая. Сколько часов работала вся бригада?

7. Подсчитайте, сколько очков набрала команда «Динамо» в первом круге чемпионата России по хоккею, если известно, что m встреч она выиграла, n встреч проиграла, k встреч закончились ничьими, полагая, что за выигрыш команда получает 2 очка, за ничью — 1 очко, за проигрыш — 0 очков.

8. Сколько процентов от А + В - С приходится на A? На В? На С?

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

10. Составьте программу вычисления идеального веса человека по его росту, при условии, что идеальный вес (кг) = рост (см) - 100.

11. Розничная цена мужского костюма составляет R рублей. Торговое наложение магазина составляет Т % от оптовой цены. Составьте программу определения оптовой цены костюма.

12. Зарплата сотрудника частной фирмы составляет r рублей в месяц. Сколько денег он получит за полгода после вычета налогов в размере t % ежемесячно и s % за полгода?

13. Даны координаты вершин некоторого треугольника. Вычислите его периметр.

14. Пусть смешано V1 литров воды температуры t1, с V2 литрами воды температуры t2. Составьте программу вычисления объема и температуры образованной смеси.

15. Сколько времени в минутах затратит школьник на дорогу от школы до стадиона, если это расстояние составляет S км, а средняя скорость движения школьника — V км/ч.

16. Целой переменной х присвойте значение суммы цифр заданного трехзначного числа.

17. Определите число, полученное выписыванием в обратном порядке цифр заданного целого трехзначного числа х. Присвойте это число переменной m.

18. Пусть идет k- я секунда суток. Определите, сколько целых часов h и целых минут t прошло к этому моменту.

19. Определите f — угол (в градусах) между положением часовой стрелки в начале суток и ее положением в h часов, t минут и s секунд (0£ h £11, m³0, s£59).

20. Пусть n — целое число от 1 до 365. Присвойте целой переменной t значение 1, 2,.... 6 или 7 в зависимости от того, на какой день недели (понедельник, вторник,..., субботу или воскресенье) приходится n -й день невисокосного года, в котором 1 января – среда.

Список используемой литературы

1. Фаронов В.В. Delphi 3. Учебный курс. М.: «Нолидж», 1998. 400 с.

2. Галисеев Г.В. Программирование в среде Delphi 8 for.NET. М.: Издательский дом «Вильямс», 2004. 304 с.

3. Павловска Т.А. Паскаль. Программирование на языке высокого уровня. СПб.: Питер, 2003. 393 с.

4. Абрамов С.А. и др. Задачи по программированию. М.: Наука, 1988. 224 с.

5. Златопольский Д.М. Сборник задач по программированию. СПБ.: БХВ-Петербург, 2007. 240 с.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...