OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 20 Октябрь, 2019 21:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Решение задач
СообщениеДобавлено: Понедельник, 06 Апрель, 2015 14:47 
Аватара пользователя

Зарегистрирован: Вторник, 25 Ноябрь, 2014 08:05
Сообщения: 21
Товарищи, по книге Потопахина разбираюсь с КП, решал задачки, но не уверен что все решил правильно. Если кому не сложно, ткните носом в мои ошибки. Задачки:

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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Решение задач
СообщениеДобавлено: Четверг, 28 Май, 2015 09:22 
Аватара пользователя

Зарегистрирован: Вторник, 25 Ноябрь, 2014 08:05
Сообщения: 21
Как в вопросе о массивах предлагали мне пойти дальше, сказав что будет легче, были правы. Вернулся к этим задачам после, легко сам нашел все ошибки :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB