Журнал LinuxFormat - перейти на главную

LXF168Raspberry Pi. Про­грам­ми­ро­вание:

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(При­меним пе­ре­мен­ные)
(При­меним пе­ре­мен­ные)
Строка 19: Строка 19:
 
[[Файл:LXF168.tut_rpi.scratc_opt2.jpeg | |thumb|400px|> Рис. 3. Бло­ки If…Then по­зво­ля­ют ва­шей про­грам­ме при­ни­мать ре­ше­ние, и это крае­уголь­ный ка­мень про­грам­ми­ро­ва­ния.]]
 
[[Файл:LXF168.tut_rpi.scratc_opt2.jpeg | |thumb|400px|> Рис. 3. Бло­ки If…Then по­зво­ля­ют ва­шей про­грам­ме при­ни­мать ре­ше­ние, и это крае­уголь­ный ка­мень про­грам­ми­ро­ва­ния.]]
 
[[Файл: LXF168.tut_rpi.scratc_opt3.jpeg ||thumb|400px|> Рис. 4. Точ­но так же мож­но до­ба­вить фи­гу­ры в на­бор ин­ст­ру­мен­тов для ри­со­ва­ния.]]
 
[[Файл: LXF168.tut_rpi.scratc_opt3.jpeg ||thumb|400px|> Рис. 4. Точ­но так же мож­но до­ба­вить фи­гу­ры в на­бор ин­ст­ру­мен­тов для ри­со­ва­ния.]]
LXF168.tut_rpi.scratc_opt3.jpeg
 
 
Пре­ж­де чем восполь­зо­вать­ся пе­ре­мен­ной, на­до ве­леть ком­пь­ю­те­ру вы­де­лить под нее па­мять. Мы так­же да­дим ей имя, что­бы об­ра­щать­ся к ней в ко­ман­дах. Зай­ди­те в Variables [Пе­ре­мен­ные], на­жми­те Make a Variable [Соз­дать пе­ре­мен­ную] и ука­жи­те ее имя. По­сле это­го вы уви­ди­те на­бор команд для из­менения или ис­поль­зо­вания этой пе­ре­мен­ной. Те­перь мы мо­жем хранить дан­ные, и нуж­но ве­леть ком­пь­ю­те­ру ме­нять свое по­ве­дение в за­ви­си­мо­сти от зна­чения пе­ре­мен­ной. Это де­ла­ет блок If…Else [Если...То]. Он про­ве­ря­ет, ис­тин­но ли вы­ра­жение. Ес­ли да, вы­пол­ня­ет­ся пер­вый блок ко­да, ес­ли нет – вто­рой. В на­шей про­грам­ме мы про­ве­ря­ем пе­ре­мен­ную pen. Ес­ли она рав­на 0, мы опуска­ем ка­ран­даш и уста­нав­ли­ва­ем ее в 1, а ина­че поднима­ем ка­ран­даш и уста­нав­ли­ва­ем ее в 0. Так мож­но пе­ре­клю­чать­ся ме­ж­ду дву­мя со­стояния­ми с по­мо­щью про­бе­ла. Взгляните на рис. 3 – вот как долж­на вы­гля­деть про­грам­ма. Об­ра­ти­те внимание на опе­ра­тор = в вы­ра­жении if. Оно оз­на­ча­ет, что пер­вый блок ко­да вы­пол­ня­ет­ся, толь­ко ес­ли пе­ре­мен­ная pen со­дер­жит (equals) 0, в про­тив­ном слу­чае (else) вы­пол­ня­ет­ся вто­рой блок.
 
