Цикл с заданным числом повторений
Рассмотренные типы циклических структур имеют один недостаток: при ошибочном задании исходных данных может произойти зацикливание, т.е. возникает неприятная ситуация, когда происходит бесконечное повторение операторов, входящих в тело цикла. В этом случае приходится принудительно завершать работу программы, иногда это связано с потерей несохраненных данных и самой программы.
В практических инженерных задачах обычно известны начальные значения изменяемых величин, закон изменения и конечное число повторений. Переменная, изменение которой организуется в ходе реализации цикла, называется параметром цикла или управляющей переменной. Алгоритм работы цикла с заданным числом повторений (иногда его называют циклом с параметром) приведен на рис. 8.
|
Рис. 8.Развернутая схема цикла с заданным числом повторений
Следует подчеркнуть, что цикл с заданным числом повторений представляет собой соединение линейной структуры (начало цикла), структуры цикл-ПОКА (условие в нем заменено на противоположное) и снова линейной (последовательной) структуры в теле цикла.
Прочитать этот алгоритм можно следующим образом: «Меняя параметр от начального значения до конечного значения, повторять тело цикла».
Алгоритм, приведенный на рис. 8, принято называть развернутой схемой цикла с заданным числом повторений. Такая схема удобна для анализа алгоритма и поиска ошибок. Однако при написании алгоритма можно использовать и компактную запись. В псевдокодах она выглядит так:
Цикл по параметр от начальное значение
до конечное значение шаг приращение;
операторы тела цикла;
Конец-цикла.
Необходимо подчеркнуть, что развернутая и компактная записи после реализации в машине дают один и тот же результат. Компактная запись менее громоздка за счет того, что в ней не задаются в явном виде связи между отдельными элементами структуры.
Рассмотрим использование циклической структуры этого типа на примере: составить алгоритм печати таблицы значений х, х2, sin(х) и 1/х при изменениях х от 1 с шагом 0.1 , пока выполняется условие х ≤ 10.
Составим алгоритм в виде псевдокодов:
1. Начало;
2. Список данных:
x, fl, f2, f3 — вещественный;
3. Цикл по х от 1 до 10 шаг 0.1;
4. fl:=x2;
f2:=sin(x);
f3:=l/x;
5. Вывод(х, fl, f2, f3);
6. Конец-цикла 3;
7. Конец.
Отметим, что алгоритм состоит из 7 пунктов. Та же самая задача была решена в подразд. 1.2.1, но там в качестве циклической структуры для построения алгоритма использовался цикл-ПОКА, алгоритм состоял из 9 пунктов. Сокращение алгоритма оказалось возможным за счет использования в нашем случае цикла с заданным числом повторений, в структуре которого уже предусмотрены присваивание начального значения параметру и приращение параметра.
Для изображения компактной графической схемы цикла с параметром могут быть использованы символы «Подготовка» или «Граница цикла» (см. табл. 1), как показано на рис. 9.
Рис. 9.Компактная запись цикла с параметром:
а — с использованием символа «Подготовка»; б — с использованием
символа «Граница цикла»; i — параметр цикла; iн— начальное
значение параметра; iк — конечное значение параметра;
Δi — приращение (шаг)
Если величина шага в цикле с параметром равна единице, то в заголовке цикла шаг можно не указывать. Приведем для сравнения развернутые графические схемы циклов с заданным числом повторений с возрастающим и убывающим параметрами (рис. 10).
Рис. 10.Развернутая схема цикла с заданным числом повторений: а — с возрастающим параметром; б — с убывающим параметром
Схемы отличаются знаками в блоке проверяемого логического условия и в блоке изменения параметра цикла.
Примеры выполнения заданий в контрольной работе:
1. Теоретическая часть. Примеры вопросов:
- Создание ярлыков в MS Windows;
- Управление окнами в MS Windows;
- Работа с дисками в MS Windows;
2. Практическая часть. Примеры заданий:
2.1 Ввод и вывод числовых значений
1 группа | 2 группа | 3 группа |
G=10^4 H=-25 | Y=-4,5 Z=42567*10^-2 | Q=4,57*10^-3 R=-56,3 |
uses CRT;
var a:array [1..6] of real;
b:array [1..6] of char;
i:integer;
begin
ClrScr;
b[1]:='G';
b[2]:='H';
b[3]:='Y';
b[4]:='Z';
b[5]:='Q';
B[6]:='R';
writeln('vvedite G v decatichnoj forme');
readln(a[1]);
writeln('vvedite H v decatichnoj forme');
readln(a[2]);
writeln('vvedite Y v decatichnoj forme' );
readln(a[3]);
writeln('vvedite Z v decatichnoj forme');
readln(a[4]);
writeln('vvedite Q v pokazatelnoj forme');
readln(a[5]);
writeln('vvedite R v pokazatelnoj forme');
readln(a[6]);
writeln;
writeln('Resulyatu rabotu');
FOR I:=1 TO 6 DO
begin
if i in [1..4] then
writeln(' ',b[i],' v pokazatelnoj forme ',a[i]:2:4);
if i in [5,6] then
writeln(' ',b[i],' v pokazatelnoj forme ',a[i])
end;
writeln;
end.
Результат работы программы:
2.2 Составить схему алгоритма и программу вычисления значения функции.
Вид функции | Исходные данные | ||
Х | Y | Z | |
-0,643 | -6,324 | - |
uses CRT;
var x:real;
b:real;
y:real;
begin
ClrScr;
writeln('VVedite x');
readln(x);
writeln('vvedite y');
readln(y);
b:= x+(y/(x+(y/(x+y))));
writeln('b=',b:6:3);
writeln;
end.
Выполнение программы:
2.3 Составить схему алгоритма и программу для вычисления значения функций при заданных условиях.
Вид функции | Исходные данные | ||
Х | Y | Z | |
3,75 0,22 | -6,72 | 1,05 |
var x1,x2,a1,a2,b1,b2,z,y:real;
i,n:integer;
begin
writeln('vedite x1 ');
readln(x1);
writeln('vedite x2 ');
readln(x2);
writeln('vedite z');
readln(z);
writeln('vedite y');
readln(y);
if (x1>=z) or (x2>=z) then
begin
a1:= (x1+y)/(5+sqr(sin(z)));
a2:= (x2+y)/(5+sqr(sin(z)));
writeln ( 'a1=',a1:5:2);
writeln ( 'a2=',a2:5:2);
end;
if (x1<z) or (x2<z) then
begin
b1:=sqrt(abs(y+sqr(sin(z)/cos(z))));
writeln ( 'b=',b1:5:2);
end;
writeln;
readln
end.
Выполнение программы:
2.4 Вычислить таблицу значений функции для значений аргумента в заданном интервале с заданным шагом.
Вид функции | Исходные данные | ||||
a | b | xn | xk | Dx | |
8,24 | - | 14,9 | 24,8 | 1,5 |
Uses crt;
var x,x1,x2,dx,a,y:real;
i,n:integer;
begin
clrscr;
writeln('vedite x1 ');
readln(x1);
writeln('vedite x2 ');
readln(x2);
writeln('vedite dx');
readln(dx);
writeln('vedite a');
readln(a);
while x1<=x2 do begin
y:=sqr(ln(a+x1))/sqr(a+x1);
writeln ( 'y = ',y:5:5);
x1:=x1+dx;
end;{while}
writeln;
readln
end.
Выполнение программы:
2.5 Вычислить таблицу значений функции для значений аргумента, который представляет собой массив.
Вид функции | Исходные данные | |||||
a | b | x1 | x2 | x3 | x4 | |
1,38 | -1,26 | 70,1 | 96,3 | 17,8 | 20,65 |
const x:array[1..4]of real=(70.1,96.3,17.8,20.65);
var i:integer;
y,a,b:real;
begin
a:=1.38; b:=-1.26;
writeln(' x y');
for i:=1 to 4 do
begin
y:=a*sqr(ln(x))/(b+sqrt(x));
writeln(x[i]:5:2,y:7:2);
end;
readln;
end.
Выполнение программы:
2.6 Для совокупности чисел Х(0.01;-27.3;0;125.27;-371.45;0;12;-5;-172.3;0.05;17.1;49.5;-0.01) при А=-5. Вычислить сумму элементов, меньших А.
uses crt;
const x: array [1..13] of real = (0.01,-27.3,0,125.27,371.45,0,12,-5,-172.3,0.05,17.1,49.5,-0.01);
A = -5;
Var n,i, k:integer;
sum:real;
begin
clrscr; writeln('Masiv X'); sum:=0;
for i:=1 to 13 do begin writeln(x[i]:2:2);
if x[i]<A then sum:=sum+x[i];
end;
writeln; write('Sum = ',sum:4:3); writeln
end.
Выполнение программы:
2.7 Для совокупности чисел Х(0.01;-27.3;0;125.27;-371.45;0;12;-5;-172.3;0.05;17.1;49.5;-0.01) при А=-5. Найти номер элемента с максимальным значением
const x:array[1..13]of real=(0.01,-27.3,0,125.27,-371.45,0,12,-5,
-172.3,0.05,-17.1,49.5,-0.01);
A=-5;
var i:integer;
max:real;
begin
max:=x[1];
for i:=2 to 13 do
if x[i]>max then max:=x[i];
writeln('Max=',max:3:2);
readln;
end.
2.8 Обработка двумерного массива:
uses CRT;
type q=array [1..3] of integer;
var
Q3: array [1..5] of q;
j,i,k,temp:integer;
begin
ClrScr; writeln('Vvedite masiv Q3 5 na 3');
for i:=1 to 5 do
for j:=1 to 3 do read(Q3[i,j]);
for j:=1 to 3 do begin
for i:=1 to 4 do
for k:=1 to 5-i do begin
if q3[k,j]<q3[k+1,j] then begin
temp:=q3[k,j];
q3[k,j]:=q3[k+1,j];
q3[k+1,j]:=temp;
end; end; end;
writeln ('Preobrazovanaya matrica Q3:');
for i:=1 to 5 do begin
for j:=1 to 3 do begin write (' ', Q3[i,j]);
end; writeln; end; readln end.
Выполнение программы:
2.9 Организация программ, содержащих функции пользователя.
Вероятности m событий в распределении Пуассона |
uses CRT;
var
A,M,i:integer;
z:real;
function fact(var n:integer):integer;
var temp : integer;
begin
if n>1 then begin
temp:=n-1;
fact:=n*fact(temp);
end
else
fact:=1;
end;
begin
ClrScr;
writeln('vvedite M ' );
readln(M);
writeln('vvedite A ' );
readln(A);
z:=(A*exp(-A*Ln(1.27)))/(fact(M));
writeln('z=',z:6:2);
writeln;
end.
Выполнение программы:
2.10 Написать программу для работы в диалоговом режиме с файлом последовательного доступа указанной структуры.
Имя файла | Поля записи | Запрос |
Polikl | ФИО № Карточки № Участка Дата прививки №1 | Вывести количество граждан, которые должны сделать прививку №1 М-го числа |
Uses Crt;
Type Polikl=record
FIO : string;
Nk : integer;
Nuch : integer;
Priv1: string;
end;
Var
F : file of Polikl;
Polik : Polikl;
i : integer;
s,M : string;
sum : integer;
Begin
Clrscr;
writeln('Vvedite bazu:');
Assign(F, 'Polikl.dat');
Rewrite(F);
Repeat
write('FIO : '); Readln(Polik.FIO);
write('N kart : '); Readln(Polik.Nk);
write('N uch: '); Readln(Polik.NUch);
write('Data Privivki N1: '); Readln(Polik.Priv1);
Write('Next (Y/N): '); readln(s);
write(F,Polik);
until (s='n') or (s='N'); Writeln;
write ('Vvedite datu: '); Readln(M);
Reset(F);
sum:=0;
WriteLn('Grazhdane po privivke N1:');
while not Eof(F) do
begin
Read(F, polik);
If Polik.Priv1=M then Sum:=Sum+1;
end;
Close(F);
Writeln (Sum);
Readkey;
End.
Выполнение программы:
Дата добавления: 2015-03-11; просмотров: 6994;