Перейти на главную страницу
Задача: Заданы координаты концов двух отрезков, определить взаимное расположение этих отрезков (определить лежат они параллельных, совпадающих или пересекающихся прямых, в случае совпадения прямых определить имеют отрезки общую точку, общую часть или не имеют общих точек, в случае пересечения прямых определить имеют отрезки общую точку или нет).
Приближенные методы вычислений.
Задача 1. Вычислить приближенное значение суммы
1 + x/1! + x2/2! + x3/3! + …
Считаем, что нужное приближение получено, если вычислена сумма нескольких слагаемых, и очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число .
Для решения задачи мы должны выполнить следующие действия:
var a: real;
x : real;
: real;
i : integer;
S : integer;
begin
readln(x, );
a:=1;
WHILE a> DO
begin
S:=S+a; i:=i+1; a:=a*x/i;
writeln(‘приближенное значение суммы=’,S:4:2)
end.
Задача 2. Рассмотрим часто встречающуюся задачу приближенного решения уравнения f(x)=0, где f(x) – заданная функция. Решить уравнение – значит найти такое значение х*, при котором f(x*)=0. Поиск решения осуществляется на интервале [a;b], причем f(a)<0, а f(b)>0. Используем метод деления пополам. Находим точку с=(а+b)/2 – середина отрезка. Если f(c)>0, то границу b изменяем на значение с, а если f(с)<0, то изменяем а. Процесс продолжаем, пока длина интервала не будет меньше заданной точности.
f(x)
Program popolam;
const eps=1.0E-3;
var a,b,c:real;
Function eg(x,y:real):boolean;
begin
begin
end;
Writeln(‘введите интервал’); readln(a,b);
if F(a)*F(b)>0 then writeln(‘на этом интервале мы не можем
найти решение уравнения’)
else begin
while Not Eg(a,b) do
begin c:=(a+b)/2;
if F(c)>0 then b:=c else a:=c
end;
writeln(‘Результат ’,a)
readln
Можно с помощью этой программы решить уравнения :
x2-6x+5=0 x-cosx=0 x-lnx-2=0 2x3-9x2-60x+1=0
Метод итераций
Пусть нужно решить уравнение f(х)=0, из которого мы получаем уравнение следующего вида: х=u(х), для решения этого уравнения методом итераций необхдимо составить последовательность приближений, причем надо учитывать что далеко не каждая последовательность приведет нас к нахождению корня, необходимым и достаточным условием для использования метода итераций является u’(x)<1. Итак, для нахождения последовательности выбираем произвольно х0, вплоть до случайного числа, вычисляем х1=U(х0), х2=U(х1) х3=U(х2) и т.д. опка не будет выполнено неравенство |хi-xi+1| 0 a x1 x2…..... xn-2 xn X
Y
Задача 3. Пусть непрерывная положительная на отрезке [a,b] (aНа каждом из отрезков [xi,xi+1] как на основании, построим прямоугольник с высотой f(xi).
Площадь прямоугольников мы умеем находить. Сумма площадей всех прямоугольников даст приближенное значение площади фигуры:
Sприб=(b-a)/n*(f(x0)+….f(xn-1))
Естественно, что чем мельче будет разбиение, тем точнее мы подсчитаем площадь фигуры.
Для отладки программы возьмем функцию f(x2) на отрезке [1,2]. Площадь фигуры равна 2,333….
program trapez;
const eps=1.0E-3;
var a,b,s,dx :real;
i,n : integer;
Function eg(x,y:real):boolean;
begin
begin
end;
Writeln(‘введите интервал и число частей для разбивки’); readln(a,b,n);
x:=a; dx:=(b-a)/n; s:=0;
For i:=1 to n-1 do
begin
s:=s+F(x);
end;
readln;
f(x)=sinx [0,/2]
Для вычисления длины дуги воспользуемся тем же разбиением на прямоугольники, с тем лишь отличием что будем брать сумму длин гипотенуз прямоугольных треугольников… до тех пор пока разница между предыдущим и текущим значением не будет меньше заданной точности.
Задача 4. Для вычисления элементарных функций в математике широко распространено представление этих функций в виде некоторых бесконечных сумм. Не вдаваясь в обоснование таких представлений, приведем некоторые их них :
ex=1 + x + x2/2! + x3/3! + … + xn/n! + …
sinx=x – x3/3! + x5/5! – x7/7! +…+ (-1)nx2n-1/(2n+1)! +….
cosx= 1 – x2/2! + x4/4! – x6/6! +…+ (-1)nx2n/(2n)! +….
ln(1+x)=x – x2/2 + x3/3 – x4/4 + …+ (-1)n+1xn/n + ….. (-1 В каждом из разложений точность представления функции будет, вообще говоря, тем выше, чем больше взято слагаемых в сумме. Причем значения самих слагаемых с ростом n стремятся к нулю. Для вычисления значений функции с некоторой заданной точностью поступают следующим образом. Вычисляют и суммируют слагаемые до тех тор, пока очередное слагаемое не станет по абсолютной величине меньше или абсолютное значение разности между соседними слагаемыми не станет меньше . Полученную сумму и принимают за приближенное значение функции.
Вычисли функцию sinx. Program rad;
const eps=1.0E-3; var x,sn,ss : real;
p, n : integer; {p – используется для чередования знака слагаемого}
Function Eg(x,y;real):boolean; begin
Eg:=Abs(x-y) Function F(n:integer;var x:real):real; var i:integer;
s:longint; begin
s:=1;
end;
for i:=2 to n do s:=s*i;
x:=x*sqr(x); F:=x/s
end;
BEGIN
readln(x);
ss:=0; sn:=x; n:=1; p:=1;
Repeat
{ новое значение слагаемого}
n:=n+2; p:=-1*p; sn:=ss+p*F(n,x)
Until Eq(ss,sn) or (n>=12);
Writeln(‘Результат=’,sn); readln
end.
Задача 5. Метод Монте-Карло для приближенного вычисления площади.
Пусть есть какая-нибудь фигура на плоскости, расположенная внутри стандартного квадрата со сторонами параллельными координатным осям.
Пусть про любую точку квадрата мы можем быстро узнать, попадает ли эта точка внутрь фигуры или нет.
Для выбора точек используют случайные числа Random(x)
Если вызвать функцию много раз подряд, то множество полученных чисел будет равномерно распределено по отрезку [0,a]
Program ss;
var n: integer; {количество точек}
a : integer; {длина стороны квадрата}
m, i : integer;
x,y : real;
begin
readln(n,a);
m:=0;
for i:=1 to n do
x:=Rondom(a); y:=Random(a);
if точка(x,y) внутри квадрата then m:=m+1
end;
writeln(‘Результат ’,s);
end.
11 класс.
Множества.
Множество в Паскале представляет собой набор различных элементов одного (базового) типа.
Базовый тип – это совокупность всех возможных элементов множества. Всего в базовом типе должно быть не более 256 различных элементов. Значение переменной множественного типа может содержать любое количество различных элементов базового типа – от нуля элементов (пустое множество) до всех возможных значений базового типа
Множества, используемые в программе, могут быть описаны либо в разделе Type:
Type <имя типа> = Set Of <тип элементов>;
Var <имя множества> : <имя типа>;
Var <имя множества> : Set Of <тип элементов>;
Type mnog_Char=Set Of Char;
Var mn1 : Set Of Char;
mn2 : mnog_Char;
mn3 : Set Of ‘A’..’Z’;
s1 : Set Of Byte;
s2 : Set Of 1000..1200;
Здесь mn1 и mn2 – это множества символов; так как различных символов всего 256, то тип Char можно использовать в качестве базового;
mn3 – множество больших латинских букв;
s1 – множество целых чисел (от 0 до 255); так как тип Byte содержит только целые числа от 0 до 255, его тоже можно использовать в качестве базового типа элементов;
s2 – множество целых чисел от 1000 до 1200.
Формирование (конструирование) множеств. В программе элементы множества задаются в квадратных скобках, через запятую. Если элементы идут подряд друг за другом, то можно использовать диапазон.
Пример Type digit = Set Of 1..5;
Var s : digit;
Переменная s может принимать значения, состоящие из любой совокупности целых чисел от 1 до 5;
[ ] - пустое множество;
[1], [2], [3], [4], [5] – одноэлементные множества;
[1,2], [1,3], …., [2,4], [4,5] – двухэлементные множества (пара любых элементов);
[1,2,3], [1,2,4], … , [3,4,5] - трехэлементные (тройка элементов);
[1,2,3,4], [1,2,3,5], [1,2,4,5], [1,3,4,5], [2,3,4,5] - четырехэлементные;
[1,2,3,4,5] – полное множество (взяты все элементы базового типа).
Операции над множествами
Объединение двух данных множеств называется множество элементов, принадлежащих хотя бы одному из этих множеств. Знак операции объединения множеств - «+».
A B A+B
Примеры
1) [‘A’, ‘F’] + [‘B’, ‘D’] = [‘A’, ‘F’, ‘B’, ‘D’];
2) [1..3, 5, 7, 11] + [3..8, 10, 12, 15..20] = [1..8, 10..12, 15..20]
Пусть S1:=[1..5, 9], a S2:=[3..7, 12]. Тогда если S:=S1 + S2,
то S=[1..7, 9, 12].
Пусть А1:=[‘a’..’z’]; A1:=A1 = [‘A’]. Тогда A1=[‘A’, ‘a’..’z’].
Пересечением двух множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству. Знак операции пересечения - «*».
А B A*B
Примеры.
A B A-B
[‘A’, ‘F’] – [‘B’, ‘D’] = [‘A’, ’F’ ] , так как общих элементов нет;
[1..3, 5, 7, 11] – [3..8, 10, 12, 15..20] = [1, 2, 11];
если S1:=[1..5, 9] и S2:=[3..7, 12], a S:=S1 – S2, то S=[1, 2, 9];
A1:=[‘A’..’Z’]; A1:=A1 – [‘A’]. Тогда А1=[‘B’..’Z’].
Операция определения принадлежности
элемента множеству
Эта логическая операция обозначается служебным словом in. Результат операции имеет значение true, если элемент входит в множество, и false в противном случае.
Примеры.
Сравнение множеств
Для сравнения множеств используются операции отношения:
= - проверка на равенство (совпадение) двух множеств;
>=, > - проверка на вхождение второго множества в первое множество.
Первое множество меньше или равно второму (AB)
B A B A B A
true false true
Первое множество меньше второго (A
B
B A B A A
true false false
Пример. Составить программу выделения следующих множеств из множества целых чисел от 1 до 30 :
- множества чисел, кратных 2;
- множества чисел, кратных 3;
- множества чисел, кратных 6;
- множества чисел, кратных 2 или 3;
Вопросы для обсуждения :
1. Сколько множеств надо описать? (Каков тип их элементов? (четыре множества с элементами типа Byte).
2. Каково начальное значение множеств ? (начальное значение множеств – пустое множество).
3. Как формируются множества? (Первые два формируются перебором всех чисел данного промежутка и отбором подходящих, а третье и четвертое получаются из первых двух путем применения операции пересечения или объединения).
4. Как осуществить вывод сформированных множеств? (Вывод множеств производится ТОЛЬКО поэлементно, поэтому удобно составить процедуру и передавать в нее множество, элементы которого и будут выводить на экран. Для этого в разделе типов надо создать соответствующий тип и использовать его в дальнейшем).
Program mnog;
const n=30;
type mn=Set Of 1..n;
var n2, n3, n6, n23 : mn;
k : integer;
procedure print(m: mn);
var i: integer;
begin
for i:=1 to n do if i In m then write(i:3);
end;
n2=[ ]; n3=[ ];
for k:=1 to n do
begin
if k Mod 2 = 0 Then n2:=n2+[k];
{если число делится на 3, то заносим его в n3 }
if k Mod 3 = 0 Then n3:=n3+[k];
end;
{числа, кратные 6, - это те, которые кратны и 2 и 3, поэтому это пересечение двух множеств, а числа, кратные 2 или 3, - это объединение этих же множеств}
writeln(‘числа, кратные 2’); print(n2);
writeln(‘числа, кратные 3’); print(n3);
writeln(‘числа, кратные 6’); print(n6);
writeln(‘числа, кратные 2 или 3’); print(n23);
END.
Пример 2. Если взять то общее, что есть у боба с ложкой, добавить кота и поместить в тепло, то получится муравей. Так ли это ?
program bob;
var y1, y2, y3, y4, x : Set Of Char;
s : Char;
BEGIN
y3:=[‘к’, ‘о’, ‘т’]; y4:=[‘т’, ‘е’, ‘п’, ‘л’, ‘о’];
x:=(y1*y2) + y3 – y4;
writeln(‘множество х’);
for s:=’a’ to ‘я’ do if s In x then write(s); writeln;
{проверка: состоит ли муравей из кота}
if y3<=x then write(‘муравей состоит из кота’)
else write(‘муравей не состоит из кота’);
END.
Пример 3. Дан ребус МУХА + МУХА = СЛОН
Каждой букве соответствует некоторая цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получить верное равенство.
Для решения этой задачи применим метод перебора с возвратом. Используем множество S1 для хранения цифр слова МУХА, причем будем заносить в него цифры последовательно, учитывая уже внесенные цифры. Начальное значение S1 – пустое множество. После выбора всех цифр первого слова формируем соответствующее число и находим число, соответствующее слову СЛОН. Выделяем цифры СЛОНа (множество S2), и если слова состоят из различных цифр (то есть пересечение S1 и S2 пустое) и все цифры СЛОНа разные, то выводим решение на экран. Далее удаляем из множества S1 последнюю внесенную цифру и пытаемся выбрать еще одно ее значение. Таким образом, мы перебираем все возможные варианты и выводим на экран только те, которые удовлетворяют равенству.
Заметим, что букве «М» в слове МУХА может соответствовать цифра от 1 до 4, а букве «А» в этом же слове не может соответствовать 0.
Program myxa;
type mn=Set Of 0..9;
var m, y, x, a : 0..9; {цифры числа МУХА}
n1, n2 : integer; {числа МУХА и СЛОН}
a1, a2, a3, a4 : 0..9; {цифры числа СЛОН}
S1, S2 :mn;
procedure Print(x,y:integer); {вывод решения в виде ребуса }
begin
writeln(‘+’);
writeln(x:5);
writeln(‘____’);
writeln(y:5);
end;
s1:=[ ]; s2:= [ ];
for m:=1 to 4 do
begin
for y:=0 to 9 do {если это цифра не была еще взята, то добавляем ее во множество цифр числа МУХА и выбираем цифру для следующей буквы }
if Not (y In s1)
then begin s1:=s1+[y];
for x:=0 to 9 do
if Not (x In s1)
then begin s1:=s1+x;
for a:=1 to 9 do
if Not (a In s1)
then begin s1:=s1+[a];
n1:=1000*m+100*y+10*x+a;
n2:=2*n1;
a1:=n2 div 1000;
a2:=n2 div 100 mod 10;
a3:=n2 div 10 mod 10;
a4:=n2 mod 10;
s2:=[a1,a2,a3,a4];
if (s1*s2=[]) and ([a1]*[a2]*[a3]*a[4]=[])
then Print(n1,n2);
s1:=s1-[a];
end;
s1:=s1-[x];
s1:=s1-[y];
end;
s1:=s1-[m];
END.
б) которые имеет хотя бы один техникум;
в) которых нет ни в одном техникуме.
в) ТОЧКА + КРУГ = КОНУС г) VOLVO + FIAT = MOTOR,
д) АВ + ВС + СА = АВС.
Меню бывает линейное и вложенное, горизонтальное и вертикальное, причем вложенное меню создают горизонтальным. Для организации линейного меню необходимо вывести имена каждого меню на экран, причем первое выделив каким нибудь образом. При нажатии стрелок влево или вправо происходит смещение выделения с одного раздела меню на другое, то есть с того которое было выделено снимается подсветка, а следующее (предыдущее) подсвечивается, если стрелка была нажата на конечном меню, то необходимо с него снять а подсветить либо первое, либо последнее. При нажатии клавиши Home – подсвечивается первый раздел меню, End – последний, при нажатии Esc – происходит выход из программы. При нажатии клавиши Enter происходит выполнение действия которое указано в меню.
Задача: Составить программу для организации функционирования следующего меню:
сложение
При выборе первых двух пунктов появляется экран на котором запрашивается значения соответсвенно первого или второго чисел, при выборе 3, 4, 5 или 6 пунктов выдается сообщение что соответсвующее дейсвтие выполнено, но полученное значение не выводится. При этом необходимо отслеживать введены ли оба числа, если не хватает хотя бы одног нужно выдать сообщения вида: «Не хватает данных». При выборе меню результат нужно вывести результат выполнения последнего действия, если действий не было совершено то нужно об этом сказать.
Для организации линейного меню необходимо пользоваться одномерным массивом.
При организации вложенного меню необходимо использовать двухмерный массив, но и учесть еще следующие моменты, во-первых, при выборе одного из пунктов основного меню открывается панель подменю и уже выбор одного из подпунктов будет приводить к выполнению орпеделнного действия. При нажатии стрелочки в сторону при открытом подменю, оно закрывается, а открывается то в сторону которого была нажата стрелка.
Работа с мышью
Для того чтобы добавить в прорамму курсор мыши и организовать с ним работу, необходимо подключить модуль mouse. При этом в текстовом режиме курсор будет выглядеть в виде прямоугольника (размерами 8х8, при этом указывается координаты верхнего левого угла), а в графическом в виде стрелки.
Для того чтобы на экране появился курсор мыши необходимо запустить процедуру mouseshow. Для отключения изображения курсора выполняется процедура mousehide. Это необходимо делать из-за того, что при выводе на экран в точку, где изображен курсор, может происходить несколько не приятные искажения игуры или числа (т.к. в графическом режиме точки закрытые курсором закрашены не будут).
Для организации действий по желчку мыши необходимо использовать процедуру mouseread(x,y,b); где х и у – это координаты указателя (в графическом режиме размер 640х200), а b – информация о нажатой клавише мыши, все три параметра должны иметь тип word. Варианты значений параметра b: 0 – клавиша не была нажата; 1 – была нажата левая клавиша мыши; 2 – была нажата правая клавиша мыши; 3 – были нажаты одновременно левая и правая клавиши мыши (либо средняя).
Приведем фрагмент программы выполнение которой приведет к тому что по щелчку левой клавиши мыши на экране в левом верхнем углу будут отображаться сведения о координатах нахождения курсора мыши.
Для графического режима:
mouseshow;
repeat
if b=1 then begin
delay(100);
setfillstile(1,0);
bar(0,0,60,10);
str(x,xg); str(y,yg);
outtextxy(1,1,xg);
outtextxy(30,1,yg);
end;
until b=2;
Для текстового режима:
mouseshow;
repeat
gotoxy(1,1);
write(x:3,y:5);
xt:=x div 8+1;
yt:=y div 8+1;
gotoxy(1,2);
write(xt:3,yt:5);
until b=2;
Задачи:
Создать модель мозаики.
Работа с графическими файлами.
Паскаль позволяет осуществлять работу с графическими файлами созданными в других программах, например в CPENе (размер полученого файла 640х350), при этом нужно следить чтобы созданные файлы были сохранены в формате .pcx.
Для работы с файлами формата .pcx необходимо подключить модуль pcxfile.
Для работы с графическими файлами используют следующие функции: функция считывания изображения из файла pcxread(x,y,name,page):word. x,y – координаты верхнего левого угла файла с которых начинается считывание (в основном 0,0), name – имя файла с рисунком, page – номер страницы на которую будем считывать данный файл (при низком разрешении экрана можно создавать четыре страницы: 0, 1, 2, 3; при среднем разрешении экрана таких старниц уже только две: 0, 1; ну а при высоком разрешении экрана только одна 0).
Программа алгоритм, записанный на языке программирования, служащий для выполнения каких-либо действий
25 09 2014
10 стр.
В языке программирования Turbo Pascal все данные, используемые программой должны принадлежать к какому-либо типу данных. Некоторые из них
13 10 2014
1 стр.
Блеза Паскаля. На основе языка Паскаль в 1985 г фирма Borland выпустила версию Turbo Pascal версии с этого времени язык Паскаль используется во всем мире в учебных заведениях в кач
02 10 2014
4 стр.
25 09 2014
1 стр.
Блеза Паскаля. Первоначально этот язык был создан для обучения программированию. Однако благодаря заложенным в нем большим возможностям структурного программирования он стал широко
25 09 2014
6 стр.
Основными достоинствами Паскаля являются легкость при изучении и наглядность программ. Кроме того, в языке Паскаль отражена концепция структурного программирования, имеется богатый
25 09 2014
1 стр.
В33 Середовище програмування Turbo Pascal 0: Підруч для учнів 10 кл серед загальноосв шк. – Ввпк: „Коледж”, 2008 – 47с
25 09 2014
4 стр.
Приведём простейший пример программы, единственная цель которой – вывести на экран какое-нибудь приветствие
14 09 2014
14 стр.