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



Последовательные регистры или, как их еще называют, регистры сдвига (рис. 50) выполняются на основе триггеров с динамическим синхровходом, (т.е. управляющий сигнал объединен).

 

16) Программирование в узком и широком смысле. Основные разделы программирования. Программа как «алгоритмы + структура данных». Обоснование. Практические примеры, подтверждающие данное утверждение.

Ø Программирование — процесс создания компьютерных программ с помощью языков программирования. В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. Под программированием также может пониматься разработка логической схемы для ПЛИС, а также процесс записи информации в ПЗУ. В более широком смысле программирование — процесс создания программ, то есть разработка программного обеспечения.

Ø Разделы:

Ø Понятие целочисленного программирования

Ø Понятие булевского программирования

Ø Понятие стохастического программирования

Ø Понятие выпуклого программирования

Ø Понятие квадратичного программирования

Ø Понятие геометрического программирования

Ø Понятие дискретного программирования

Ø Понятие динамического программирования

Ø

Ø Алгоpитм - заранее заданное понятное и точное пpедписание возможному исполнителю совеpшить определенную последовательность действий для получения решения задачи за конечное число шагов. Это — не математическое, а логическое определение алгоритма, дающее его содержательно-логическую суть.

Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данныхпредоставляет некоторый набор функций, составляющих её интерфейс.

Синтез этих представлений на основе логических убеждений дадут положительный вердикт во время устного ответа на экзамене.

 

 

18) Суперпозиция основных алгоритмических структур. Разветвляющиеся алгоритмы. Условный оператор полной и неполной структуры, оператор выбора – основные особенности и примеры работы с ними. Вложенный условный оператор. Понятие «условного» и «безусловного» перехода.

 

19) Суперпозиция основных алгоритмических структур. Организация циклических структур. Общая структура цикла. Вложенные циклы. Понятия «детерминированного»,«итерационного» цикла, «цикла с предусловием», «цикла с постусловием». Моделирование цикла repeat с помощью цикла while. Применение оператора goto для реализации различных циклических структур.

Все базовые и дополнительные алгоритмические структуры можно комбинировать одну с другой за счет их суперпозиций (склейка, вставка одной в др.). Это применяется для организации сложного алгоритма или для решения задач.

Использование лишь этих структур позволяет реализовать сколь угодно сложный алгоритм без использования оператора безусловного перехода, что отражает важнейший принцип структурного программирования.

Циклические структуры.

ü Итерационный цикл - оператор цикла, для которого число повторений тела цикла заранее неизвестно. В итерационных циклах на каждом шаге вычислений происходит последовательное приближение и проверка условия достижения искомого результата. Выход из итерационного цикла осуществляется в случае выполнения заданного условия. Различают итерационные циклы с предусловиями и с постусловиями.

Ø Оператор цикла с предусловием(цикл «Пока»)WHILEявляется наиболее общим по сравнению с другими конструкциями и имеет формат:

WHILE<выражение булёвского типа>DO<оператор>;

Выполняется данный оператор так: сначала вычисляется значение булёвского выражения (т.е. условие, стоящее после слова WHILE, проверяется на истинность). Если оно имеет значениеTRUE, то выполняется оператор, стоящий после словаDO, затем условие проверяется вновь и т.д. Как только на очередном шаге условие не выполняется (значение булёвского выражения становится равнымFALSE), то выполнение оператора цикла прекращается. Если выполняемый оператор не изменяет значения переменных, входящих в условие, то условие всегда будет истинным, и цикл будет выполняться вечно, при этом говорят, что программа зацикливается. Если же при первой проверке условия оно сразу оказывается ложным, то оператор цикла не выполняется вообще.

Если в цикле нам необходимо выполнять больше, чем один оператор, то применяется составной оператор, т.е. несколько операторов заключаются в операторные скобки BEGIN…END.

При построении программ со структурой цикла WHILE:

1) начальное значение логического выражения должно быть определено перед вхождением в цикл, т.е. перед WHILE;

2) последовательность выполняемых операторов в теле цикла должна быть логически связанной и содержать хотя бы один оператор, изменяющий значение параметра цикла, иначе цикл будет продолжаться бесконечно;

3) логическое выражение в заголовке цикла WHILE, чтобы цикл закончился, должно принять значениеFALSE.

Ø В операторе REPEAT(цикл «До») используется так называемое постусловие, т.е. значение логического выражения, управляющее выходом из цикла, проверяется после выполнения операторов, содержащихся внутри оператораREPEAT. Оператор имеет вид:

REPEAT

<последовательность операторов>

UNTIL<выражение булёвского типа>;

На первом шаге цикла операторы, заключенные между REPEATиUNTIL, выполняются в любом случае, дальше же цикл будет повторяться, пока значение булёвского выражения ложно. То есть цикл закончится, когда оно станет истинным. В этом случае цикл заканчивает, и происходит переход на оператор, следующий заREPEAT. Операторы внутри циклаREPEATвыполняются хотя бы один раз, поскольку условие выхода из цикла проверяется только после его очередного выполнения.

