Смотреть что такое "роль" в других словарях. "фотоника сыграет ту же роль, что прежде - паровая машина и электроника"

Понятие об «альфа-особях» ввели в обиход этологи – ученые, которые исследуют поведение стайных животных, например, волков. Создание же самого термина приписывают зоологу Дэвиду Л. Меху, который утверждал, что всех представителей мужского пола можно разделить на так называемых альфа-, бета- и гамма-самцов с точки зрения их поведения и биологических особенностей.

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

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

Между тем наблюдения показали, что иногда в собачьей или волчьей стае доминирует вовсе не самец, а самка. Однако она не во всем ведет себя, как альфа-самец. Так, у нее нет «гарема» из особей противоположного пола, и она не склонна вступать в беспорядочные половые сношения. Ей это не требуется. Главные признаки вожака – обладание властью и авторитетом. Если самцы ориентированы самой природой на то, чтобы произвести как можно больше потомства и таким образом передать свой набор генов, то для самок важно не количество, а качество. Они стараются выбрать партнера, который обладает оптимальным генотипом для передачи его потомству. Причем альфа-самка - это не обязательно самая красивая или самая склочная особь в стае. Привлекательная внешность говорит всего лишь о повышенной фертильности, а нервность или истеричность – о неуверенности в себе. Альфа-самке это не требуется. Ей не нужно повышать свой статус с помощью внешности или наездов на кого-либо – он у нее и так высок. Первое, скорее, свойственно бета-особям, а второе – гаммам. Альфа-самка обычно выглядит спокойной и уверенной, даже в не самых лучших ситуациях.

У организмов, размножающихся половым путем, гены родителей перемешиваются в геноме потомства. Это позволяет естественному отбору работать не с целыми геномами, а с отдельными генами, поддерживая удачные варианты и отбраковывая неудачные. Считалось, что у бактерий отбор работает в основном на уровне целых геномов, что намного менее эффективно. Теоретически, горизонтальный обмен генами может отчасти заменить бактериям половое размножение. Однако было неясно, в какой степени это характерно для природных популяций микробов. Изучив две близкородственные популяции морских бактерий, недавно начавших приспосабливаться к разным нишам, американские биологи пришли к выводу, что адаптивная эволюция бактерий идет за счет распространения отдельных генов, а не целых геномов, то есть так же, как у организмов, размножающихся половым путем. Из этого следует, что в ходе адаптации к новым условиям горизонтальный генетический обмен успешно заменяет бактериям половое размножение.

Суть полового процесса, характерного для большинства высших организмов (эукариот), состоит в перемешивании (рекомбинации) генов (точнее, участков ДНК) разных особей. Гены, входящие в состав генома, благодаря регулярной рекомбинации перестают быть намертво связанными друг с другом. Перемешивание генетического материала позволяет естественному отбору работать на уровне отдельных генов, а не целых геномов. Это радикально увеличивает эффективность отбора и способствует быстрой адаптивной (приспособительной) эволюции. Например, если у какой-то особи в одном гене возникла полезная мутация, а в другом - вредная, то благодаря половому процессу первая из этих мутаций получает шанс распространиться в генофонде независимо от второй, а вторая, скорее всего, будет благополучно отбракована отбором независимо от первой (подробнее см. в заметке Опыты на червях доказали, что самцы - вещь полезная, «Элементы», 23.10.2009).

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

У бактерий нет настоящего полового процесса, как у эукариот, то есть регулярного перемешивания всех участков генома. Однако у них распространен горизонтальный генетический обмен (ГГО; см. Horizontal gene transfer), в ходе которого одни микробы заимствуют фрагменты ДНК у других. Заимствованные гены могут быть либо добавлены к уже имеющимся у бактерии-реципиента, либо (благодаря механизму гомологичной рекомбинации, Homologous recombination) «свой» фрагмент ДНК заменяется похожим «чужим» фрагментом.