Пре­ж­де чем восполь­зо­вать­ся пе­ре­мен­ной, на­до ве­леть ком­пь­ю­те­ру вы­де­лить под нее па­мять. Мы так­же да­дим ей имя, что­бы об­ра­щать­ся к ней в ко­ман­дах. Зай­ди­те в Variables [Пе­ре­мен­ные], на­жми­те Make a Variable [Соз­дать пе­ре­мен­ную] и ука­жи­те ее имя. По­сле это­го вы уви­ди­те на­бор команд для из­менения или ис­поль­зо­вания этой пе­ре­мен­ной. Те­перь мы мо­жем хранить дан­ные, и нуж­но ве­леть ком­пь­ю­те­ру ме­нять свое по­ве­дение в за­ви­си­мо­сти от зна­чения пе­ре­мен­ной. Это де­ла­ет блок If…Else [Если...То]. Он про­ве­ря­ет, ис­тин­но ли вы­ра­жение. Ес­ли да, вы­пол­ня­ет­ся пер­вый блок ко­да, ес­ли нет – вто­рой. В на­шей про­грам­ме мы про­ве­ря­ем пе­ре­мен­ную pen. Ес­ли она рав­на 0, мы опуска­ем ка­ран­даш и уста­нав­ли­ва­ем ее в 1, а ина­че поднима­ем ка­ран­даш и уста­нав­ли­ва­ем ее в 0. Так мож­но пе­ре­клю­чать­ся ме­ж­ду дву­мя со­стояния­ми с по­мо­щью про­бе­ла. Взгляните на рис. 3 – вот как долж­на вы­гля­деть про­грам­ма. Об­ра­ти­те внимание на опе­ра­тор = в вы­ра­жении if. Оно оз­на­ча­ет, что пер­вый блок ко­да вы­пол­ня­ет­ся, толь­ко ес­ли пе­ре­мен­ная pen со­дер­жит (equals) 0, в про­тив­ном слу­чае (else) вы­пол­ня­ет­ся вто­рой блок.
  

Версия 17:18, 10 ноября 2018

Raspberry Pi: Про­грам­мы

Raspberry Pi Про­грам­ми­руй­те свой Pi на Scratch и Python

Бен Эве­рард по­мо­га­ет осво­ить два стан­дарт­ных язы­ка, вхо­дя­щих в Raspbian, и на­пи­сать па­ру про­стых про­грамм.

(thumbnail)
> Рис. 2. По умол­ча­нию пе­ре­мен­ным при­сваи­ва­ет­ся зна­че­ние 0, а за их те­ку­щим зна­че­ни­ем мож­но сле­дить в об­лас­ти ри­со­ва­ния
(thumbnail)
Наш эксперт Бен Эве­рард ос­та­вил ра­бо­ту IT-кон­суль­тан­та и на два го­да от­пра­вил­ся в Тан­за­нию ус­та­нав­ли­вать сис­те­мы на ба­зе Ubuntu в ме­ст­ных шко­лах. Те­перь его зна­ния на­хо­дят при­ме­не­ние в бур­ля­щем кот­ле от­кры­тий – ре­дак­ции Linux Format.

На этом уро­ке мы вернем­ся к из­на­чаль­ной идее Raspberry Pi: обу­чению поль­зо­ва­те­лей но­вым тех­но­ло­ги­ям. На сле­дую­щих че­ты­рех страницах мы крат­ко прой­демся по двум язы­кам про­грам­ми­ро­вания, вхо­дя­щим в Raspbian, ре­ко­мен­дуе­мый ди­ст­ри­бу­тив для Pi. Ес­ли у вас нет Pi, вы все рав­но мо­же­те сле­до­вать за на­ми – про­сто уста­но­ви­те эти язы­ки че­рез менед­жер па­ке­тов. Ес­ли вы не про­грам­ми­ро­ва­ли рань­ше, не пе­ре­жи­вай­те: мы начнем бу­к­валь­но с ну­ля [англ. from scratch, – прим. пер.].

Scratch – пре­крас­ный язык для изу­чения основ про­грам­ми­ро­вания: с ним не нуж­но бес­по­ко­ить­ся о со­вер­шен­ст­ве ко­да. Так как про­грам­ма пи­шет­ся пу­тем пе­ре­тас­ки­вания бло­ков в скрипт, не при­дет­ся за­по­ми­нать ни од­ной ко­ман­ды.

