Турбо паскаль решение задач

Турбо паскаль решение задач

“Три в одной” – пример решения задачи в Turbo Pascal, Delphi и Flash (Action Script)

Организация в программе разветвлений

Данный урок рассчитан на тех, кто уже знаком с азами программирования и имеет элементарные навыки работы в программной среде Turbo Pascal (v7.1), Delphi (v6 или v7) и Flash (v5 или MX) . Урок будет сопровождаться лирическими отступлениями в виде справочного материала по программированию. Я очень надеюсь, что этот урок, позволит Вам в последующем самостоятельно решать задачи, в которых требуется организовать ветвящуюся структуру.

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

Для практического исследования организации разветвлений возьмём очень простую с точки зрения физики задачу:

Условие задачи: Развивая предельно возможную скорость своего движения, жираф пробегает за 23 с 335,8 м. Заяц пробегает за 55 с 918,5 м. Кому из этих животных вы присвоите звание чемпиона, сопоставляя их скорости?

Решение задачи сводится к расчёту скорости животных и их последующему сравнению.

Представим алгоритм решения задачи в виде блок-схемы.

Обратите внимание, что в ходе реализации решения задачи в Delphi и Flash мы сделаем ветвящуюся структуру более сложной, а именно будем анализировать содержимое полей ввода. Может быть, пользователь не заполнил какое-то поле и тщетно нажимает кнопочку расчётов? Может быть, введённые им данные не являются числами?

Действие первое: Turbo Pascal v7.1

Обратите внимание на вложенную структуру оператора. Справочный материал по программированию в Turbo Pascal позволит Вам разобраться с текстом программы самостоятельно.

program champion;
uses crt;
var s1,s2,t1,t2,v1,v2:real;
begin
clrscr;
writeln (‘Введите показатели жирафа s1, t1’); readln (s1,t1);
writeln (‘Введите показатели зайца s2, t2’); readln (s2,t2);
v1:=s1/t1; v2:=s2/t2;
if v1=v2 then
begin textcolor (10); writeln (‘Победила дружба’); end
else if v1>v2 then
begin textcolor (14); writeln (‘Жираф чемпион’); end
else
begin textcolor (9); writeln (‘Заяц чемпион’); end;
repeat until keypressed;
end.

Справка по программированию. Turbo Pascal v7.1:

Общий формат оператора:

Квадратные скобки говорят нам о том, что служебное слово else может быть упущено. Различают полную и неполную форму оператора.

Общий формат оператора (полная форма):

Как работает эта конструкция? Выполняется оператор if, т. е. проверяется условие. Условие может быть истинным (true) или ложным (false). Если условие истинно (true), то выполняется оператор, следующий за служебным словом then. Если условие ложно (false), то оператор, следующий за then, игнорируется и программа переходит к выполнению оператора следующего за служебным словом else.

Для того, чтобы записать группу действий после служебных слов then или else, необходимо использовать составной оператор – begin end (операторные скобки).

Внимание! Перед словом else нельзя ставить точку с запятой. Обратите внимание на запись служебных слов и операторов. Каждое слово else под своим, словом if. Для большей наглядности и “читаемости” текста программы операторы, следующие за словами then и else, можно писать на следующей строке.

Общий формат оператора (краткая форма):

Упущено служебное слово else.

Как работает эта конструкция? Выполняется оператор if, проверяется условие. Если условие истинно (true), то выполняется оператор, следующий за служебным словом then, а затем продолжается выполнение программы. Если условие ложно (false), то оператор, следующий за then, игнорируется и программа продолжает свою работу.

Общий формат оператора (вложенная форма):

Как работает эта конструкция? Выполняется оператор if, проверяется условие. Если условие истинно (true), то выполняются операторы, следующие за служебным словом then, и заключённые в операторные скобки begin и end. Если условие ложно (false), то блок операторов, следующий за then, игнорируется и программа переходит к следующему оператору if, расположенному за служебным словом else. Если это условие оказывается истинным (true), то выполняется оператор, следующий за служебным словом then… Вложенность операторов неограниченна!