При построении циклов с использованием REPEATэтому оператору должен предшествовать оператор присваивания начального значения параметру цикла.

В данном операторе слова REPEAT и UNTILслужат операторными скобками, и BEGIN…END использовать не требуется.[ЛЕ4]

ü Детерминированные циклы.

В детерминированных циклах число повторений цикла известно до того, как будет выполняться первый оператор внутри цикла, и внутри цикла нет процесса, который вызвал бы изменение этого числа.

Ø Синтаксическая запись цикла с параметром(цикл «Для») имеет два варианта:

1) с возрастанием переменной цикла:

FOR<идентификатор> := <выражение>TO<выражение>DO<оператор>;

2) с убыванием переменной цикла:

FOR<идентификатор> := <выражение>DOWNTO<выражение>DO<оператор>;

Идентификатор и оба выражения должны быть одного и того же порядкового типа.

Оба выражения вычисляются перед выполнением оператора цикла и по стандарту не должен изменяться внутри оператора цикла.

После окончания цикла значение параметра цикла не определено, т.е. нельзя считать, что значение параметра равно значению второго выражения.

Значения выражений определяются один раз, при входе в оператор FOR, и сохраняются на протяжении всего процесса выполнения. После задания переменной цикла присваивается начальное значение. Затем происходит проверка, не превосходит ли содержимое переменной цикла конечного значения. Если не превосходит, выполняются операторы, образующие тело цикла. Далее значение переменной цикла увеличивается на единицу, и процесс проверки и выполнения операторов повторяется. Так происходит до тех пор, пока проверка не даст результатаTRUE. В этом случае цикл завершается, и осуществляется переход на оператор, следующий заFOR.

Поскольку оператор цикла FORсам изменяет значения переменой цикла, её нельзя менять другими способами, например, присваиванием ей какого-либо значение в теле цикла.

Оператор цикла с параметром следует применять, если заранее известно, сколько раз нужно выполнить некоторый оператор. Параметр цикла может являться просто счётчиком, контролирующим количество повторений оператора, а может использоваться в самом операторе (с учётом того факта, что на каждом шаге цикла параметр цикла на 1 отличается от предыдущего своего значения).[ЛЕ5]

Моделирование цикла repeat с помощью цикла while.

Т.к. цикл репит проверяет условие только после первого прохода цикла, перед циклом искусственно необходимо проверить условие.


 


Readln(a);

while a>6 do begin

sum+=a;

a-=1;

end;

 

 

Readln(a);

If a>6 then

Repeat

Sum+=a;

a-=1;

until

a<=6;


 

Оператор безусловного перехода goto используется в одной из трех форм:

 

goto метка;

 

goto case константное_выражение;

 

goto default;

 

Оператор goto метка передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, что и оператор перехода. Использование этой формы оператора безусловного перехода оправдано в двух случаях:

 

□ принудительный выход вниз по тексту программы из нескольких вложенных

циклов или переключателей;

 

□ переход из нескольких точек функции вниз по тексту в одну точку (например,

если перед выходом из функции необходимо всегда выполнять какие-либо

действия).

 

В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование оператора goto приводит только к усложнению структуры программы и затруднению отладки. Применение этого оператора нарушает принципы структурного и модульного программирования, по которым все блоки, образующие программу, должны иметь только один вход и один выход. [ЛЕ6]

21) Примеры использования циклов для реализации стандартных алгоритмов (вычисления n!, n!!,a^n , табулирование функции, вычисление суммы цифр целого числа, определение является ли заданное число простым, разложение целого числа на простые сомножители).

n!

Begin

write('Введите n: ');

var n := ReadInteger;

 

var i: integer;

var p:=1;

for i:=1 to n do

p *= i;

 

writeln('Факториал равен ', p);

end.

n!!

Begin

write('Введите n: ');

var n := ReadInteger;

 

var p := 1;

while n>=2 do

Begin

p *= n;

n -= 2;

end;

 

writeln('Двойной факториал равен ', p);

end.

 

a^n

Begin

write('Введите a: ');

var a := ReadInteger;

write('Введите n: ');

var n := ReadInteger;

 

var i: Integer;

var p:=1;

for i:=1 to n do

p *= a;

 

writeln('a^n=', p);

end.

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

begin

write('Введите целое положительное число m: ');

var m := ReadInteger;

assert(m > 0);

 

var s := 0;

while m > 0 do

begin

s += m mod 10;

m := m div 10;

end;

 

writeln('Сумма цифр числа m равна ', s);

end.

Является ли число N>1 простым

Begin

write('Введите целое число N (N>1): ');

var N := ReadInteger;

assert(N>1);

 

var IsSimple := True;

for var i := 2 to round(sqrt(N)) do

if N mod i = 0 then

Begin

IsSimple := False;

break;

end;

 

if IsSimple then

writeln('Число ', N, ' является простым')

else writeln('Число ', N, ' является составным');

end.


Дата добавления: 2019-07-15; просмотров: 311; Мы поможем в написании вашей работы!

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






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