Перейти на главную страницу
Согласно условию задачи искомое расстояние s1=s+(v1+v2)t (если автомобили изначально двигались в противоположные стороны) или s2=|(v1+v2)t-s| (если автомобили первоначально двигались навстречу друг другу).
Program Car;
Var V1, V2, T, S, S1, S2 : Real;
Begin
Write('Введите скорости автомобилей, расстояние между ними и время движения:');
S1 := S + (V1 + V2) * T;
S2 := Abs((V1 + V2) * T - S);
WriteLn('Расстояние будет равно ', S1:7:4, ' км или ', S2:7:4, ' км')
End.
Пример. Найти сумму цифр двухзначного натурального числа.
Program Did;
Var A,S1,S2:integer;
Begin
ReadLn (А); {ввод с клавиатуры числа}
S1:=a div 10; {нахождение первой цифры числа}
S2:=a mod 10; {нахождение последней цифры числа}
WriteLn ('сумма цифр числа ',а, '=', S1+ S2) {вывод результата}
End.
Формула: Sec=c*3600+m*60+s
Program Second;
Var c, m, s : Byte ; Sec: LongInt ;
Begin
Write ('Сколько часов прошло от начала суток? '); Readln (c);
Write ('Сколько секунд? '); Readln (s);
Sec :=c*3600+m*60+s;
Writeln ('С начала суток прошло секунд: ', Sec)
End.
Пример. Дано: координаты точки (Х,У). Получить сообщение TRUE, если точка принадлежит первой четверти окружности с радиусом 1, или сообщение FALSE, если точка не принадлежит области.
Формула: точка с координатами (Х,У) принадлежит первой четверти окружности с радиусом 1 если одновременно выполняются условия: Х>0, Y>0, X2+Y2<=1
Program FH;
Var X,Y : Real;
Begin
Writeln (‘введи координаты точки: X, Y:’); Readln (X,Y);
End.
Задания для практической работы по теме линейные алгоритмы.
Составить программы на языке Pascal.
1. Даны два числа. Найти сумму и произведение этих чисел.
2. Даны два числа. Найти среднее арифметическое их квадратов и среднее арифметическое их модулей.
3. Вычислить значение выражения , где х и y - целые числа.
4. Периметр прямоугольника равен р, одна из сторон равна а. Найти его площадь.
5. Гипотенуза прямоугольного треугольника равна с, острый угол а градусов.
6. Найдите площадь квадрата, если две его противоположные вершины заданы координатами (х1,у2) ,(х2,у2).
7. Определить сколько времени (t) затрачено на путь (s ) со скоростью (v).
8. Вершины треугольника заданы точками (х1,у2) ,(х2,у2), (х3,у3). Используя формулу Герона, найдите его площадь.(АВ=Sqrt((х1-х2)2+(у1-у2)2).
9. Сумма вклада S руб., ее вкладывают в банк под C % годовых на N лет. Какая прибыль будет на вкладе.
10. Подсчитать стоимость поездки на S км. : расход бензина на 100 км.-L литров, стоимость 1 литра бензина K руб.
11. Вычислить стоимость покупки со скидкой : покупка А руб., скидка С %.
12. Даны координаты трех вершин треугольника (x1, y1), (x2, y2), (x3, y3). Найти его периметр и площадь.
13. Скорость лодки в стоячей воде V км/ч, скорость течения реки U км/ч (U < V). Время движения лодки по озеру T1 ч, а по реке (против течения) - T2 ч. Определить путь S, пройденный лодкой.
14. Найти периметр и площадь прямоугольного треугольника, если даны длины его катетов a и b.
15. Дано целое четырехзначное число. Используя операции div и mod, найти сумму его цифр.
16. Дано целое четырехзначное число. Используя операции div и mod, найти произведение его цифр.
17. Длительность некоторого физического эксперимента измеряется в секундах; определить количество часов(полных), минут и секунд.
18. С начала месяца прошло m часов. Определить какое сейчас число.
19. С начала суток прошло k минут. Определить который сейчас час. (В часах и минутах).
20. Дано: координаты точки (Х,У). Получить сообщение TRUE, если точка принадлежит 2,3,4 четверти окружности с радиусом R, или сообщение FALSE, если точка не принадлежит области.
6. Алгоритмическая конструкция ветвление
На практике решение большинства задач не удается описать с помощью программ линейной структуры. При этом после проверки некоторого условия выполняется та или иная последовательность операторов, однако происходит нарушение естественного порядка выполнения операторов. Условный оператор для реализации разветвлений в программе имеет следующую структуру:
If <логическое выражение> Then серия1 Else серия2;
Если логическое выражение, выступающее в качестве условия, принимает значение True (истинно), то выполняются операторы следующие за then (серия1), если False (ложь), то выполняются операторы расположенные после else (серия2).
Поскольку развилка может быть неполной, то возможна и неполная форма записи условного оператора:
If <логическое выражение> Then серия;
Когда выполняется последовательность команд (серия), необходимо использовать так называемые операторные скобки:
Begin
<Оператор 1>;
<Оператор 2>;
...
End;
Вариант условного оператора в этом случае:
If <условие> Then Begin <группа операторов 1> End;
Else Begin < группа операторов 2> End;
На языке Паскаль условия представляют собой выражения, значением которых является величина логического типа (True - истина или False - ложь). Это может быть как просто переменная указанного типа, так и сложная последовательность высказываний, связанных логическими операциями.
В простых условиях могут применяться знаки операций сравнения: >(больше), <(меньше), =(равно), <>(не равно), >=(больше или равно), <=(меньше или равно).
Пример. (C+D3)>=(D1*(45-2))
В сложных условиях логические выражения строятся с помощью логических операций: and (и), or (или), not (не).
Program Example;
Var A,B,C : Real; {A,B - для хранения чисел, C - результат}
Begin
Readln(A,B); {Ввод чисел с клавиатуры}
If A>B Then C:=A Else C:=B; {Если A>B, то результат A сохраняем в С, иначе результат - B}
Writeln(‘Наибольшее число =’,C); {Выводим результат на экран}
End.
Пример. По заданным коэффициентам решить квадратное уравнение
Program Sq1;
Var A, B, C, D, X1, X2 : Real;
Begin
Readln (A,B,C);
D:=B*B-4*A*C; {вычисление дискриминанта}
If D<0 Then Writeln ('Корней нет! ')
Else Begin
X1:=(-B+SQRT(D))/2/A;
X2:=(-B-SQRT(D))/2/A;
Writeln ('X1=', X1:8:3, ' X2=',X2:8:3)
End
End.
Program Usl1;
Var х, F : Real;
Begin
If х <= 0 Then F: = 0 Else
If х <= 1 THEN F: = Sqr(х) - х Else F = Sqr(х) - Sin(Pi * Sqr(х));
WriteLn('Значение функции F(‘,x:5:2,’) = ', F:10:4);
End.
Кроме условного оператора в качестве управляющей структуры довольно часто используется оператор выбора CASE. Эта структура позволяет переходить на одну из ветвей в зависимости от значения заданного выражения (селектора выбора). Ее особенность состоит в том, что выбор решения здесь осуществляется не в зависимости от истинности или ложности условия, а является вычислимым. Оператор выбора позволяет заменить несколько операторов развилки (в силу этого его ещё называют оператором множественного ветвления).
Запись оператора выбора
Case K OF
A1 : серия 1;
A2 : серия 2;
...
Else серия N + 1
End;
Любая из указанных серий операторов может состоять как из единственного оператора, так и нескольких (в этом случае, как обычно, операторы, относящиеся к одной метке, должны быть заключены в операторные скобки Begin…End).
Program Maximum;
Var Max, X, Y : Real;
Begin
ReadLn(X, Y);
Case X > Y Of
TRUE : Max := X;
FALSE : Max := Y
End;
End.
Составить программы на языке Pascal.
1. Дано число к- целое. Определить, является ли оно четным (нечетным).
2. Выяснить, имеет ли решение уравнение вида А*х+В=0 в зависимости от параметра А.
3. Вычислить значение функции: х*5 ,если х<=-1
x/5 ,если х>=-1
4. Вычислить значение функции: х*5 ,если х<=-1
x/5 ,если х>=-1
x2 ,если -1 5. Даны три числа А, В и С. Значение наибольшего из них удвоить.
6. Даны три числа А, В и С. Выяснить существует ли треугольник с длинами сторон А,В,С. 7. Дано число К- целое, трехзначное. Найти сумму цифр этого числа.
8. Даны три числа А , В и С . Выдать их в порядке возрастания. 9. Составьте алгоритм, который по номеру дня недели выдает его название.
10. Составьте алгоритм, который по номеру месяца выдает пору года. 11. Составьте алгоритм, который по кол-ву лет школьника определяет, в каком он учится классе.
С помощью оператора For осуществляется циклическое выполнение последовательности действий, управляемой переменной цикла, которой присваиваются последовательно возрастающие или убывающие значения. Оператор имеет два варианта записи:
1. For <переменная цикла> := <начало > to <конец> do < оператор> (С возрастанием переменной цикла)
После вычисления и проверки начального и конечного значений переменной цикла (начало <= конец), выполняются операторы, образующие тело цикла. Далее значение переменной цикла увеличивается на единицу, и процесс, включающий проверку и выполнение операторов, повторяется. Если переменная цикла превышает конечное значение, то происходит выход из цикла и выполняется оператор, следующий за структурой For. 2. For <переменная цикла> := <начало > downto <конец> do < оператор>
В данной конструкции отличие в том, что переменная цикла при каждом повторении уменьшается на единицу, поэтому начальное значение переменной должно быть больше конечного. В операторе цикла Repeat используется условие логического типа, управляющее выходом из цикла, которое проверяется после выполнения операторов цикла.
Оператор имеет следующий вид: Repeat <последовательность операторов>
Until<условие> Последовательность операторов выполняется до тех пор, пока <условие > не выполнится. В этом случае цикл завершается, и происходит переход на следующий оператор.
В операторе While в отличие от Repeat, используется условие, служащее индикатором выхода из цикла и проверяется до выполнения последовательности операторов, содержащихся внутри цикла. Оператор имеет следующий вид:
While <условие> do <оператор> Оператор выполняется дот тех пор, пока условие остается верным, если условие принимает ложное значение, то цикл заканчивается и происходит переход на следующий оператор.
1. For i:=1 to n do s:=s*i Преимущество структуры(1) тогда, когда переменная цикла целого типа и изменяется с шагом 1.
2. s:=1; i:=1; Repeat
s:=s*i;
7. Алгоритмическая конструкция повторение
С помощью операторов повторения (цикла) организуется многократное выполнение повторяющихся действий. Если число повторений цикла известно или может быть вычислено, то целесообразно использовать оператор цикла "с параметром"(For). Если же момент завершения цикла зависит от выполнения некоторого условия, то применяются операторы "Пока" и "До" (While, Repeat). Друг от друга циклы отличаются структурой и используются каждый для своего класса задач.
(С убыванием переменной цикла)
Пример. Найти произведение первых N натуральных чисел с использованием трех циклов.
i:=i+1;
Until i>n;
3. s:=1; i:=1;
While i<=n do
Begin
s:=s*i;
End;
Program Maс;
Var a,b: longint;
Begin
Repeat
Writeln(b); {вывод цифры}
a:=a div 10; {переменная а без крайней правой цифры}
Until a=0;
End.
Пример. Возвести число а в степень n.
Program Work;
Var n,i: integer;
L,a: real;
Begin
Writeln(‘Введите число - a :’); Readln(a);
L:=1; i:=1;
While i<=n do Begin
L:=a*L;
End;
End.
Задания для практической работы.
Составить программы на языке Pascal.
1. Вычислить сумму первых К слагаемых ряда:
а) 1+1/2+1/3+…1/к;
б) 2+4+6+….2*к;
в) 1+1/22-1/32+1/42-…1/к2;
г) 1+(1+2)+(1+2+3)+…+(1+2+…+10).
2. Найти частное и остаток от деления натурального числа А на число В, используя только операции вычитания и сравнения двух чисел.
3. Дано натуральное число К. Найти :а) сумму цифр числа; б) кол-во цифр в числе.
4. Даны два числа А и В(положительные). Составить алгоритм нахождения:
а) наименьшего общего делителя;
б) наименьшего общего кратного.
5. Вычислить n! =1*2*3*4*…*n (факториал числа).
6. Даны два целых положительных числа А и В. Найти наибольшее число К такое, что А+А2+А3+…+АК <=В.
7. Дано натуральное число К (K>0). Определить, является ли число простым (натуральные числа, которые имеет два натуральных делителя 1 и самого себя - 2,3,5,7…).
8. Дано натуральное число К (K>0). Определить, является ли оно совершенным. (число совершенное, если оно равно сумме своих делителей, 6=1+2+3).
9. Найти кол-во всех трехзначных чисел, сумма цифр которых равна числу К.
10. Сумма в S руб. положили в банк. При этом прибыль составляет k % в год от первоначальной суммы. Через какой срок сумма вклада увеличится в x раз.
8. Структурированный тип данных: массив
До сих пор мы рассматривали переменные, которые имели только одно значение, могли содержать в себе только одну величину определенного типа. Для сохранения и обработки данных, содержащих десятки, сотни, тысячи величин в языке Pascal существует структурированный тип данных: массив.
Массив - это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются последовательно в ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа.
Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным (одномерным). Количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д. Проще всего представить себе массив в виде таблицы, где каждая величина находится в собственной ячейке. Положение ячейки в таблице должно однозначно определяться набором координат (индексов).
Одномерный массив - одномерная упорядоченная совокупность элементов некоторого типа, которые адресуются с помощью индекса.
Пример. Числовая последовательность четных натуральных чисел 2, 4, 6, ..., N представляет собой линейный массив, элементы которого можно обозначить А[1]=2,А[2]=4,А[3]=6, ..., А[К]=2*(К+1), где К - номер элемента, а 2, 4, 6, ..., N - значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.
При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.
Форматы определения массивов для одномерного массива:
Var имя массива: array [начальный индекс .. конечный индекс] of тип данных;
Для двумерного массива:
Var имя массива: array [начальный индекс .. конечный индекс, начальный индекс .. конечный индекс] of тип данных;
Пример. Var massiv1: array [1..5] of real; - одномерный массив, состоящий из 5 элементов (чисел) действительного типа.
Var massiv2: array [1..10, 1..10] of integer; -двумерный массив из 100(10*10) целых чисел.
Описание массива в виде табличной структуры делается лишь из соображений удобства программирования. Многомерные массивы, так же как и одномерные, в памяти компьютера хранятся в виде линейной последовательности своих компонент, и при составлении алгоритмов принципиальной разницы между ними нет. Однако при работе с многомерными массивами приходится использовать вложенные циклы. В языках программирования существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Внутри вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Порядок завершения работы вложенных циклов происходит с самого низкого уровня.
Заполнить массивы можно с помощью оператора присваивания. Этот способ заполнения элементов массива удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой рекуррентным соотношением.
a1=1; a2=1; ai=ai-2+ai-1 (i = 3, 4, ..., 20).
A[1]:= 1; A[2]:= 1;
For i := 3 to 20 do A[i] := A[i-1] + A[i-2];
Заполнить двумерный массив элементами таблицы умножения.
For i := 1 to 10 do
For j := 1 to 10 do A[i,j] := i*j;
Другой вариант присваивания значений элементам массива с помощью их ввода клавиатуры.
Program M1;
Var A : Array [1..20] Of Integer; i : Integer;
Begin
Write('Введите A[', i, '] ');
Readln(A[i]); {значениям индексов и вводим A[i] с клавиатуры }
For i:=20 downto 1 do Write(A[i],' ') {Распечатываем массив в обратном порядке}
End.
Еще один вариант присваивания значений элементам массива - с помощью датчика случайных чисел. В языке Паскаль случайные числа формирует функция Random. Числа получаются дробными, равномерно расположенными в интервале от 0 до 1. Выражение, дающее целое случайное число в интервале [-n,n] будет выглядеть так: Trunc(Random*n+1)-n.
Program M2;
Const n=40; {Константа n - количество элементов массива}
Var A : Array [1..n] of Integer; i : Integer;
Begin
For i:=1 to n do Begin A[i]:= Trunc(Random*101)-50;
Write(A[i],' ') { вывод элементов массива в строку через пробел}
End
End.
Program M3;
Const max=5;
Var a: array [1..max, 1..max] of real; i,j:byte;
Begin
For i:=1 to max do
a[i,j]:=Random;
Writeln(‘a[‘,i,’,’,j,’]=’,a[i,j]);
End
поиск, подсчет, перестановка, вставка, удаление элементов в массиве, удовлетворяющих заданному условию, сортировка элементов в порядке возрастания или убывания;
Сумму элементов массива можно подсчитать по формуле s=s+a[i] первоначально задав s=0. Количество элементов массива можно подсчитать по формуле к=к+1, первоначально задав к=0. Произведение элементов массива можно подсчитать по формуле p=p*a[i], первоначально задав p=1. При работе с элементами массива часто приходится изменять значения некоторых элементов, а так же переставлять элементы в массиве. При перестановке необходимо вводить дополнительную переменную.
Рассмотрим фрагменты программ, реализующих поиск элементов с заданными свойствами:
While a[i]>=0 do Begin
s:=s+a[i]; i:=i+1;
End;
For i :=1 to 5 do
If a [i] > max then Begin
max :=a [i];
i_max :=i;
End;
For i:=n downto 1 do
If a[i]=0 then Вegin
For j:=n+k downto i+1 do
a[j+1]:=a[j];
a[i+1]:=x;
k:=к+1; Еnd;
For i:=n downto 1 do
If a[i]<0 then Вegin
For j:=i to n-1 do a[j]:=a[j+1];
a[n]:=0; k:=к+1;
Еnd;
i_max:=1; {присвоение номеру максимального элемента 1}
For i:=1 to n do сравнение всех элементов с максимумом}
If a[i]>max then Вegin
max:=a[i]; {запоминаем значение максимального элемента}
i_max:=i; {запоминаем номер максимального элемента}
Еnd;
min:=a[i]; i_min:=i;
If a[i] min:=a[i];
i_min:=i; Еnd; {конец поиска минимального элемента}
x:=a[i_max];{перестановка минимального и максимального элементов} a[i_max]:=a[i_min];
a[i_min]:=x; Сортировка массивов
При решении задачи сортировки обычно выдвигается требование минимального использования дополнительной памяти, из которого вытекает недопустимость применения дополнительных массивов. Для оценки быстродействия алгоритмов различных методов сортировки, как правило, используют два показателя: количество присваиваний, количество сравнений. Все методы сортировки можно разделить на две большие группы: прямые методы сортировки, улучшенные методы сортировки. Прямые методы сортировки в свою очередь разделяются на три подгруппы: 1) сортировка вставкой (включением);
2) сортировка выбором (выделением); 3) сортировка обменом (так называемая "пузырьковая" сортировка).
Улучшенные методы сортировки основываются на тех же принципах, что и прямые, но используют некоторые оригинальные идеи для ускорения процесса. Сортировка простым включением: элементы массива просматриваются по одному, и каждый элемент вставляется в подходящее место, среди ранее упорядоченных.
Program Work_1; Var a: array[1..10] of integer;
Var i,d,j:integer; Begin
For i:=1 to 10 do Read(a[i]);
For j:=2 to 10 do
Begin
d:=a[j];
i:=i-1;
a[i+1]:=d;
End;
For i:=1 to 12 do Write(a[i],' ');
Сортировка простым выбором: Выбирается элемент с наименьшей величиной и меняется местами с первым. Затем эти операции повторяются с оставшимися элементами без первого пока не останется только один элемент - наибольший.
Program Work_2;
Var a: array[1..10] of integer;
Var i,k,x,j,n:integer;
Begin
For i:=1 to 9 do Begin
k:=i; x:=a[I];
For j:=i+1 to 10 do
If x
x:=a[j]; k:=j; End;
a[k]:=a[i]; a[i]:=x
End;
For i:=1 to 10 do Write(a[i],' ');
End.
Сортировка простым обменом (метод “пузырька”): Если два элемента массива расположены не по порядку, то они меняются местами. Процесс повторяется до тех пор, пока элементы не будут упорядочены.
Var a: array[1..10] of integer;
Var i,k,x,j,n:integer;
Begin
For i:=2 to 10 do Begin
For j:=10 downto i do
If a[j-1]>a[j] then Begin
x:=a[j-1]; a[j-1]:=a[j];a[j]:=x;
End;
For i:=1 to 10 do Write(a[i],' ');
End.
Блеза Паскаля. На основе языка Паскаль в 1985 г фирма Borland выпустила версию Turbo Pascal версии с этого времени язык Паскаль используется во всем мире в учебных заведениях в кач
02 10 2014
4 стр.
Блеза Паскаля. Первоначально этот язык был создан для обучения программированию. Однако благодаря заложенным в нем большим возможностям структурного программирования он стал широко
25 09 2014
6 стр.
В языке программирования Turbo Pascal все данные, используемые программой должны принадлежать к какому-либо типу данных. Некоторые из них
13 10 2014
1 стр.
Синтаксис языка совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму
09 10 2014
2 стр.
Прописные и строчные буквы Pascal'eм не различаются. Знаки «возведение в степень» и двойная кавычка в языке отсутствуют
25 09 2014
1 стр.
Методическое пособие рассчитано на школьников 9-11 классов, а также может быть полезно учащимся других учебных заведений среднего образования, изучающих основы программирования
25 09 2014
6 стр.
25 09 2014
1 стр.
Запустите оболочку программы Borland Pascal с помощью ярлыка на Рабочем столе. Если окно программы открылось не во весь экран, нажмите сочетание клавиш Alt+ Enter. В окне программы
25 09 2014
1 стр.