Обращение к элементу массива 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обращение к элементу массива



С

<имя> [ i1 ] [ [ i2 ] ]…, где i1, i2 – целые выражения.

Пример.

Page[ 5 ] Line[ i ] Screen[ j ][ k ] Matr[ i-1 ][ j+i-1]

Basic

<имя>(i1[,i2]...), где i1, i2 – целые выражения.

Пример.

Page(5) Line(i) Etap(j, k) Matr(i-1, j+i-1)

Структуры

Структура (запись) – составной объект, содержащий 1 или более элементов любых типов, кроме функций. Структура может содержать массив любого типа.

Пример. Структура "Работник" (worker):

- таб. номер;

- Фамилия И.О.;

- должность;

- сумма к выдаче.

В языке C для определения структур применяется ключевое слово struct, в языке Basic для них специальное понятие не предусмотрено, однако реализовать структуру можно, используя тип данных, определяемый пользователем. Работа со структурами будет рассмотрена в других разделах.

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Каковы примерно максимальные целое и вещественные значения?

2. В каком языке отсутствует логический тип данных?

3. Есть ли отличия в правилах записи строковых литералов в языках C и Basic?

4. Можно ли в языке C задать произвольную нижнюю границу индекса?

5. Что такое длина измерения массива?

6. В каком языке есть ключевое слово для описания структур?

Контрольные вопросы

1. Чем отличаются операции над целыми данными и данными с плавающей точкой?

2. Как можно имитировать логический тип данных в языке C?

3. Как задать переменные типа string в языке C?

4. Чем отличается описание массива в языках C и Basic?

5. Есть ли в языке Basic возможность представления структур?

ВЫРАЖЕНИЯ

Выражение – это представление в тексте программы значения.

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

Оператор – это символ(ы) или ключевое слово, обозначающее некоторое действие над элементами выражения. Основные группы операторов:

- арифметические;

- сравнения;

- логические;

- конкатенации (сцепления символьных строк).

Если в одном выражении встречаются операторы разных групп, то порядок вычисления определяется приоритетом (порядок вычисления сверху вниз):

Арифметические

¯

Конкатенация

¯

Сравнения

¯

Логические

Для изменения порядка вычисления выражения (не в соответствии с приоритетом операторов) часть выражения заключают в круглые скобки.

В зависимости от числа операндов различают одноместные (унарные) и дву-местные (бинарные) операторы.

Пример.

a-b – бинарный оператор;

-a – унарный оператор.

Арифметические операторы

Основные

СBasic

возведение в степеньнет ^

умножение * *

деление / /

сложение + +

вычитание - -

Дополнительные

присвоение знака + - -

деление нацело нет \

остаток от деления % mod

увеличение, уменьшение ++ -- нет

Приоритет

+ (1) - (1) ++ -- ^

* / % -(1)

+ (2) - (2) * /

\

Mod

+ (2) - (2)

Замечания.

1. Числа в скобках указывают число операндов.

2. Двуместные операторы с одинаковым приоритетом в одном выражении выполняются в порядке записи слева направо.

Рассмотрим особенности выполнения некоторых операторов.

C

1. При делении целого на целое результат – целый.

2. Оператор % допустим только с целыми операндами, с другими вызывает ошибку во время трансляции. Результат имеет знак делимого.

Пример.

9/5à1 10/5à2 -5/3à-1 -5/-3à1 5/-3à-1

9%5à4 10%5à0 -5%-3à-2 5%-3à2 -5%3à-2

3. Всегда выполняется соотношение для целых: a=a/b*b+a%b.

4. Операторы ++ и -- означаютувеличение и уменьшение соответственно значения переменной на 1.

Пример.

k=4 k++ à k=5

m=-12 m-- à m=-13

Basic

Результаты выполнения операторов \ и mod операнды для целых операндов совпадают с результатами выполнения операторов / и % языка Си. Для операндов с плавающей точкой результаты вычисляются по замысловатым правилам и могут давать неожиданные результаты из-за ошибок округления, поэтому подобные операции выполнять не рекомендуется.

Операторы конкатенации

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

В языке Basic для этой цели применяются операторы:

& +

Оператор + выполняет сцепление, если оба операнда имеют тип string. В противном случае – это оператор сложения.

Пример.

"Собака" & " Бобик"

"Кошка" + " Мурка"

Операторы сравнения

