Процедура Break прекращает выполнение того цикла, внутри которого она находится.
Цикл 1
Цикл 2
If <условие> then Break
Процедура Continue завершает текущую интерацию цикла и осуществляет переход на начало следующей итерации. Её действие эквивалентно выполнению оператора Goto<конец цикла>.
Вычисление суммы бесконечного ряда с заданной точностью
Пример: даны действительные числа X и ὲ (ὲ>0)
K=0
A[0]
Элемент накапливается в сумму до тех пор пока он больше или равен ὲ.
K=1
A[1]
(A[k])/(A[k-1])=R
A[k]=a[k-1]*R
Итерационные циклы, рекурентная формула.
Посчитать при k=0 первый элемент ряда. Вычислить множитель
Пример:
program ex;
Var
x,eps:real;
a,s:real;{текущее слагаемое сумма}
k: word;{номер слагаемого}
R: real;{коэффицент в рекуррентной формуле}
Begin
writeln ('Введите x и точность');
readln(x,eps);
k:=0; A:=x;{Слагаемое при k=0}
S:=0;
while Abs(A)>=eps do
Begin
S:=s+A;
inc(k);
R:=sqr(X)*(2*K-1)/(k*(2*k+1));
A:=A*R;
end;
Writeln('Сумма -',S);
writeln('Количество учтенных слагаемых- ',k);
readln
end.
Задача 3:
Протабулировать функцию z=x+cos(y) при x, изменяющемся от a до с шагом h1, и y, изменяющемся от с до d с шагом h2. Для решения задачи в области определения функции вводится разностная сетка {xi,yj,}, изображенная на рисунке где
Код:
program ex2;
Var
x,y,z:real; {координаты узла сетки и значение функции в нем}
H1,H2:real; {шаги сетки}
A,B,C,D:real; {граници области}
N,M:word; {количество точек по направлениям}
I,J:word;
Begin
writeln('Введите значения границ области по x,y');
readln(a,b,c,d);
writeln('enter steps H1,H2');
readln(h1,h2);
n:=round((b-a)/h1);
m:=round((d-c)/h2);
y:=c;
for I:=0 to M do {перебор слоев по Y}
Begin
writeln('y=',Y:10);
X:=A;
for J:=0 to N do {вычисление функции при y=const}
Begin
Z:=x+cos(y);
writeln('x=',x:12,'z=', Z:12);
x:= X+h1;
end;
y:=y+h2; {переход на следующий слой по y}
readln
End
end.
Табулирование функции с переменным шагом.
Протабулировать функцию F9X,Y)=(x^3)+Sin(x)+y, где x изменяется на отрезке [a b ] с шагом delta(X), Y изменяется на отрезке [c,d] причем если Q=((T*x)+(x^2)/18 < 8, то с шагом delta(y1), иначе с шагом delta(y2).
program A1;
Var
x,y,a,b,c,d,Q,dx,dy1,dy2,F,T:real;
Begin
writeln('введите a,b,c,d,dx,dy1,dy2,T');
readln(a,b,c,d,dx,dy1,dy2,T);
X:=a;
while X<=b do
Begin
y:=c;
while y<=d do
Begin
f:=sqr(x)*x+Sin(x)+y;
writeln('F=',f,'x=',x,'y=',y);
Q:=((T*x+SQR(x))/18);
if Q<8 then y:=y+dy1 else y:=y+dy2;
end;
x:=x+dx;
end;
end.
Вложенные циклы:
В паскале все три оператора цикла допускают вложенный цикл.
Правила которыми надо пользоваться при организации вложенных циклов.
1.Внутренний цикл должен содержаться целиком во внешнем цикле
- Могут заканчиваться одновременно.
2. Если для организации вложенных циклов используются цикл с параметром то параметры цикла должны быть различными.
3.Из внутреннего цикла можно в любом месте выйти во внешний.
- Войти во внутренний цикл можно только через заголовок.
Задача1:
Составить программу которая выводит буквы латинского алфавите в следующем порядке.
A
AB
…..
ABC……Z
program A1;
Var
c, c1:char;
Begin
for c:= 'A' to 'Z' do
Begin
for c1:='A' to c do
write(c1);
writeln;
end;
end.
Во входном файле задан текст заканчивающийся точкой слова в тексте разделены одним или несколькими пробелами. Определить колличество слов начинающихся с заданной буквы.
Тип | Описание типа, характеристика типа | Описание переменной | Представление констант |
Перечисляемый | Нестандартный.Требуется описать тип: Type {тип} <имя типа> = (<знач1>,<знач2>,…,<знач n>); var{переменная} <имя>:<имя типа>; значения представлены идентификаторами и упорядочены.Первое значение имеет №0. | В соответствии с типом: только перечисленные в описании типа значения. |
Значения перечисляемого типа нельзя вводить и выводить с помощью стандартных процедур Read\write.
Для того чтобы осуществить ввод переменной перечислимого типа нужно представить этот тип как литерную или строковую константу и с помощью опертора If или case осуществить ввод расшифровку.
Тип | Операции(в порядке убывания приоритета) | Основные стандартные функции | Примеры |
п е р е ч и с л я е м ы й | Отношения |
Массивы.
Массив – упорядоченная структура данных, состоящая из фиксированного числа компонентов одного и того же типа.
Одномерные массивы.
Для объявления массива следует знать:
-число элементов;
-тип элементов;
-порядок нумерации элементов
Паскаль поддерживает следующие способы нумерации элеменетов
-целочисленный индекс: a-5,a-4,…..a10;
-Литерный индекс: a’a’,a’b’,…..a’z’;
-булевский индекс: afalse,atrue;
-Индекс перечислимого типа: ared,ablue…..;
Аналогично осуществляется нумерация элементов и в многомерном массиве, типы индексов могут не совпадать.
Объявление массивов может производиться двумя способами:
1)с использованием раздела Type:
Type
T_array= array [T] of ta;
Var
a,b,c:T_array;
2)без использования раздела Type:
Var
a,b,c:: array [t] of ta;
t_array - {имя типа для массива}
t- {тип индекса, отвечающий за способ нумерации;(любой порядковый за исключением longint)}
ta- {базовый тип массива.(может быть в любой форме кроме файлового)}
Если Ta – массив, то t_array будет типом для многомерного массив. Если типы T и Ta не являются стандартными, то они должны быть объявлены в разделе Type.
При объявлении одномерных массивов в качестве типа индекса, часто используется ограниченный тип (тип диапазон).
Первый способ:
Const
N=<значение>;
Var
a:= array [0..N] of real;
Второй способ:
Const
M=0;
N=<значение>;
Type
T=M..N;
t_array= array [T] of real;
Var
a:t_array;
При использовании диапазонов при выполнении программы вводиться дополнительный контроль значений, которые присваиваются переменным.
Использование индексов нечислового типа.
Type
mas1= array [1..20] of real; {индекс - тип диапазон}
color=(red,white,blue);{}
mas2= array [color] of color;{индекс - перечисляемый тип}
diap=1..100;
mas3= array [diap] of real;
Var
x:mas1;
y:mas2;
z:mas3;
Элементы массива X:x[1],x[2],….x[20]; вещественные числа.
Элементы массива Y: y[red],y[white],y[blue];
Элементы массива Z:Z[1]….Z[100] вещественные числа.
Ввод и вывод массивов:
Ввод:
writeln('Введите числовую последовательность');
writeln('Колличество элементов массива',N);
for i:=1 to N do read(A[i]);
readln;
Вывод:
writeln('Результирующая последовательность',N);
for i:=1 to N do writeln(A[i],'');
readln;
Пример 1. Верно ли, что отрицательный член в последовательности c1,c2,c3…cn встерчается раньше, чем в последовательностях a1,a2..a30 и b1…b40.
program pr1;
Const
nc=<значение>;
na=30;
nb=40;
Var
a: array [1..na] of real;
b: array [1..nb] of real;
c: array [1..nc] of real;
ia, ib, ic: word; {индексы текущих элементов в соотрветствующих массивах}
Begin
writeln ('Введите последовательность C, количество элементов:',nc);
for ic:=1 to nc do
read(c[ic]);
readln;
writeln('введите последовательность A, количество элементов:',na);
for ia:=1 to na do
read(a[ia]);
readln;
writeln('введите последовательность B, количество элементов:',nb);
for ib:=1 to nb do
read(b[ib]);
readln;
for ic:= 1 to nc do
if c[ic]<0 then break;
for ic:= 1 to nc do
if b[ib]<0 then break;
for ic:= 1 to nc do
if a[ia]<0 then break;
if (ic,ia) and (ic,ib) then writeln('true')
else writeln('false');
readln;
end.
Дан текст состоящий из букв латинского алфавита и заканчивающийся точкой написать сколько раз в тексте встречается в тексте каждый символ, сообщение об этом символе должно появиться один раз, заглавные и малые буквы не различать.
Матрицы
1) Можно задать как двумерный массив
2) Можно задать как массив массивов(строк).
1)
Const
n=10; m=13;
Var
C: array [1..n,1..m] of real;
2)
type te= array [1..m] of real;
Var
c: array [1..n] of te;
Первое объявление позволяет работать с матрицей только поэлементарно.
Второе объявление, в отличии от первого, носит более общий характер. Оно дает еще и вторую возможность – производить действия со строками матрицы в целом.
Запись вида C[i]:=C[L] означает замену элементов i-ой строки на элементы L-ой строки, что эквивалентно
for j:=1 to m do
C[i,j]:=c[L,j];
I.
Var
a: array [1..20,1..30] of integer;
II.
Var
a: array [1..20] of array [1..30] of integer;
В обоих случаях описан двумерный массив, соответствующий таблице состоящей из 20 строк и 30 столбцов. Приведенные описания совершенно равноправны.
Например, ячейка, находящаяся в 5 строке и 6 столбце будет называться A[5][6] или A[5,6].