|
|
|
|
|
|
i:=1; Flag:="Нет" нц пока (i<=N) и (Flag="Нет") если A[i]<0 то Flag:="Да"; k:=i иначе i:=i+1 все кц |
Решается задача:
определить номер первого отрицательного элемента массива A(N). Здесь Flag - "управляющая" переменная литерного типа (можно с успехом использовать также логический или целый типы) |
|
|
i:=1; Flag:=FALSE; While (i<=N) and not Flag do If A[i]<0 then begin Flag:=TRUE; k:=i end else i:=i+1; |
Здесь Flag - переменная логического
типа, принимающая значение ТRUE (истина) или FALSE (ложь),
and - операция 'и', not - операция 'не' |
|
|
i=1 : Flag=0 WHILE i<=N AND Flag=0 IF A(i)<0 THEN Flag=1 : k=i ELSE i=i+1 END IF WEND |
Здесь Flag - переменная целого типа (в некоторых версиях QBasic можно использовать и логический тип, что предпочтительнее) |
|
|
|
|
|
|
i:=1; S:=0 нц пока i<=N S:=S+A[i] i:=i+2 кц |
Вычисляется сумма элементов массива
A(N)
|
|
|
i:=1; S:=0; While i<=N do begin S:=S+A[i]; i:=i+2 end; |
|
|
|
S=0 FOR I=1 TO N STEP 2 S=S+A(I) NEXT I |
| Repeat
тело цикла until |
Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла. |
| DO тело цикла LOOP |
Пока выполняется условие продолжения цикла, повторять тело цикла. |
| DO UNTIL <условие
завершения>
тело цикла LOOP |
Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла. |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Убывание (арг цел 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)
|
![]() |
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.
QBasic
CLS
INPUT "Количество элементов – ", N : DIM A(N)
FOR i = 1 TO N
PRINT "A(" ; i ; ") = " ;
INPUT A(i)
NEXT i
CLS : PRINT "Заданная последовательность чисел" FOR i = 1 TO N PRINT A(i) ; NEXT i : PRINT
i = 1 : Otvet = 0 WHILE i <= N–1 AND Otvet = 0 IF A(i) < A(i + 1) THEN Otvet = 1 ELSE i = i + 1 WEND
IF Otvet=0 THEN PRINT "образует" ; ELSE PRINT "не образует" ; PRINT " монотонно убывающую последовательность." END
| Пример 4.2. Задано множество точек на плоскости. Oпределить, принадлежит ли хотя бы одна точка множества внутренней области круга с центром в точке (a, b) и радиусом R. |
![]() |
|
|
|
|
|
||||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
алг Точки (арг цел 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 все кц кон
| Исполнение алгоритма
Обозначения проверяемых условий:
|
![]() |
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.
QBasic
CLS INPUT "Введите через запятую координаты центра круга: ", a, b INPUT "Введите радиус круга: ", Radius INPUT "Введите количество точек: ", NPoints DIM X(NPoints), Y(NPoints) 'описание массивов координат точек FOR i = 1 TO NPoints PRINT i; "-ая точка " INPUT "x = ", X(i) INPUT "y = ", Y(i) : PRINT NEXT i Flag = 0 : i = 1 WHILE i <= NPoints AND Flag = 0 IF (X(i)–a)^2 + (Y(i)–b)^2 < Radius^2 THEN Flag=1 ELSE i=i+1 WEND PRINT "О т в е т : в множестве точек "; IF Flag = 1 THEN PRINT "cодержатся" ELSE PRINT "не содержатся" PRINT " точки, принадлежащие заданной области." END
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
![]() |
|
|
|
|
|
|
|
алг Диагональ (арг цел N, арг цел таб А[1:N, 1:N], рез лит Teкст) нач цел i, лит Flag i:=1; Flag:="Нет" нц пока (i<=N) и (Flag="Нет") | условие продолжения цикла если (A[i, i]>0) и (mod(A[i, i], 2)=1) | условие завершения цикла то Flag := "Да" иначе i:=i+1 все кц если Flag = "Да" то Текст := "Есть такие" иначе Текст := "Нет таких" все кон
| Исполнение алгоритма
Обозначения проверяемых условий:
|
![]() |
Program Diagonal;
Uses Crt;
Type Mas = Array [1..10, 1..10] of Integer;
Var A : Mas;
N, i, j : Integer;
Flag : Boolean;
{-----------------------------------}
Procedure InputOutput(Var A : Mas); {описание процедуры ввода-}
Begin {вывода исходных данных }
ClrScr;
Write(’Количество строк и столбцов – ’); Read(N);
For i := 1 to N do
For j := 1 to N do
begin Write(’A[’ , i , ’, ’ , j , ’] = ? ’);
ReadLn(A[i, j])
end; WriteLn;
WriteLn(’Заданная матрица :’);
For i := 1 to N do
begin
For j := 1 to N do Write(A[i, j] : 5);
WriteLn
end; WriteLn
End; { of InputOutput }
{------------------------------------}
Procedure Solution(Var A : Mas); {описание процедуры поиска решения}
Var Flag : Boolean;
Begin
Flag:=FALSE; i:=1;
While (i<=N) and not Flag do
If (A[i, i]>0) and (A[i, i] mod 2 = 1)
then Flag:=TRUE
else i:=i+1;
WriteLn(’О т в е т :’);
Write(’Среди элементов главной диагонали ’);
If Flag then WriteLn (’есть нечетные положительные.’)
else WriteLn(’нет нечетных положительных.’);
ReadLn;
End; { of Solution }
{------------------------------------}
BEGIN
InputOutput(A); {вызов процедуры ввода-вывода данных}
Solution(A); {вызов процедуры поиска решения задачи}
END.
QBasic
CLS
INPUT "Количество строк и столбцов матрицы = ", N
DIM A(N, N)
FOR i = 1 TO N
FOR j = 1 TO N
PRINT "A(" ; i ; ", " ; j ; ") = ";
INPUT A(i, j)
NEXT j
EXT i
PRINT : PRINT "Матрица А"
FOR i = 1 TO N
FOR j = 1 TO N
PRINT A(i, j) ;
NEXT j : PRINT
NEXT i
’Цикл "пока" по элементам главной диагонали A(i,i)
i = 1 : Flag = 0
WHILE i <= N AND Flag = 0
IF A(i, i)>0 AND A(i, i) MOD 2=1 THEN Flag=1 ELSE i=i+1
WEND
PRINT : PRINT "О т в е т :"
PRINT "Среди элементов главной диагонали ";
IF Flag = 1 THEN
PRINT "есть положительные нечетные."
ELSE
PRINT "нет положительных нечетных."
END IF
END
|
|
|
|
|
|
|
|
|
|
|
|
алг Фибоначчи (арг цел М, рез цел S) дано | M>0
нач цел F0, F1, F2 F0:=1; F1:=1; F2:=2 S:=4 | 4 – сумма первых трех чисел Фибоначчи нц пока F2<=M F0:=F1; F1:=F2; F2:=F0+F1 | серия переприсваиваний S:=S+F2; кц S:=S–F2 | из S вычитается последнее значение F2, превосходящее M кон
Исполнение алгоритма
|
![]() |
Program SummaFib;
Uses Crt;
Var M, {заданное число }
F0, F1, F2, {три последовательных числа Фибоначчи}
S : Integer; {сумма чисел Фибоначчи}
BEGIN ClrScr; Write(’Введите натуральное М : ’); ReadLn(M);
F0:=1; F1:=1; F2:=2;
S:=4; {4 – сумма первых трех чисел Фибоначчи}
Write(’Числа Фибоначчи, не превосходящие ’, M, ’ :’, F0:4, F1:4);
While F2<=M do
begin
F0:=F1; F1:=F2; Write(F1 : 4);
F2:=F0+F1; S:=S+F2;
end;
S:=S–F2; {вычитание из суммы последнего числа, которое превосходит М}
WriteLn; WriteLn; WriteLn(’О т в е т : Сумма этих чисел равна ’, S); ReadLn END.Результаты работы Pascal-программы
| Введите натуральное M>0 : 10
<Enter>
Числа Фибоначчи, не превосходящие 10 : 1 1 2 3 5 8 О т в е т : Сумма этих чисел равна 20 |
CLS INPUT "Введите натуральное М : " , M
F0 = 1 : F1 = 1 : F2 = 2 S = 4 ’4 – сумма первых трех чисел Фибоначчи PRINT "Числа Фибоначчи, не превосходящие "; M ; " : " ; F0 ; F1 ; WHILE F2 <= M F0=F1 : F1=F2 : PRINT F1; F2=F0+F1 : S=S+F2 WEND S=S–F2 ’вычитание из суммы последнего числа, которое превосходит М
PRINT : PRINT : PRINT "О т в е т : Сумма этих чисел равна "; S END
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
алг Включение (арг цел N, арг вещ D, арг рез вещ таб A[1:N+1]) дано | А – упорядоченная по возрастанию последовательность надо | в А включено число D с сохранением упорядоченности
нач цел i i:=N нц пока (i>=1) и (A[i]>D) A[i+1] := A[i] | сдвиг очередного элемента вправо на одну позицию i := i–1 кц A[i+1] := D | включение числа D в последовательность кон
| Исполнение алгоритма
Обозначение проверяемого условия: (i >= 1) и (A[i] > D) => (1)
|
![]() |
Program Insertion;
Uses Crt;
Var A : Array [1..20] of Real;
D : Real;
N, i : Integer;
{--------------------------------------------}
Procedure InputOutput; {описание процедуры ввода-вывода}
Begin ClrScr;
Write(’Количество элементов массива - ’); ReadLn(N);
WriteLn(’Введите элементы массива, упорядоченные по возрастанию:’);
For i := 1 to N do
begin Write(’A[’ , i , ’] = ’); ReadLn(A[i])
end; WriteLn;
Write(’Введите число, которое требуется включить в массив: ’); ReadLn(D);
ClrScr; Write(’Исходный массив :’);
For i := 1 to N do Write(A[i] : 5 : 1); WriteLn;
WriteLn(’Включаемый элемент – ’, D : 5 : 1);
End; { of InputOutput }
{--------------------------------------------}
Procedure Insert; {описание процедуры включения нового элемента}
Begin
i:=N;
While (i>=1) and (A[i]>D) do
begin A[i+1] := A[i] {сдвиг очередного элемента вправо}
i:=i–1
end;
A[i+1] := D {включение числа D в последовательность}
End;
{--------------------------------------------}
Procedure Result; {описание процедуры вывода результатов}
Begin WriteLn;
Write(’О т в е т : массив с включенным элементом ’);
For i := 1 to N+1 do Write( A[i] : 5 : 1); WriteLn;
ReadLn
End;
{--------------------------------------------}
BEGIN
InputOutput; {вызов процедуры ввода-вывода }
Insert; {вызов процедуры включения нового элемента}
Result; {вызов процедуры вывода результатов }
END.
QBasic
CLS
INPUT "Количество элементов массива – ", N
DIM A(N+1)
PRINT "Введите элементы массива, упорядоченные по возрастанию:"
FOR i = 1 TO N
PRINT "A(" ; i ; ") = " ; : INPUT A(i)
NEXT i : PRINT
INPUT "Введите число, которое требуется включить в массив: ", D
CLS : PRINT "Исходный массив – "; FOR i = 1 TO N PRINT A(i) ; NEXT i : PRINT
PRINT "Включаемый элемент – "; D
i = N WHILE i >= 1 AND A[i]>D A(i+1) = A[i] : i = i – 1 'сдвиг очередного элемента вправо WEND A(i+1) = D ’включение числа D в последовательность
PRINT : PRINT "О т в е т : массив с включенным элементом "; FOR i = 1 TO N + 1 PRINT A(i) ; NEXT i : PRINT END
4.1. [Pascal | Basic] Вычислить сумму Z = 1 + 2 + 3 + ... . Вычисления прекратить, когда значение Z превысит заданное значение A.
4.2. [Pascal | Basic] Проверить, есть ли в заданной целочисленной последовательности a1 , a2 , ..., aN элементы, равные нулю. Если есть, найти номер первого из них, если нет – выдать соответствующий текст.
4.3. [Pascal | Basic] Для заданного числа x вычислить первое из чисел последовательности sin x, sin sin x, sin sin sin x, ..., меньшее по модулю 10–2.
4.4. [Pascal | Basic] Выяснить, имеются ли в заданном векторе A(N) два подряд идущих нулевых элемента.
4.5. [Pascal | Basic] Выяснить, имеются ли в заданном целочисленном векторе A(N) три подряд идущих элемента одного знака.
4.6. [Pascal | Basic] Множество точек в пространстве задано своими целочисленными координатами. Определить, совпадает ли хотя бы одна из точек с началом координат.
4.7. [Pascal | Basic] Если у заданного вектора A(N) есть хотя бы один элемент, меньший, чем –5, то все отрицательные элементы заменить их квадратами, оставив остальные элементы без изменения; в противном случае вектор домножить на 0,1.
4.8. [Pascal | Basic] Имеется последовательность чисел a1, a2 , ..., aN . Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.
4.9. [Pascal | Basic] Задано целое A>1. Найти наименьшее целое неотрицательное k, при котором 5k>A.
4.10. [Pascal | Basic] Все элементы заданного вектора A(N), начиная с первого по порядку положительного элемента, уменьшить на единицу.
4.11. [Pascal | Basic]
Числа Фибоначчи (Fi)
определяются по формулам
F0 = F1=
1; Fi = Fi–1+
Fi–2 при i = 2, 3, ...
Найти первое из чисел Фибоначчи, которое превосходит заданное число
M (M>0).
4.12. [Pascal | Basic]
Выяснить, имеeтся ли среди чисел i3
– 17• i• n2 + n3
, i= 1, ..., n, хотя бы одно число, которое кратно заданному
числу А и не кратно заданному числу В
(A<>B). При существовании такого числа требуется вычислить сумму
всех тех элементов, которые предшествовали ему.
4.13. [Pascal | Basic] Определить, имеются ли среди элементов побочной диагонали заданной целочисленной матрицы A(N,N) числа, равные нулю.
4.14. [Pascal | Basic] Найти любое трёхзначные число, кратное заданному Р и не равное ему.
4.15. [Pascal | Basic] Вычислить приближённое значение бесконечной суммы:
4.16. [Pascal | Basic] Если в заданном целочисленном векторе A(N) есть элементы со значением, равным заданному числу B, то переменной С присвоить значение, равное сумме всех элементов, предшествующих первому по порядку такому элементу; в противном случае вывести соответствующий текст.
4.17. [Pascal | Basic] Дана последовательность из N целых чисел. Определить, со скольких положительных чисел она начинается.
4.18. [Pascal | Basic]
Среди чисел
найти номер и значение первого по порядку числа, абсолютная величина
которого меньше заданного eps > 0 . Если таких чисел нет, вывести на печать
соответствуюший текст.
4.19. [Pascal | Basic] Определить, имеется ли в заданном массиве A(N) хотя бы одна пара соседних чисел, являющихся взаимнообратными.
4.20. [Pascal | Basic] Определить, выполняются ли для заданного вектора A( 2N ) условия: а1=а2N , a2= a2N–1 , ..., aN= aN+1, т.е. является ли он симметричным относительно своей середины.
4.21. [Pascal | Basic] Имеется монотонно убывающая последовательность чисел a1 , a2 , ..., aN . Определить квадрат суммы положительных членов этой последовательности.
4.22. [Pascal | Basic] Если в заданном целочисленном векторе A(N) есть элементы со значением, равным заданному числу B, то переменной С присвоить значение, равное произведению всех элементов, следующих за первым по порядку таким элементом; в противном случае вывести соответствующий текст.
4.23. [Pascal | Basic] Определить, имеется ли в заданном целочисленном массиве X(N) число, кратное заданным числам А и В, и не кратное числу С.
4.24. [Pascal | Basic] Дано натуральное N. Выяснить, сколько цифр оно содержит.
4.25. [Pascal | Basic] Найти сумму цифр заданного натурального числа.
4.26. [Pascal | Basic] Цифры заданного натурального числа записать в обратном порядке.
4.27. [Pascal | Basic] Проверить, все ли элементы заданного массива A(N) положительны.
4.28. [Pascal | Basic] Найти наименьший делитель заданного натурального числа A (не считая единицы).
4.29. [Pascal | Basic] Определить, является ли заданное натуральное число палиндромом (палиндром – число, одинаково читаемое слева направо и справа налево).
4.30. [Pascal | Basic] Определить по данным музейного каталога, есть ли в музее хотя бы одна картина Левитана или Шишкина. Если есть, выдать ее название, в противном случае выдать соответствующий текст.
4.31. [Pascal | Basic] Определить по прейскуранту, можно ли подобрать в спортивном магазине велосипед, стоимость которого не превышает имеющуюся у покупателя сумму.
4.32. [Pascal | Basic] Известен начальный вклад клиента в банк и процент годового дохода. Определить, через сколько лет вклад превысит заданный размер и каков при этом будет размер вклада.
4.33. [Pascal | Basic] Торговая фирма в первый день работы реализовала товаров на P тыс. руб., а затем ежедневно увеличивала выручку на 3%. Какой будет выручка фирмы в тот день, когда она впервые превысит заданное значение Q ? Сколько дней придется торговать фирме для достижения этого результата?
4.34. [Pascal | Basic] Малое предприятие в первый день работы выпустило P единиц товарной продукции. Каждый последующий день оно выпускало продукции на Q единиц больше, чем в предыдущий. Сколько дней потребуется предприятию, чтобы общее количество выпущенной продукции за все время работы впервые превысило запланированный объем?
4.35. [Pascal | Basic] Определить, имеется ли в заданном множестве точек на плоскости хотя бы одна, принадлежащая заштрихованной на рисунке области (на рисунках даны окружности с единичным радиусом и парабола y=x2):