Результат выполнения любого оператора сравнения – логическое значение (true|false), операндами в общем случае являются арифметические выражения. Для операторов используются общепринятые математические обозначения. Там, где действие оператора неочевидно, в скобках приведено пояснение.

CBasic

< <= > >= < <= > >= = <> (не равно)

== (равно) != (не равно)

Замечание. Операторы, состоящие из двух и более символов, называют составными, пробелы внутри них недопустимы.

Пример.

5<3 à false 5*5>=5+20 à true

Замечания.

1. В языке Basic сравнения, подобные приведенному в примере, называют числовыми. Допустимо также сравнение строк. Сравнение проводится посимвольно слева направо в соответствии с кодировкой символов. В кодировке Windows русские и латинские буквы упорядочены по алфавиту, причем заглавные буквы "меньше" строчных.

Пример.

"А" < "а" à true

"Ф" < "ф" à true

"Я" < "а" à true

Если строки имеют разную длину, то более короткая дополняется справа пробелами.

Пример.

"Алекс" < "Александр" à true "Павлов Иван" = "Павлов И.В." à false

2. В языке C сравнение строк выполняется с помощью специальных функций, рассматриваемых в последующих разделах.

Логические операторы

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

BasicC

not ® Не, логическое отрицание!

and, AndAlso ® И, логическое умножение, конъюнкция &&

or, OrElse ® Или, логическое сложение, дизъюнкция ||

xor ® исключающее Или (не эквивалентность) !=

eqv ® эквивалентность ==

imp ® импликация (включение) нет

Замечание 1. В нашей версии языка Basic операторы eqv и imp не поддерживаются. Новые операторы AndAlso и OrElse отличаются от операторов and и or соответственно тем, что, если значение результата уже определено значением операнда 1, то значение операнда 2 не вычисляется, для последних значение операнда 2 вычисляется всегда. То есть, если А в выражении А AndAlso В принимает значение false, то значение В не вычисляется, и наоборот, если А в выражении А OrElse В принимает значение true, то значение В не вычисляется. В языке C операторы && и || работают, как операторы AndAlso и OrElse соответственно. Эти свойства операторов позволяют программировать выражения, в которых вычисления 2-го операнда приводит к ошибке.

Пример.

i<n AndAlso x(i)<>0

Если массив x содержит n-1 элемент, то при i=n значение x(n) лежит за пределами отведенной под массив x памяти. В этом случае использовать оператор and для вычисления выражения нельзя!

Замечание 2. Операторы != и == имеют равный приоритет. Они имеют как бы двойное назначение: если операнды – арифметические выражения, то они трактуются как операторы сравнения, если операнды – логические выражения, то – как логические операторы.

Результат выполнения каждого оператора пояснен в таблице. Здесь A и B – выражения, которые могут принимать одно из двух значений: true|false. Любое выражение, не равное 0, трактуется как имеющее значение true, равное 0 – как false.

A B Not A A And B A Or B A Xor B A Eqv B A Imp B
false false true false false false true true
false true true false true true false true
true false false false true true false false
true true false true true false true true

 


Примеры. Верхнее выражение – на языке Basic, нижнее – на языке C.

1) условие попадания т.M(x,y) 2)условие непопадания т.M(x,y) в 1 и 3 квадрант

в треугольник круга радиуса 1 с центром в начале координат

y y

x>0 and y>0 and y<1-x 1 not (x*x+y*y<1 and x*y>0)

1 x>0 && y>0 && y<1-x!(x*x+y*y<1 && x*y>0)

F 1

T 0 x

x F

0 1

3)условие попадания т.M(x,y) в заштрихованную область

x*x+y*y<=1 and x<=0 and y<=0 or y=x and x>0

x*x+y*y<=1 && x<=0 && y<=0 || y==x && x>0

 

4)условие кратности целых значений

m mod n = 0

m%n == 0

Обращение к функции

Синтаксис обращения в языках C и Basic совпадает:

<имя_функции>([<аргумент>[,<аргумент]...])

<аргумент>:=<выражение>

Пример.

sin (2*x+5) abs (x-y)

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

Встроенные функции

Каждая среда разработки IDE включает библиотеки, содержащие объектные коды функций, сгруппированных по тематическому признаку. Их очень много. Здесь рассмотрим некоторые наиболее употребительные математические функции. Остальные будут рассмотрены в других разделах или предлагаются для самостоятельного изучения.

