Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Цикл типа пока без прерывания




Язык Пример Пояснения
Алгоритмический язык i:=1; S:=0 нц пока i<=N S:=S+A[i] i:=i+2 кц   Вычисляется сумма элементов массива
Pascal i:=1; S:=0; While i<=N do begin S:=S+A[i]; i:=i+2; end; A(N) с нечетными индексами.Число таких элементовзаранее известно. Шагпараметра цикла равен Двум

Для организации циклов типа пока можно также использовать:

• в языке Pascal оператор цикла с постусловием Repeat...until:

Repeat тело цикла until <условие завершения> Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла.

 

Пример 4.1. Определить, является ли заданная последовательность чисел a1, a2,..., aN монотонно убывающей.

Система тестов

Номер теста Проверяемый случай Данные Результат
N Вектор А Otvet
  Является   (3, 2, 1) 'Да'
  Не является   (2, 3, 1) 'Нет'

 

Алгоритмический язык

алг Убывание (арг цел N, арг вещ таб A[1:N], рез лит Otvet)

нач цел i

i:=1; Otvet:="Да" Блок-схема

нц пока (i<=N–1) и (Otvet="Да") (фрагмент)

если A[i] < A[i+1]

то Otvet:= "Нет"

иначе i:=i+1

Все

Кц

Кон

Исполнение алгоритма

Обозначения проверяемых условий:

(i <= N-1) и (Otvet = "Да") => (1)

A[i] < A[i+1] => (2)

Номер теста i Otvet (1) (2)
  3 "Да" + + - (кц) - -
  1 "Да" "Нет" + - (кц) +

Turbo Pascal

Program Decrease;

Uses Crt;

Var A: Array [1..10] of Real;

N, i: Integer;

Otvet: Boolean;

{--------------------------------------------}

Procedure InputOutput; {описание процедуры ввода-вывода данных}

Begin

ClrScr;

Write(’Количество элементов - ’); ReadLn(N);

For i:= 1 to N do

begin Write(’A[’, i, ’] = ’);

ReadLn(A[i]);

end; WriteLn;

WriteLn(’Заданная последовательность чисел’);

For i:= 1 to N do Write(A[i]: 5: 1);

WriteLn;

End; { of InputOutput }

{--------------------------------------------}

Procedure Processing(Var Otvet: Boolean);

Begin {описание процедуры проверки на убывание элементов}

Otvet:= TRUE; i:=1;

While (i<=N–1) and Otvet do

If (A[i]<A[i+1]) then Otvet:= FALSE

else i:= i+1;

End; { of Processing }

{--------------------------------------------}

Procedure Result(Otvet: Boolean); {описание процедуры вывода результата}

Begin

If Otvet then Write(’образует ’)

else Write(’не образует ’);

WriteLn(’монотонно убывающую последовательность.’);

ReadLn;

End;

{--------------------------------------------}

BEGIN

InputOutput; {вызов процедуры ввода-вывода}

Processing(Otvet); {вызов процедуры проверки на убывание}

Result(Otvet); {вызов процедуры вывода результата}

END.

Пример 4.2. Задано множество точек на плоскости. Oпределить, принадлежит ли хотя бы одна точка множества внутренней области круга с центром в точке (a, b) и радиусом R.

Система тестов

Номер теста Проверяемый случай Данные Результат
A B R Кол. точек Координаты точек Otvet
1 Принадлежит 1 0 2 3 X=(-1, 2, 3) Y=(2, 1, 2) "Да"
2 Не принадлежит 1 0 2 2 X=(-1, 3) Y=(2, 2) "Нет"

Алгоритмический язык

алг Точки (арг цел N, арг вещ таб X [1: N], Y [1: N], арг вещ a, b, R, рез лит Otvet)

нач цел i

i:=1; Otvet:="Нет"

нц пока (i<=N) и (Otvet="Нет") | условие продолжения цикла

если (X[i]-a)**2 + (Y[i]-b)**2 <R*R | условие прерывания цикла

то Otvet:= "Да"

иначе i:=i+1

все Блок-схема

кц

Кон

Исполнение алгоритма

Обозначения проверяемых условий:

(i <= N) и (Otvet = "Нет") => (1)

(X[i]-1)**2 + (Y[i]-b)**2 < R*R => (2)

Номер теста i Otvet (1) (2)
  3 "Нет" "Да" + + - (кц) - +
  3 "Нет" + + - (кц) - -

Turbo Pascal

Program SetOfPoints;

Uses Crt;

Type Mas = Array [1..20] of Real;

Var X, Y: Mas; {массивы координат точек }

i, NPoints: Integer; {NPoints – количество точек}

a, b, Radius: Real; {координаты центра и радиус}

Flag: Boolean;

{--------------------------------------------}

Procedure Input; {описание процедуры ввода данных}

Begin

ClrScr;

Write(’Введите координаты центра круга: ’); ReadLn(a, b);

Write(’Введите радиус круга: ’); ReadLn(Radius);

Write(’Введите количество точек: ’); ReadLn(NPoints);

For i:= 1 to NPoints do

begin

WriteLn(i: 4, ’-ая точка ’);

Write(’X = ’); ReadLn(X[i]);

Write(’Y = ’); ReadLn(Y[i]);

end; WriteLn;

End; {of Input}

{--------------------------------------------}

Procedure Inside(Var Flag: Boolean); {описание процедуры проверки }

Begin {принадлежности точек области}

Flag:= FALSE; i:= 1;

While (i<=NPoints) and not Flag do

If Sqr(X[i]–a)+Sqr(Y[i]–b) < Sqr(Radius) {Sqr – возведение в квадрат}

then Flag:= TRUE

else i:=i+1;

End; {of Inside}

{--------------------------------------------}

Procedure Output(Flag: Boolean); {описание процедуры }

Begin {вывода результатов }

Write(’О т в е т: в множестве точек ’);

If Flag then WriteLn(’cодержатся’)

else WriteLn(’не содержатся’);

WriteLn(’ точки, принадлежащие заданной области.’);

ReadLn;

End; {of Output}

{--------------------------------------------}

BEGIN

Input; {вызов процедуры ввода данных }

Inside(Flag); {вызов процедуры проверки принадлежности}

Output(Flag); {вызов процедуры вывода результатов }

END.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных