Понятие константы
Нередко при построении выражений бывает удобно использовать вместо каких-либо конкретных значений некоторые их обозначения. Например, в математике используются такие константы, как π и e. При программировании порой также бывает удобно использовать подобные константы.
Например, Вы разрабатываете программу, которая должна вычислить объем некоторой произвольной фигуры с точностью не менее 0.001 ед. В этом случае Вы можете пойти двумя путями:
· каждый раз, когда требуется проверить точность вычислений, явно в тексте программы записывать «0.001»;
· описать один раз константу, например «eps», задать ей значение 0.001 и каждый раз, когда требуется проверить точность вычислений, в тексте программы записывать «eps».
Второй подход имеет ряд преимуществ:
1) не требуется каждый раз вспоминать значение точности – вместо этого просто пишете «eps»;
2) исключается возможность появления ошибки за счет того, что при написании исходного текста программист ошибется при записи значения точности (например, поставил не там точку).
Ну и, наконец, самое важное: если вдруг будет решено, что достаточно точности 0.1, то при использовании констант в программе будет достаточно сделать всего одну поправку: в разделе описания констант. Если же точность в тексте Вашей программы записывалась в явном виде, то придется искать все его вхождения в текст и исправлять их.
Как уже было отмечено ранее, константы описываются в разделе описания констант (см. структуру программы, §4).
Раздел описания констант начинается с ключевого слова const. Далее следует имя константы, знак «=» и ее значение. Запись заканчивается символом «;». Если требуется описать еще несколько констант, то слово const более не пишут.
Пример:
const
eps = 0.001;
MyConst = 10;
MyChar = ‘a’;
MyLogic = True;
При выполнении программы значение константы менять нельзя. Его может задать только сам программист при написании исходного текста программы.
Константы могут использоваться в любых выражениях в тексте программы, при этом ее словесное обозначение при вычислениях заменяется заданным в разделе описаний значением.
Пример: MyConst – 5 * sqr ( eps )
Понятие переменной
Переменными называют элементы программы, которые предназначены для хранения, коррекции и передачи данных внутри нее.
Основными отличиями переменных от констант являются следующие:
1) переменные, в отличие от констант, могут менять свое значение в процессе выполнения программы (самое важное отличие);
2) в отличие от констант, для переменных начальное значение не задается.
Все переменные, используемые в программе, должны быть предварительно описаны в разделе описания переменных.
Раздел описания переменных начинается с ключевого слова var. Далее следует имя переменной, знак «:» и указывается тип данных переменной (см. §2). Запись заканчивается символом «;». Если имеется несколько переменных одного типа, то их имена могут быть перечислены до двоеточия через запятую. Если требуется описать еще несколько переменных других типов, то слово var более не пишут.
Пример: ниже описаны 4 переменные 3-ех разных типов:
var
i: integer;
x, y: real;
c: char;
Тип данных указывается обязательно для всех переменных. Он определяет диапазон значений, которые может принимать переменная, множество допустимых к ней операторов, сколько байт для переменной необходимо выделить в памяти и т. п.
Пример: если Вы описали x как переменную типа integer, то в ней можно будет хранить целые числа в диапазоне –32768 до +32767. Если x содержит значение 32767, то, прибавив к ней 1, получим –32768. В памяти переменная x будет занимать 4 байта.
Требования к именам в языке Паскаль и к именам переменных в частности приводились в §1.
Переменные очень широко используются при разработке программ на языке Паскаль. В любой более-менее сложной программе используется множество различных переменных.
Переменные могут использоваться, например, для хранения результатов вычислений выражений.
Оператор присваивания
Ранее было рассмотрено понятие переменной и было отмечено, что она может менять свое значение в процессе выполнения программы. Для этого используется оператор присваивания.
Оператор представляет собой некоторый неделимый элемент программы, который позволяет выполнять некоторые определенные алгоритмические действия. Одним из простых операторов является оператор присваивания.
Оператор присваивания « := » заменяет текущее значение переменной новым значением, которое определяется выражением.
Записывается оператор присваивания следующим образом: сначала указывается имя переменной, далее – символ оператора присваивания, и справа от него – выражение. В процессе выполнения программы выражение вычисляется и его результат помещается в указанную переменную.
Пример: (для переменных, описанных выше)
i := 5;
x := 10/i;
y := sqr(x)+abs(2*i);
c := ’h’;
Совместимость типов данных
При выполнении операций требуется, чтобы типы операндов совпадали. Нельзя, например, сложить символ и вещественное число или передать функции, ожидающей целый аргумент, вещественное число. В то же время при выполнении различных операций различные типы данных могут быть взаимозаменяемыми.
Наиболее высоким уровнем соответствия типов является эквивалентность. Два типа T1 и T2 являются эквивалентными, если выполняется хотя бы один из следующих пунктов:
· T1 и T2 совпадают;
· T1 и T2 определены в одном объявлении типа;
· T1 эквивалентен некоторому T3, который эквивалентен типу T2.
Далее следует понятие совместимости. Совместимость означает, что для переменных этих типов возможна операция присваивания, но во время этой операции присваиваемое значение может измениться (неявное преобразование типов данных). Два типа T1 и T2 будут совместимыми, если выполняется хотя бы один из следующих пунктов:
· T1 и T2 эквивалентны;
· T1 и T2 оба целочисленные или оба вещественные;
· T1 и T2 являются подмножествами одного типа;
· T1 является некоторым подмножеством T2;
· T1 – строка, а T2 – символ;
· T1 – это тип pointer, а T2 – типизированный указатель;
· T1 и T2 – оба процедурные, с одинаковым количеством попарно эквивалентных параметров, а для функций – с эквивалентными типами результатов.
Чтобы никаких изменений присваиваемого значения не произошло, в записи оператора присваивания тип переменной и тип выражения должны быть совместимы по присваиванию. Для этого необходимо, чтобы было выполнено одно из следующих условий:
· тип переменной и тип выражения эквивалентны, но не файлы;
· тип переменной и тип выражения совместимы, причем тип выражения – некоторое подмножество типа переменной;
· тип переменной – вещественный, а тип выражения – целый.
Пример:
var
a, b: integer;
x, y: real;
t1, t2: boolean;
…
a:=b; a:=7; a:=3*sqr(b); a:=round(x); {можно}
a:=x; a:=sqrt(9); a:=4/2; a:=t1; a:=3+4.0 {нельзя}
x:=y; x:=sqrt(9); x:=3.4*a; x:=a/b; {можно}
x:=a; x:=3; x:=4*a; x:=trunc(4.53); {можно}
t1:=t2; t1:=a>b; t1:=odd(a); {можно}
t1:=x; t1:=a; {нельзя}
Пример:
присвоить переменной a целую часть суммы x и y:
a:=trunc(x+y).
Пример:
присвоить переменной a количество десятков числа b:
a:=b mod 100 div 10;
Понятие типизированной константы
Типизированная константа представляет собой переменную с заданным начальным значением. Другими словами, типизированная константа:
1) имеет стартовое значение, как и любые другие константы;
2) может в процессе выполнения программы поменять свое значение с помощью оператора присваивания, как и любые другие переменные.
В отличие от обычных констант, типизированную нельзя использовать для определения других констант и типов данных.
Описываются типизированные константы в разделе описания констант. Пишут имя константы, далее символ двоеточие «:» и тип данных и лишь затем знак «=» и ее значение. Запись заканчивается символом «;».
Пример:
const
x: real = 0.001;
n: integer = 10;
В программе типизированные константы могут использоваться так же, как и любые другие переменные.
Пример:
x := 10 * n;
n := trunc (x);
Вопросы для самопроверки
1. Что такое константа в языке Паскаль?
2. Чем отличается переменная от константы?
3. Как записывается оператор присваивания?
4. Если x – переменная типа Integer, то будет ли корректной запись на языке Паскаль «x:=6/3»?
5. Чем отличаются типизированные константы от обычных констант? От переменных?
§6. Процедуры ввода и вывода
Любой алгоритм должен быть результативным. Другими словами, программа должна сообщать пользователю результат своей работы. Более того, алгоритм должен уметь решать однотипные задачи с различными исходными данными. Для этого в программе должен быть предусмотрен ввод исходных данных пользователем.
Для решения указанных задач в языке программирования Паскаль можно воспользоваться специальными процедурами ввода и вывода. При этом используется специальное понятие консоль, обозначающее клавиатуру при вводе и монитор при выводе.
Процедуры вывода
Процедуры вывода предназначены для вывода результатов работы программы на экран.
Существуют две процедуры вывода: Write и WriteLn.
Возможны следующие способы записи указанных процедур:
· Write (A1, A2, …, AK);
· Writeln (A1, A2, …, AK);
· Writeln;
Первый из этих операторов реализует вывод значений А1, А2, …, АК в одну строку экрана, начиная с текущей позиции курсора. Второй оператор реализует вывод значений А1, А2, …, АК и переводит курсор к началу следующей строки. Третий оператор реализует лишь переход к началу следующей строки.
Значения, составляющие список вывода, могут относиться к целому, вещественному, символьному или булевскому типам. В качестве элемента списка вывода могут также использоваться выражения и строки.
Пример: Что будет напечатано на экране?
write(1, 2);
writeln(3, 4);
writeln;
write(5, 6);
write(7, 8);
writeln;
writeln(9, 10);
writeln(11, 12);
В результате выполнения перечисленных операторов на экране будет напечатано:
1234
5678
910
1112
Пример: Что будет напечатано на экране?
writeln (‘1+2+3=’, 1+2+3, ‘!!!’)
На экране будет напечатано:
1+2+3=6!!!
Форматированный вывод
Процедуры вывода Write и Writeln позволяют задать ширину поля вывода для каждого элемента. В этом случае элемент списка вывода имеет вид А:N, где А – выражение или строка, N – выражение либо константа целого типа.
Пример: Напечатать значение переменной x на трех позициях:
writeln (x:3);
Если выводимое значение занимает в поле вывода меньше позиций, чем N, то перед этим значением располагаются пробелы. Если выводимое значение не помещается в ширину поля N, то для этого значения будет отведено необходимое количество позиций.
Пример:
var k: integer;
…
k:=10;
writeln (k:3); {будет напечатано _10}
k:=1000;
writeln (k:3); {будет напечатано 1000 – все равно на 4-ёх позициях}
Для величин вещественного типа элемент списка вывода может иметь вид А:N:М, где А – переменная или выражение вещественного типа, N – ширина поля вывода (вместе с дробной частью и десятичной точкой), М – число цифр дробной части выводимого значения. N и М – выражения или константы целого типа. В этом случае вещественные значения выводятся в форме десятичного числа с фиксированной точкой.
Пример:
var x: real;
…
x:=10.5;
writeln(x:6:2); {будет напечатано _10.50}
Если в дробной части больше цифр, чем M, то при выводе на экран осуществляется округление до заданной цифры. Обратите внимание: округление осуществляется лишь при выводе, а значение самой выводимой переменной остается неизменным.
Пример:
var x: real;
…
x:=10.5;
writeln(x:6:2); {будет напечатано _10.50}
Использование форматированного вывода является очень удобным при разработке «реальных» программ, т. к. конечным пользователям всегда удобно видеть результаты в том виде, в котором он и привык его видеть.
Пример:
Экономисту будет понятен результат «Итого 145,15 руб.»,
и вряд ли он поймет результат «1.E+2».
Процедуры ввода
Для ввода исходных данных пользователем вручную с клавиатуры в языке программирования Паскаль используются процедуры ввода Read и Readln.
Возможны следующие способы записи указанных процедур:
· Read (A1, A2, …, AK);
· Readln (A1, A2, …, AK);
· Readln;
Первая запись реализует чтение К значений исходных данных и присваивание этих значений переменным А1, А2, …, АК. Вторая запись реализует чтение К значений исходных данных, пропуск остальных значений до начала следующей строки, присваивание считанных значений переменным А1, А2, …, АК. Третий оператор реализует пропуск строки исходных данных.
При вводе исходных данных происходит преобразование из внешней формы представления во внутреннюю, определяемую типом переменных. Переменные, образующие список ввода, могут принадлежать к целому, вещественному или к символьному типам. Чтение исходных данных логического типа в языке Паскаль недопустимо.
Процедуры ввода при чтении значений переменных целого и вещественного типа пропускают пробелы, предшествующие числу. В то же время эти операторы не пропускают пробелов, предшествующих значениям символьных переменных, так как пробелы являются равноправными символами строк.
Пример: Запрос у пользователя 2-ух вещественных и 2-ух целых значений, а также 2-ух символов.
var x, y: real;
a, b: integer;
c1, c2: char;
…
Read(x, a, c1);
Readln(c2, b, y);
При вводе данных пользователю требуется ввести значение именно того типа данных, который ожидается программой. В случае же, если требуется ввести, например, значение целого типа, а пользователь вводит символ «a», то произойдет исключительная ситуация (т. е. ошибка). В этом случае на экран будет выведено соответствующее сообщение и работа программы будет остановлена, что недопустимо, когда речь идет о «реальных» разработках для заказчика. Программист должен быть готов к таким ситуациям и предусмотреть действия программы на такой случай. Так, можно воспользоваться директивой компилятора I.
Перед вводом данных можно отключить контроль правильности ввода-вывода с помощью записи {$I-}. После осуществления ввода данных с помощью функции IOResult можно самостоятельно проверить корректность последней операции ввода/вывода: если функция возвращает 0, значит, все в порядке, иначе – была ошибка. Обратите внимание: после вызова функции ее результат сбрасывается, а это означает, что повторный вызов функции IOResult, без осуществления новых операций ввода/вывода, всегда будет возвращать значение 0. Если же код ошибки требуется использовать неоднократно, то его следует запомнить в некоторую переменную. Вновь включить контроль правильности ввода-вывода можно с помощью записи {$I-}.
Пример: Организовать ввод целого значения и проверить корректность вводимого значения.
var k, temp: integer;
begin
{$I-}
readln(k);
temp:=IOResult; {запоминаем код ошибки, т.к. IOResult сбросится в 0}
if temp>0 then writeln (‘Ошибка ввода!!!’); {проверяем код ошибки}
{оператор if будет рассмотрен позже}
{$I+}
…
При организации ввода данных не следует забывать, что при появлении на экране курсора пользователь не сможет сам чудесным образом догадаться, что от него требуется ввести и в каком формате. Поэтому всегда требуется выводить на экран для пользователя приглашение к вводу данных со всей необходимой поясняющей информацией.
Пример:
writeln (‘Введите длину забора (в метрах, целое значение)’);
write (‘l=’);
readln (l);
Вопросы для самопроверки
1. Для чего предназначена процедура Writeln?
2. Чем отличаются процедуры Write и Writeln?
3. Что означает следующая запись на языке Паскаль: Writeln(x: 5: 2)?
4. Что выполнит команда на языке Паскаль Readln(x, y, z)?
5. В каких случаях при вводе-выводе данных используется функция IOResult?
§7. Условный оператор и оператор выбора. Оператор перехода
Обычно операторы выполняются по порядку один за другим. Иногда требуется разорвать такой ход выполнения программы и передать управление произвольному оператору. В таких случаях используется так называемый оператор перехода goto. В других случаях требуется в теле программы организовать ветвления – обрабатывать разные данные по-разному, в зависимости от тех или иных условий. В этих случаях используются условный оператор if и оператор выбора case. Именно об этих перечисленных операторах и пойдет речь далее.
Условный оператор IF
Условный оператор if используется в тех случаях, если какие-либо операторы нужно выполнять только при тех или иных условиях.
Другими словами, условный оператор может использоваться для организации в теле программы различных ветвлений (например, если пользователь ввел значение «1», то выполняем первый набор операторов, иначе – второй).
Имеются 2 формы записи условного оператора: короткая и полная.
Короткая форма записи условного оператора выглядит следующим образом:
IF <логическое выражение> THEN <оператор_1>;
Условный оператор в короткой форме работает по правилу: если логическое выражение принимает значение Истина, то выполняется Оператор_1. Далее выполняется оператор, следующий за условным. Если логическое выражение ложно, то будет сразу же выполняться оператор, следующий за этим условным оператором.
Пример: напечатать на экране модуль вводимого пользователем числа
readln(x);
if x<0 then x:=-x;
writeln(‘модуль числа равен:’, x);
Полная форма записи условного оператора выглядит следующим образом:
IF <выражение> THEN <оператор_1> ELSE <оператор_2>;
Условный оператор в полной форме работает по правилу: если логическое выражение принимает значение Истина, то выполняется Оператор_1, далее выполняется оператор, следующий за условным. Если же логическое выражение принимает значение Ложь, то выполняется Оператор_2, далее – следующий за этим условным оператором.
Как видно из пояснений, в такой записи никогда вместе не выполнятся операторы, стоящие после ключевых слов then и else, но всегда будет выполняться один из них.
Обратите внимание: перед ключевым словом else точка с запятой «;» не ставится, т. к. это разорвало бы условный оператор на две части. Также после else не пишут никаких дополнительных условий.
Пример: напечатать на экране модуль вводимого пользователем числа
readln(x);
if x>0 then writeln(x) else writeln(-x);
Условные операторы могут вкладываться в другие условные операторы, в ветвь then или else. Не рекомендуется вкладывать один в другой более трех условных операторов.
Пример: определить, какое значение содержит переменная x.
if x>=0 then if x=0 then writeln(‘нулевое’)
else writeln(‘положительное’) else writeln(‘отрицательное’);
При вложении условных операторов один в другой следует быть аккуратным при создании ветви else: ключевое слово else будет относиться к ближайшему слева условному оператору if, еще не имеющему ветви else. Так, в представленном выше примере else writeln(‘положительное’) относится к оператору if x=0, а ветвь else writeln(‘отрицательное’) – к оператору if x>=0.
Пример: представим предыдущий пример в более понятном для читателя виде:
if x>=0 then
if x=0 then writeln(‘нулевое’) else writeln(‘положительное’)
else writeln(‘отрицательное’);
Понятие составного оператора
Составные операторы задают порядок выполнения операторов, являющихся их элементами.
Составные операторы представляют собой набор обычных операторов, разделенных между собой символами «;», заключенных в ограничители begin и end.
Составные операторы обрабатываются, как один оператор, поэтому их можно применять там, где синтаксис Паскаля допускает использование только одного оператора (например, после ключевых слов then и else).
Пример: отсортировать числа x1 и x2 по возрастанию.
if x1>x2 then
begin
temp:=x1;
x1:=x2;
x2:=temp;
end;
Оператор выбора
Оператор выбора case позволяет заменить большую вложенность условных операторов. Записывается оператор следующим образом:
CASE <выражение> OF
<значение_1>: <оператор_1>;
<значение_2>: <оператор_2>;
…
<значение_n>: <оператор_n>;
[ ELSE
<оператор_если_1>;
…
<оператор_если_m>; ]
END;
В качестве Выражения может использоваться любое выражение порядкового типа (в отличие от условного оператора, где используются выражения логического типа): целое, логическое, символьное и т. п.
После вычисления Выражения его результат ищется в списке Значение_1, Значение_2, …, Значение_N. Если результат найден в списке Значений, то выполняется соответствующий Оператор. Если имеется несколько подходящих значений, то выполняется Оператор, найденный первым. Если искомое значение не найдено, то выполняются операторы, записанные в ветви else.
Все Значения должны быть совместимы по типу с результатом Выражения. В одной строке значения могут быть также перечислены через запятую либо быть указаны в виде интервала с помощью символа «..».
Ветвь else может отсутствовать.
Пример: вывести на экран день недели
case day of
1: writeln(‘понедельник’);
2: writeln(‘вторник’);
3: writeln(‘среда’);
4: writeln(‘четверг’);
5: writeln(‘пятница’);
6: writeln(‘суббота’);
7: writeln(‘воскресенье’);
else
writeln(‘некорректная дата’);
end;
Пример: вывести на экран, будний это день недели или выходной
case day of
1..5: writeln(‘будний’);
6, 7: writeln(‘выходной’);
else
writeln(‘некорректная дата’);
end;
Оператор перехода
Обычно операторы в программе выполняются в том порядке, в каком они записаны. Оператор перехода goto прерывает естественный порядок выполнения программы и указывает, что дальнейшее выполнение должно продолжаться, начиная с оператора, помеченного меткой, указанной в операторе перехода.
Пример: goto 218; {переход к оператору, помеченному меткой 218}
Все используемые в программе метки предварительно должны быть перечислены в разделе label в блоке описаний:
LABEL <МЕТКА_1>, <МЕТКА_2>, …, <МЕТКА_N>;
В качестве метки может выступать идентификатор или целое число в диапазоне от 0 до 9999.
В программе описанная метка ставится перед каким-либо оператором. Между меткой и оператором ставится двоеточие.
Для перехода к оператору, помеченному меткой, пишут goto и далее указывают имя метки, установленной перед оператором.
Пример: что будет напечатано на экране в результате выполнения программы:
label 1, 2, e;
begin
writeln(1);
goto 1;
2: writeln(2);
writeln(3);
goto e;
writeln(4);
1: writeln (5);
writeln(6);
goto 2;
e: end.
Операторы в данной программе не будут выполняться по порядку один за другим, т. к. здесь имеется множество меток и операторов перехода. В результате на экране будет напечатано:
1
5
6
2
3
Метки и оператор перехода следует использовать аккуратно. Они могут привести к тому, что программа «зависнет» или не будут выполнены некоторые операторы (в предыдущем примере не выполнился оператор writeln(4);).
Следует отметить, что в настоящее время использование меток считается «плохим тоном» и не желательно, т. к. это приводит к усложнению понимания текста программы. Кроме того, все метки можно избежать, используя ветвления и циклы.
Вопросы для самопроверки
1. Опишите принцип работы условного оператора в короткой форме записи.
2. Опишите принцип работы условного оператора в длинной форме.
3. В каких случаях используется составной оператор?
4) Как записывается оператор Case на языке Паскаль?
5) Что означает запись на языке Паскаль Goto Next; ?
§8. Операторы цикла
Оператор цикла задает повторное выполнение определенных операторов. Различают циклы с постусловием, предусловием и со счетчиком.
Для изучения циклов воспользуемся следующим примером: необходимо посчитать сумму чисел от 1 до 100.
Циклы с заданным числом итераций
Первая конструкция, которая будет рассмотрена, называется циклом со счетчиком for. Можно также встретить такие названия, как цикл с параметром, с заданным числом итераций и др.
Оператор цикла со счетчиком вызывает повторяющееся выполнение оператора до тех пор, пока некоторому счетчику присваивается возрастающая (или убывающая) последовательность значений.
В цикле for всегда указывается:
· имя переменной, в которой хранится число повторений цикла (счетчик, или управляющая переменная);
· некоторое начальное значение для счетчика;
· некоторое конечное значение для счетчика.
Записывается цикл for следующим образом:
FOR <счетчик> := <начальное значение> TO <конечное значение> DO <оператор>;
Пример: напечатать на экране 10 восклицательных знаков
for i:=1 to 10 do write(‘!’);
Счетчик всегда инициализируется начальным значением. На каждом шаге его значение увеличивается на единицу.
Оператор, который содержится в теле оператора for, выполняется фиксированное число раз: один раз для каждого целого значения в диапазоне между начальным и конечным.
Оператор цикла for выполняется до тех пор, пока счетчик не достигнет конечного значения.
Если начальное значение превышает конечное, то содержащийся в теле цикла for оператор не выполнятся ни разу.
В качестве счетчика может использоваться любая переменная порядкового типа: целого, символьного, логического. Тип начального и конечного значения должен быть совместим с типом счетчика.
Пример: что будет напечатано на экране после выполнения следующего оператора: for i:=0 to 9 do write(i);
Сначала переменной i присвоится начальное значение (0), после чего выполнится оператор, стоящий после do: на экране напечатается значение переменной i (т. е. 0).
Затем значение i увеличится на единицу и станет равным 1, после чего вновь выполнится оператор, следующий за do – рядом с ноликом напечатается 1. Таким образом, на экране уже напечатано 01.
Увеличение на единицу значения управляющей переменной i и выполнение оператора, стоящего после do, будет продолжаться до тех пор, пока не будет достигнуто конечное значение, т. е. 9. В итоге на экране будет напечатана последовательность .
Пример: что будет напечатано на экране после выполнения следующих операторов:
s:=0;
for i:=1 to 3 do s:=s+i;
writeln(s);
Рассмотрим, как будут изменяться значения переменных на каждом шаге.
Шаг | i | s | Комментарий |
1 | 0 | 1-ый оператор: записываем 0 в переменную s | |
2 | 1 | 0+1=1 | В i записываем начальное значение, выполняем оператор, следующий за do: складываем текущие значения переменных s и i, результат помещаем в s. |
3 | 1+1=2 | 1+2=3 | Увеличиваем значение управляющей переменной и вновь выполняем операцию суммирования |
4 | 2+1=3 | 3+3=6 | Т. к. управляющая переменная достигла конечного значения, то после выполнения данного шага цикл завершается. |
Следующий оператор – печать на экране значения переменной s. Как видно из таблицы, в s хранится 6, следовательно, на экране после выполнения данных операторов напечатается цифра 6.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