Обратите внимание, что после “закрывающей скобки” end точки с запятой нет!

Действие второе: Delhi 7.0. “Волшебство перевоплощения”

Запустим Delphi и сохраним на диске рабочие файлы. Откроем закладку Standard и приступим к работе. Для создания программы мы будем использовать готовые компоненты Delphi – классы, размещённые на этой закладке: 1) Класс Label ; 2) Класс Edit; 3) Класс Panel; 4) Класс Button.

Класс Label – используем для нанесения надписей, поясняющего текста непосредственно на форму (статический текст). Разместив объект на форме изменяем его свойство Caption для нанесения на форму нужного нам текста.

Класс Edit – поле (строка) ввода. Заголовка (свойства Caption ) у этого компонента нет, но есть свойство Text, определяющее содержимое строки. В нашей программе эти поля будут пусты. Очистите их в Инспекторе объектов (Object Inspector). Очень важно прописать полям ввода имена, для того чтобы в последующем программа знала, где ей найти данные для решения задачи – свойство Name. В данной программе:

s1 – поле для ввода длины пробега жирафа;
t1 – поле ввода времени пробега жирафа;
s2 – поле для ввода длины пробега зайца;
t2 – поле ввода времени пробега зайца.

Класс Panel – панель может служить для отображения текста (у неё есть свойство Caption). В нашей программе использованы три панели. Опять таки очень важно прописать панелям имена, чтобы программа знала, куда ей разместить результаты расчётов и анализа – свойство Name . В данной программе:

v1 – скорость жирафа;
v2 – скорость зайца;
zvan – результат соревнований (присвоенное звание).

Для того, чтобы панели были внешне идентичны полям ввода в Инспекторе объектов (Object Inspector), задайте им следующие свойства:

BevelInner – bvLowered.
BevelOuter – bvLowered.
Color – clWhite.

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

Читайте также:  Что такое вай фай директ в смартфоне

Класс Button – класс “Командная кнопка”. При нажатии такой кнопки выполняется некоторое действие, описанное в процедуре. В нашей программе будут работать две кнопки: Кнопка расчётов и анализа и Кнопка, позволяющая очистить поля ввода и вывода. Следовательно, наша с Вами задача сводится к тому чтобы, разместив на форме все нужные нам объекты, прописать кнопкам процедуры.

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

Процедура Кнопки расчётов и анализа:

procedure TForm1.Button1Click(Sender: TObject);
var s1,t1,s2,t2,v1,v2:real;
code: integer;
S,v1S,v2S: string;
begin
if (Form1.s1.Text=») or (Form1.t1.Text=»)
or (Form1.s2.Text=») or (Form1.t2.Text=»)
then Form1.zvan.Caption:=’Не все поля ввода заполнены!’
else
begin
Val (Form1.s1.Text, s1, code);
Val (Form1.t1.Text, t1, code);
Val (Form1.s2.Text, s2, code);
Val (Form1.t2.Text, t2, code);
v1:=s1/t1; v2:=s2/t2;
Str (v1:9:3, v1S);
Str (v2:9:3, v2S);
Form1.v1.Caption:=v1S;
Form1.v2.Caption:=v2S;
if v1=v2 then S:=’Победила дружба. ‘
else if v1>v2 then S:=’Жираф чемпион!’
else S:=’ Заяц чемпион!’;
Form1.zvan.Caption:=S;
end;
end;

Процедура Кнопки очистки полей ввода и вывода:

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.s1.Text:=»;
Form1.t1.Text:=»;
Form1.s2.Text:=»;
Form1.t2.Text:=»;
Form1.v1.Caption:=»;
Form1.v2.Caption:=»;
Form1.zvan.Caption:=»;
end;

