Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Понятие переменной в программировании. Виды и типы переменных (Понятие переменных и их использование)

Содержание:

Вступление

Переменная — это именованный участок памяти, где хранится значение, которое быть может изменено программкой. Все переменные перед их внедрением обязаны быть оглашены. Общественная форма объявления[1] имеет такой вид:

Тут вид значит 1 из базисных либо заявленных разработчиком программного обеспечения типов (если нужно будет — с одним либо несколькими спецификаторами), а список переменных состоит из 1-го или же более личных номеров, разделенных запятыми. Ниже приведены примеры объявлений:

int i,j,l;

short int si;

unsigned int ui;

double balance, profit, loss;

Нужно будет припоминать, что в С имя переменной ни разу не описывает ее вид.

Объявление переменных быть может находиться в 3-х местах: внутри функции, в определении характеристик функции и вне всех функций. Это - места объявлений соответственно локальных, формальных характеристик функций и масштабных переменных.

Метод состоит из команд исполнителю. Исполнитель может, в собственную очередь, командовать иными исполнителями. Комп вполне возможно осматривать как все пригодный исполнитель, который правит иными исполнителями. Рассмотрим, к примеру, авто с инжекторы мотором. В нем работой мотора правит PC (его время от времени именуют микропроцессорный блок). Комп получает эти от разнородных датчиков (датчики положения коленчатого вала и дроссельной заслонки, температуры остужающей воды, скорости, детонации, воздуха и др.) и дает приказания выполняющим системам мотора - модулю зажигания, бензонасосу, форсункам мотора, регулятору холостого хода, системе продувки адсорбера и т.д. Этим образом, и датчики, и выполняющие системы мотора справляются компом, который выступает в роли многоцелевого исполнителя.

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

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

Таковым образом, PC авто, правящий работой, хранит в каждый момент времени в собственной памяти текущие скорость, передачу, нагрузку на движок, температуру остужающей воды, необходимую степень обогащённой смеси и прочие характеристики. Данные характеристики временами пере вычисляются на основании сигналов от многообразных датчиков. В зависимости от значений характеристик, PC передает те или же другие сигналы правящим системам двигателя.

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

Глава 1. Понятие переменных и их использование.

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

Понятие переменной в программировании имеет собственную специфику. С любой переменной связываются 3 объекта:

  • Тип этих - он обрисовывает большое количество вероятных значений переменной.
  • Имя (идентификатор) переменной - последовательность латинских букв и цифр, начинающаяся с буквы (и не очень длинная); оно употребляется для обозначения текущего ценности подходящей переменной в тексте программы.
  • Место в памяти, созданное для хранения текущего ценности переменной (размер его ориентируется типом переменной).
  • Практически переменная - это прием организации хранения и доступа для 1-го объекта этого вида. В языке наличествуют средства
  • создать (описать) переменную;
  • задать (записать в память) значение переменной, поменять его и прочесть (использовать в вычислениях).

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

Задание (изменение) текущего ценности переменной воплотит в жизнь оператор присваивания. Полный синтаксис:

<имя переменной >:= <выражение>

Например:

x:= 100.25;

n:= 3+5;

s:= 'ВАСЯ';

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

Например:

X: = (100.25+32.1*a)*SIN (alpha);

S: = 'ВАСЯ'+' '+last name

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

x:= 23;

x:= x + 2;

присвоит переменной x значение 25.

Подраздел описания переменных

В разделе описания традиционно наличествует подраздел описания переменных.

Program example;

var

m,n,time : integer ;

a : real ;

s : string ;

ch : char ;

begin

...

end.

Здесь m, n, time, a, s, ch - личные номера (имена) переменных, integer, real, string, char -- наименования шаблонных типов этих.

Обычнейшие шаблонные типы данных

Вид этих (integer, real, string, char,... ) задает:

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

integer - не чрезвычайно немалые (примерно до 215 ) целые количества. Для хранения такового количества в памяти применяется 2 б (16 битов).

Операции: +, - , *, div (деление нацело), mod (остаток от деления) отдают значение этого же вида. Например:

(3+7) div 4 = 2 17 mod 4 = 1

Операция обыкновенного деления / помимо прочего применима, но отдаёт количество иного вида -- real.

real - машинная имитация реальных количеств.

Операции: +, -, *, / (нет строительства в степень).

Ключевые интегрированные функции:

ABS(x) EXP(x)

ARCTAN(x) LN(x)

COS(x) SQR(x) - x*x

SIN(x) SQRT(x)

TRUNC(x) - (real --> integer)

char - знаки (буквы) из ASCII-таблицы; имеют номера (ASCII-коды) 0-255. Из числа них все есть строчные и заглавные буквы латинского и государственного (кириллица) алфавитов, знаки препинания, скобки, пробел и другие знаки (см. клавиатуру и ASCII таблицу). Наличествует 2 варианта написания символов:

• в одинарных кавычках: 'a', 'b', ' '(пробел), ','(запятая)...

• используя ASCII-коды символов: #97 (буква a лат.), #13 (Enter), #27 (Esc), ...

Операции:

+ - конкатенация (приписывание) знаков (результат имеет вид string): 'a' + 'b' = 'ab'.

Ключевые интегрированные функции:

Ord(x) - номер (ASCII-код) буквы;

Succ(x) - грядущая буква (в ASCII-таблице);

Pred(x) - предшествующая буква (в ASCII-таблице);

Chr(n) - буква номер n.

string - строчки (конечные последовательности) знаков. Точные строчки знаков (константы вида string) в тексте программы записываются в одинарных кавычках: 'abcd', 'Вася', 'Какой неплохой день! К ним относится помимо прочего бессодержательная строчка (последовательность длины 0), которая записывается.

Единственная операция над строчками знаков есть конкатенация (приписывание) строк. Она классифицируется +. Например: 'пар' + 'о' + 'воз' (будет 'паровоз').

s[i] обозначает i-тую букву строчки s:string.

Главные интегрированные функции:

length(s) - длина строчки s ;

copy(s,len,k) - подстрока длины len стоки s, начинающаяся с позиции k;

pos(s1,s) - выискивает 1-ое вхождение подстроки s1 в строчку s ; отдаёт номер 1 буквы.

Интегрированная процедура:

boolean - истинностные ценности TRUE и FALSE. Главные операции тут булевы связки not, end, or, что вполне возможно использовать не исключительно к истинностным значениям, но и к условиям. Например:

var

x:integer;

b,b1:boolean;

begin

...

x:=5;

b1:=FALSE;

b: = (x<1) or b1;

...

end .

С переменной вполне возможно скрупулезно исполнять 2 действия:

  • прочитать текущее значение переменной;
  • записать свежее значение в переменную либо, как заявляют специалисты, присвоить свежее значение переменной.

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

имя переменной:= выражение;

Символ:= читается, как присвоить значение. Во почти всех языках взамен него применяется просто символ равенства:

фамилия переменной = выражение;

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

скорость:= количество импульсов от датчика скорости /

(6 * интервал времени);

Переменная " количество импульсов от датчика скорости " на протяжении каждого интервала времени суммирует количество импульсов. В начале каждого интервала она обнуляется. Приобретенная в следствии скорость выражается в км/час. В случае если необходимо получить скорость в м/сек, тогда вдобавок производится последующее действие:

скорость:= скорость * 3600 / 1000;

В правой части употребляется старое значение данной переменной, вычисленное в м/сек. Потому что час имеет 3600 секунд, тогда при умножении на 3600 удается расстояние в метрах, проходимое за 1 час; после деления на 1000 удается расстояние в км. Вычисленное значение далее присваивается переменной " скорость ".

Суммируем произнесённое выше:

  1. универсальный исполнитель, либо комп, - это исполнитель, который может править иными исполнителями. Запись метода для исполнителя может включать команды, что он обязан передать подчиненным исполнителям, и команды, изменяющие внутреннее состояние самого все пригодного исполнителя;
  2. внутреннее состояние многоцелевого исполнителя ориентируется состоянием его памяти. Память - это материальный носитель (лента машины Тьюринга, ламповая либо ферритовая память первых PC, полупроводниковая память прогрессивных компьютеров), который хранит информацию. Данную информацию вполне возможно читать и перезаписывать;
  3. переменная - это область памяти многоцелевого исполнителя, сохраняющая порцию информации. Каждая переменная имеет фамилия и вид. Вид переменной ориентируется обилием всех значений, что у нее есть возможность брать на себя. Память многоцелевого исполнителя вполне возможно осматривать как набор переменных;
  4. с переменной вполне возможно исполнять 2 действия: прочесть ее текущее значение и записать в нее свежее значение (старое теряется). В алгоритмическом языке значение переменной читается, когда ее фамилия употребляется во всяком выражении, значение которого нужно определить. Для записи новенького ценности в переменную используется оператор присваивания, который имеет вид
  5. фамилия переменной:= выражение;
  6. При его исполнении поначалу рассчитывается значение выражения справа от символа присваивания:=, далее оно записывается в переменную. Выражение в правой части может включать фамилия переменной в левой части. В таком случае при вычислении выражения употребляется ветхое значение переменной.

Глава 2. Виды переменных.

2.1. Целочисленные переменные

Практически все целочисленные типы этих относятся к порядковым типам. Данные типы этих предполагают целые количества в определённом спектре. Точные названия целочисленных типов и спектры значений находятся в зависимости от точного языка программирования, от компилятора и от режима компиляции.

К примеру, вид этих Integer в Delphi имеет спектр -2147483648…2147483647, в тогда время как в Turbo Pascal вид этих Integer предполагает количества в спектре -35768…32767. В Free Pascal спектр значений вида Integer ориентируется подобранным режимом.

Так как Lazarus примет на вооружение компилятор Free Pascal, тогда всё произнесённое о типах этих по отношению к Free Pascal справедливо и для Lazarus.

Наконец, целочисленные типы этих Free Pascal перечислены в таблице 13.1.

Таблица 13.1. Целочисленные типы этих Free Pascal (Lazarus).

Тип Размер, байт Диапазон значений

Byte 1 0…255

Shortint 1 -128…127

Smallint 2 -35768…32767

Word 2 0…65535

Integer 2 либо 4 Зависит от режима компиляции

Cardinal 4 0…4294967295

Longint 4 -2147483648…2147483647

Longword 4 0...4294967295

Int64 8 -9223372036854775808...9223372036854775807

QWord 8 0...18446744073709551615

ПРИМЕЧАНИЕ

В Free Pascal типы Int64 и QWord не считаются порядковыми! Это значит, что вы не имеет возможности применять их, к примеру, для индексных переменных в циклах. Но я привёл их тут, чтоб в отдельности не обрисовывать позднее и собрать в некоем месте все целочисленные типы Free Pascal. В случае если некие слова вам не понятны - не пугайтесь. В своё время я обо всём поведаю подробнее.

В колонке ВИД приведены личные номера типов этих (ключевые слова, что показывают компилятору, к какому типу относятся те либо другие данные). Как применять данные личные номера, вы узнаете в последующих уроках.

В колонке ОБЪЕМ указан объем, который занимает вид этих в памяти компа. К примеру, целое полезное количество вполне возможно предположить различными типами: Byte, Word, Cardinal и др. Количество вида Cardinal будет занимать в памяти 4 б, как количество вида Byte – не более чем 1 б.

В колонке СПЕКТР указан спектр значений, которым оперирует вид этих. К примеру, количество вида Byte может воспринимать ценности от 0 до 255.

А сейчас практика. Напишем программку, которая выводит на экран спектры значений всех целочисленных типов этих. Начальный код данной программы приведён ниже:

Программа вывода на экран диапазонов целых чисел.

program td;

{$mode objfpc}{$H+}

uses

{$IFDEF UNIX}{$IFDEF UseCThreads}

cthreads,

{$ENDIF}{$ENDIF}

Classes

{ you can add units after this };

begin

Writeln('Byte : ', Low(Byte), '..', High(Byte));

Writeln('Shortint : ', Low(Shortint), '..', High(Shortint));

Writeln('Smallint : ', Low(Smallint), '..', High(Smallint));

Writeln('Word : ', Low(Word), '..', High(Word));

Writeln('Integer : ', Low(Integer), '..', High(Integer));

Writeln('Cardinal : ', Low(Cardinal), '..', High(Cardinal));

Writeln('Longint : ', Low(Longint), '..', High(Longint));

Writeln('Longword : ', Low(Longword), '..', High(Longword));

Writeln('Int64 : ', Low(Int64), '..', High(Int64));

Writeln('QWord : ', Low(QWord), '..', High(QWord));

Readln;

end.

Полагаюсь, вы не забывайте, как делать и беречь программы в Lazarus.

Шаблонная функция Low описывает наименьшее значение вида этих. Функция High характеризует предельное значение. С функциями WriteLn и ReadLn вы уже чуть-чуть знакомы. Более досконально о подпрограммах (процедурах и функциях) мы будем заявлять в подходящем разделе курса.

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

10

178

35278

Правда, это относится к количествам в десятичной системе счисления. Точно вы уже понимаете, что есть и прочие системы. Более обширно распространены двоичная, десятичная и шестнадцатеричная системы счисления.

Free Pascal поддерживает 4 формата записи целого числа:

  1. Десятичная запись. Просто количество, к примеру, 10.
  2. Шестнадцатеричная запись. Количество с префиксом $. К примеру, шестнадцатеричное количество $10 точно также десятичному 16.
  3. Восьмеричная запись. Количество с префиксом &. К примеру, восьмеричное количество &10 точно также десятичному 8.
  4. Двоичная запись. Количество с префиксом %. К примеру, двоичное количество %10 точно также десятичному .

2.2. Вещественные переменные

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

Real

Comp

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

Var sad, kod, hhh: Real; nnn, fokus: Single; pole: Double;

или

Var sad, kod, hhh: Real;

nnn, fokus : Single;

pole : Double;

Надлежит отметить, что при вводе вещественные переменные имеют все шансы представляться в разной форме, а при шаблонном выводе - представляться в форме произведения *.***E<знак>**. К примеру, количество 78,67 на выводе будет представлено так 7,8670000000E+01, а количество 0,00567 - 5,670000000E-3.

Примечание: Единственным конечно распознаваемым типом вещественных этих считается вид Real. Для обеспечения возможности применения других типов нужно включение {N+}, а для автомашин без интегрированных арифметических сопроцессоров {N+,E+}.

Всевозможные арифметические операции имеют все шансы содержать и переменные различных типов, при всем при этом вид эффекта ориентируется по старшинству операнда: Real-Longint-Integer-Word-Bute.

Обычнейшие способы ввода этих и вывода последствий на экран

Для ввода значений переменных лично с клавиатуры употребляются операторы Read(n1,n2,...); или же ReadLn(n1,n2,...);

Когда вводится 1 переменная, тогда применение двух переменных - равнозначно. При вводе нескольких переменных первым оператором после любой переменной нужно давить кнопку [Enter], а при применении 2 оператора все вводимые переменные надлежит разместить в 1 строчку и исключительно, потом надавить кнопку [Enter]. Пока же все перечисленные в операторах переменные не будут отнесены - последующая работа программы не начнется! Особенно надлежит отметить "пустой" оператор Readln;, который дает возможность беречь на экране выведенные слова до тех пор, пока же не будет нажата кнопка [Enter]. При неимении этого оператора по окончании работы эти вполне возможно просмотреть, нажав клавиши [Alt]+[F5]. Если в процессе работы выявится программная оплошность, приведшая к незапланированному счету, тогда остановить данный процесс вполне возможно нажатием кнопок [Ctrl]+[C].