Мы на­пи­шем про­стую про­грам­му для ри­со­вания линий на эк­ране с по­мо­щью кла­виш управ­ления кур­со­ром. Пер­вое, что нам нуж­но – соз­дать код, ко­то­рый по­зво­лит пе­ре­ме­щать по эк­ра­ну кар­тин­ку с ко­том. Мы восполь­зу­ем­ся тре­мя от­дель­ны­ми бло­ка­ми, ка­ж­дый из ко­то­рых бу­дет за­пускать­ся по на­жа­тию кла­ви­ши. [[Файл: |left |100px |thumb|> Рис. 1. Бло­ки ок­ра­ше­ны в раз­ные цве­та — что­бы бы­ло по­нят­нее, из ка­ко­го ме­ню их вы­брать.]] На­жми­те Control [Управ­ление], за­тем пе­ре­та­щи­те в скрип­ты блок When Space Key Pressed [При на­жа­тии кла­ви­ши про­бе­ла]. Так соз­да­ет­ся скрипт, ко­то­рый за­пуска­ет­ся по на­жа­тию поль­зо­ва­те­лем этой кла­ви­ши. В вы­па­даю­щем спи­ске из­мените Space [Про­бел] на Right Arrow [Стрел­ка впра­во] и пе­ре­та­щи­те под него Move 10 steps [Пе­ре­мес­тить на 10 ша­гов]. Тогда при на­жа­тии стрел­ки впра­во кот бу­дет пе­ре­ме­щать­ся. За­тем соз­дай­те по­хо­жие скрип­ты, с ко­то­ры­ми кот бу­дет сво­ра­чи­вать вниз при на­жа­тии стрел­ки вниз и вверх при на­жа­тии стрел­ки вверх. На рис. 1 по­ка­за­но, как это долж­но вы­гля­деть. Те­перь мы мо­жем пе­ре­ме­щать­ся во всех на­прав­лениях, и оста­лось до­ба­вить блок, от­ве­чаю­щий за про­ри­сов­ку линий. Мы не бу­дем ри­со­вать постоянно, по­это­му восполь­зу­ем­ся дей­ст­вия­ми Scratch pen up [под­нять ка­ран­даш] и pen down [опустить ка­ран­даш]. Когда ка­ран­даш опу­щен, кот остав­ля­ет за со­бой след, когда поднят – не остав­ля­ет.

При­меним пе­ре­мен­ные

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

(thumbnail)
> Рис. 3. Бло­ки If…Then по­зво­ля­ют ва­шей про­грам­ме при­ни­мать ре­ше­ние, и это крае­уголь­ный ка­мень про­грам­ми­ро­ва­ния.
(thumbnail)
> Рис. 4. Точ­но так же мож­но до­ба­вить фи­гу­ры в на­бор ин­ст­ру­мен­тов для ри­со­ва­ния.

Пре­ж­де чем восполь­зо­вать­ся пе­ре­мен­ной, на­до ве­леть ком­пь­ю­те­ру вы­де­лить под нее па­мять. Мы так­же да­дим ей имя, что­бы об­ра­щать­ся к ней в ко­ман­дах. Зай­ди­те в Variables [Пе­ре­мен­ные], на­жми­те Make a Variable [Соз­дать пе­ре­мен­ную] и ука­жи­те ее имя. По­сле это­го вы уви­ди­те на­бор команд для из­менения или ис­поль­зо­вания этой пе­ре­мен­ной. Те­перь мы мо­жем хранить дан­ные, и нуж­но ве­леть ком­пь­ю­те­ру ме­нять свое по­ве­дение в за­ви­си­мо­сти от зна­чения пе­ре­мен­ной. Это де­ла­ет блок If…Else [Если...То]. Он про­ве­ря­ет, ис­тин­но ли вы­ра­жение. Ес­ли да, вы­пол­ня­ет­ся пер­вый блок ко­да, ес­ли нет – вто­рой. В на­шей про­грам­ме мы про­ве­ря­ем пе­ре­мен­ную pen. Ес­ли она рав­на 0, мы опуска­ем ка­ран­даш и уста­нав­ли­ва­ем ее в 1, а ина­че поднима­ем ка­ран­даш и уста­нав­ли­ва­ем ее в 0. Так мож­но пе­ре­клю­чать­ся ме­ж­ду дву­мя со­стояния­ми с по­мо­щью про­бе­ла. Взгляните на рис. 3 – вот как долж­на вы­гля­деть про­грам­ма. Об­ра­ти­те внимание на опе­ра­тор = в вы­ра­жении if. Оно оз­на­ча­ет, что пер­вый блок ко­да вы­пол­ня­ет­ся, толь­ко ес­ли пе­ре­мен­ная pen со­дер­жит (equals) 0, в про­тив­ном слу­чае (else) вы­пол­ня­ет­ся вто­рой блок.