Обратите внимание на то что “вручную” Вы прописываете только процедуры для кнопок. Разделы uses, type… Delphi создаёт сам, отслеживая Ваши действия. Сплошное удовольствие, а не работа!

Справка по программированию. Delphi 7:

Str (a, st) – преобразует число любого вещественного или целого типов в строку символов: a – числовая переменная; st – строка символов.

Val (st, a, code) – преобразует строку, содержащую цифры, в число вещественное или целое: st – строка; a – числовая переменная; code – переменная целого типа, по значению которой можно определить, успешно или нет прошёл перевод. Если перевод символов в число прошёл успешно, значение переменной code равно 0.

Очень короткая справка, ведь перед нами всё тот же Turbo Pascal, просто изменились некоторые принципы работы. В Delphi требуется точно указать месторасположение объекта, а также указать свойство которое будет изменено. Например,

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.v1.Caption:=»;
end;

В этих строках указывается, что на форме Form1 “проживает” объект с именем v2 (это панель) у которого свойство Caption должно быть очищено при нажатии кнопочки Button2 “проживающей” на этой же форме Form1.

PS: Смелее переходите к объектно-ориентированному программированию, здесь всё гораздо эффектней и проще!

Действие третье: Macromedia Flash MX (язык Action Script)

Работа в этой среде представляется мне наиболее комфортной и очень доступной, а значит наиболее подходящей для организации уроков программирования в школе.

Можно рисовать самим: кисточками, карандашами, использовать эффектные градиентные заливки для имитации трёхмерности объекта, совершенно непредсказуемо искажать текст, можно импортировать в Ваш ролик растровую графику и, если есть желание, преобразовать её в векторную.

Используя инструменты векторной графики, можно реализовать в редакторе сложную чертёжную работу. Всю эту красоту можно заставить двигаться – анимировать. И это не только сюжетная мультипликация. Можно представить в виде мультфильма решение геометрической или физической задачи, создать калькулятор который наряду с расчётами будет ещё и рисовать графики функций, можно создать свою игру с несколькими уровнями сложности, свой музыкальный редактор, свой сайт… Возможности Flash ограничены только фантазией пользователя и программиста. Это необозримое поле для детского, да и для нашего с Вами взрослого творчества!

Хвалебная песнь спета. Теперь переходим к рутинной работе и реализуем решение задачи, используя технологию Macromedia Flash.

Итак, всё по порядку:

Запускаем редактор Macromedia Flash и сохраняем на диске наш рабочий файл. В работе на сцене у нас будет задействован всего один кадр (frame), на котором будут размещены текстовые блоки и две кнопки, первая кнопка позволит произвести расчеты и проанализировать полученные в ходе расчётов результаты, а вторая очистит поля ввода и вывода.

Работу со статическим текстом (Static Text) мы упустим. Будьте очень внимательны при работе с текстовыми блоками, заполняемыми пользователем (Input Text) и динамическими полями (Dynamic Text ) в которые программа будет вписывать те данные, которые она обсчитает в ходе своего выполнения. Каждому полю Вы должны присвоить уникальное имя. В данном уроке эти имена следующие:

Данные жирафа: Длина пробега – s1; Время движения – t1;

Данные зайца: Длина пробега – s2; Время движения – t2;

Dynamic Text
Скорость жирафа – v1;
Скорость зайца – v2;
Результат соревнований – zvan.

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

Кнопочке для расчётов пропишем акцию:

on (release) <
if (s1=="" or t1=="" or s2=="" or t2=="" or isNaN(s1)==true or isNaN(t1)==true or isNaN(s2)==true or isNaN(t2)==true) <
zvan = "Нет данных!";
v1 = "";
v2 = "";
> else if (Number(t1) v2) <
zvan = "Жираф чемпион!";
> else <
zvan = "Заяц чемпион!";
>
>
>