Известно, что ГГО играет в эволюции прокариот огромную роль. Однако имеющиеся данные указывают в основном на события, которые можно условно отнести к разряду «макроэволюционных»: это сравнительно редкие случаи удачных переносов между неродственными группами микробов (см. Горизонтальный перенос генов и эволюция). Гораздо легче идентифицировать ген как заимствованный, если он получен от неродственного организма. Такой ген будет сильно отличаться от своих аналогов у ближайших родственников данной бактерии. Случаи горизонтального переноса между близкими штаммами микробов обнаружить труднее. Однако именно такой «близкородственный» ГГО, если он достаточно широко распространен в природе, мог бы отчасти заменить микробам настоящий половой процесс и повысить эффективность их адаптивной эволюции.

До сих пор неясно, играет ли ГГО между близкородственными микробами существенную роль в микроэволюционных изменениях, то есть в рутинной, повседневной адаптации бактерий к меняющимся условиям среды. Преобладает точка зрения, что отбор у бактерий всё-таки в основном клональный, действующий на уровне целых геномов. Именно такая ситуация воспроизводится, например, в долгосрочном эволюционном эксперименте Ричарда Ленски, где в пробирках эволюционируют бактерии, лишенные генов, необходимых для ГГО (см.: В долгосрочном эволюционном эксперименте выявлен отбор на «эволюционную перспективность», «Элементы», 25.03.2011).

Биологи из Массачусетского технологического института (MIT) попытались прояснить вопрос о микроэволюционной роли ГГО на примере двух популяций морских планктонных бактерий Vibrio cyclitrophicus. Ранее авторы показали, что эти две популяции, обозначаемые буквами L и S, разделились недавно и в настоящее время находятся в процессе адаптации к разным экологическим нишам. Это видно по их приуроченности, соответственно, к крупным (L) и мелким (S) частицам, отфильтрованным из морской воды, и по результатам генетического анализа (см.: Hunt et al., 2008. Resource Partitioning and Sympatric Differentiation Among Closely Related Bacterioplankton, PDF, 529 Кб). По-видимому, эти две популяции приспосабливаются к жизни на разных представителях зоо- или фитопланктона.

Авторы решили выяснить, какой из двух процессов преобладает на начальных этапах экологической дифференциации - отбор отдельных генов с удачными мутациями, которые распространяются за счет ГГО, или клональный отбор, поддерживающий или отбраковывающий целые геномы. Различить эти две ситуации можно, сравнив внутри- и межпопуляционный генетический полиморфизм (вариабельность) изучаемых популяций.

Если преобладает отбор на уровне генов, две популяции должны четко отличаться друг от друга по небольшому числу генов - тех, от которых зависят экологические свойства популяций. При этом различающиеся участки генома должны иметь пониженный уровень внутрипопуляционного полиморфизма хотя бы в одной из двух популяций. Ведь на каждый такой участок действовал отбор, который поддерживал какой-то один вариант этого участка, вытесняя из генофонда другие его варианты. Напротив, те участки генома, которые у двух популяций сходны, должны быть более полиморфными, причем наборы генетических вариантов (аллелей) могут быть одинаковыми в двух популяциях (потому что отбор, связанный с приспособлением к новой нише, на них не действовал, и они могли сохранить исходный полиморфизм, накопленный предковой популяцией).

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

Авторы отсеквенировали полные геномы тринадцати бактерий из популяции L и семи особей из популяции S. Анализ прочтенных геномов подтвердил первую версию: в недавней эволюции двух бактериальных популяций явно преобладал отбор на уровне отдельных генов, что было бы невозможно без интенсивного ГГО между близкородственными микробами.

Обнаружено 725 диморфных нуклеотидных позиций, в которых у всех микробов из популяции L всегда стоит какой-то один нуклеотид, а у всех микробов из популяции S - другой. Авторы назвали эти 725 позиций «экоснипами» (ecoSNPs), поскольку именно они, скорее всего, отвечают за приспособление к различающимся условиям жизни. Это видно и по функциям генов, к которым они приурочены. Экоснипы не рассеяны по геному хаотически, а сгруппированы в 11 относительно компактных кластеров. В пределах каждого из этих кластеров хотя бы у одной из двух популяций наблюдается пониженный уровень генетического полиморфизма, что свидетельствует о недавнем действии положительного отбора.

