Инструкция if. пустая инструкция

Реализует базисную вычислительную структуру – развилку.

C

Формат:

if();

[else;]

В случае, если принимает значение true (¹0), то выполняется . В случае, если принимает значение false (=0), то выполняется . Правильно языка в каждой ветви должна быть лишь одна инструкция. В качестве любой из руководств может употребляться вторая инструкция if. Такие руководства именуют положенными. Инструкции, входящие в состав инструкции if, для удобства чтения текста принято сдвигать вправо на 3-5 позиций.

Примеры.

if(ab) if(x*x+y*yr*r)z=0;

c=a;

else x+1, в случае, если x

c=b; y= y=x+1;

1-x, в случае, если x=0 else

y=1-x;

Положенные if

if(xy) x*x-5, в случае, если x

if(z==0) y= Ox+3, в случае, если 0

x=5; x-7, в случае, если x5

Else

x=-5; if(x

else y=x*x-5;

if(z10) else

y=5; if(x

else y=sqrt(x)+3;

y=-5; else

y=x-7;

Безлюдная инструкция (имеется лишь в языке C) имеет форму: ;.

Пример.

if(xy)

if(z==w)

if(w

y=1;

Else

p=q; //При xy z!=w переход к инструкции с меткой m1

else ; // Безлюдная инструкция

Else

x=4;

m1:z=5;

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

Basic

Употребляются 2 формы инструкции If.

Однострочная форма.

Формат:

If Then [] [Else ]

Замечания.

1. Эта форма инструкции If записывается в одну строчок.

2. Инструкции за словом Thenмогут отсутствовать лишь при наличии в инструкции If слова Else.

3. Руководств за словами Then и Else возможно более одной. В этом случае они отделяются друг от друга знаком : .

Пример.

If x*x+y*yr*r Thenz=0

If ab Thenc=a : d=b Elsec=b : d=a

Блочная форма (цепочка).

Формат:

If [Then]

[]

[ElseIf [Then]

[]

]…

[Else

[]

]

End If

Замечания.

1. Слово Ifэтой формы должно быть первым в строчке. Слово Then возможно не записывать.

2. Количество опций (частей) ElseIfв инструкции не ограничено, но рекомендуется применять не более 3, потому, что текст делается не хорошо читаем. Для программирования большего числа альтернатив существует вторая инструкция, обрисованная ниже в данном разделе.

3. Форма непременно обязана заканчиваться инструкцией End If.

4. При исполнении производится последовательная проверка условий. Когда какое-либо из них принимает значение True, выполняются следующие за соответствующим словом Then инструкции и управление передается на инструкцию, следующую за инструкцией End If. Если не будет действительно ни одно из условий, то выполняются инструкции, следующие за словом Else.

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

6. Транслятор отличает эту форму по отсутствию в строчке по окончании слова Then вторых руководств, не входящих в инструкцию If. Допустим лишь комментарий.

Примеры. Вычислить:

x*x-5, в случае, если x

y= Ox+3, в случае, если 0

x-7, в случае, если x5

If x

y=x*x-5

ElseIf x

y=Sqrt(x)+3

Else

y=x-7

End If

Положенные руководства:

If xy Then

If z=w Then

If w

y=1

Else

p=q

End If

‘при xy and zw переход к инструкции с меткой m1

End If

Else

x=4

End If

m1:z=5

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

Составная инструкция

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

Формат:

{;[;]…}

Пример. Отыскать x=max(a, b), y=min(a, b).

if(ab){

x=a; y=b;

}else{

x=b; y=a;

}

В языке Basicтакой инструкциинет по той же причине, что и безлюдной инструкции.

Циклы

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

Обобщенная блок-схема цикла складывается из следующих блоков (см. раздел 1.3): задание начальных значений, проверка условия продолжения (окончания) цикла, тело цикла, изменение условия продолжения (окончания) цикла.

Примеры. Программирование циклов без применения инструкции цикла.

Дано: {ai}, i=1…100. Отыскать сумму(ai0) и сумму(ai

C

u=v=0; i=0; // Инициализация цикла

begin: if(i=100) gotoend; // Условие окончания

if(a[ i ]0)u+=a[ i ]; if(a[ i ]

i++; // Изменение условия

goto begin; // Переход к началу

end: ;

Basic

u=0 : v=0 : i=0 ‘ Инициализация цикла

begin: If i=100 Then Gotokonec ‘ Условие окончания

If a( i )0 Then u+=a(i) ‘ Тело

Ifa( i )

i+=1 ‘ Изменение условия

Goto begin ‘ Переход к началу

konec: …………………………….

Дано: {ai}, i=1…100. Отыскать y=max{ai} и его номер.

С

MaxElem=a[0]; NumbMaxElem=i=1; // Инициализация цикла

Begin: if(i=100) gotoEnd; // Условие окончания

if(MaxElem

MaxElem=a[ i ]; NumbMaxElem=i+1; //

} // цикла

i++; // Изменение условия

goto Begin; // Переход к началу

End: ;

Basic

MaxElem=a(0) : NumbMaxElem=1 : i=1 ‘ Инициализация цикла

Begin: If i=100 GotoKonec ‘ Условие окончания

If MaxElem

i+=1 ‘ Изменение условия

Goto Begin ‘ Переход к началу

Konec: …………………………………….

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

Пример. Цикл с постусловием.

MaxElem=a(0) : NumbMaxElem=1 : i=1

Begin: IfMaxElem

i+=1

If i

Konec: …………………………………….

Циклы с предусловием

самый употребительный тип инструкции цикла. Существует пара форм таких руководств и в языке C, и в языке Basic. Назовем их условно циклы whileи циклы for.

Циклы while

C

Формат:

while();

Эквивалентная схема:

label: if(){; goto label;}

…………………………………………………………………

Замечания.

1. Тело цикла – 1 инструкция. Следовательно, при необходимости исполнения в теле нескольких действий необходимо применять составную инструкцию.

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

3. Увидим, что задание начальных значений в инструкцию не входит. Следовательно, для данной цели нужно применять отдельные руководства, расположив их перед инструкцией while.

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

Пример. Отыскать Sxn/n!,n=1,2,…, до тех пор пока |un|5e-6.

Рекуррентное соотношение: un/un-1=xn*(n-1)!/xn-1*n!=x/n aun=un-1*x/n

s=0;

u=n=1;

while(fabs(u)5e-6){

u *= x/n; s += u; n++;

}

Basic

Формат:

Do While

Loop

Пример. Тот же.

s=0 : u=1 : n=1

Do While Abs(u)5e-6

u *= x/n : s += u : n += 1

Loop

Допустима вторая разновидность данной инструкции:

Do Until

Loop

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

Пример.

s=0 : u=1 : n=1

Do Until Abs(u)

u *= x/n : s += u : n += 1

Loop

Имеется еще 1 инструкция, более похожая на инструкцию языка C:

While

End While

Трудится так же, как инструкция Do While … Loop.

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

— число повторений тела цикла не выяснено;

— малоизвестна закономерность повторений либо она сложна.

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

Циклы for

C

Формат:

for([];[];[])

[];

Эквивалентная схема

;

while(){

;

}

Замечания.

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

2. Тело цикла – одна инструкция, которая может отсутствовать.

Примеры.

Дано: {ai}, i=1…100. Отыскать сумму(ai0) и сумму(ai

u=v=0;

for(i=0; i

if(a[ i ]0)u+=a[ i ]; if(a[ i ]

}

Отыскать Sxn/n!,n=1,2,…, до тех пор пока |un|5e-6.

s=0;u=1;

for(n=1; fabs(u)5e-6; n++){

u *= x/n; s += u;

}

Выяснить число цифр натурального числа n.

for(k=0; n!=0; n/=10)k++;

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

for(i=0; i=0; i++); // Тело цикла отсутствует

if(i==100){

y=0;

}else{

y=a[ i ];

}

Замечания.

1. Как видно из примеров, практически все циклы применяют для собственной организации некую переменную, которую именуют параметром либо счетчиком цикла. См. переменные i, n, n, i в порядке следования примеров. Эту переменную не рекомендуется изменять в теле цикла, потому, что логика метода делается запутанной.

2. По окончании окончания цикла параметр сохраняет последнее присвоенное значение. В последнем примере i равняется 100, в случае, если отрицательных элементов в массиве нет, либо равняется первому по порядку следования в массиве индексу отрицательного элемента.

3. Это самая универсальная форма инструкции цикла.

Basic

Употребляется более несложная форма инструкции for, которую время от времени именуют циклом типа арифметической прогрессии.

Формат:

For = To [Step ]

Next []

Эквивалентная схема:

=

Do While 0 And = Or _

=0 And

+=

Loop

Замечания.

1. — переменная (без индексов!) числового типа, , , — арифметические выражения.

2. В случае, если опция (часть инструкции) Step отсутствует, то ход равен 1.

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

4. Значение по окончании окончания цикла равняется последнему присвоенному значению (как в языке C).

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

Пример. Дано: {ai}, i=1…100. Отыскать сумму(ai0) и сумму(ai

u=0 : v=0

For i=1 To100

If a(i)0 Thenu += a[i] : Ifa(i)

Next i

Циклы с постусловием

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

C

Формат:

do while ;

Эквивалентная схема:

label: ;

if()goto label;

Пример. Дано: {ai}, i=1…100. Отыскать Sai и Pai.

s=i=0;

p=1;

do {

s += a[ i ]; p *= a[ i ]; i++;

} while(i

Basic

Формат:

Do

Loop {While |Until}

Пример. Тот же.

s=0 : i=0 : p=1

Do

s += a( i ) : p *= a( i ) : i += 1

Loop While i=100

Положенные циклы

Сущность: инструкция тела цикла имеется вторая инструкция цикла.

Примеры.

1.Умножение матриц. C=A*B, где:

{aik}, i=1… m, k=1… n; {bkj}, k=1…n, j=1… l; {cij}, i=1…m, j=1…l cij=Saik*bkj

C

for(i=0; i

for(j=0; j

c[ i ][ j ]=0;

for(k=0; k

c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ];

}

}

}

Basic

For i=0 Tom-1

For j=0 Tol-1

c( i, j )=0

Fork=0 Ton-1

c( i, j ) += a( i, k )*b( k, j )

Nextk

Next j

Next i

2.Сортировка по неубыванию элементов массива способом пузырька. самый рациональный метод.

C

PrLast=n-1; //Индекс прошлой последней перестановки

while(PrLast0){

CurLast=0; //Индекс текущей последней перестановки

for(i=0;i

if(x[i]x[i+1]){ //Имеется перестановка

Buf=x[i];x[i]=x[i+1];x[i+1]=Buf;CurLast=i;

}

}

PrLast=CurLast;

}

Basic

PrLast=n-1 //Индекс прошлой последней перестановки

Do While PrLast0

CurLast=0 //Индекс текущей последней перестановки

For i=0 ToPrLast-1

If x(i)x(i+1)Then//Имеется перестановка

Buf=x(i):x(i)=x(i+1):x(i+1)=Buf:CurLast=i

End If

Next i

PrLast=CurLast

Loop

3.Цикл с вещественным (дробным) параметром. Вычислить значение функции P(x)=anxn+an-1xn-1+…+a1x+a0 при трансформации x от 2 до 3 с шагом dx=0.1.

Схема Горнера – вычисление полинома (многочлена): вывод формулы.

a3x3+a2x2+a1x+a0= (a3x+a2)x2+a1x+a0= ((a3x+a2)x+a1)x+a0

C

j=-1;

for(x=2; x

j++;

p[ j ]=0; // Вычисление значения полинома для заданного x

for(i=n; i=0; i—){

p[ j ]=p[ j ]*x+a[ i ];

}

}

Ограничение x 3.05 выбрано из-за вероятных неточностей округления дробного значения параметра. При ограничении 3.0 нет гарантии исполнения цикла при x=3.

Basic

j=-1

For x=2 To 3.05 Step 0.1 ‘ Формирование массива значений

j=j+1

p( j )=0 ‘ Вычисление значения полинома для заданного x

For i=n To 0 Step -1

p( j )=p( j )*x+a( i )

Next i

Next x

4. Дана матрица {aik}, i,k=1…10. Отыскать {bi}, i=1…10, где

1, в случае, если в i-й строке диагональный элемент велик

bi=

0, в случае, если нет

C

for(i=0; i

for(k=0; k

if(k==10){

b[ i ]=1;

}else{

b[ i ]=0;

}

}

Basic

For i=0 To9

k=0

Do While k

k += 1

Loop

If k=10 Thenb(i)=1 Elseb(i)=0

Next i

Управляемые переходы

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

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

Инструкция break

Передает управление инструкции, конкретно следующей за инструкцией цикла либо switch (см. ниже).

Формат:

break;

Эквивалентная схема:

for(e1; e2; e3){ for(e1; e2; e3){

…………………………… ………………………………

if()break;if()goto exit;

…………………………… ………………………….

} }

……………………. exit:…………………………

Пример. Дано {xi}, i=1…30. Отыскать длину первой подпоследовательности, состоящей лишь из хороших элементов.

pr=false;

for(kol=i=0; i

if(x[ i ]0){

kol++; if(!pr)pr=true;

}

if(x[ i ]

}

Замечание. Практически в любое время без инструкции break возможно обойтись.

Пример. Тот же.

fl=true; pr=false;

for(kol=i=0; i

if(x[ i ]0){

kol++; if(!pr)pr=true;

}

if(x[ i ]

}

Инструкция continue

Приводит к переходу в финиш тела цикла (правильнее, к вычислению выражения 3, после этого к проверке условия исполнения цикла (выражение 2) в инструкции forили конкретно к проверке условия в руководствах while и do).

Формат:

continue;

Эквивалентная схема:

for(e1; e2; e3){ for(e1; e2; e3){

…………………………… ………………………………..

if()continue;if()goto next;

…………………………… ………………………………..

} next:;

……………………………….. }

Пример. Обработка хороших элементов массива.

for(i=0; i

if(a[ i ]0){/* Обработка a[ i ]0 */

/*Обработка a[ i ]0 */ ……….. …………………………………………..

……………………………. }

} }

Инструкции exit и continue

В языке Basicимеется семейство руководств exit, каковые действуют подобно инструкции breakв языке C. Любая инструкция обязана пребывать в соответствующей сложной инструкции и действует лишь на нее. В рассмотренном ниже примере употребляется инструкция exit for.

Пример. Дано {xi}, i=1…30. Отыскать длину первой подпоследовательности, состоящей лишь из хороших элементов.

pr=False : kol=0

For i=0 To29

If x(i)0 Then

kol += 1 : If Notpr Thenpr=True

End If

If x(i)

Next

Замечание. В случае, если употребляются положенные циклы Do, Forили While, а в теле самого внутреннего цикла инструкция Exit, то Exit Doдействует лишь на цикл Do, Exit For – лишь на цикл For, Exit While – лишь на цикл While.

Существуют кроме этого инструкции Exit Select,Exit Sub,Exit Function.

Помимо этого, имеется инструкция перехода к концу тела цикла

Continue {Do | For | While},

действующая так же, как инструкция continueязыка С, для ближайшей содержащей ее инструкции цикла.

Многоальтернативный выбор

Это инструкции, каковые разумно применять при программировании развилок более, чем на 3 ветви.

Инструкция switch (язык С)

Формат:

switch()

Выражение должно быть целого типа.

Инструкция должна быть составной. В другом случае вся конструкция теряет суть. В ее состав должны входить пара предложений case (выбор)и, быть может, предложениеdefault (в другом случае), расположенные в произвольном порядке.

Схематически конструкцию возможно изобразить так:

switch(){

case :[case:]… []

[case :[case:]… []]…

[default: ]

}

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

Схема исполнения инструкции следующая.

1. Вычисляется выражение в инструкции switch. Его время от времени именуют тестовым.

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

3. Когда такая метка будет отыскана, управление передается инструкции, следующей за ней.

4. Если не случится совпадение значения ни с одной из меток case, управление передается инструкции за меткой default, если она присутствует.

5. В случае, если таковой ветви нет, то управление передается инструкции, следующей за инструкцией switch, т.е. тело ее .

рекомендации и Правила.

1. Предложения case и default смогут записываться в произвольном порядке, но рекомендуется располагать так, как продемонстрировано выше.

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

3. Метки не воздействуют на порядок исполнения следующих руководств, т.е. в случае, если в ходе исполнения switch будет выбрана 1 из ветвей case, то продолжится исполнение руководств последующих ветвей caseили default. В случае, если нужно завершить исполнение по окончании какой-либо ветви, направляться применять инструкцию break, которая передаст управление инструкции, следующей за switch.

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

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

Пример. Дан символьный массив {xi}, i=1…30. Подсчитать количество знаков разрядки, цифр (каждой по отдельности) и остальных знаков.

for(i=0; i

// каждой цифры

for(empty=other=i=0; i

switch(x[i]){

case ‘0’: case ‘1’: case’2′: case ‘3’: case ‘4’: case ‘5’: case ‘6’: case ‘7’:

case ‘8’: case ‘9’: digit[x[ i ]-‘0’]++; break;

case ‘ ‘: case ‘\n’: case ‘\t’:empty++; break;

default: other++; [break;]

}

}

Замечание. Для единства стиля рекомендуется записывать инструкцию break по окончании последней ветви.

5.8.2. Инструкция select case (язык Basic)

Формат:

Select [Case]
Case

[]
[Case

[]]…
[Case Else

[]

]

End Select

:=[,]…

:={| To |[Is]}

:=||=|

рекомендации и Правила.

1. Тестовое выражение – числовое либо строчное выражение.

2. Предложение Case Else подобно предложению default в языке C.

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

4. Метка типа проверяется на правильное сравнение с тестовым значением.

5. Метка типа To представляет собой замкнутый диапазон значений, при попадании в который тестового значения выполняется переход на соответствующую ветвь, к примеру, 5 To 10.

6. Метка типа Is имеется открытый диапазон допустимых значений, к примеру, Is MaxSize. Главное слово Is может опускаться. По окончании завершения инструкции Case либо Case Elseоно будет засунуто перед оператором сравнения.

7. В отличие от языка C при попадании управления на какую-либо ветвь инструкции выполняются до следующего предложения Case либо End Select, а не переходят дальше.

8. Главное слово Case в инструкции Select может опускаться.

Пример. Тот же.

For i=0 To 9

digit( i )=0

Next

emp=0 : other=0

For i=0 To 29

Select x( i )

Case “0” to “9”

digit(x( i )-“0”) += 1

Case “ “, “\n”, “\t”

emp += 1

Case Else

other += 1

End Select

Next

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

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

1. Какие конкретно преимущества имеет инструкция присваивания языка C перед подобной инструкцией языка Basic?

2. Какой новый объект программы разрешает выполнить инструкцию goto?

3. Допустим ли выход из тела цикла посредством инструкции goto?

4. Возможно ли реализовать разветвление метода более, чем на 2 ветви?

5. По какой причине нужно в языке Cналичие безлюдной инструкции?

6. В чем суть составной инструкции?

7. Возможно ли организовать цикл, не применяя инструкцию цикла?

8. В чем преимущество циклов с предусловием?

9. Возможно ли изменять конечное значение счетчика цикла в тела цикла в инструкции for языка Basic? А в инструкции for языка C?

10. Чему равняется значение счетчика цикла по окончании его окончания? Отличается ли это правило для языков Basic и C?

11. В чем отличие в действиях руководств breakи continue языка C?

12. Происходит ли выход из инструкции switch по успехи финиша ветви case? А в инструкции Selectязыка Basic?

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

1. Возможно ли вычислять запись i++; инструкцией присваивания?

2. Возможно ли применять в качестве метки целое число? В случае, если возможно, то в каком языке?

3. Как выполняется помеченная инструкция, если она достигнута не посредством инструкции goto, а в естественном порядке исполнения программы?

4. По какой причине в языке Basicне необходимы безлюдная и составная инструкции?

5. Возможно ли в однострочной форме инструкции Ifязыка Basic выполнить разветвление более, чем на 2 ветви?

6. Перечислите блоки обобщенной блок-схемы цикла.

7. Какова функция инструкции for языка C?

8. В то время, когда разумно применять цикл с постусловием?

9. В то время, когда форма Do Until языка Basic эргономичнее, чем форма Do While?

10. Может ли инструкция Exit Doзавершить цикл For?

11. Смогут ли иметь однообразные значения выражения в ветвях case руководств switchиSelect?

ВВОД-ВЫВОД

Ввод-вывод – это передача данных между переменными программы в оперативной памяти и внешней средой.

Ввод – это передача: внешняя средаaоперативная память, вывод – своевременная памятьaвнешняя среда.

Тут разглядим лишь средства консольного ввода-вывода. Под термином «Консоль» будем осознавать: ввод – с клавиатуры, вывод – на экран монитора. Он сложился исторически с тех лет, в то время, когда эти 2 периферийных устройства составляли так именуемую консоль управления ЭВМ. В каждом из изучаемых языков существует много средств ввода-вывода, реализованных в виде функций либо способов в зависимости от выбранного языка программирования.

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

Замечание. Для чтения с вывода и консоли на нее русских знаков в средах Visual Studioи Turbo C++направляться установить кодовую страницу 1251 посредством функций SetConsoleCP(1251) и SetConsoleOutputCP(1251) и #include.

Язык Си

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

Главными функциями форматного ввода-вывода являются: printf – вывод на экран, scanf – ввод с клавиатуры.

Формат обращения к ним:

{scanf | printf}([, ]);

Управляющая строчок

Управляющая строчок складывается из спецификаций и текста. Любая спецификация определяет лишь одно передаваемое значение.

Формат одной спецификации:

%[][W][.D][d]

Знамёна для функции printf (для функции scanf они не употребляются):

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

+ число постоянно выводится со знаком;

вместо символа числа: для чисел = 0, — для чисел

W – размер поля данного в знаках (байтах).

D – в большинстве случаев характеризует точность представления значения при выводе, при вводе не употребляется.

d– модификатор длины; = h – при передаче значений типа short, = l –

дляlong и double, модификатор ll для типа long long в среде разработки MinGW C/C++ 4.8 не реализован.

— это фактически спецификация, определяющая тип передаваемого значения.

6.1.1.1. Спецификация d (целые десятичные числа)

Ввод. Формат спецификации: %[W][h|l]d

Значения при вводе разделяются знаками разрядки. В случае, если в спецификации присутствует параметр W и до появления знака разрядки будет считано W знаков, то ввод данного значения закончится.

W – предельное количество считываемых знаков.

Пример.

Внешнее представление Спецификация Значение в памяти

165 d 165

-165 d -165

+165 d 165

165 2hd 16

165 1hd 1

431921 ld 431921

-431921 4ld -431

+431921 10ld 431921

Замечание. Внешнее представление – это последовательность вводимых знаков (надавленных клавиш).

Вывод. Формат спецификации: %[][W][.D][h|l]d, где D – предельное количество выводимых знаков. В случае, если протяженность выводимого значения превышает W знаков, то воздействие параметра W игнорируется и значение выводится абсолютно. В случае, если его протяженность меньше Wсимволов, то выводимое значение находится в крайних правых позициях поля вывода. В случае, если наряду с этим использован флаг -, то значение находится в крайних левых позициях поля. В случае, если протяженность значения меньше Dсимволов, то значение дополняется слева нулями.

Пример.

Значение в памяти Спецификация Внешнее представление

2475 d 2475

2475 +d +2475

2475 _d _2475

-2475 d -2475

-2475 +d -2475

-2475 _d -2475

-2475 3d -2475

2475 10d ______2475

2475 +10d _____+2475

2475 -10d 2475______

2475 -+10d +2475_____

2475 10.4d ______2475

-12 10.4d ______-012

-12 .4d -012

-12 .0d -12

3 5.0d ____3

-478126 10ld ___-478126

-478126 -10ld -478126___

478126 +-10ld +478126___

Замечание 1. Во внешнем представлении примера пробел для наглядности заменен знаком подчеркивания.

Замечание 2. Не нужно применять при вводе переменные типа [unsigned] char, не смотря на то, что они смогут хранить и манипулировать с целыми значениями. Для некоторых трансляторов ввод по спецификации d будет некорректным.

Замечание 3. Для беззнаковых (unsigned) данных вместо спецификации d направляться использовать спецификацию u.

Включение водонагревателя ( водонагреватель, боллер накопительный ***).


Интересные записи:

Понравилась статья? Поделиться с друзьями: