OberonCore https://forum.oberoncore.ru/ |
|
Решение задач https://forum.oberoncore.ru/viewtopic.php?f=35&t=5380 |
Страница 1 из 1 |
Автор: | snuk [ Понедельник, 06 Апрель, 2015 14:47 ] |
Заголовок сообщения: | Решение задач |
Товарищи, по книге Потопахина разбираюсь с КП, решал задачки, но не уверен что все решил правильно. Если кому не сложно, ткните носом в мои ошибки. Задачки: 1) Код: Определить, является ли число N совершенным. Совершенные числа, это числа, равные сумме своих делителей. Например 6=1+2+3; или 28=1+2+4+7+14. MODULE Math; IMPORT In, StdLog; PROCEDURE Calc*; VAR k, n, sum, N:INTEGER; flag:BOOLEAN; BEGIN In.Open; In.Int(N); sum:=0; n:=N DIV 2; flag:=TRUE; WHILE (k<=n) & flag DO IF N MOD k=0 THEN sum:=sum+k; END; k:=k+1; IF sum=N THEN flag:=FALSE; StdLog.String('Число N совершенное') END; ELSE StdLog.String('Число N не является совершенным') END; END Calc; END Math. 2) Код: Дано три целых числа. Проверить, являются ли они членами геометрической прогрессии MODULE Math; IMPORT In, StdLog; PROCEDURE Calc*; VAR a, b, c, k:INTEGER; flag:BOOLEAN; BEGIN In.Open; In.Int(a); In.Int(b); In.Int(c); flag;=FALSE; k:=2; REPEAT IF (a*k=b) & (b*k=c) & (k<c) THEN flag:=TRUE; END; k:=k+1; UNTIL flag=TRUE; END; IF flag=TRUE THEN StdLog.String('Это члены геометрической прогрессии'); ELSE StdLog.String('Это не члены геометрической прогрессии'); END Calc; END Math. 3) Тут вообще никак не придумаю путь решения Код: Вычислить сумму всех четных чисел из входного потока данных MODULE Math; IMPORT In, StdLog; PROCEDURE Calc*; VAR sum, k, N:INTEGER; In.Open; In.Done; In.Int(N); BEGIN sum:=0; FOR k: a1 TO a[N] DO IF (k MOD 2=0) & In.Done THEN sum:=sum+k; END; END; StdLog.String(sum); END Calc; END Math. 4) Код: Вычислить сумму всех положительных чисел из входного потока данных MODULE Math; IMPORT In, StdLog; PROCEDURE Calc*; VAR N, k, sum, a INTEGER; BEGIN In.Open; In.Int(N); In.Done; sum:=0; WHILE (a[N]>0) & (In.Done) THEN sum:=sum+a[N]; IF (a[k]>0) THEN sum:=sum+N; END; END; StdLog.Int(sum); END Calculation; END Math. 5) Код: Дано число N. Определить, является ли оно степенью двойки MODULE Math; PROCEDURE Calc*; IMPORT In, StdLog; VAR k, N:INTEGER; In.Open; In.Int(N); BEGIN k:=N; WHILE k>2 DO k:=k DIV 2; IF k=2 THEN StdLog.String('N является степенью двойки'); ELSE StdLog.String('N не является степенью двойки'); END; 6) Код: Дано три числа. Выяснить, являются ли они сторонами прямоугольного треугольника MODULE Math; IMPORT In, StdLog; PROCEDURE Calc*; VAR a, b, c INTEGER; BEGIN In.Open; In.Int(a); In.Int(b); In.Int(c); IF (a+b>c) & (a+c>b) & (b+c>a) THEN IF (a*a+b*b>c*c) OR (a*a+c*c>b*b) OR (b*b+c*c>a*a) THEN StdLog.String('Это прямоугольный треугольник'); ELSE StdLog.String('Эти числа не являются сторонами прямоугольного треугольника'); END; END Calc; END Math. 7) Код: Дано три целых числа. Проверить, являются ли они членами арифметической прогрессии
MODULE Math; IMPORT in, StdLog; PROCEDURE Calc*; VAR a, b, c, k:INTEGER; flag:BOOLEAN; In.Open; In.Int(a); In.Int(b); In.Int(c); BEGIN k:=1; REPEAT k:=k+1; IF (a+k=b) & (b+k=c) & (k<=c) THEN flag:=true; UNTIL flag; END; END; IF flag THEN StdLog.String('Это члены арифметической прогрессии'); ELSE StdLog.String('Это не члены арифметической прогрессии'); END Calc; END Math; |
Автор: | snuk [ Четверг, 28 Май, 2015 09:22 ] |
Заголовок сообщения: | Re: Решение задач |
Как в вопросе о массивах предлагали мне пойти дальше, сказав что будет легче, были правы. Вернулся к этим задачам после, легко сам нашел все ошибки |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |