facebook LinkedIn
Google Book Search
Прегледи

Увод в програмирането на Perl Управляващи конструкции

от Курс за ССОК

Увод в програмирането на Perl
Лекция #3 Управляващи конструкции

  • Всяка програма може да бъде написана само с три управляващи конструкции – последователната конструкция, конструкцията за избор и конструкцията за повторение(известна още като конструкция за цикъл).
    • Последователната структура е вградена в Perl – освен ако не е указано другояче компютъра изпълнява твърденията в Perl едно след друго в реда, в който те са написани.
    • Perl предлага четири вида конструкции за избор:
      • конструкцията if изпълнява(избира) действие, ако условие(предикат) е вярно или пропуска действие, ако условието не е вярно.
        • В Perl един израз не е верен(има стойност false), ако се изчислява до 0, "0", "" или undef. Във всеки друг случай израза има стойност на верен(true).
      • Конструкцията unless е противоположна на if - изпълнява(избира) действие, ако условие(предикат) е не вярно или пропуска действие, ако условието е вярно.
      • Конструкцията if/else изпълнява едно действие ако условието е вярно и друго ако условието не е вярно.
      • Конструкцията if/elsif/else избира действие, което да изпълни от множество възможни действия.
    • Perl предлага шест вида конструкции за повторение – while, until, do/while, do/until, for и foreach.
  • Всяка от думите if, else, elsif, unless, while, until, do, for и foreach е ключова дума на Perl.
  • Perl има само 11 управляващи конструкции – последователната конструкция, 4 вида конструкции за избор и 6 вида конструкции за повторение. Всяка програма на Perl може да бъде написана като се комбинират колкото трябва управляващи структури от всеки тип за да се реализира алгоритъма, който програмата имплементира.

if и unless

Пример - if:

if ( $sales >= 50) {
   print "Earned bonus!\n";
}


  • В () е оградено условието на условната конструкция.
  • В {} е оградено тялото й. То се изпълнява ако условието в () е изпълнено.
  • За разлика от езици като С, С++ и Java в Perl тялото на условната конструкция винаги трябва винаги да е оградено от {}.
  • Perl предлага гъвкавост при писането на управляващите конструкции. Горния пример може да се напише и по следния начин:
print "Earned bonus!\n" if $sales >= 50;

Пример - unless:

unless ( $sales >= 50) {
   print "You did not earn your bonus!\n";
}
  • Тялото на конструкцията се изпълнява ако условието в () не е изпълнено.
  • Горния пример може да се напише и по следния начин:
print "You did not earn your bonus!\n" unless $sales >= 50;

if/else и if/elsif/else

Пример - if/else:

if ( $sales >= 50) {
   print "Earned bonus!\n";
} else {
   print "You did not earn your bonus!\n";
}
  • Ако условието в () е изпълнено се изпълнява тялото на if, в противен случай се изпълнява тялото на else.
  • Perl предоставя условния оператор ?:, който е тясно свързан с конструкцията if/else. Условният оператор е единствения триарен оператор в Perl.

Пример:

print ( $sales >= 50 ? "Earned bonus!\n" : "You did not earn your bonus!\n");
  • Условния израз се изчислява до "Earned bonus!\n" ако условието $sales >= 50 или до "You did not earn your bonus!\n" в противен случай.
  • И тук имаме гъвкавост на записа:

Пример:

$sales >= 50 ? print "Earned bonus!\n" :
print "You did not earn your bonus!\n";

if/elsif/else

Пример:

if ( $sales >= 100 ) {
   print "1500 lv. bonus!\n";
} elsif ( $sales >= 70 ) {
   print "1000 lv. bonus!\n";
} elsif ( $sales >= 50 ) {
   print "500 lv. bonus!\n";
} else {
   print "You did not earn your bonus!\n";
}
  • Условията се тестват в реда в който са написани и от конструкцията се излиза след като се намери първия клон чието условие е изпълнено. Добра практика е условията, които е най-вероятно да са изпълнени да се поставят в началото на конструкцията с цел намаляване на времето за изпълнението й.
  • Написването на elsif като elseif е често срещана синтактична грешка.

Конструкции за повторение while и until

  • Конструкцията за повторение позволява на програмиста че дадено действие трябва да се повтаря докато определено условие е вярно(или невярно).

Пример:

$product = 2;

while ( $product <= 1000 ) {
   $product = 2 * $product;
}
  • Тялото на цикъла оградено с {} се повтаря докато условието оградено с () е вярно. Ако условието не е вярно първоначално то тялото на цикъла не се изпълнява нищо веднъж.
  • Конструкцията until действа противоположно на while – тялото и се изпълнява докато условието на конструкцията е грешно.

Пример:

$product = 2;

until ( $product > 1000 ) {
   $product = 2 * $product;
}

Конструкции за повторение do/while и do/until

  • Циклите do/while и do/until са подобни на циклите while и until, с разликата че при тях условието в () се тества в края на конструкцията, а не в началото. Така при всяко положение тялото на цикъла се изпълнява поне веднъж.

Примери:

do {
   statement(s)
} while ( condition );

или

do {
   statement(s)
} until ( condition );


#!/usr/bin/perl
#simple do/while repetition structure

$counter = 1;

do {
   print "$counter ";
} while ( ++$counter <= 10 );

print "\n";


#!/usr/bin/perl
#simple do/until repetition structure

$counter = 10;

do {
   print "$counter ";
} until ( --$counter == 0 );

print "\n";

Задачи

Задача 1 Да се напише програма, която приема на входа си поредица от числа (неопределен брой). Накрая да се изведат броя на въведените числа, най-голямото и най-малкото число, както и средното аритметично на въведените числа.

Задача 2 Палиндромът представлява число или низ, който при четене отляво надясно, както и отдясно наляво, е един и същ. Примерно числата 12321, 55555, 11711 са палиндроми. Да се напише програма, която приема едно число и проверява дали то е палиндром.

Задача 3 Да се напише програма, която приема на входа си само нули и единици (двоично число) и изчислява и извежда десетичния му еквивалент.

Решения

Локални линукс групи RSS
Дискусии