Все прочие снипы (полиморфные нуклеотидные позиции), в числе 28 744 штук, равномерно рассеяны по геному и демонстрируют сходный характер полиморфизма в обеих популяциях. Например, в какой-то позиции нуклеотид Ц может стоять у шести, а нуклеотид Г - у семи бактерий из популяции L, тогда как в популяции S нуклеотид Ц обнаружен у трех бактерий, а Г - у четырех.

Обнаруженная картина распределения нуклеотидных различий полностью соответствует предположению о том, что в ходе приспособления к различающимся условиям отбор в сочетании с ГГО (и гомологичной рекомбинацией) способствовал распространению отдельных участков ДНК с удачными мутациями, а не целых геномов, причем в остальных участках генома сохранялся исходный полиморфизм, имевшийся у предковой популяции.

Что касается гомологичной рекомбинации, то есть замены «своей» версии гена на «чужую» (заимствованную), то этот процесс характерен для так называемой центральной, или базовой (core) части генома, которая очень похожа у всех 20 изученных бактерий. В другой же, «пластичной» (flexible) части генома, в которой наборы генов и их последовательности могут сильно различаться, по-видимому, преобладали вставки чужих генов вдобавок к уже имеющимся (иногда компенсируемые утратой каких-нибудь других участков ДНК).

Еще одним подтверждением интенсивного ГГО между близкородственными микробами является то обстоятельство, что филогенетические (эволюционные) деревья, построенные для 20 изученных бактерий, оказываются разными в зависимости от того, какие фрагменты генома используются для их построения. Анализируя эти деревья, а также используя другие методы сравнительной геномики, авторы обнаружили свидетельства многочисленных недавних переносов генетического материала внутри каждой из двух популяций. В частности, удалось показать быстрое распространение целой хромосомы в популяции S. У Vibrio cyclitrophicus геном состоит из двух хромосом, обозначаемых цифрами I и II. Один из вариантов хромосомы II недавно распространился под действием отбора в популяции S (он обнаружен у 5 из 7 бактерий). Хромосома II распространялась независимо от хромосомы I, а это значит, что бактерии запросто могут обмениваться целыми хромосомами, а не только их фрагментами.

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

У организмов, размножающихся половым путем, гены родителей перемешиваются в геноме потомства. Это позволяет естественному отбору работать не с целыми геномами, а с отдельными генами, поддерживая удачные варианты и отбраковывая неудачные. Считалось, что у бактерий отбор работает в основном на уровне целых геномов, что намного менее эффективно. Теоретически, горизонтальный обмен генами может отчасти заменить бактериям половое размножение. Однако было неясно, в какой степени это характерно для природных популяций микробов. Изучив две близкородственные популяции морских бактерий, недавно начавших приспосабливаться к разным нишам, американские биологи пришли к выводу, что адаптивная эволюция бактерий идет за счет распространения отдельных генов, а не целых геномов, то есть так же, как у организмов, размножающихся половым путем. Из этого следует, что в ходе адаптации к новым условиям горизонтальный генетический обмен успешно заменяет бактериям половое размножение.

Суть полового процесса, характерного для большинства высших организмов (эукариот), состоит в перемешивании (рекомбинации) генов (точнее, участков ДНК) разных особей. Гены, входящие в состав генома, благодаря регулярной рекомбинации перестают быть намертво связанными друг с другом. Перемешивание генетического материала позволяет естественному отбору работать на уровне отдельных генов, а не целых геномов. Это радикально увеличивает эффективность отбора и способствует быстрой адаптивной (приспособительной) эволюции. Например, если у какой-то особи в одном гене возникла полезная мутация, а в другом - вредная, то благодаря половому процессу первая из этих мутаций получает шанс распространиться в генофонде независимо от второй, а вторая, скорее всего, будет благополучно отбракована отбором независимо от первой (подробнее см. в заметке Опыты на червях доказали, что самцы - вещь полезная , «Элементы», 23.10.2009).

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

