согласно исследованиям руководитель от 50 до 90% всего времени тратит на коммуникации. это кажется невероятным, но становится понятным, если учесть, что руководитель занимается этим, чтобы реализовать свои роли в межличностных отношениях, информационном обмене и процессах принятия решений, не говоря об функциях планирования, организации, мотивации и контроля. именно потому, что обмен информацией встроен во все основные виды деятельности, мы называем коммуникации связующим процессом.
поскольку руководитель исполняет три свои роли и осуществляет четыре основные функции, с тем, чтобы сформулировать цели организации и достичь их, качество обмена информацией может прямо влиять на степень реализации целей. это означает, что для успеха индивидов и организаций необходимы эффективные коммуникации.
хотя общепризнанно, что коммуникации имеют огромное значение для успеха организаций, опросы показали, что 73% американских, 63% и 85% японских руководителей считают коммуникации главным препятствием на пути достижения эффективности их организациями. согласно еще одному опросу примерно 250 тыс. работников 2000 самых разных компаний, обмен информацией представляет одну из самых сложных проблем в организациях. эти опросы показывают, что неэффективные коммуникации - одна из главных сфер возникновения проблем. глубоко осмысливая коммуникации на уровне личности и организации, мы должны учиться снижать частоту случаев неэффективных коммуникаций и становиться лучшими, более эффективными менеджерами. эффективно работающие руководители - это те, кто эффективны в коммуникациях. они представляют суть коммуникационного процесса, хорошо развитым умением устного и письменного общения и понимают, как среда влияет на обмен информацией. начнем с анализа коммуникационного процесса в организациях. размышляя об обмене информацией в организации, обычно думают о людях, которые говорят в процессе личного общения или в группах на собраниях, разговаривают по телефону или читают и составляют записки, письма и отчеты. хотя на эти случаи приходится основная часть коммуникаций в организации, коммуникации представляют собой всепроникающий и сложный процесс
"While" переводится с английского как "пока". Но не в смысле "до свидания", а в смысле "пока имеем это, делаем то".
Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:
while логическое_выражение { выражение 1; … выражение n; }
total = 100 i = 0 while i < 5: n = int(input()) total = total - n i = i + 1 print("Осталось", total)
Сколько раз "прокрутится" цикл в этой программе, то есть сколько итераций он сделает? ответ: 5.
Сначала переменная i равна 0. В заголовке цикла проверяется условие i < 5, и оно истинно. Тело цикла выполняется. В нем меняется значение i, путем добавления к нему единицы.
Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.
Два меньше пяти. Тело цикла выполняется третий раз. Значение iстановится равным трем.
Три меньше пяти. На этой итерации iприсваивается 4.
Четыре по прежнему меньше пяти. К iдобавляется единица, и теперь ее значение равно пяти.
Далее начинается шестая итерация цикла. Происходит проверка условия i < 5. Но поскольку теперь оно возвращает ложь, то выполнение цикла прерывается, и его тело не выполняется.
"Смысловая нагрузка" данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for, который так и называется: "цикл со счетчиком". Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for.
В языке Python тоже есть цикл for. Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.
Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:
total = 100 while total > 0: n = int(input()) total = total - n print("Ресурс исчерпан")
Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.
Самое главное для цикла while – чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False. Иначе произойдет зацикливание.
Примечание 1. Не обязательно в выражениях total = total - n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный записи подобных выражений: total -= nи i += 1.
Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i - 5, или i -= 5.
Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i. Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).
Практическая работа
Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.
Используя цикл while, выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как **. Фрагмент вывода:
... 32 64 128 256 512 1024 ...
Циклы являются такой же важной частью структурного программирования, как условные операторы. С циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.
n = 10;
var
a, b, c: array[1..n] of integer;
i, j, kb, kc, t: integer;
begin
Randomize;
Writeln('Исходный массив');
kb := 0; kc := 0;
for i := 1 to n do
begin
a[i] := random(101) - 50;
Write(a[i]:4);
if a[i] < 0 then begin Inc(kb); b[kb] := a[i] end
else begin Inc(kc); c[kc] := a[i] end
end;
Writeln;
{ теперь массив b содержит отрицательныые элементы, с - остальные }
for i := 1 to kb - 1 do
for j := 1 to kb - 1 do
if b[j] > b[j + 1] then
begin t := b[j]; b[j] := b[j + 1]; b[j + 1] := t end;
{ сливаем массивы b и c в массив а}
i := 0;
for j := 1 to kb do begin i := i + 1; a[i] := b[j] end;
for j := 1 to kc do begin i := i + 1; a[i] := c[j] end;
Writeln('Результирующий массив');
for i := 1 to n do Write(a[i]:4);
Writeln
end.
Тестовое решение:
Исходный массив
-32 -8 43 -24 8 -45 -13 40 17 46
Результирующий массив
-45 -32 -24 -13 -8 43 8 40 17 46