Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семинары по информатике.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
228.35 Кб
Скачать

Семинар №3

Подготовка к лабораторной работе №2

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

Команда test

Используется для :

1. Проверки прав доступа и файлу.

2. Тестирования строк.

3. Тестирования численных данных.

-z строка ( test примет значение истины, если строка имеет нулевую длину)

-n строка (test истинно, если ненулевая длина)

str1 = str2

str1 != str2

str1 \< str2 ( меньше лексиграфически, например abc < def)

str1 \> str2

0 - истина

1 - ложь

i1 -eq i2 сравнение на равенство

i1 -ne i2 сравнение на неравенство

i1 -lt i2 меньше строго

i1 -le i2 меньше нестрого

i1 -qt i2 больше строго

i1 -qe i2 больше нестрого

Логические выражения :

!выражение1 истинно, когда ложно

выр1 -a выр2 истинно, когда AND

выр1 -o выр2 истинно, когда OR

; - следующая команда на той же строке

Пример :

$[ $st1 != $st2 ]

$echo $? # вывод результата последней команды

\ - применяется во время присвоения

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

Пример :

$value = string1

$expr $value : '.*'

Также можно использовать для поиска подстроки.

Пример:

$value = file.txt

$expr $value : ' \(.*\).txt '

Результат : File

$expr length str1 # длина строки

$expr index abcdef gd # выводит порядковый номер любого первого # встретившегося элемента из второй строки в первой

Результат : 4

$expr substr "abcd efg hi" 2 5

pos length

Результат : bcd e

Пример программы :

$bash snn.bash binarray1 011 10 ; echo $?

#!/bin/bash

count=0

maxi=0

numi=0

for i in $* ; do

let count++ # count= `expr $count + 1` (альтернатива)

pref = `expr "$i" : '.*[^01] ' ` # возвращает число позиций до первого ненуля и неединицы

if test $pref -qt 0

then continue

fi

bin = `expr $i : ' 0*\(1[01]*\) ' ` # отброс нулей

bin = ${bin:=0} # если bin пуст, то ему присваивается ноль

if [ $bin \< $maxi ]

then continue

fi

maxi = $bin

numi = $count

done

if test $numi -qt 0

then echo $maxi

fi

exit $numi # возвращаемое значение