У бактерий нет настоящего полового процесса, как у эукариот, то есть регулярного перемешивания всех участков генома. Однако у них распространен горизонтальный генетический обмен (ГГО; см. Horizontal gene transfer), в ходе которого одни микробы заимствуют фрагменты ДНК у других. Заимствованные гены могут быть либо добавлены к уже имеющимся у бактерии-реципиента, либо (благодаря механизму гомологичной рекомбинации, Homologous recombination) «свой» фрагмент ДНК заменяется похожим «чужим» фрагментом.

Известно, что ГГО играет в эволюции прокариот огромную роль. Однако имеющиеся данные указывают в основном на события, которые можно условно отнести к разряду «макроэволюционных»: это сравнительно редкие случаи удачных переносов между неродственными группами микробов (см. Горизонтальный перенос генов и эволюция). Гораздо легче идентифицировать ген как заимствованный, если он получен от неродственного организма. Такой ген будет сильно отличаться от своих аналогов у ближайших родственников данной бактерии. Случаи горизонтального переноса между близкими штаммами микробов обнаружить труднее. Однако именно такой «близкородственный» ГГО, если он достаточно широко распространен в природе, мог бы отчасти заменить микробам настоящий половой процесс и повысить эффективность их адаптивной эволюции.

До сих пор неясно, играет ли ГГО между близкородственными микробами существенную роль в микроэволюционных изменениях, то есть в рутинной, повседневной адаптации бактерий к меняющимся условиям среды. Преобладает точка зрения, что отбор у бактерий всё-таки в основном клональный, действующий на уровне целых геномов. Именно такая ситуация воспроизводится, например, в долгосрочном эволюционном эксперименте Ричарда Ленски, где в пробирках эволюционируют бактерии, лишенные генов, необходимых для ГГО (см.: В долгосрочном эволюционном эксперименте выявлен отбор на «эволюционную перспективность» , «Элементы», 25.03.2011).

Биологи из Массачусетского технологического института (MIT) попытались прояснить вопрос о микроэволюционной роли ГГО на примере двух популяций морских планктонных бактерий Vibrio cyclitrophicus . Ранее авторы показали, что эти две популяции, обозначаемые буквами L и S, разделились недавно и в настоящее время находятся в процессе адаптации к разным экологическим нишам. Это видно по их приуроченности, соответственно, к крупным (L) и мелким (S) частицам, отфильтрованным из морской воды, и по результатам генетического анализа (см.: Hunt et al., 2008. , PDF, 529 Кб). По-видимому, эти две популяции приспосабливаются к жизни на разных представителях зоо- или фитопланктона.

Авторы решили выяснить, какой из двух процессов преобладает на начальных этапах экологической дифференциации - отбор отдельных генов с удачными мутациями, которые распространяются за счет ГГО, или клональный отбор, поддерживающий или отбраковывающий целые геномы. Различить эти две ситуации можно, сравнив внутри- и межпопуляционный генетический полиморфизм (вариабельность) изучаемых популяций.

Если преобладает отбор на уровне генов, две популяции должны четко отличаться друг от друга по небольшому числу генов - тех, от которых зависят экологические свойства популяций. При этом различающиеся участки генома должны иметь пониженный уровень внутрипопуляционного полиморфизма хотя бы в одной из двух популяций. Ведь на каждый такой участок действовал отбор, который поддерживал какой-то один вариант этого участка, вытесняя из генофонда другие его варианты. Напротив, те участки генома, которые у двух популяций сходны, должны быть более полиморфными, причем наборы генетических вариантов (аллелей) могут быть одинаковыми в двух популяциях (потому что отбор, связанный с приспособлением к новой нише, на них не действовал, и они могли сохранить исходный полиморфизм, накопленный предковой популяцией).

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

Авторы отсеквенировали полные геномы тринадцати бактерий из популяции L и семи особей из популяции S. Анализ прочтенных геномов подтвердил первую версию: в недавней эволюции двух бактериальных популяций явно преобладал отбор на уровне отдельных генов, что было бы невозможно без интенсивного ГГО между близкородственными микробами.

