Схема алгоритма решения задачи по ГОСТ 19.701_90

Nbsp; Министерство образования Республики Беларусь Учреждение образования БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ     Факультет компьютерных систем и сетей Кафедра программного обеспечения информационных технологий Дисциплина: Основы алгоритмизации и программирования (ОАиП)    ОТЧЕТ по лабораторной работе №2   Тема работы: Работа с числами                Выполнил              студент: гр.751003Гринчик В. В.                Проверил:                                                                  Фадеева Е.П.    Минск 2017   Содержание 1 Постановка задачи. 4 2 Текстовый алгоритм решения задачи. 5 3 Структура данных. 7 4 Схема алгоритма решения задачи по ГОСТ 19.701_90. 8 Приложение А.. 13 ПриложениеБ. 17    

Постановка задачи

Составное число называется числом Смита, если сумма его цифр равна сумме цифр всех чисел, образующихся разложением исходного числа на простые множители. Число Смита называется Супер-Числом Смита, если сумма его цифр является числом Смита. Разработать алгоритм и программу поиска супер-числа Смита с номером N, являющегося полным квадратом. (Число называется полным квадратом, если корень квадратный из него является простым числом).

 

Примечания:

– N является целым положительным числом.

 

Текстовый алгоритм решения задачи

Таблица 1 – Алгоритм решения

Номер шага Назначение шага
1 Ввод n
2 Smit:=3
3 i:=1
4 Начало цикла А.Проверкавыполненияусловия (i<=n). Если условие истинно, то идти к шагу5, иначе – к шагу53
5 IsSuperSmit:=false
6 Начало цикла B.Проверкавыполненияусловия (IsSuperSmit =false). Если  условие истинно, то идти к шагу 7, иначе – к шагу52
7 Smit:=Smit+1
8 SumCifr:=0
9 Chislo:=Smit
10 Начало цикла C1. Проверкавыполненияусловия (Chislo> 0). Если условие истинно, то идти к шагу 11, иначе – к шагу14
11 SumCifr:=SumCifr+(Chislo mod 10)
12 Chislo:=Chislo div 10
13 Конец цикла C1. Идти к шагу 10
14 Mnozh:=2
15 Начало цикла D. Проверкавыполненияусловия (SmitmodMnozh<> 0). Если условие истинно, то идти к шагу 16, иначе – к шагу18
16 Mnozh:=Mnozh+1
17 Конец цикла D. Идти к шагу 15
18 Проверкавыполненияусловия (Smit = Mnozh*Mnozh). Если условие истинно, то идти к шагу 19, иначе – к шагу50
19 SumCifrMnozh:=0
20 Chislo:=Mnozh
21 Начало цикла C2. Проверкавыполненияусловия (Chislo> 0). Если условие истинно, то идти к шагу 22, иначе – к шагу25
22 SumCifrMnozh:=SumCifrMnozh +(Chislo mod 10)
23 Chislo:=Chislo div 10
24 Конец цикла C2. Идти к шагу 21
25 SumCifrMnozh:=SumCifrMnozh*2
26 Проверкавыполненияусловия (SumCifr = SumCifrMnozh). Если условие истинно, то идти к шагу 27, иначе – к шагу50
27 Smit_SumCifr:=SumCifr
28 SumCifr:=0
29 Chislo:=Smit_SumCifr

Продолжение – Таблицы 1

Номер шага Назначение шага
30 Начало цикла C3. Проверкавыполненияусловия (Chislo> 0). Если условие истинно, то идти к шагу 31, иначе – к шагу34
31 SumCifr:=SumCifr+(Chislo mod 10)
32 Chislo:=Chislo div 10
33 Конец цикла C3. Идти к шагу 30
34 Mnozh:=2
35 Kol:=0                       
36 SumCifrMnozh:=0
37 Начало цикла E. Проверкавыполненияусловия (Smit_SumCifr> 1). Если условие истинно, то идти к шагу 38, иначе – к шагу48
38 Проверкавыполненияусловия (Smit_SumCifrmodMnozh = 0). Если условие истинно, то идти к шагу39, иначе – к шагу46
39 Chislo:=Mnozh
40 Начало цикла C4. Проверкавыполненияусловия (Chislo> 0). Если условие истинно, то идти к шагу 41, иначе – к шагу44
41 SumCifrMnozh:=SumCifrMnozh +(Chislo mod 10)
42 Chislo:=Chislo div 10
43 Конец цикла C4. Идти к шагу 40
44 Kol:=Kol+1
45 Smit_SumCifr:=Smit_SumCifr div Mnozh. Идти к шагу47
46 Mnozh:=Mnozh+1
47 Конец цикла E. Идти к шагу 37
48 Проверкавыполненияусловия((SumCifr= SumCifrMnozh) and (Kol> 1)). Если условие истинно, то идти к шагу 49,  иначе – к шагу50
49 IsSuperSmit:=true
50 Конец цикла B. Идти к шагу 6
51 i:=i+1
52 Конец цикла А. Идти к шагу 4
53 Вывод Smit
54 Останов

 

 


 

Структура данных

Таблица 3 – Данные

Элементы данных Рекомендуемый тип Назначение
n Integer Номер искомого числа
Smith Integer Хранение проверяемого числа
Smit_SumCifr Integer Хранение суммы цифр проверяемого числа, используется при проверке на то, является ли сумма цифр числом Смита
Chislo Integer Буферная переменная, используемая при расчете суммы цифр некоторого числа
Mnozh Integer Буферная переменная, хранящая значение одного из простых множителей некоторого числа
SumCifr Integer Буферная переменная, хранящая сумму цифр некоторого числа
SumCifrMnozh Integer Буферная переменная, хранящая сумму цифр простых множителей некоторого числа
Kol Byte Счетчик количества простых множителей некоторого числа
IsSuperSmit Boolean Логическая переменная, обозначающая, что проверяемое число это супер-число Смита являющееся полным квадратом
i Byte Счетчик цикла

 

 


 

Схема алгоритма решения задачи по ГОСТ 19.701_90

Рисунок 1– Графическая схема алгоритма(часть 1)

Рисунок 2– Графическая схема алгоритма(часть 2)

Рисунок 3– Графическая схема алгоритма(часть 3)

Рисунок 4– Графическая схема алгоритма(часть 4)

 

 

Рисунок 5– Графическая схема алгоритма(часть 5)

Приложение А

(обязательное)

Исходный код программы

 

Program Вариант_20;

{ Краткое условие.

Дан номер супер-числаСмита,

являющегося полным квадратом,

необходимо найти это число. }

 

{$APPTYPE CONSOLE} // консольная программа

 

Uses

{Объявление библиотек}

SysUtils, // системная библиотека

windows; // библиотека для работы с консолью

 

Var

{Объявление переменных}

N, Smit, Smit_SumCifr, Chislo: Integer;

Mnozh, SumCifr, SumCifrMnozh: Integer;

IsSuperSmit:Boolean;

i,Kol:byte;

 

Begin

Try

 

{Настройка параметров консоли}

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

 

{Ввод данных}

write('Введите номер искомого числа(0<n<13): ');

readln(n);

 

{Проверка входных данных}

if (n <= 0) then writeln('Некорректныеданные.')

else

begin

 

{Поиск Супер-Числа Смита с номером n,

являющегося полным квадратом (цикл A)}

Smit:=3;

for i:= 1 to n do

begin

 

{Поиск i-того Супер-Числа Смита,

являющегося полным квадратом (цикл B)}

IsSuperSmit:=false;

while not(IsSuperSmit) do

begin

Smit:=Smit+1;//задание проверяемого числа

 

{ Вычисление суммы цифр

       проверяемого числа (цикл С1) }

SumCifr:=0;

     Chislo:=Smit;

while Chislo > 0 do

begin

SumCifr:=SumCifr+(Chislo mod 10);

Chislo:=Chislo div 10;

end;

 

{ Поиск простых множителей

       проверяемого числа (цикл D) }

Mnozh:=2;

while (Smit mod Mnozh<> 0) do

       Mnozh:=Mnozh+1;

 

{ Проверка на то является ли

       проверяемое число полным квадратом }

ifSmit = Mnozh * Mnozh then

begin

 

{ Вычисление суммы цифр простых

множителей проверяемого числа (цикл С2) }

SumCifrMnozh:=0;

       Chislo:=Mnozh;

while Chislo > 0 do

begin

SumCifrMnozh:=SumCifrMnozh+(Chislo mod 10);

         Chislo:=Chislo div 10;

end;

SumCifrMnozh:=SumCifrMnozh*2;

 

{ Проверка на то является ли

         проверяемое число - числом Смита }

if (SumCifr = SumCifrMnozh) then

begin

{ Проверка на то является ли найденное

           число Смита - Супер-Числом Смита }

 

{ Вычисление суммы цифр нового числа

(новое число - это сумма цифр

            проверяемого числа) (цикл С3) }

Smit_SumCifr:=SumCifr;//получение новогочисла

SumCifr:=0;

         Chislo:=Smit_SumCifr;

while Chislo > 0 do

begin

SumCifr:=SumCifr+(Chislo mod 10);

Chislo:=Chislo div 10;

end;

 

{ Поиск суммы цифр простых множителей

           нового числа и их количества (цикл E) }

Mnozh:=2;

Kol:=0;

SumCifrMnozh:=0;

while Smit_SumCifr > 1 do

begin

if Smit_SumCifr mod Mnozh = 0 then

begin

 

{ Увеличение суммы цифр

множителей (цикл C4) }

Chislo:=Mnozh;

while Chislo > 0 do

begin

SumCifrMnozh:=SumCifrMnozh+(Chislo

mod 10);

               Chislo:=Chislo div 10;

end;

 

             { Подсчет количества множителей }

Kol:=Kol+1;

 

Smit_SumCifr:=Smit_SumCifr div Mnozh;

end

elseMnozh:=Mnozh+1;

end;

 

{ Проверка на то является ли

  новое число - Числом Смита }

if (SumCifr = SumCifrMnozh) and

 (Kol> 1) then

IsSuperSmit:=true;

 

end;

end;

 

end;

end;

 

{ Вывод найденного числа }

writeln('Найденное число:',Smit);

 

end;

 

readln;

 

{ Главная проверка корректности данных }

Except

on E: Exception do

begin

writeln('Некорректныеданные.');

readln;

end;

end;

 

End.

 

ПриложениеБ

(обязательное)

Тестовые наборы

 

Группа тестов 1

 

Тестовые ситуации: Наличие ответа

 

Тест 1.1

Тестовая ситуация:N<=10

Исходные данные: 7

Ожидаемый результат: 124609

Полученный результат:

Рисунок 6—Тест 1.1


Тест 1.2

Тестовая ситуация:N>10[1]

Исходные данные: 11

Ожидаемый результат: 1190281

Полученный результат:

Рисунок 7—Тест 1.2

Группа тестов 2

 

Тестовые ситуации: Некорректные данные

Тест 2.1

Тестовая ситуация: Ввод отрицательного числа

Исходные данные:-9

Ожидаемый результат:Некорректные данные.

Полученный результат:

Рисунок 8—Тест 2.1

Тест 2.2

Тестовая ситуация: Ошибка ввода

Исходные данные: 1o

Ожидаемый результат:Некорректные данные.

Полученный результат:

Рисунок 9—Тест 2.2

 


[1] При N>10 программа работает больше двух минут


Дата добавления: 2018-02-28; просмотров: 619; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!