Обратите внимание, что разветвление программы начинается с того момента, когда мы с Вами начинаем анализировать содержимое полей ввода. Например, в том случае, если хотя бы одно из полей ввода осталось незаполненным, программа в разделе Результат соревнований, в динамическом поле c именем zvan выдаст сообщение: “Недостаточно данных”, ну а два других динамических поля (v1 и v2), судя по тексту программы, будут в этой ситуации просто скромненько помалкивать. Впрочем, Вы можете позволить себе смелый эксперимент и организовать работу программы таким образом, чтобы эти поля не “молчали”, а работали при условии, конечно, что нужные им данные будут всё-таки введены пользователем. Например, показатели жирафа были введены, и в поле v1 программа вывела рассчитанную скорость, а вот зайца “обидели”, и поле с именем v2 не просто промолчало, а ещё и “обиделось”, эту обиду можно представить в виде вопросительного знака.

Если пользователь правильно заполнил поля ввода, то программа попадает на 11 строку акции, где скорости рассчитываются, а затем анализируются. Обратите внимание на вложенность оператора if. Проведите эксперимент, для того, чтобы убедиться в том, что созданная Вами структура представляет собой единое целое. Для этого встаньте на 2 строку и щёлкните по кнопочке со знаком минус. В акции останутся целыми и невредимыми только первые две строки!

Кнопочке для очистки полей ввода и вывода пропишем акцию:

Эти строки без комментариев.

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

Справка по программированию. Action Script (Macromedia Flash MX):

Общий формат оператора (краткая форма):

Как работает эта конструкция? Условие (condition) – логическое высказывание, которое может быть истинным (true) или ложным (false) . Например, if (name == "Best"), этот оператор просматривает содержимое переменной с именем name и сравнивает её значение со строкой "Best". В том случае, если содержимое переменной соответствует содержимому строки, то есть высказывание истинно (true), программа переходит к выполнению инструкции или серии инструкций (statement(s)), записанных в фигурных скобках. Инструкции разделяются точкой с запятой. Впрочем, если Вы работаете в Нормальном режиме (Normal Mode), то Flash обо всём этом позаботится сам.

Общий формат оператора (полная форма):

Как работает эта конструкция? В том случае, если высказывание, указанное в if оказывается ложным (false), то управление переходит к пятой строке – это альтернативная инструкция или серия инструкций.

Общий формат оператора (вложенная форма):

Как работает эта конструкция? В том случае если высказывание, указанное в if оказывается истинным (true), то управление переходит ко второй строке – выполняются инструкции, заключённые во внутренние фигурные скобки. В том случае если высказывание, указанное в if оказывается ложным (false), то программа пропускает инструкции, записанные во внутренних фигурных скобках, и передаёт управление третьей строке, в которой мы видим ещё одно логическое высказывание. Если это высказывание оказывается истинным (true), то программа переходит к выполнению инструкций, записанных на пятой строке… Вложенность операторов неограниченна!

PS: Обратите внимание, что рабочую версию программы, выполненной в редакторе Flash, Вы можете разместить на своей web-страничке, как это сделано в этом уроке. Размер файла тоже впечатляет — всего 15 KB, а если поскромничать и убрать кнопочку в виде капельки, убрать некоторые комментарии, уменьшить размер сцены то файл “похудеет” до 4 KB. Это ещё одно неоспоримое преимущество Flash — технологий. Времена статического Интернета отошли в прошлое, будущее за динамическим интерактивным Интернетом!

Примеры решения задач в Turbo Pascal. 9 класс.

Содержимое разработки

Задача №1: «Рассчитать площадь и периметр прямоугольника по двум известным сторонам».

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

Составим алгоритм решения подобных задач:

1) Прочитать задачу.
2) Выписать известные и неизвестные нам переменные в «дано». (В задаче №1 к известным переменным относятся стороны: a,b ;к неизвестным — площадь S и периметр P)
3) Вспомнить либо составить необходимые формулы. (У нас: S=a*b; P=2*(a+b))
4) Составить блок-схему.
5) Записать решение на языке программирования Pascal.

Запишем условие в более кратком виде.

Решение задачи №1

Структура программы, решающей данную задачу, тоже проста:

1) Описание переменных;

2) Ввод значений сторон прямоугольника;

3) Расчет площади прямоугольника;

4) Расчет периметра прямоугольника;

5) Вывод значений площади и периметра;

А вот и решение:

Var a,b,S,P: integer;

write(‘Введите стороны прямоугольника!’);

writeln(‘Площадь прямоугольника: ‘,S);

write(‘Периметр прямоугольника: ‘,P);

Задача №2: Скорость первого автомобиля — V1 км/ч, второго – V2 км/ч, расстояние между ними S км. Какое расстояние будет между ними через T часов, если автомобили движутся в разные стороны? Значения V1, V2, T и S задаются с клавиатуры.

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

Дано: V1, V2, S, Т
Найти: S1

Далее идет самая главная и в то же время самая интересная часть нашего решения – составление нужных нам формул. Как правило, на начальных стадиях обучения все необходимые формулы хорошо нам известны и взяты из других технических дисциплин (например, на нахождение площади различных фигур, на нахождение скорости, расстояния и т.п.).

Формула, используемая для решения нашей задачи, выглядит следующим образом:

Следующий пункт алгоритма – блок-схема:

Решение задачи №2.

А также решение, записанное в Pascal :

Var V1,V2,S,T,S1: integer;

write(‘Введите скорость первого автомобиля: ‘);

write(‘Введите скорость второго автомобиля: ‘);

writeln (‘ Введите a’); readln (a);

writeln (‘ Введите b’); readln (b);

if b=1 then writeln (a)

Из одного порта в другой необходимо перевезти 15 различных грузов. Грузоподъемность судна, на котором будет проходить перевозка, 50 тонн. Грузы пронумерованы, и информация о массах грузов хранится в массиве М(15). Определить, сколько рейсов необходимо сделать судну, если грузы неделимы и могут перевозиться только подряд в порядке их нумерации. (Предполагается, что масса отдельного груза не превышает 50 тонн).

mas=array[1..15] of integer;

for i:=1 to 15 do

