|
|
|
|
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 | C | Basic] Вычислите сумму Z = 1 + 2 + 3 + ... . Вычисления прекратите, когда значение Z превысит заданное значение A.
4.2. [Pascal | C | Basic] Проверьте, есть ли в заданной целочисленной последовательности a1 , a2 , ... , aN элементы, равные нулю. Если есть, найдите номер первого из них, если нет - выдайте соответствующий текст.
4.3. [Pascal | C | Basic] Для заданного числа x вычислите первое из чисел последовательности sin x, sin sin x, sin sin sin x, ..., меньшее по модулю 10-2.
4.4. [Pascal | C | Basic] Выясните, имеются ли в заданном векторе A(N) два подряд идущих нулевых элемента.
4.5. [Pascal | C | Basic] Выясните, имеются ли в заданном целочисленном векторе A(N) три подряд идущих элемента одного знака.
4.6. [Pascal | C | Basic] Множество точек в пространстве задано своими целочисленными координатами. Определите, совпадает ли хотя бы одна из точек с началом координат.
4.7. [Pascal | C | Basic] Если у заданного вектора A(N) есть хотя бы один элемент, меньший, чем -5, то все отрицательные элементы замените их квадратами, оставив остальные элементы без изменения; в противном случае вектор домножьте на 0,1 .
4.8. [Pascal | C | Basic] Имеется последовательность чисел a1 , a2 , ... , aN . Найдите сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.
4.9. [Pascal | C | Basic] Задано целое A>1. Найдите наименьшее целое неотрицательное k, при котором 5k > A.
4.10. [Pascal | C | Basic] Все элементы заданного вектора A(N), начиная с первого по порядку положительного элемента, уменьшите на единицу.
4.11. [Pascal | C | Basic]
Числа Фибоначчи (Fi) определяются по формулам
F0 = F1 =
1; Fi = Fi-1 +
Fi-2 при i = 2, 3, ...
Найдите первое из чисел Фибоначчи, которое превосходит заданное число
M (M>0).
4.12. [Pascal | C | Basic] Выясните, имеeтся ли среди чисел i3 - 17 i n2 + n3 , i= 1, ..., n, хотя бы одно число, которое кратно заданному числу А и не кратно заданному числу В (A<>B). При существовании такого числа вычислите сумму всех тех элементов, которые предшествовали ему.
4.13. [Pascal | C | Basic] Определите, имеются ли среди элементов побочной диагонали заданной целочисленной матрицы A(N, N) числа, равные нулю.
4.14. [Pascal | C | Basic] Найдите любое трёхзначные число, кратное заданному Р и не равное ему.
4.15. [Pascal | C | Basic] Вычислите приближённое значение бесконечной суммы:
4.16. [Pascal | C | Basic] Если в заданном целочисленном векторе A(N) есть элементы со значением, равным заданному числу B, то переменной С присвойте значение, равное сумме всех элементов, предшествующих первому по порядку такому элементу; в противном случае вывести соответствующий текст.
4.17. [Pascal | C | Basic] Дана последовательность из N целых чисел. Определите, со скольких положительных чисел она начинается.
4.18. [Pascal | C | Basic]
Среди чисел
найдите номер и значение первого по порядку числа, абсолютная величина
которого меньше заданного eps > 0. Если таких чисел нет, выведите на печать
соответствуюший текст.
4.19. [Pascal | C | Basic] Определите, имеется ли в заданном массиве A(N) хотя бы одна пара соседних чисел, являющихся взаимнообратными.
4.20. [Pascal | C | Basic]
Определите, выполняются ли для заданного вектора A(2N) условия:
а1 = а2N, a2 = a2N-1, ..., aN = aN+1,
т.е. является ли он симметричным относительно своей середины.
4.21. [Pascal | C | Basic] Имеется монотонно убывающая последовательность чисел a1, a2, ..., aN . Определите квадрат суммы положительных членов этой последовательности.
4.22. [Pascal | C | Basic] Если в заданном целочисленном векторе A(N) есть элементы со значением, равным заданному числу B, то переменной С присвойте значение, равное произведению всех элементов, следующих за первым по порядку таким элементом; в противном случае выведите соответствующий текст.
4.23. [Pascal | C | Basic] Определите, имеется ли в заданном целочисленном массиве X(N) число, кратное заданным числам А и В, и не кратное числу С.
4.24. [Pascal | C | Basic] Дано натуральное N. Выясните, сколько цифр оно содержит.
4.25. [Pascal | C | Basic] Найдите сумму цифр заданного натурального числа.
4.26. [Pascal | C | Basic] Цифры заданного натурального числа запишите в обратном порядке.
4.27. [Pascal | C | Basic] Проверьте, все ли элементы заданного массива A(N) положительны.
4.28. [Pascal | C | Basic] Найдите наименьший делитель заданного натурального числа A (не считая единицы).
4.29. [Pascal | C | Basic] Определите, является ли заданное натуральное число палиндромом (палиндром - число, одинаково читаемое слева направо и справа налево).
4.30. [Pascal | C | Basic] Определите по данным музейного каталога, есть ли в музее хотя бы одна картина Левитана или Шишкина. Если есть, выдайте ее название, в противном случае выдайте соответствующий текст.
4.31. [Pascal | C | Basic] Определите по прейскуранту, можно ли подобрать в спортивном магазине велосипед, стоимость которого не превышает имеющуюся у покупателя сумму.
4.32. [Pascal | C | Basic] Известен начальный вклад клиента в банк и процент годового дохода. Определите, через сколько лет вклад превысит заданный размер и каков при этом будет размер вклада.
4.33. [Pascal | C | Basic] Торговая фирма в первый день работы реализовала товаров на P тыс. руб., а затем ежедневно увеличивала выручку на 3%. Какой будет выручка фирмы в тот день, когда она впервые превысит заданное значение Q ? Сколько дней придется торговать фирме для достижения этого результата?
4.34. [Pascal | C | Basic] Малое предприятие в первый день работы выпустило P единиц товарной продукции. Каждый последующий день оно выпускало продукции на Q единиц больше, чем в предыдущий. Сколько дней потребуется предприятию, чтобы общее количество выпущенной продукции за все время работы впервые превысило запланированный объем?
4.35. [Pascal | C | Basic] Определите, имеется ли в заданном множестве точек на плоскости хотя бы одна, принадлежащая заштрихованной на рисунке области (на рисунках даны окружности с единичным радиусом и парабола y=x2):
4.36. [Pascal | C | Basic] Даны два натуральных числа M и N - числитель и знаменатель дроби M/N. Требуется сократить дробь, насколько это возможно.
4.37. [Pascal | C | Basic]
На плоскости даны две точки А(2, 2) и В(2, 6), а также N точек со своими
координатами. Определитe, есть ли среди этих N точек хотя бы одна,
которая является:
а) вершиной равнобедренного треугольника с основанием АВ;
б) вершиной прямоугольного треугольника с катетом АВ.
4.38. [Pascal | C | Basic] Дано натуральное число N. Получите его запись в двоичной, восьмеричной и шестнадцатеричной системах счисления.
4.39. [Pascal | C | Basic] На соревнованиях по воздухоплаванию доля тепловых шаров от общего количества шаров обычно составляет от 93,4% до 97,5% всех шаров. При каком наименьшем общем количестве шаров возможно такое процентное соотношение?
4.40*. [Pascal | C | Basic] По перечню редких и исчезающих видов животных и растений, содержащемуся в "Красной Книге" вашего региона, определите, верно ли, что в нем содержится не менее пяти подвидов папоротников и ни более двух подвидов фазанов.
4.41*. [Pascal | C | Basic] Городок состоит из N многоквартирных котеджей, расположенных вдоль прямой дороги с одной ее стороны на равных расстояниях друг от друга. В городке проводят телефонную связь. Известно, сколько телефонных аппаратов надо установить в каждом доме. Определите, в каком из домов надо установить АТС, чтобы суммарное расстояние от АТС до всех телефонных аппаратов было минимальным. Если таких домов несколько, достаточно найти любой из них. Учтите, что каждый телефон связан с АТС отдельным проводом.
4.42*. [Pascal | C | Basic]
Вокруг считающего стоят N человек, один из которых назван первым,
а остальные занумерованы по часовой стрелке числами от 2 до N.
Считающий ведет счет до М , начиная с первого. Человек, на котором
остановился счет, выходит из круга. Счет возобновляется с человека,
следовавшего за выбывшим, и так до тех пор, пока не останется один
человек. Определите первоначальный номер последнего оставшегося человека.
&nspb;