Обнаружено 725 диморфных нуклеотидных позиций, в которых у всех микробов из популяции L всегда стоит какой-то один нуклеотид, а у всех микробов из популяции S - другой. Авторы назвали эти 725 позиций «экоснипами» (ecoSNPs), поскольку именно они, скорее всего, отвечают за приспособление к различающимся условиям жизни. Это видно и по функциям генов, к которым они приурочены. Экоснипы не рассеяны по геному хаотически, а сгруппированы в 11 относительно компактных кластеров. В пределах каждого из этих кластеров хотя бы у одной из двух популяций наблюдается пониженный уровень генетического полиморфизма, что свидетельствует о недавнем действии положительного отбора.

Все прочие снипы (полиморфные нуклеотидные позиции), в числе 28 744 штук, равномерно рассеяны по геному и демонстрируют сходный характер полиморфизма в обеих популяциях. Например, в какой-то позиции нуклеотид Ц может стоять у шести, а нуклеотид Г - у семи бактерий из популяции L, тогда как в популяции S нуклеотид Ц обнаружен у трех бактерий, а Г - у четырех.

Обнаруженная картина распределения нуклеотидных различий полностью соответствует предположению о том, что в ходе приспособления к различающимся условиям отбор в сочетании с ГГО (и гомологичной рекомбинацией) способствовал распространению отдельных участков ДНК с удачными мутациями, а не целых геномов, причем в остальных участках генома сохранялся исходный полиморфизм, имевшийся у предковой популяции.

Что касается гомологичной рекомбинации, то есть замены «своей» версии гена на «чужую» (заимствованную), то этот процесс характерен для так называемой центральной, или базовой (core) части генома, которая очень похожа у всех 20 изученных бактерий. В другой же, «пластичной» (flexible) части генома, в которой наборы генов и их последовательности могут сильно различаться, по-видимому, преобладали вставки чужих генов вдобавок к уже имеющимся (иногда компенсируемые утратой каких-нибудь других участков ДНК).

Еще одним подтверждением интенсивного ГГО между близкородственными микробами является то обстоятельство, что филогенетические (эволюционные) деревья, построенные для 20 изученных бактерий, оказываются разными в зависимости от того, какие фрагменты генома используются для их построения. Анализируя эти деревья, а также используя другие методы сравнительной геномики, авторы обнаружили свидетельства многочисленных недавних переносов генетического материала внутри каждой из двух популяций. В частности, удалось показать быстрое распространение целой хромосомы в популяции S. У Vibrio cyclitrophicus геном состоит из двух хромосом, обозначаемых цифрами I и II. Один из вариантов хромосомы II недавно распространился под действием отбора в популяции S (он обнаружен у 5 из 7 бактерий). Хромосома II распространялась независимо от хромосомы I, а это значит, что бактерии запросто могут обмениваться целыми хромосомами, а не только их фрагментами.

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

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

Во-первых, исследование показало, что на генетическом уровне микроэволюционные процессы у «бесполых» прокариот и эукариот, размножающихся половым путем, различаются не так уж сильно. В обоих случаях отбор идет в основном на уровне отдельных фрагментов ДНК, а не целых геномов.

Во-вторых, стало ясно, что генетический обмен между близкородственными микробами (представителями одной и той же популяции) идет очень активно, обеспечивая интенсивную рекомбинацию и, фактически, выполняя ту же функцию, что и половой процесс у высших организмов. При этом важную роль играет гомологичная рекомбинация, благодаря которой заимствованные гены не столько добавляются к уже имеющимся, сколько заменяют собой свои «старые версии», присутствующие в геноме реципиента. Кроме того, показана возможность обмена целыми хромосомами, а не только небольшими фрагментами ДНК.