Для вывода информации на экран PC применяются операторы Write (<выводимые переменные и тексты>);.

В первом операторе после вывода слова курсор остается на выводимой строке, во 2-м - перенесется на грядущую строку.

В данных операторах применяют и текстовые объяснения, что особенно важно не исключительно для придания последствиям более комфортного для восприятия вида, но и для прояснения того, что надлежит вводить.

Например:

Write('введите целое n и вещественное delta'); ReadLn(n,delta):

WriteLn('площадь треугольника=',sss,'его периметр=',per);

В случае после исполнения работы на экране будет замечен надпись:

Площадь треугольника=1,2356400000E+03,

его периметр=2,8340100000E+02.

Пример:

Program Pr01; первая тренировочная программа. Фигурными скобками отмечаются кометы к программке, что не компилируются и просто остаются в тексте

Var {Начало зоны описания переменных}

а1,dg : Integer;

dd,ura : Real;

Begin {Указание на исполнение программного блока. Присутствие его обязательно}

Write('введите целочисленную переменную а1'); ReadLn(а1);

Write('введите вещественную переменную dd'); ReadLn(dd);

dg:=а1*а1;

ura:=dd*dd;

WriteLn('квадрат введённого целого=',dg); WriteLn('квадрат вещественного=',ura);

Readin;

End. {служебное слово, отмечающее конец исполнения программного блока. Его присутствие - обязательно.}

2.3. Символьные переменные

Переменные, созданные для хранения единичных знаков, именуются символьными переменными. В языке Turbo Pascal для них определён вид этих CHAR. В переменную этого вида, быть может, помещён каждый из 256 знаков расширенного кода ASCII.

Таблица расширенного кода ASCII.

http://dezavarzin.narod.ru/3.1.gif

Объявление символьных переменных осуществляется в разделе объявления переменных при помощи карьерного слова CHAR.

Данный вид этих обладает какими-либо отличительными чертами. Традиционно ценности для переменных вида "CHAR" задаются в апострофах. К примеру, когда в программке есть описания

u, v: char

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

u:='a'; v:=u; v:='*' и т.д.

Апостроф (штрих) ' - принятая в Паскале форма кавычки - употребляется любой раз, когда значение вида "CHAR" явно указывается в программке (то есть считается константой). Исполнение операторов

u:='b'; write(u)

приводит к отображению на экране знака b.

Помимо того, наличествует возможность задавать ценности указанием именно числового ценности ASCII-кода. В таком случае Вы обязаны перед количеством, обозначающим код знака ASCII, поставить символ "#"

u:=#97

Прим.1. Дана последовательность знаков, заканчивающаяся эмблемой "/". Нужно подсчитать число восклицательных символов в этой последовательности.

Program ex_1;

var

c: char; { организация символьной переменной }

n: integer; { переменная для хранения числа "!" }

begin

read(c); { чтение первого знака с клавиатуры }

n:=0; { обнуление cчётчика "!" }

while c<>'/' do { условие завершения работы водом знака '/' }

begin

if c='!' then n:=n+1; { подсчёт знаков "!" }

read(c); { чтение грядущего знака }

end;

end.

Обратите внимание. В таблице ASCII великие латинские буквы и небольшие латинские буквы находятся подряд по алфавиту. Таковая упорядоченность раскрывает возможность применения в программках операторов цикла с параметром, имеющим вид "CHAR". Параметр цикла пробегает последовательность знаков в отмеченных границах. Исполнение оператора цикла

for c:='a' to 'z' do write(c)

где c символьная переменная, приводит к высвечиванию на экране последовательности всех небольших букв латинского алфавита:

abcdefghhijklmnopqrstuvwxyz

Исполнение оператора цикла

for c:='z' downto 'a' do write(c)

приведёт к выводу данных же букв в обратном порядке.

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

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

program ex_2;

label 1;

var c: real;

begin