Вве­дение в цик­лы

Те­перь мож­но пе­ре­ме­щать ко­та и ри­со­вать кар­ти­ну, но ведь здо­ро­во бы­ло бы до­бав­лять го­то­вые фи­гу­ры, на­при­мер, круж­ки? Сей­час мы это сде­ла­ем. Хотя с техниче­­ской точ­ки зрения мы до­ба­вим 24-сто­ронний мно­го­угольник – он очень по­хо­ж на круг.

Это де­ла­ет­ся так: сна­ча­ла move forward 10 [пе­ре­мес­тить­ся впе­ред на 10 ша­гов], за­тем rotate 15 degrees [по­вер­нуть на 15 гра­ду­сов], за­тем сно­ва forward 10 [пе­ре­мес­тить­ся впе­ред на 10 ша­гов], за­тем rotate 15 degrees [по­вер­нуть на 15 гра­ду­сов] и так да­лее, по­ка не по­лу­чит­ся ок­руж­ность. Мож­но по­мес­тить в код 24 па­ры строк, и код бу­дет ра­бо­тать, но это не очень хо­ро­шо: и вы­гля­дит некра­си­во, и тре­бу­ет мно­го вре­мени на соз­дание, а ес­ли вы ре­ши­те из­менить раз­мер ок­руж­но­сти, при­дет­ся это де­лать в 24 мес­тах.

Вза­мен мы при­меним цикл. Это блок, ко­то­рый по­вто­ря­ет сам се­бя. Есть несколь­ко ви­дов цик­лов – неко­то­рые по­вто­ря­ют­ся, по­ка некое вы­ра­жение не станет лож­ным (нечто вро­де мно­го­кратно по­вто­ряе­мой ко­ман­ды if); но мы восполь­зу­ем­ся тем, ко­то­рый по­вто­ря­ет­ся за­дан­ное ко­ли­че­­ст­во раз.

Внут­ри цик­ла нам нуж­ны все­го две ко­ман­ды: move forward 10 и rotate 15. Под­роб­но­сти по­ка­за­ны на рис. 4. Ва­ша пер­вая про­грам­ма на Scratch го­то­ва! Файл про­ек­та есть на DVD и на www.linuxformat.com/archives.

Про­грам­ми­ро­вание – не са­мо­цель, а спо­соб за­ста­вить ком­пь­ю­тер де­лать то, что нам нуж­но, и те­перь вас ог­раничи­ва­ет толь­ко во­об­ра­жение. Мо­же­те на­пи­сать стре­лял­ку, ра­бо­чее при­ло­жение или нечто фу­ту­ри­сти­че­­ское, для че­го и на­звания еще нет. Что­бы раз­бу­дить ва­ше во­об­ра­жение, вот несколь­ко про­ек­тов из Ин­тернета (ес­ли у вас уста­нов­лен Flash, их мож­но за­пустить в брау­зе­ре):

» Super Mario Galaxy Бе­гае­те по све­ту, со­би­рая звез­доч­ки. http://scratch.mit.edu/projects/Dolfus555/162167

» Wipeout На осно­ве те­ле­шоу. Гра­фи­ка так се­бе, но иг­рать ве­се­ло. http://scratch.mit.edu/projects/awesomestickdude/1149306

» Space War 4 Ста­рая стре­лял­ка косми­че­­ских ко­раб­лей с вер­тикаль­ной про­крут­кой. http://scratch.mit.edu/projects/illusionist/879463

» Snake Chamber По­зна­комь­тесь с генети­кой и раз­ве­дением змей! http://scratch.mit.edu/projects/DewleafWolf/2758178

» Day Dream Scratch – еще и пре­крас­ный ин­ст­ру­мент для соз­дания анима­ции. http://scratch.mit.edu/projects/cremeglace/40150

ben_new2.psd


> Рис. 1. Бло­ки ок­ра­ше­ны в раз­ные цве­та — что­бы бы­ло по­нят­нее, из ка­ко­го ме­ню их вы­брать.

Персональные инструменты
купить
подписаться
Яндекс.Метрика