Главная » Статьи » Мои статьи |
Задача 7. Вводится последовательность из N целых чисел. Найти наибольшее число. Переменные: n – количество чисел; x – очередное число; i – переменная цикла; max – наибольшее число. Алгоритм решения задачи:
var n, x, max, i : integer; begin repeat write('Введите длину последовательности n='); readln(n); until n>0; write('Введите x='); readln(x); max:=x; for i:=2 to n do begin write('Введите x='); readln(x); if (x>max) then max:=x; end; writeln('Наибольшее из чисел max=', max); end. Задача 8. Вводится последовательность целых чисел, 0 – конец по-следовательности. Найти два наименьших числа. Переменные: x – очередное число; min1 – первое наименьшее число; min2 – второе наименьшее число (min2>=min1). Алгоритм решения задачи:
var x,min1,min2:integer; begin write('Введите x='); readln(x); min1:=x; write('Введите x='); readln(x); min2:=x ; {min1<=min2} repeat if x<=min1 then begin min2:=min1; min1:=x; end else if (min1<x) and (x<min2) then min2:=x; write('Введите x='); readln(x); until (x=0); writeln( 'Два наименьших числа равны', min1, 'и', min2); end. Задача 9. Вводится последовательность ненулевых чисел, 0 – конец последовательности. Определить, является ли последователь-ность возрастающей. Переменные: old – предыдущее число; new – рассматриваемое число; f – флаг. Решение данной задачи строится от противного. Математи-чески для того, чтобы последовательность была возрастающей, для каждого очередного элемента new и предыдущего old должно выполняться условие new > old. Любое нарушение данного усло-вия приводит к тому, что последовательность не может быть возрастающей. Алгоритм решения задачи:
var old, new : real; f : boolean; begin write('Введите x='); readln(old); write('Введите x='); readln(new); f:=true; repeat if new<=old then f:=false; old:=new; write('Введите x='); readln(new); until new=0; if f then writeln( 'Последовательность возрастающая') else writeln( 'Последовательность не является возрастающей'); end. Задача 10. Даны натуральное n и последовательность веществен-ных чисел a1, a2,…, an. Сколько отрицательных чисел в начале по-следовательности (до первого неотрицательного)? Переменные: k – счетчик; i – переменная цикла; n – количество членов последовательности; a – очередной член последовательности; p – признак отрицательного числа в начале последователь-ности. Алгоритм решения задачи:
var a: real; p: boolean; k,n : integer; begin repeat write('Введите длину последовательности n='); readln(n); until n>0; k:=0; p:=true; for i:=1 to n do begin writeln('Введите число'); readln(a); if (a<0) and p then k:=k+1else if a>=0 then p :=false end; if k=0 then writeln('отрицательных чисел в начале нет') else writeln('последовательность начинается с ', k, ' чисел') end. Задача 11. Дан прямоугольный бильярдный стол со сторонами А и В, где А, В – натуральные числа (бильярд Льюиса Кэролла). Из угловой лузы вылетает шар под углом 45 градусов к боковым стенкам, ударяется о борт, отскакивает, ударяется еще раз и т.д., пока не вылетит через одну из угловых луз. Рассчитать ко-личество отрезков в ломаной траектории шара. Считать угол падения равным углу отражения. Данная задача решается с помощью стандартных функций выделения целой части от деления y на x (y div x) и выделения остатка y mod x. При прохождении шаром прямоугольного стола и отражении его от боковых сторон происходит увеличение числа отрезков траектории на два, а обратный путь вычисляется как y:=a–x+y mod x, где y – обратный путь для шара, a – длинная сторона стола, x – короткая сторона стола. Переменные: в функции bill: x, y – два натуральных числа (формальные параметры); k – вспомогательная переменная (локальная переменная); a – длинная сторона стола (глобальная переменная); в основной программе: a, b – два натуральных числа (глобальные переменные). Алгоритм решения задачи:
var a, b : integer; function bill(y,x:integer):integer; var k:integer; begin k:=0; while y mod x <>0 do begin k:=k+y div x+2; y:=a–x+y mod x; end; bill:=k; end; begin repeat writeln('Введите два натуральных числа A>B'); readln(a,b); until a>=b; writeln('Количество отрезков в траектории: ', bill(a,b)); end. Задача 12. Пусть процедура maxmin(x,y) присваивает параметру x большее из вещественных чисел x и y, а параметру y – меньшее. Описать данную процедуру и использовать ее для перераспреде-ления значений вещественных переменных a, b и c так, чтобы стало a > = b > = c. var a,b,c : real; procedure maxmin( var x,y:real); var r:real; begin if x<y then begin r:=x; x:=y; y:=r end end; begin writeln('Введите три числа a,b,c –'); readln(a,b,c); maxmin(a,b); maxmin(a,c); {a=max} maxmin(b,c); {c=min} writeln(a,b,c); end. Задача 13. Если среди чисел sin(x n) (где степень n = 1, 2, … ,30) есть хотя бы одно отрицательное число, то логической переменной t присво-ить значение true, а иначе – значение false. var y,x : real; n : integer; t : boolean; begin write('Введите значение x –'); readln(x); y:=1; n:=0; repeat n:=n+1; y:=x*y; t:=sin(y)<0 until t or (n=30); writeln(t); end. Задача 14. Определить k – количество трехзначных натуральных чисел, сумма цифр которых равна n ( 1 < n < 27 ). Операции деления ( /, div и mod) не использовать. var d1, d2, d3, k, n : integer; begin writeln('Введите число n, с которым будем сравнивать сумму цифр числа'); readln(n); k:=0; {d1 – левая, d2 – средняя, d3 – правая цифры числа} for d1:=1 to 9 do for d2:=0 to 9 do for d3:=0 to 9 do if d1+d2+d3=n then begin k:=k+1; write(d1,d2,d3, ' '); end; writeln('Количество искомых чисел равно –', k); end. | |
Просмотров: 529 | |
Всего комментариев: 0 | |