Назначение Basic C Комментарий
Абсолютное значение |x| abs(x) abs(x), fabs(x), labs(x) int, short Тип аргу- float, doubleà мента в longязыке C
Знак числа sign(x) нет =-1, если x<0; = 0, если x=0; = 1, если x>0;
Корень квадратный 2√x sqrt(x) sqrt(x) x>= 0
Целая часть |x| fix(x) нет fix(9.7)=9 fix(-9.7)=-9
Ближайшее большее целое значение ceiling(x) ceil(x) ceil(-9.7)=-9 ceil(9.7)=10
Ближайшее меньшее целое значение floor(x) floor(x) floor(-9.7)=-10 floor(9.7)=9
Экспонентаex exp(x) exp(x) x< 709,782712893
Возведение в степень xy нет pow(x, y)  
Натуральный логарифм ln x log(x) log(x) x>0
Десятичный логарифм lg x log10(x) log10(x) x>0
sin x sin(x) sin(x) Угол в радианах
cos x cos(x) cos(x) -------------------------------
tg x tan(x) tan(x) -------------------------------
arctg x atan(x) atan(x) -p/2<y<p/2
arctg y/x atan2(y, x) atan2(y,x) -p<z<p
arcsin x asin(x) asin(x) -p/2<y<p/2 -1<=x<=1
arccos x acos(x) acos(x) 0<y<p -1<=x<=1

Замечания.

1. В языке Basic аргументы могут иметь любой числовой тип. Результат в большинстве функций имеет тип double. Функция sign возвращает целое значение. Функции abs, fix, int возвращают результат, тип которого совпадает с типом аргумента. Данная версия транслятора рассматривает функции как методы определенного класса (типа пользователя). Соответственно обращение к ним принимает вид: <имя класса>.<имя функции>. Приведенные функции являются методами класса Math. Пример обращения:

y= math.abs (x^3-2)

Использование классов (объектно-ориентированный подход) будет рассматриваться в курсе "Высокоуровневые методы информатики и программирования" на примере языка C++.

Можно избежать применения имени класса math в тексте программы. Для этого в 1-й строке файла программы надо записать инструкцию вида: imports system.math.

2. В языке C большинство функций имеют аргументы и результаты типа double. Исключение – абсолютное значение. Функции abs, fabs, labs имеют в качестве аргумента и результата типы int, double, long соответственно. Отметим, что в качестве аргументов всех функций можно использовать данные любых числовых типов, если включить в состав программы файл прототипов данных функций. Такие файлы имеют расширение .h и о них речь пойдет позже. Прототипы всех приведенных функций заданы в файле math.h и вызывают преобразование аргументов и возвращаемого функцией значения к типам, указанным в прототипе.

Пример. Прототип функции ex.

doubleexp ( double );

Заключительные замечания

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

Для языка Basic последовательность преобразования следующая: sbyteàintegeràlongàsingleàdouble. Исключение: если один операнд имеет тип single, второй – тип long, то результат получает тип double. В случае невозможности преобразования к единому типу возникает ошибка: Type mismatchнесогласование типов.

Пример.

dim Operand1 as sbyte, Orerand2 as single, Operand3 as long, Operand4 as double

...................................................................................................................................

Operand1 + Operand2 à single

Operand2 + Operand3 à double

Operand1 + Operand3 à long

Operand2 + Operand4 à double

Для языка C схема автоматических арифметических преобразований аналогична. Исключение: данные float всегда преобразуются к типу double с тем, чтобы вычисления выполнялись с максимально возможной точностью.

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Чему равно выражение: -7\2? На каком языке оно написано?

2. Известно целое значение n. Как определить младшую цифру числа?

3. Как следует записать на языке C соотношение a<b<c?

4. Как на языке Basic записать условие попадания т.M(x,y) в квадрат с ценром в начале координат и стороной a?

Контрольные вопросы

1. В чем суть оператора ++?

2. Что означает оператор %? Как записывается аналогичный оператор в другом изучаемом языке?

3. В каком языке все операторы сравнения имеют одинаковый приоритет, а в каком нет?

4. Как кратко записать условие, показывающее, что выражения x и y имеют одинаковый знак?

5. Различаются ли правила обращения к функции в языках Basic и C?

 

ОСНОВНЫЕ ИНСТРУКЦИИ