writeln (‘ Введите m’,'[‘,i,’]’);

writeln (‘ Потребовалось , k,’ рейсов ‘);

Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p % . Через сколько лет он накопит сумму s , достаточную для покупки собственного магазина?

writeln (‘Введите стартовый капитал’);

writeln (‘Введите % увеличения капитала’);

writeln (‘Введите сумму, необходимую для покупки магазина’);

writeln (‘Количество лет -‘, int ( n /12));

Число Цукермана – натуральное число, которое делится на произведение своих цифр, например: 175 делится на 1·7·5=35. Составить программу, которая выводит на экран все трехзначные числа Цукермана.

var i,a,b,c: integer;

for i := 111 to 999 do

b := (i div 10) mod 10;

if (b <> 0) and (c <> 0) and (i mod (a * b * c) = 0) then writeln (i);

На конференцию приехало N человек. Для их перевоза выделили автомобили вместимостью К и М человек (без водителя). К гостинице автомобили подаются в таком порядке: сначала вместимостью К человек, потом – М человек и так далее. В автомобиле можно перевозить не более максимально допустимого количества пассажиров. Определить, сколько необходимо автомобилей для перевозки всех делегатов конференции.

writeln (‘Введите количество участников’);

writeln (‘Введите вместимость первого автомобиля’);

writeln (‘Введите вместимость второго автомобиля’);

if x mod 2<>0 then N:=N-K else N:=N-M;

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

A: array [1..4] of integer;

writeln (‘В коробке’, n , ‘закончились спички’);

writeln (‘Израсходовано спичек’, m );

Сформировать квадратную матрицу следующего вида.

A: array [1..5, 1..5] of byte;

Дано число типа byte . Проверить, является ли палиндромом его двоичное представление с учетом того, что сохранены старшие нули. Пример таких чисел: 102 (т. к. 102 = 0110 0110 2 , а это палиндром), 129 (129 = 1000 0001 2 ) и т. д.

a := 8 * a + 4 * b + 2 * c + d;

Даны два натуральных числа. Найти их наименьшее общее кратное.

Примечание: наименьшим общим кратным двух чисел m и n называется наименьшее натуральное число, которое делится на m и n . Обозначение: НОК( m , n )

while m <> n do begin

if m > n then begin

writeln(prod div m)

Дана последовательность символов длины n ( n >= 1 ). Проверить баланс круглых скобок в этом выражении. Например, при вводе выражения (())() программа должна сообщить о правильности расстановки скобок, а при вводе выражения ((()) – о неправильности.

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

for i := 1 to n do begin

if c = ‘(‘ then inc(count);

if c = ‘)’ then dec(count);

if count = -1 then break

writeln ( count = 0)

Сколько существует упорядоченных пар натуральных чисел а и b , для которых известны их наибольший общий делитель d и их наименьшее общее кратное m ?

a, b, i, j, d, m:integer;

function nod(a, b:integer):integer;

if a=b then nod:=a

if a>b then nod:=nod(a-b, b) else nod:=nod(a, b-a)

writeln (‘ Введите НОД двух чисел d’);

writeln (‘ Введите НО K двух чисел m’);

for i:=1 to 100 do

for j:=1 to 100 do

if ((nod(a, b)=d) and ((a*b div nod(a, b))=m)) then writeln (i, j);

Правительство гарантирует, что инфляция в новом году составит р % в месяц. Какого роста цен за год можно ожидать? Составить программу решения задачи.

Сложные проценты вычисляются по формуле .

writeln (‘Введите процент месячной инфляции’);

Факультету выделен стипендиальный фонд в размере f рублей в месяц. Результаты сессии таковы: «отличников», «хорошистов», «троечников». Повышенная стипендия (для отличников) составляет рублей, обычная — рублей; задолжники стипендии лишаются. Составить программу, определяющую сколько студентов каждой категории могут получать стипендию и каков будет остаток фонда на материальную помощь малоимущим студентам?

writeln (‘ Введите размер фонда ’);

writeln (‘Введите количество отличников, хорошистов и троечников’);

readln ( n 1, n 2, n 3);

writeln (‘Введите размер стипендий’);

if f>s1*n1 then k1:=n1 else k1:=f div s1;

if f>s2*n2 then k2:=n2 else k2:=f div s2;

if f>s2*n3 then k3:=n3 else k3:=f div s2;

writeln (‘Количество отличников, получивших стипендию=’, k 1);

if k 2>0 then writeln (‘Количество хорошистов, получивших стипендию= ‘, k 2);

if k 3>0 then writeln (‘Количество троечников, получивших стипендию =’, k 3);

writeln (‘Фонд материальной помощи=’, f );

N коробок стоят по кругу. В i -ой коробке j змей. Каждую минуту змеи переползают в соседнюю коробку (из i -ой в i +1 -ую), а из N -ой – в первую. Составить программу, определяющую количество змей в каждой коробке через М минут.

Ссылка на основную публикацию
Тор браузер андроид 4pda
Браузер Тор доступен не только для компьютеров и ноутбуков под управлением различных операционных систем. Разработчики обеспокоились и его выпуском для...
Телефон греется и тормозит что делать
Почему тормозит устройство на Andro >Прежде чем перейти непосредственно к решению проблем, стоит указать на их причины. Зная о том,...
Телефон завис на загрузке андроид
В результате поломки аппаратной части или сбоя в работе ОС любой Android-смартфон может перестать реагировать на кнопку включения. Частой можно...
Тор браузер без установки
Tor Browser (ранее он назывался Tor Browser Bundle) – наиболее защищенный интернет-обозреватель из представленных в настоящий момент. Ввиду высокой популярности...
Adblock detector