В-третьих, повышенная частота внутрипопуляционного ГГО по сравнению с межпопуляционным говорит о том, что у бактерий, приспосабливающихся к разным экологическим нишам, формируется частичная репродуктивная изоляция - совсем как у высших организмов в процессе симпатрического видообразования. Эта изоляция, по-видимому, основана не только на том, что микробы с разными адаптациями живут в разных местах и поэтому редко встречаются, но и на том, что по мере накопления нуклеотидных различий снижается вероятность гомологичной рекомбинации. По-видимому, прокариот все-таки нельзя считать «единым гиперполиморфным видом» (как предлагали некоторые теоретики, исходившие из предположения, что микробы обмениваются генами с кем попало, независимо от степени родства). У прокариот, как и у высших организмов, могут существовать частично изолированные друг от друга популяционные генофонды. Что же касается многочисленных известных нам случаев ГГО между неродственными группами микробов, то они, возможно, представляют собой лишь вершину айсберга - легко обнаруживаемый и имеющий порой очень важные эволюционные последствия, но все-таки относительно редкий побочный эффект способности микробов регулярно обмениваться генами со своей ближайшей родней.

Мы живем в эпоху сиквелов и приквелов, и никого не удивляет, что мы из года в год видим актера в одной и той же роли - скажем, Роберта Дауни-младщего в роли Тони Старка в комиксных фильмах студии Marvel. Но то киносериалы и киноциклы. А бывает ли так, что актер неоднократно изображает одного и того же человека в не связанных друг с другом фильмах? Например, в разных экранизациях одной и той же книги? Да, бывает и такое! Мы вспомнили десять актеров и актрис, которые неоднократно играли одни и те же роли в не связанных фильмах.

Внимание - мы указываем общее количество фильмов, в которых актер играл одну и ту же роль, и не разделяем связанные и не связанные ленты. Для нас важно лишь, что среди этих картин есть не связанные проекты.

Питер О’Тул - Генрих II (2 фильма)

Кадр из фильма "Беккет"


Сейчас трудно в это поверить, но в 1964 году одним из главных фильмов года была историческая драма «Бекет », которая рассказывала о конфликте в средневековой Англии между королем Генрихом II и архиепископом Кентерберийским по имени Томас Бекет. Питер О’Тул сыграл в этом фильме монарха, который сперва пропихнул Бекета на его пост, а затем хлебнул с ним горя. Четыре года спустя, в 1968-м, О’Тул вновь изобразил Генриха II, но уже как пожилого монарха с взрослыми сыновьями в драме «Лев зимой ». Актер тогда был в полтора раза моложе своего персонажа. Кстати, Ричарда Львиное сердце, старшего из принцев и будущего знаменитого короля, в том фильме сыграл Энтони Хопкинс . Обе ленты сейчас считаются западной классикой.

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

Функции в Си играют ту же роль, что и подпрограммы и функции в Фортране или процедуры и функции в Паскале. Функция обеспечивает удобный способ отдельно оформить некоторое вычисление и пользоваться им далее, не заботясь о том, как оно реализовано. После того, как функции написаны, можно забыть, как они сделаны, достаточно знать лишь, что они умеют делать. Механизм использования функции в Си удобен, легок и эффективен. Нередко вы будете встречать короткие функции, вызываемые лишь единожды: они оформлены в виде функции с одной-единственной целью - получить более ясную программу.

До сих пор мы пользовались готовыми функциями вроде main, getchar и putchar, теперь настала пора нам самим написать несколько функций. В Си нет оператора возведения в степень вроде ** в Фортране. Поэтому проиллюстрируем механизм определения функции на примере функции power(m, n) , которая возводит целое m в целую положительную степень n. Так, power(2, 5) имеет значение 32. На самом деле для практического применения эта функция малопригодна, так как оперирует лишь малыми целыми степенями, однако она вполне может послужить иллюстрацией. (В стандартной библиотеке есть функция pow(x, y) , вычисляющая x в степени y.)

Итак, мы имеем функцию power и главную функцию main, пользующуюся ее услугами, так что вся программа выглядит следующим образом:

#include ‹stdio.h›

int power(int m, int n);

/* тест функции power */

for (i = 0; i ‹ 10; ++i)

/* возводит base в n-ю степень, n ›= 0 */

