Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Цикл с параметром в схемах алгоритма
По ГОСТ для обозначения цикла с параметром используется следующая структура изображенная на рис. 15.10. Задача Для заданного года G определить количество дней в каждом месяце. Математическая модель Современный календарь действует с 1600 года нашей эры. " i=(janvar, fevral, mart, aprel, maj, iun, iul, avgust, sentjabr, oktjabr, nojabr, dekabr) необходимо вычислять d - количество дней в i-oм месяце заданного года G. Метод решения Вне зависимости от года G (год должен быть > =1600 ) " i: =janvar..dekabr: выбор по i из вариантов Год G считается високосным, если он кратен 4 и не кратен 100 или кратен 400 (каждый четвертый год - високосный, за исключением каждого сотого года; каждый четырехсотый год также високосный). Условие високосности: G mod 4 = 0 & G mod 100 < > 0 V G mod 400 = 0 Информационная модель Таблица 15.2. Информационная модель
Примечания: 1)выходные данные - текст с указанием названия месяца и количества дней; 2) type mes=(janvar, fevral, mart, aprel, maj, iun, iul, avgust, sentjabr, oktjabr, nojabr, dekabr) Алгоритмическая модель Схема алгоритма решения задачи приведена на рис. 15.11. Программная модель (текст на языке Паскаль) program kalend; type mes=(janvar, fevral, mart, aprel, maj, iun, iul, avgust, sentjabr, oktjabr, nojabr, dekabr); var G: word; {заданный год} i: mes; {текущее значение месяца} vvod: Boolean; {признак правильности ввода номера года} begin
{ввод исходных данных с контролем правильности ввода} repeat writeln('Введите год'); {$I-} {$R-} readln(G); {$I+} {$R+} if (ioresult< > 0) or(G< 1600) then begin writeln('Ошибка в номере года'); vvod: =false end else vvod: =true until vvod;
{решение математической модели с выводом результата} writeln('В ', G, ' году: ');
for i: =janvar to dekabr do begin
{вывод названия месяца} case i of janvar: write('январь - '); fevral: write('февраль - '); mart: write('март - '); aprel: write('апрель - '); maj: write('май - '); iun: write('июнь - '); iul: write('июль - '); avgust: write('август - '); sentjabr: write('сентябрь - '); oktjabr: write('октябрь - '); nojabr: write('ноябрь - '); dekabr: write('декабрь - ') end;
{вывод количества дней} case i of
janvar, mart, maj, iul, avgust, oktjabr, dekabr: write('31 день'); aprel, iun, sentjabr, nojabr: write('30 дней'); Рис. 15.11. – Схема алгоритма fevral: if (G mod 4 =0) and (G mod 100 < > 0) or (G mod 400 =0) then write('29 дней') else write ('28 дней');
end;
{вывод окончания фразы} case i of
janvar..nojabr: writeln('; ');
dekabr: writeln('.')
end end {for i} end. Примечание: обратите внимание, что алгоритмическая и программная модели имеют незначительные различия в организации вывода результирующей фразы. Алгоритм вычисления таблицы умножения Математическая модель i=1(1)10: j=1(1)10: y=i*j
Метод решения Задача сводится к вычислению таблицы значений функции от двух аргументов. Причем в данной задаче значения аргументов принадлежат диапазону значений от 1 по 10, то есть для перебора аргументов можно использовать циклы с параметром: " i=1..10: " j=1..10: y=i*j Информационная модель Входные данные - отсутствуют; выходные данные - последовательно все значения y; промежуточные переменные - значения аргументов вычисляемой функции i, j, Алгоритмическая модель Схема алгоритма вычисления таблицы умножения приведена на рис. 15.12. Программная модель program tabumn; var i, j, y: integer; begin for i: =1 to 10 do begin {вычисление одного столбца - при фиксированном значении i} for j: = 1 to 10 do Рис. 15.12. – Схема алгоритма вычисления таблицы умножения
begin y: =i*j; writeln (i, '*', j, '=', y) end; {for j} {" остановка" при просмотре результатов - до тех пор, writeln(' Для продолжения нажмите Enter') readln end {for i} end. Два других варианта решения этой задачи (с циклами пока и повторять до): Вариант с циклом пока Метод решения i: =1 пока i 10: Алгоритмическая модель Рис. 15.13. – Схема алгоритма с циклом с предусловием Программная модель program tabumn; var i, j, y: integer; begin i: =1; while i< = 10 do begin {вычисление одного столбца - при фиксированном значении i} j: = 1; while j< =10 do begin y: =i*j; writeln (i, '*', j, '=', y); j: =j+1 end; {while j} {" остановка" при просмотре результатов - до тех пор, writeln(' Для продолжения нажмите Enter') readln; i: =i+1 end {while i} end.
Вариант с циклом повторять Метод решения i: =1 повторять
до i> 10 Программная модель program tabumn; var i, j, y: integer; begin i: =1; repeat {вычисление одного столбца - при фиксированном значении i} j: = 1; repeat y: =i*j; writeln (i, '*', j, '=', y); j: =j+1 until j> 10; Алгоритмическая модель Рис. 15.14. – Схема алгоритма с циклом с постусловием {" остановка" при просмотре результатов - до тех пор, writeln(' Для продолжения нажмите Enter') readln; i: =i+1 until i> 10 end.
Алгоритм накопления суммы Такой алгоритм часто встречается в нашей повседневной жизни, например, подсчет продавцом стоимости товаров. Технология подсчета сумму стоимости заключается в том, что в начале устройство, с помощью которого ведется подсчет стоимости должно находиться в исходном состоянии (если подсчет ведется с помощью счет, то они должны быть " сброшены"; если с помощью калькулятора, то он должен быть " обнулен" - на индикаторе должен быть 0). В вычислительной технике устройство, в котором накапливается сумма, называется сумматором. Поэтому в алгоритме должна быть переменная - сумматор, которая в начале алгоритма должна быть обнулена. Затем последовательно к сумматору добавляются значения суммируемых величин - происходит процесс суммирования или накопления суммы. После выполнения этих действий в сумматоре находится общая сумма. Популярное:
|
Последнее изменение этой страницы: 2016-07-12; Просмотров: 666; Нарушение авторского права страницы