Лекция 7 (1160840), страница 2

Файл №1160840 Лекция 7 (Лекции (2009) (Саша Федорова)) 2 страницаЛекция 7 (1160840) страница 22019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

С точки зрения семантики разницы нет, однако есть небольшая разница в синтаксисе. Язык командного интерпретатора SHELL явный терминал (done, if, fi)

Начало – done if

Конец - done fi

PROCEDURE p

Блок p

END p.

Если END забыт, разобраться в коде намного проще.

Рассмотрим все операторы поочередно.

Ветвления

Простое ветвление

Простое ветвление (в языке программирования без явных терминаторов):

Простое ветвление (в языке программирования с явными терминаторами)

Такая конструкция впервые появилась в Алгол-60. Заметим неприятность: конструкцию, например, вот такую:

if(B1) if(B2) s1; else s2;

можно понимать двояко. Полагается записывать такого рода вещи с отступами:

if(B1)

if(B2)

s1;

else

s2;

В языках с явными терминаторами такой проблемы не будет:

if B1 then

if B2 then

s1 end if

else

s2

end if

Многовариантное ветвление

На Си-подобном языке подобное ветвление будет выглядеть вот так:

Последовательный опрос вариантов:

if(B1)

s1

else if(B2)

s2;

else if(B3)

s3;

else sN;

Подчеркиваем синтаксическую вложенность:

if(B1)

s1

else

if(B2)

s2;

else

if(B3)

s3;

else sN;

Первый вариант, как показывает практика, воспринимается легче.

А записывать такую конструкцию на Modula-2 «неприятно»:

IF B1 THEN

S1

ELSE IF B2 THEN

S2

ELSE IF B3 THEN

S3

ELSE

S4

ENDIF ENDIF ENDIF

Оператор выбора

Оператор выбора добавляют практически во все известные языки программирования (несмотря на то, что его можно заменить многочисленными if-ами ).

Modula-2

CASE expr OF

Список значений1: s11; s12; … ; s1N |

Список значений2: s21; s22; … ; s2N |

….еще списки значений

ELSE ……

END

Ввиду возникающей синтаксической неоднозначности со списком значений вводится спецсимвол – вертикальная черта |

В языке Ада чуть более сложный синтаксис:

case expr of

when список1 =>

s11; s12; ….

when список2 =>

s21; s22; ….

……………………………………..

when other =>

………………………

end case

Когда список значений достаточно «плотный», можно запрограммировать задачку гораздо более эффективно (не на основе многовариантного ветвления, а на основе оператора перехода).

Для любого алгоритма, как мы знаем, необходимы операторы

-присваивания

-последовательного выполнения

-циклования

Ну и понятно, что в языке должно присутствовать понятие выражения.

Теорема

ЛЮБУЮ управляющую схему можно преобразовать в ЭКВИВАЛЕНТНУЮ ей схему, содержащую ТОЛЬКО 3 вышеперечисленных элемента.

Оператор «переключателя»

switch(expr) S

Чаще всего S – это блок, внутри которого находятся метки особого рода:

case конструкции;

default: …

Замечание(!)

Если после каждого case не делать break, то выполнение будет продолжаться. И не удивляйтесь, если в этом случае выполнятся другие case.

switch(e){

case 1: s1;// тут надо все время делать break! Не поставить его сознательно можно очень редко.

……………….

case 2: s2;

}

Самое оригинальное решение этой проблемы было принято в Java: если break не поставить, то компилятор выругается. А если вдруг надо выйти из переключателя, придется ставить переход к другому case,

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

Циклы

Виды циклов:

  • «Пока» (while)

  • «До» (until, do while)

  • «for »

  • Управляемые пользователем

Примеры цикла while:

while B do S

while(B) S

while B loop ……… endloop

WHILE B DO ………… END

REPEAT

……

UNTIL

В Си-подобных языках:

do{S} while(B);

do S while(B);

//S – один оператор, B – условие продолжения

Смысл do –while – чисто для удобства

Циклы, управляемые пользователем – лучше всего они выглядят на Ада и Модула-2

Ада:

loop

endloop

Модула-2

LOOP

............

END

Си:

while(1) S;

for(;;)S

Циклы, управляемые пользователем – это бесконечные циклы, они обладают большим практическим смыслом. С точки зрения современных систем бесконечные циклы – не грех. Пример: сервисы, режим ожидания. Ведь хороший сервис работает вечно

Вспомним главный принцип структурного программирования: программа должна иметь один вход и один выход, в коде не должно быть оператора перехода. А в бесконечных циклах пользователь сам «управляет», когда выходить из цикла. Существует, кстати, оператор EXIT(Modula-2, ADA), который можно применять только внутри цикла.

Только такая конструкция:

If B then exit; end if;

//немного раздражает...:((

Был придуман синоним данной конструкции:

when B => exit;

Exit, break, continue – все это – ограниченная форма goto.

Неплохой выход из данной проблемы – выбросить исключение. Однако любое исключение – авария, и оно сильно усложняет проблему. Намного проще написать:

if(!B){обработка; return;},

Такие конструкции позволяют выбросить оператор goto.

Оберон и цикл «for »

1988 год – Никлаус Вирт в своей статье «покончил» с циклом for. В Обероне for не было.

1993 год. - Оберон-2 – цикл «for» вернулся.

Начиная с Алгол-60, цикл for есть практически во всех уважающих себя языках программирования(С, С++, C#, Java, JavaScript).

Синтаксис:

for(e1; e2; e3) S;

В любом языке e1, e2, e3 могут отсутствовать.

Пример:

for(;e2;) – получился цикл while

for(;;) - получился цикл, управляемый пользователем

Еще одна интересная форма цикла for, обнаруженная в современных языках: foreach.

for v in диапазон(L..R) loop ….. endloop

В Аде v последовательно пробегает значения от L до R.

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

Представим себе массив:

int[ ] a = new int[N];

for(int i=0; i<a.Length; i++)

{

Что-то делаем с a[i]………

}.

Не лучший способ записи. Результат может зависеть от порядка промотра.

a[i] – это всегда некоторое вычисление. Что есть в C#, а в С не будет никогда? Конечно, проверка выхода за границу массива.

foreach(double v in a)

{

.............

};//управляющая переменная v просто последовательно принимает значение элементов массива.

В C# общий вид конструкции таков:

foreach(T x in C) {……………..}

В общем случае контейнер языка C# - это класс, поддерживающий интерфейс IEnumerable. И компилятор будет обрабатывать конструкции подобных классов специфичесим образом.

GetEnumerator(); //видает iterator, нужный для пробегания по элементам, а не по индексам.

Также у класса поддерживающего интерфейс IEnumerable, есть свойства Current и метод MoveNext()

Создатели языка Java сделали еще метод hasNext().

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

Тип файла
Документ
Размер
115,5 Kb
Тип материала
Высшее учебное заведение

Список файлов лекций

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