int power(int base, int n)

for (i = 1; i ‹= n; ++i)

Определение любой функции имеет следующий вид:

тип-результата имя-функции (список параметров, если он есть )

объявления

инструкции

Определения функций могут располагаться в любом порядке в одном или в нескольких исходных файлах, но любая функция должна быть целиком расположена в каком-то одном. Если исходный текст программы распределен по нескольким файлам, то, чтобы ее скомпилировать и загрузить, вам придется сказать несколько больше, чем при использовании одного файла; но это уже относится к операционной системе, а не к языку. Пока мы предполагаем, что обе функции находятся в одном файле, так что будет достаточно тех знаний, которые вы уже получили относительно запуска программ на Си.

В следующей строке из функции main к power обращаются дважды.

printf("%d %d %d\n", i, power(2,i), power(-3,i));

При каждом вызове функции power передаются два аргумента, и каждый раз главная программа main в ответ получает целое число, которое затем приводится к должному формату и печатается. Внутри выражения power(2, i) представляет собой целое значение точно так же, как 2 или i. (Не все функции в качестве результата выдают целые значения; подробно об этом будет сказано в главе 4.)



В первой строке определения power:

int power(int base, int n);

указываются типы параметров, имя функции и тип результата. Имена параметров локальны внутри power , это значит, что они скрыты для любой другой функции, так что остальные подпрограммы могут свободно пользоваться теми же именами для своих целей. Последнее утверждение справедливо также для переменных i и p: i в power и i в main не имеют между собой ничего общего.

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

Значение, вычисляемое функцией power, возвращается в main с помощью инструкции return . За словом return может следовать любое выражение:

return выражение ;

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



Вы, вероятно, обратили внимание на инструкцию return в конце main . Поскольку main есть функция, как и любая другая она может вернуть результирующее значение тому, кто ее вызвал, - фактически в ту среду, из которой была запущена программа. Обычно возвращается нулевое значение, что говорит о нормальном завершении выполнения. Ненулевое значение сигнализирует о необычном или ошибочном завершении. До сих пор ради простоты мы опускали return в main, но с этого момента будем задавать return как напоминание о том, что программы должны сообщать о состоянии своего завершения в операционную систему.

Объявление

int power(int m, int n);

стоящее непосредственно перед main , сообщает, что функция power ожидает двух аргументов типа int и возвращает результат типа int . Это объявление, называемое прототипом функции , должно быть согласовано с определением и всеми вызовами power . Если определение функции или вызов не соответствует своему прототипу, это ошибка.

Имена параметров не требуют согласования. Фактически в прототипе они могут быть произвольными или вообще отсутствовать, т. е. прототип можно было бы записать и так:

int power(int, int);

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

Историческая справка. Самые большие отличия ANSI-Си от более ранних версий языка как раз и заключаются в способах объявления и определения функций. В первой версии Си функцию power требовалось задавать в следующем виде:

/* power: возводит base в n-ю степень, n ›= 0 */

/* (версия в старом стиле языка Си) */

for (i = 1; i ‹= n; ++i)

Здесь имена параметров перечислены в круглых скобках, а их типы заданы перед первой открывающей фигурной скобкой. В случае отсутствия указания о типе параметра, считается, что он имеет тип int . (Тело функции не претерпело изменений.)

Описание power в начале программы согласно первой версии Си должно было бы выглядеть следующим образом:

Нельзя было задавать список параметров, и поэтому компилятор не имел возможности проверить правильность обращений к power. Так как при отсутствии объявления power предполагалось, что функция возвращает значение типа int, то в данном случае объявление целиком можно было бы опустить.

Новый синтаксис для прототипов функций облегчает компилятору обнаружение ошибок в количестве аргументов и их типах. Старый синтаксис объявления и определения функции все еще допускается стандартом ANSI, по крайней мере на переходный период, но если ваш компилятор поддерживает новый синтаксис, мы настоятельно рекомендуем пользоваться только им.

Упражнение 1.15 . Перепишите программу преобразования температур, выделив само преобразование в отдельную функцию.