Инструкция – это синтаксически завершенная единица языка, выражающая либо действие, либо объявление (декларацию).

Basic. Принято записывать по одной инструкции в строку, однако можно поместить и несколько через разделитель ": ". Более того, инструкция может занимать несколько строк. В этом случае каждая строка, кроме последней, должна заканчиваться разделителем <пробел>_.

C. Инструкции записываются произвольно. Разделяются символом "; ". Исключение составляет символ }. После него разделитель "; " можно не ставить. Переносить на другую строку следует, не разрывая лексемы.

Инструкции выполняются в порядке их следования, если отсутствуют инструкции перехода.

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

Объявления

Служат для указания свойств (характеристик) компонентов данных. В данной части курса в качестве таких компонент фигурируют переменные и массивы. Во многих случаях одновременно с заданием компонент происходит выделение памяти под данные. Объявления такого рода принято называть определениями. Здесь будем рассматривать только определения. Определения переменных и массивов должны предшествовать манипуляциям над ними в тексте программы.

C

Для этой цели используются инструкции описания типа: int, short, float, double, char и другие.

Пример.

int Kol, Volume, ChisloStudentsOfCourse[5];

float Dlina, Weight, Matrix[10][10];

char Mistake[50], Message[100];

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

Basic

В этом языке есть несколько инструкций для объявления. Пока введем только одну.

Формат:

dim <список>

<список>:=<элемент>[,<элемент>...]

<элемент>:={<переменная>|<массив>} as <тип>

Пример.

dim Kol as integer, Volume as integer, ChisloStudents(1 to 5) as integer

dim Dlina as single, Weight as single, Matrix(1 to 10, 1 to 10) as single

dim Mistake as string, Message as string

Замечание 1. Напомним, что в данной версии транслятора нижняя граница индекса всегда равна 0 (аналогично языку С), поэтому объявление вида ChisloStudents(1 to 5) неполностью использует отведенную под массив память и применять такие определения не рекомедуется. Определение целого массива из 5 элементов разумнее дать в виде ChisloStudents(4).

Замечание 2. В отличие от предыдущих версий Visual Basic 2008 не позволяет объявлять строки фиксированной длины вида Message as string *20.

Присваивание

C

Формат:

...[<переменная>=]<переменная>[<знак>]=<выражение>;

Пример.

x=-.127; i=i+1; a[i+1]=x*y+2* sin ((z+1)*(x-2));

Инструкция вида i++; фактически эквивалентна инструкции i=i+1;, поэтому ее также можно отнести к присваиванию.

Инструкция вида x+=a+b/2; эквивалентна инструкции x=x+a+b/2; и является просто сокращенной формой записи операции изменения значения переменной и в качестве знака может использоваться любой оператор, при котором полученная конструкция имеет смысл. В дальнейшем мы увидим, что таких знаков достаточно много.

Следует обратить внимание на многократное присваивание, которое весьма удобно.

Пример.

i=j=k=0; эквивалентно k=0; j=k; i=j;

i=1;

j=3;

a[ i ][ j ]=i=i+1; в результате получим i=2 a[2][3]=2

Basic

Формат:

[ let ]<переменная>[знак]=<выражение>

Ключевое слово let является анахронизмом и в данной версии языка после завершения инструкции удаляется из кода программы. Опция [знак] имеет тот же смысл, что и в языке С.

Пример.

x=-0.127: i+=1: a(i+1)=x*y+2*sin((z+1)*(x-2)): m(i, j)=i+1

Безусловный переход

Инструкция выполняет переход к другой выполняемой инструкции. Для осуществления перехода нужно указать место, в которое необходимо перейти. Для этого используется объект программы – метка, которая присоединяется к нужной инструкции. Такая инструкция называется помеченной.

<помеченная инструкция>:=<метка><инструкция>

<метка>:=<имя: >|<номер> à для Basic

<номер>:=<целое без знака>

Замечания ( Basic ).

1. Использование номера является анахронизмом – пришло из старых версий языка, сейчас лучше не использовать.

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

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

Сама инструкция имеет вид:

C

goto <метка>;

Пример.

goto label;

..........

label:x++;

Basic (устаревший вариант)

goto 10

.............

10: x=x+1

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



Поделиться:


Последнее изменение этой страницы: 2017-02-08; просмотров: 341; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.9.146 (0.132 с.)