1: write('x=);read(c);

writeln(' ,f(x)=',sin(sqrt(x)));

goto 1;

end.

Когда данная программа производится, на экране складывается последовательность строк

x=...,f(x)=...

x=...,f(x)=...

x=...,f(x)=...

. . . .

Для того чтоб остановить исполнение программы, требуется предпринять Особые меры - к примеру, отключить комп или же надавить комбинацию кнопок Ctrl-Break.

Другой вариант - программа, в процессе исполнения которой на экране часто встает вопрос, надлежит ли продолжать работу, или же остановить исполнение программы:

program ex_3;

var

x: real;

s: char;

begin

s:='д';

while s='д' do

begin

write('x=);read(c);

writeln(' ,f(x)=',sin(sqrt(x)));

writeln('продолжить?(д либо н)');

read(s);

write(' ');

end;

end.

Когда производится данная программа, на экране встает последующая последовательность строк:

x=...,f(x)=...

продолжить?(д или же н)

д

x=...,f(x)=...

продолжить? (д или же н)

д

. . . .

x=...,f(x)=...

продолжить? (д или же н)

н

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

Описание функций работающих с символьными переменными.

CHR(x: byte): char;

Преобразует целое количество, имеющее вид BYTE, в 1 знак ASCII-кода. Грядущая программа иллюстрирует возможности функции "CHR". Она выдаёт все знаки кода ASCII на экран. При данном какие-либо знаки ASCII-кода (например, 7, 10, 13) при обыденных условиях не имеют изображения, а употребляются для реализации Специализированных функций (пере - вод курсора и т.д.) Благодаря использованному в операторе Write формату любой из изображаемых знаков отделяется пробела (занимает 2 позиции)

Program ex_4;

var

i: byte;

begin

for i:=0 to 255 do write(chr(i):2);

end.

ORD(c: char): byte;

Функция Ord исполняет действие, обратное функции Chr, т.е. отдаёт порядковый номер знака параметра в таблице ASCII.

UpCase(c: char): char;

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

2.4. Логические переменные и выражения

Логический вид данных

При решении задач нередко потребуется выполнить какие-либо выяснения. К примеру, имеют все шансы появиться вопросы «верно ли что точное количество больше 10?» либо «правда, что в строковой переменной town располагается слово “Москва”?». Чтоб специалисту было проще действовать с этого семейства вопросами, в языке C# присутствует закономерный вид (bool[1] либо System.Boolean). Переменные логического вида (булевы переменные) имеют все шансы брать на себя одно из 2-ух значений (истина) либо false (ложь).

Оглашается логическая переменная обыкновенным для нас образом, инициализировать данную переменную вполне возможно незамедлительно при объявлении или же позже:

bool b1 = true;

bool b2;

b2 = false;

С логическим типом этих имеют дело в последующих случаях:

  • при определении истинности некого утверждения;
  • когда потребуется беречь в переменной лишь 2 ценности (например, включено или же выключено).

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

У булевых переменных, как и всех иных, есть функция ToString(). Вид этих System.Boolean кроме того поддерживает функцию Parse, параметром которой считается строчка, при всем при этом регистр букв не имеет ценности и все последние пробелы игнорируются:

string str = “ tRuE ”;

bool b1 = Boolean.Parse(str); // b1 точно также true

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

Операции сравнения

табл.1. Операции сравнения

табл. 14.1. Операции сравнения

Операция

Название

==

Равно

!=

Не равно

Меньше

Больше

<=

Меньше или равно

>=

Больше или равно

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

Итогом таковых операций будет значение закономерного вида – false либо true. Когда это значение потребуется сберечь, тогда надобно применять переменную закономерного типа:

bool b = (4 > 5);

после исполнения данной строки переменная b будет иметь значение false.

Обратите внимание, что значение вида bool не хранит информацию, какое из данных 2-ух количеств больше либо меньше, оно исключительно информирует подлинно это выражение или же нет.

Все операции сопоставления используются к числовым типам и типам-перечислениям. Но 2 из них == и != вполне возможно использовать к любым типам[2], т.е. вполне возможно сопоставлять и строчки и объекты и т.д.

Логические операции

С операндами закономерного вида вполне возможно создавать закономерные операции, это потребуется когда нужно выяснить трудоемкое условие. К примеру, в случае если мы желаем выяснить, попадает ли переменная x в спектр от 10 до 100, тогда это значит, что обязаны одновременно выполниться 2 условия: x больше 10 и x меньше 100. Записать итог в переменную вполне возможно так:

bool b = (x > 10) && (x < 100);

Слева от символа «=» пребывает булева переменная, а справа от символа «=» логическое (булево) выражение – это выражение, итог вычисления которого обеспечит значение вида bool.

Язык C# описывает последующие закономерные операции:

  • И – отдаёт правду, когда все операнды истинны, в прочих случаях (когда даже 1 операнд ложен) вворачивается ложь;
  • ЛИБО – отдаёт правду, когда даже 1 операнд истинен, в других случаях (все операнды ложны) вворачивается ложь;
  • Исключающее ЛИБО – отдаёт правду, когда операнды имеют различные значение, и ересь когда все операнды одинаковы.
  • НЕ – унарная операция, отдаёт противоположное значение.

табл.2. Логические операции

Знак

Операция

Операнд 1

Операнд 2

Результат

&&

И

true

true

false

true

false

не проверяется

True

false

false

||

ИЛИ

true

false

false

не проверяется

true

false

true

true

false

^

Исключающее ИЛИ

true

true

false

false

true

false

true

false

false

true

true

false

!

НЕ

true

false

false

true

Ценности всех закономерных операций ниже приоритета операций сопоставления. Операция && величается conditional-AND (условное И), || – conditional-OR (условное ИЛИ). Данные операции несколько уменьшают вычисления – в каких-либо случаях 2-ой операнд не рассчитывается. К примеру, оператор &&: когда в цепочке выражения встретился операнд со значением false – вычисление выражения прекращается, т.к. уже светло, что его значение будет false. Для оператора || наоборот: как встретилось true – выражение вычислено и итог true.

При вычислении ценности этого выражения предварительно рассчитывается операнд «x != 0». Когда переменная x равна нулю, тогда значение этого операнда – false и операнд «y/x > 1» уже не рассчитывается. Это чрезвычайно как следует, потому что при попытке его определить вышло бы прерывание программы вследствие деления на ноль.

2.5. Переменные-массивы

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

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

Ниже приведены примеры объявления переменных массива, что не творят массив:

int[] ai; // массив вида int

short[][] as; // массив из массивов вида short

Object [] ao, // массив вида Object

otherAo; // массив вида Object

shorts, // скаляр short

aas[][]; // массив из массивов вида short

Ниже приведены какие-либо примеры объявления переменных массива, что делают массив объектов:

Exception ae[] = new Exception[3];

Object aao[][] = new Exception[2][3];

int[] factorial = { 1, 1, 2, 6, 24, 120, 720, 5040 };

char ac[] = { 'n', 'o', 't', ' ', 'a', ' ',

'S', 't', 'r', 'i', 'n', 'g' };

String[] aas = { "array", "of", "String", };

Скобки имеют все шансы появляться, являясь частью вида сначала описаний, или же являясь частью описания для точной переменной, либо в обоих случаях сходу, как в данном примере:

byte[] rowvector, colvector, matrix[];

Это объявление эквивалентно следующему:

byte rowvector[], colvector[], matrix[][];

Как лишь объект массива сотворен, его длина ни разу не меняется. Чтоб сделать переменную-массив, ссылающуюся на массив другой длины, необходима гиперссылка на разные массивы, которая обязана быть присвоена переменной.

В случае если переменная-массив v имеет вид A[], где A - ссылочный вид, v может содержать гиперссылку на экземпляр всякого вида массив B [], если соблюдать условие что B, быть может, присвоен A. Это может происходить вследствие времени исполнения на позднем присваивании; для обсуждения.

2.6. Текстовые строки

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

Для текстовых строк отнесены операции конкатенации (объединение) строк. Данная операция быть может, сделана при помощи оператора «+» либо способа String.Сoncat, сопоставление строк: операторы равенства == и !=. Оператор [] работает для доступа (только для чтения) к отдельным знакам объекта string. К примеру, сообщество строк:

string str1="Катя";

string str2="Иванова";

string res = str1+ " "+ str2;

Console.WriteLine(res);

Строчка res будет следующей: ”Катя Иванова”.

Данный же итог вполне возможно получить при помощи способа Concat:

string res1 = String.Concat(str1, " ",str2);

В перечне аргументов способа Concat, быть может, максимум 4 членов. В приведенном выше случае их три.

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

Для работы со строчками отнесены способы класса String.

1. Способ Substring(n, m) – извлечение подстроки длиной m, начиная с n-го знака. В случае если m не предписано, тогда выводится весь «хвост» строчки, начиная с n-го знака. К примеру, использование способа Substring для строчки res:

string str1 = "Катя";

string str2 = "Иванова";

string res = str1 + " " + str2;

Console.WriteLine(res);

string res2 = res.Substring(5, 7);

Console.WriteLine(res2);

2. Способ Insert(n, st) – вставка подстроки st в начальную строчку, начиная с n-ой позиции. В этом случае нужно будет сделать новейшую переменную, в какой сначала будет автоматом продублирована начальная строчка, а потом сделана важная операция. (Заметим, что в C# ровная модификация существующей строчки невозможна.) Например,

string res3 = "Катя";

string res4 = res3.Insert(4, " Иванова");

Console.WriteLine(res4);

В итоге в res4 будет ”Катя Иванова”.

3. Способ Replace(st, st1) – смена подстроки st новой подстрокой st1 либо смена какого-нибудь знака во всем тексте на другой знак. Например,

string str = "Катя Иванова";

string str1 = str.Replace("Катя","Екатерина");

В эффекте будет str1 = "Екатерина Иванова".

4. Способ Remove(n, m) – удаление из строчки фрагмента данной длины m, начинающегося с данной позиции n. Например,

string res = "Катя Иванова – моя подруга";

string res1 = res.Remove(4, 8);

Console.WriteLine(res1);

Удаляются 8 знаков, начиная с 4-го (пробел после слова ”Катя”). В эффекте будет res1 = ”Катя – моя подруга”.

5. Способ ToString() – получение строкового представления объекта числового вида. Внутри скобок может ничего не присутствовать.

Например,

double a = 5.0;

string s = a.ToString("f3");

Console.WriteLine(s);

Console.WriteKey();

6. Способ Split (приминается к экземпляру класса String, как и описанные выше методы) воплотит в жизнь разбор строчки, т.е. дает возможность выделить отдельные слова либо иные сочетания знаков, разделенные некоторыми разделителями, перечисляемыми в массиве знаков вида char[], являющемся аргументом способа Split. Например,

string str = "собака, кот играют вместе";

string[] strarr = str.Split(new Char[] {' ',','});

foreach(string res in strarr)

{Console.WriteLine(res);}

Console.ReadKey();

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

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

Каждый отдельный знак строчки считается значением вида char, и быть может, выделен в переменную вида char. К примеру, при исполнении оператора

char s = str[5];

для str из предшествующего примера s получит значение a.

Для работы с отдельными знаками строчки применяют способы текстуры Char. К примеру, статический способ Char.IsDigit(s), где s – переменная вида char (отдельный знак строки). Данный способ отдаёт значение true, если s – цифра и false, а когда s – не цифра.

Прим. 6.1. В начальном тексте одно слово от иного отделено одним пробелом. Сформировать текст, в каком одно слово от иного отделяется 2 пробелами:

using System;

class Program

{static void Main()

{string str1 =

"Введите верхний треугольник "

+ "матрицы по строкам";

string str2 = "";

for (int i = 0; i < str1.Length; i++)

{if (str1[i] == ' ')

{str2 = str2 + str1[i];}

str2 = str2 + str1[i];}

Console.WriteLine(str1);

Console.WriteLine(str2);}

}

Прим. 6.2. Найти слова, которые начинаются и заканчиваются на ту же букву:

using System;

class Program

{static void Main()

{string str1 = "текст верхний треугольник"

+ "текст треугольник ";

Console. Write Line(str1);

Console.WriteLine();

int i = 0, j = 0;

while (i < str1.Length)

{if (str1[i] == ' ')

{if (str1[i - 1] == str1[j])

{Console.WriteLine(

str1.Substring(j, i - j));}

j = i + 1; i++;}

else

{i++;}

}

}

}

Прим. 6.3. Подсчитать, какое количество словечек в тексте наступает на букву т. Слова в тексте разделены пробелами:

using System;

class Program

{static void Main()

{string str1 = "текст верхний треугольник"

+ "теекст треугольник верхний";

Console.WriteLine(str1);

Console.WriteLine();

string[] masstr = str1.Split(' ');

int k = 0;

for (int i = 0; i < masstr.Length; i++)

{if (masstr[i][0] == 'т') k++;}

Console.WriteLine(k);

Console.ReadKey();

}

}

Прим. 6.4. Найти, какое количество в установленном тексте в отдельности цифр (Digit), букв (Letter), заглавных букв (Upper) и разделителей (Separator):

using System;

class Program

{

static void Main()

{

string str = "g E r t R 1 2 d K";

Console.WriteLine(str);

Console.WriteLine();

int k = 0, l = 0, m = 0, j = 0;

for (int i = 0; i < str.Length; i++)

{if (Char.IsDigit(str[i])) k++;

if (Char.IsLetter(str[i])) l++;

if (Char.IsUpper(str[i])) m++;

if (Char.IsSeparator (str[i])) j++;}

Console.WriteLine(

"цифры {0} буквы {1} заглавные буквы "

+"{2} разделитель {3}", k, l, m, j);

}

}

Глава 3. Создание массива

Массив создается выражением творения массива либо инициализатором массива.

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

Инициализатор массива делает массив и обеспечивает изначальные ценности для всех компонент (Это большая разница в сравнении с Си и Си ++, где это вполне возможно для инициализатора массива, определяющего изначальные ценности для каких-либо, но не всех компонент массива.)

3.1. Доступ к массиву

К составляющей массива обращаются при помощи выражения доступа к массиву, которое состоит из выражения, чье значение - гиперссылка на массив, сопровождаемая индексным выражением, заключенным в скобки [], как в A[i]. Индексация всех массивов наступает с 0. Массив длиной n быть может, индексирован целыми от 0 до n-1.

Массивы обязаны быть индексированы значениями вида int; short, byte, или же кроме того в роли значений индекса имеют все шансы употребляться ценности вида char, по следующим причинам они подвергаются одноместному числовому расширению и становятся значениями вида int (т.е. целые). Попытка доступа к составляющей массива при помощи индекса значение, у которого вида long вызовет оплошность времени компиляции.

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

Массивы: пример

Пример:

class Gauss {

public static void main(String[] args) {

int[] ia = new int[101];

for (int i = 0; i < ia.length; i++)

ia[i] = i;

int sum = 0;

for (int i = 0; i < ia.length; i++)

sum += ia[i];

System.out.println(sum);

}

}

который вывод:5050

заявляет переменную ia, являющуюся переменной вида массив из целых (int), другими словами int[]. Переменная ia - инициализируется, чтоб сослаться на снова разработанный объект массива, разработанного выражением творящим массив. Выражение, создающее массив описывает, что массив обязан иметь 101 составляющую. Длина массива доступна для применения поля length, как показано в образце программы, заполняющей массив целыми значениями от 0 до 100, которая выводит на экран необходимую сумму данных значений.

3.2. Инициализаторы массивов

Инициализаторы массивов имеют все шансы быть отнесены в описании, создавая массив и присваивая некие исходные значения:

ArrayInitializer:

{ VariableInitializersopt ,opt }

VariableInitializers:

VariableInitializer

VariableInitializers , VariableInitializer

Для большей ясности последующее повторяется:

VariableInitializer:

Expression

ArrayInitializer

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

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

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

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

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

Как в примере:

class Test {

public static void main(String[] args) {

int ia[][] = { {1, 2}, null };

for (int i = 0; i < 2; i++)

for (int j = 0; j < 2; j++)

System.out.println(ia[i][j]);

}

}

который выводит:

1

2

до происхождения NullPointerException при попытке индексирования 2 составляющая массива ia, который равен null.

3.3. Члены массива

Члены массива следующее:

public final поле length (длина), которое имеет количество компонентов массива (length (длина) быть может, лишь неотрицательной)

public способ clone, который переопределяет способ такого же фамилии в классе Object и вовсе не генерирует контролируемых исключительных обстановок.

Массив, следовательно, имеет такие же самые способы, что и последующий класс

class A implements Cloneable {

public final int length = X;

public Object clone() {

try {

return super.clone();

} catch (CloneNotSupportedException e) {

throw new InternalError(e.getMessage());

}

}

}

Любые массив реализуется интерфейсом Cloneable. Данные массивы считаются cloneable, как показано в тестирующей программе:

class Test {

public static void main(String[] args) {

int ia1[] = { 1, 2 };

int ia2[] = (int[])ia1.clone();

System.out.print((ia1 == ia2) + " ");

ia1[1]++;

System.out.println(ia2[1]);

}

}

Которая выводит:

false 2

и демонстрирует что составляющие массивов, обозначенных через ia1 и ia2, считаются всевозможными переменными. (В любых языка Ява данный образчик сбивается при компиляции, по следующим причинам компилятор ошибочно считал, что способ clone для массива может генерировать CloneNotSupportedException.)

Способ clone многомерного массива делает исключительно одномерный новейший массив. Подмассивы оказываются едиными, как показано в случае программы :

class Test {

public static void main(String[] args) throws Throwable {

int ia[][] = { { 1 , 2}, null };

int ja[][] = (int[][])ia.clone();

System.out.print((ia == ja) + " ");

System.out.println(ia[0] == ja[0] && ia[1] == ja[1]);

}

}

Который выводит:

false true

и демонстрирует, что массивы вида int[], которыми считаются ia[0] и ja[0] - это 1 и такой же массив.

Вывод

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

Ярлычок, так заявить. Согласитесь, если Вы присвоите переменной UserName значение "Иванов Пётр Автагенович", тогда в последующем использовать

8 знаков проще, чем 20 три!!! Переменные имеют все шансы содержать

почти что любую информацию.

Чтобы хорошо применять переменную, необходимо её вначале заявить, зарезервировать под неё память. Для этого применяются последующие основные слова: Dim, Private, Public, Static, Global. Предполагаю ничего не позабыл.

Переменные вполне возможно оглашать на уровне модуля и на уровне процедуры. Под уровнем модуля предполагается часть формы General и обычный модуль, а под уровнем процедуры имеется в виду Sub, Function и т.д.

применения Static. Обрисовывает переменные лишь на уровне процедуры.

Переменная, описанная на уровне процедуры, "живёт" лишь в пределах

данной процедуры в течение работы прибавления.

применения Dim. Обрисовывает переменные, как на уровне модуля, так и на уровне

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

Переменная, описанная на уровне модуля, доступна для всех процедур данного модуля. Т.е. в случае если Вам необходима переменная, которую видят все функции и процедуры, то и заявите её со словом Dim на уровне модуля.

Также юзер может творить собственные личные типы этих! Надо это, например, в случае если у Вас есть группа деталей, связанных по смыслу. Создаётся он с помощью основного слова Type. Для начала образчик. Вы пишите программку для какого-нибудь торгового центра, где артикль, дата поступления и, к примеру, срок годности постигаемого продукта обязаны вводиться в комп и, соответственно, присваиваться переменным.

Список использованных источников

  1. Джон K. ВанДик , Мэт Вестгейт. Pro Drupal 7 Development: Third Edition / Todd Tomlinson . John K. VanDyk - Apress, 2010 .
  2. Стивен Хольцнер. РНР в примерах. / Стивен Хольцнер. М.: 000 «Бином-Пресс», 2007 г. Пер. с англ. 352 с
  3. Ларри Ульман. Ульман Л. Основы программирования на РНР:/Ларри Ульман. Пер. с англ. - М.: ДМК Пресс, 2001. -288 с.: ил. (Самоучитель).
  4. Александр Мазуркевич. MB РНР: настольная книга программиста /Александр Мазуркевич, Дмитрий Еловой. — Мн.: Новое знание, 2003. — 480 с.: ил
  5. Томсон Лаура. Разработка Web-приложений на РНР и MySQL: Пер. с англ. /Лаура Томсон, Люк. Вел-
  6. лингв. — 2-е изд., исп. — СПб: ООО «ДиаСофтЮП», 2003. — 672 с.
  7. Гутманс Э., Баккен С, Ретанс Д. PHP 5. Профессиональное программирование./ Пер. с англ. СПб: Символ - Плюс, 2006. 704 с., ил.
  8. М. Дубаков. Веб-мастерен. / Санкт-Петербург, BHV, 2002.
  9. Материалы официального сайта CMS Drupal http://drupal.org/ (link is external)
  10. Материалы и техническая документация сайта русскоязычного сообщества http://drupal.ru/ (link is external)
  11. Статья "Как работает система фильтров" сайта http://xandeadx.ru/blog/drupal/292 (link is external)
  12. Cтатья "Друпал как MVC Framework " сайта : http://www.cookieslovers.com/content/dru (link is external)...
  13. Схемы взаимодействия модуля и ядра друпал сайта : http://lin-clark.com/blog/exploring-drup (link is external)...
  14. Материалы официального сайта языка программирования PHP http://www.php.net/