Главная » Просмотр файлов » Основы программирования

Основы программирования (947332), страница 12

Файл №947332 Основы программирования (Иванова Г.С. Основы программирования) 12 страницаОсновы программирования (947332) страница 122013-09-15СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 12)

3.20. Синтаксичеркаядиаграмма <Операторбезусловной передачиуправления>Целоебез знакаJ ИдентификаторметкиооРис. 3.21. Синтаксическая диаграмма<Объявление меток>69Часть 1. Основы алгоритмизации и процедурное программированиеЧаще всего проблема разработки структурного варианта алгоритма воз­никает при работе с поисковыми циклами.

Как уже упоминалось впараграфе 1.3, в таких циклах просматривают некоторые последовательнос­ти элементов, пока не будет обнаружен элемент с заданными характеристи­ками. Отличительной особенностью поискового цикла является то, что эле­мент с заданными характеристиками в последовательности может отсутство­вать, следовательно, необходимо предусмотреть два варианта выхода из цик­ла: досрочный, когда нужный элемент найден, и обычный - по завершениипросмотра всех вариантов.Пример 3.8. Разработать программу, которая определяет первый отри­цательный элемент последовательности значений функции sin х при задан­ных п, шаге h и диапазоне изменения х [а, Ь].Для получения требуемого результата необходимо последовательно вы­числять значение функции и анализировать его знак. Количество элементовпоследовательности на задан­ном отрезке и с заданным ша­( Начало Jгом можно определить, следо­/ Ввод7вательно, для вычисления зна­/a,b,h /чений функции можно ис­пользовать счетный цикл.

Дляn:=(b-a)/h+lконкретных вариантов исход­х:=аных данных может оказаться,что такого элемента в задан­гК^1:=1,пл\ной последовательности нет.Следовательно, после завер­шения цикла необходимо вы­y:=sin(x)вести соответствующее сооб­щение. Неструктурный вари­дау<0ант алгоритма решения задачипоказан на рис. 3.22.нетБез преобразований этотВывод/x:=x+hвариант алгоритма можно реа­/лизовать только с использова­IZZJbreakнием оператора goto, так какgotoЭлементон позволяет передать управ­не найденление в любое место програм­/ ж1Гмы, а процедура break - толь­ко оператору, следующему по­( Конец )сле цикла (пунктир на рис.3.22). Поэтому реализация сиспользованием break потре­Рис. 3.22. Схема алгоритма поиска первогоотрицательного элемента последовательности бует дополнительной провер­ки (найден ли элемен) на вы(пунктиром выделен поисковый цикл)г7073.

Управляющие операторы языкаВывод/аX, у///"Элемент1// ненайдену'бРис. 3.23. Варианты организации поискового цикла для реализации:д - с использованием процедуры break; б- структурный вариантходе ИЗ цикла, чтобы вывести сообщение о том, что элемент не найден, толь­ко в том случае, если он действительно не найден (рис. 3.23, а)Для построения структурного варианта алгоритма меняем вид цикла:вместо счетного цикла будем использовать цикл-до со сложным условием,объединяющим оба условия выхода. После выхода из цикла неизвестно, покакому из условий цикл завершился, поэтому в данном варианте алгоритматакже приходится проверять, найден нужный элемент или нет (рис.

3.23, б).Рассмотрим соответствующие варианты программ.Вариант с использованием о п е р а т о р а g o t o :Program ex;Var /, n: integer; x,y, a, b, h:real;Label konec;{объявляем метку}BeginWrite (*Введите a,b,h:');Readln(a,b,h);n:=round((b'a)/h-^I.5); {определяем количество элементов}x:=a;for i:=l to n dobeginy:=sin(x);71Часть 1. Основы алгоритмизации и процедурное программированиеify<0 thenbeginWnteLn(y== \y:8:6,' при л:= \x:6:3);goto копес; {управление передаем на конец программы по­сле вывода сообщения о том, что элемент не найден}end;x:=x+h;end;WriteLnCЭлемент не найден,');копес:{место, куда передается управление}EndВариант с использованием п р о ц е д у р ыbreak:Program ex;var in:integer; x,y,a,b,h:real;BeginWrite (*Введите a,b,h:');Readln(a,b,h);n:=round((b-a)/h-^J.5); {определяем количество элементов}x:=a;for i:=l to n dobeginy:=sin(x);ify<0 thenbeginWriteLn(y= ',y:8:6,' при x= \x:6:3);break; {осуществляем досрочный выход из цикла}end;end;{место, куда будет передано управление при выполнении break}ify>-0 then WriteLn('Элемент не найден,');End.Структурный вариант:Program ex;var х,у, а, 6, h:real;BeginWrite СВведите a,b,h: *);Readln(a,b,h);x:=a'h;repeat72J.

Управляющие операторы языкаx:=x+h;y:=-sm(x);until (x+h>b) or (y<0); {комбинированное условие выхода из цикла}ify<0 then WnteLn(y= \ у:8:б, ' при л:=', х:6:3)else WriteLn(*Элемент не найден. *);EndРазрабатывая структурный вариант цикла, мы были вынуждены одно­значно сформулировать условие выхода из цикла и точно определить при­знак, по которому делается вывод о том, найдено ли решение. В то время какреализация «естественного» варианта алгоритма с использованием goto илиbreak требует учета всех возможных последствий неструктурной передачиуправления.

Кроме того, при структурном варианте получена самая простаяпрограмма, что в соответствии с рекомендациями структурного программи­рования существенно сокращаетколичество возможных ошибок.Рассмотрим еще один пример,при разработке программы которо­го теоретически можно использо­вать оператор continue.Пример 3.9. Разработать про­грамму, которая должна вводить исуммировать 10 целых чисел, непревышающих 50. При вводе отри­цательного числа она должна выда­вать предупреждение, игнориро­вать число и ожидать ввода пра­вильного значения.В данном случае в программенельзя использовать счетный цикл,так как количество его повторенийзаранее неизвестно, поэтому ис­пользуем итерационный цикл,конкретно цикл-пока.

Алгоритм ре­шения задачи представлен нарис. 3.24. Этот алгоритм можетбыть реализован с использованиемоператора goto, процедуры continueили оператора ветвления if. По­следний вариант является структур- Рис. 3.24. Схема алгоритма определенияным.суммы 10 чисел, не превышающих 5073Часть I, Основы алгоритмизации и процедурное программированиеРассмотрим эти варианты.Вариант с использованием о п е р а т о р аgoto:Program ex;Var i,s,a:integer;Label cycl;Begini:=J;s:=0;while i<=10 dobeginRead(a);ifa>50 thenbeginWriteLn('Число не должно превышать 50 *);goto cycl; {передача управления на конец цикла}end;s:=s-^a; {операторы, которые необходимо обойти}cycl: end;WriteLn(s);EndВариант с использованием п р о ц е д у р ыcontinue:Program ex;Uses crt;Var i,s,a:integer;Begini:^l;S:=0;while i<=10 dobeginRead(a);ifa>50 thenbeginWriteLn('Число не долэюно превышать 50*);continue; {передаем управление на следующую итерацию}end;s:^s^a;i:=i-^l;end;WriteLn(s);End743, Управляющие операторы языкаСтруктурныйвариант:Program ex;Uses crt;Var hs,a: integer;Begini:-l;S:^0;while i<=10 dobeginRead(a);ifa>50 thenWriteLn('Число не должно превышать 50*)elsebegins:=s-\ra;i:=^i+I;endend;WriteLn(s);EndСтруктурная реализация алгоритма в данном случае является самой про­стой.

Использование вариантов.с оператором goto и процедурой continue нецелесообразно. Примен(ение continue в аналогичных ситуациях может бытьоправдано только при большом количестве пропускаемых операторов.Еще один тип алгоритмов, для реализации которых неопытные програм­мисты обычно используют оператор goto, можно продемонстрировать наследующем примере.Пример ЗЛО. Разработать программу, которая многократно вычисляетзначение функции по вводимому пользователем значению аргумента.

Послевыдачи результата программа должна спрашивать, нужно ли продолжить ра­боту. Если необходимость продолжения работы существует, пользовательвводит «у», иначе - «п». Соответственно в первом случае работа с програм­мой продолжается, а во втором - программа завершает работу.В основе программы лежит циклический процесс.

По типу это цикл-до(рис. 3.25), однако его достаточно часто пытаются реализовать с использова­нием goto. Чтобы не делать таких ошибок, необходимо запомнить следую­щее: если в схеме алгоритма присутствует возврат управления на уже выпол­ненный фрагмент, то необходимо выделить цикл и соответственно опреде­лить условие выхода из цикла.75Часть L Основы алгоритмизации и процедурное программирование(Ниже представлена реализация алгоритма с ис­пользованием цикла-до.Начало j/г /Выводsin(x)////иродолжитьУ/у^"/Ввод/7/__t—/Program ex;Var x:real;ch:char;BeginrepeatWrite('Введите x: ');ReadLn(x); {ни в коем случае не Read, так какдалее идет ввод символа (см. параграф 2.6)}WriteLn(*Результат \ sin(x):8:4);WriteLn(*Пpoдoлэ^cumь? (у/п)*);ReadLn(ch);until ch= *п VEnd.Окончательно можно сделать следующие выводы.1.

Оператор безусловной передачи управленияgoto в программах на Borland Pascal желательно вооб­ще не использовать. Если у вас получился неструктур­Рис. 3.25. Схеманыйалгоритм, при реализации требующий goto, по­алгоритмапробуйтепреобразовать его в структурный. Такое ог­вычисленияраничениесвязано с тем, что использование goto, какзначения функцииправило, приводит к появлению в программе большо­го количества ошибок [3, 4, 9].2. Процедуры неструктурной передачи управления break и continue мо­гут быть полезны, однако при их использовании необходимо четко представ­лять себе, куда будет передано управление. Цикл, в котором использованыэти процедуры - это место повышенной вероятности наличия ошибок. Ондолжен специально тестироваться.Процедуры Halt и Exit обычно используют для аварийного завершениясоответственно программы или подпрограммы, поэтому их присутствие впрограмме практически не влияет на ее структурность.Задания для самопроверкиЗадание 1.

Разработайте профамму, которая определяет сумму первых трехотрицательных чисел последовательности значений, рассчитанных по формуле у^ == X - sin X при заданных диапазоне [а,Ь] изменения х и шаге h.Задание 2, Разработайте программу, которая строит таблицу значений функцииу = (in х) / tg X при заданных диапазоне [а, Ь] изменения х и шаге h. Если значениефункции в очередной точке не существует, то в соответствующей строке таблицывыведите сообщение «значение не существует».764. СТРУКТУРНЫЕ ТИПЫ ДАННЫХДостаточно часто возникает необходимость программирования обработки одно­типных данных: таблиц, текстов, множеств и т.д.

Характеристики

Тип файла
PDF-файл
Размер
13,06 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее