Процедуры Break, Continue.
Процедура 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 первый элемент ряда. Вычислить множитель
Пример:
programex;
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;
whileAbs(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,}, изображенная на рисунке где
Код:
programex2;
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;
forI:=0 toM do{перебор слоев по Y}
Begin
writeln('y=',Y:10);
X:=A;
forJ:=0 toN 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).
programA1;
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;
whileX<=b do
Begin
y:=c;
whiley<=d do
Begin
f:=sqr(x)*x+Sin(x)+y;
writeln('F=',f,'x=',x,'y=',y);
Q:=((T*x+SQR(x))/18);
ifQ<8 theny:=y+dy1 elsey:=y+dy2;
end;
x:=x+dx;
end;
end.
Вложенные циклы:
В паскале все три оператора цикла допускают вложенный цикл.
Правила которыми надо пользоваться при организации вложенных циклов.
1.Внутренний цикл должен содержаться целиком во внешнем цикле
- Могут заканчиваться одновременно.
2. Если для организации вложенных циклов используются цикл с параметром то параметры цикла должны быть различными.
3.Из внутреннего цикла можно в любом месте выйти во внешний.
- Войти во внутренний цикл можно только через заголовок.
Задача1:
Составить программу которая выводит буквы латинского алфавите в следующем порядке.
A
AB
…..
ABC……Z
programA1;
Var
c , c1 :char;
Begin
forc:= 'A' to'Z' do
Begin
forc1:='A' toc 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] ofta;
Var
a,b,c:T_array;
2)без использования раздела Type:
Var
a,b,c: :array[t] ofta;
t_array - {имя типа для массива}
t- {тип индекса, отвечающий за способ нумерации;(любой порядковый за исключением longint)}
ta- {базовый тип массива.(может быть в любой форме кроме файлового)}
Если Ta – массив, то t_array будет типом для многомерного массив. Если типы T и Ta не являются стандартными, то они должны быть объявлены в разделе Type.
При объявлении одномерных массивов в качестве типа индекса, часто используется ограниченный тип (тип диапазон).
Первый способ:
Const
N=<значение>;
Var
a:=array[0..N] ofreal;
Второй способ:
Const
M=0;
N=<значение>;
Type
T=M..N;
t_array=array[T] ofreal;
Var
a:t_array;
При использовании диапазонов при выполнении программы вводиться дополнительный контроль значений, которые присваиваются переменным.
Использование индексов нечислового типа.
Type
mas1=array[1..20] ofreal; {индекс - тип диапазон}
color=(red,white,blue);{}
mas2=array[color] ofcolor;{индекс - перечисляемый тип}
diap=1..100;
mas3=array[diap] ofreal;
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);
fori:=1 toN doread(A[i]);
readln;
Вывод:
writeln('Результирующая последовательность',N);
fori:=1 toN dowriteln(A[i],'');
readln;
Пример 1. Верно ли, что отрицательный член в последовательности c1,c2,c3…cn встерчается раньше, чем в последовательностях a1,a2..a30 и b1…b40.
programpr1;
Const
nc=<значение>;
na=30;
nb=40;
Var
a: array[1..na] ofreal;
b: array[1..nb] ofreal;
c: array[1..nc] ofreal;
ia, ib , ic : word; {индексы текущих элементов в соотрветствующих массивах}
Begin
writeln ('Введите последовательность C , количество элементов :',nc);
foric:=1 tonc do
read(c[ic]);
readln;
writeln('введите последовательность A, количество элементов:',na);
foria:=1 tona do
read(a[ia]);
readln;
writeln('введите последовательность B, количество элементов:',nb);
forib:=1 tonb do
read(b[ib]);
readln;
foric:= 1 tonc do
ifc[ic]<0 then break;
foric:= 1 tonc do
ifb[ib]<0 then break;
foric:= 1 tonc do
ifa[ia]<0 then break;
if(ic,ia)and(ic,ib) thenwriteln('true')
elsewriteln('false');
readln;
end.
Дан текст состоящий из букв латинского алфавита и заканчивающийся точкой написать сколько раз в тексте встречается в тексте каждый символ, сообщение об этом символе должно появиться один раз, заглавные и малые буквы не различать.
Матрицы
1) Можно задать как двумерный массив
2) Можно задать как массив массивов(строк).
1)
Const
n=10; m=13;
Var
C:array[1..n,1..m] ofreal;
2)
typete=array[1..m] ofreal;
Var
c:array[1..n] ofte;
Первое объявление позволяет работать с матрицей только поэлементарно.
Второе объявление, в отличии от первого, носит более общий характер. Оно дает еще и вторую возможность – производить действия со строками матрицы в целом.
Запись вида C[i]:=C[L] означает замену элементов i-ой строки на элементы L-ой строки, что эквивалентно
forj:=1 tom do
C[i,j]:=c[L,j];
I.
Var
a:array[1..20,1..30] ofinteger;
II.
Var
a:array[1..20]of array[1..30] ofinteger;
В обоих случаях описан двумерный массив, соответствующий таблице состоящей из 20 строк и 30 столбцов. Приведенные описания совершенно равноправны.
Например, ячейка, находящаяся в 5 строке и 6 столбце будет называться A[5][6] или A[5,6].