Как вывести значение выражения на экран компьютера
Перейти к содержимому

Как вывести значение выражения на экран компьютера

  • автор:

Вывод на экран

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

Вывод на экран (да и вообще вывод в стандартное устройство и в файл) в Паскале выполняется с помощью функций Write и WriteLn.

Если выполняется запись в стандартное устройство вывода (например, на экран), то файл не указывается:

Параметры — это одна или несколько переменных. Если переменных несколько, то они перечисляются через запятую и выводятся поочерёдно.

Процедура WriteLn выполняет аналогичные действия, только в конце своей работы ещё и переводит курсор на новую строку.

Впрочем, всё это вы уже знаете. Однако есть ещё кое-какие фишки, которые можно применять с процедурой Write в консольных приложениях.

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

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

Вывод с одинаковой шириной

Этот формат удобно использовать для вывода таблиц. Для символов отводится одинаковое количество знакомест на экране, поэтому столбцы таблицы получаются одинаковой ширины. Формат такой:

Где S — это число, которое выводится на экран, а W — ширина поля, в которое это значение выводится. Выравнивание происходит по правой стороне, то есть пробелы добавляются слева перед числом.

Вывод вещественных чисел

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

Однако эта проблема легко решается с помощью форматирования:

Где S — это число, которое выводится на экран, а W — ширина поля, в которое это значение выводится, N — количество знаков после запятой. Выравнивание происходит по правой стороне, то есть пробелы добавляются слева перед числом.

Пример использования форматированного вывода на экран приведён в листинге 24.2.

Есть ещё очень полезная подпрограмма, которая пригодится вам при выводе информации на экран. Это процедура GoToXY, которая объявлена в модуле CRT:

procedure GoToXY(X, Y : TCRTCoord);

И пусть вас не пугает неизвестный тип TCRTCoord. На самом деле это обычный целочисленный тип данных с диапазоном 1..255. Отличие от типа Byte заключается только в том, что здесь нет значения 0, так как в Паскале координаты экрана начинаются с единицы. Хотя это не означает, что в качестве переменных для установки координат вы не можете использовать тип Byte или другой целочисленный.

Процедура GoToXY устанавливает курсор в координаты, заданные в соответствующих переменных.

Экран консольного приложения ещё со времён ДОС поделен на некоторое количество знакомест. В одно знакоместо можно вывести один знак (символ). Стандартный размер экрана — 80х25 символов. То есть 80 символов в ширину (координата Х) и 25 символов в высоту (координата Y).

Левый верхний угол имеет координаты (1, 1). Нижний правый угол имеет координаты (80, 25).

Урок 2 — Ввод/вывод, операции над числами

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

1 Потоковый ввод/вывод

В файле iostream.h находятся глобальные объекты std::cin и std::cout , позволяющие вводить данные с клавиатуры и выводить их на экран. Мы подключаем этот файл командой:
#include <iostream>

Эти объекты называются потоками ввода/вывода. В дальнейших уроках мы узнаем и о других разновидностях таких потоков. Потоковый ввод/вывод осуществляется операциями >> и << соответственно. Использовать их можно следующим образом:

В этой программе создается 3 переменных целого типа данных ( int ), в конце урока приведена более подробная информация об этом и других стандартных типах. Тут, как и в hello world использолся вызов функции std::cin.get() для задержки закрытия окна. На самом деле эта функция ( get ) ожидает ввода символа пользователем.

Также, в этом примере вы должны заметить комментарии к коду. Комментарием считается часть строки, расположенная правее двух слешей , а тажке текст (возможно многострочный), расположенный между символами /* и */ . Комментарии удаляются во время работы препроцессора (если забыли что это такое — освежите память) и, следовательно, не влияют на результаты компиляции. Используются комментарии только в качестве «подсказок» программисту.

Объект std::cin является потоком ввода, к нему можно применять оператор >> для получения значений переменных с клавиатуры:

Теперь значения переменных задаются не программистом, а пользователем (в процессе использования программы).

С помощью объекта cin и операции >> можно присвоить значение любой переменной. Например, если переменная x описана как целочисленная, то команда cin>>x; означает, что в переменную x будет записано некое целое число, введенное с клавиатуры. Если необходимо ввести несколько переменных, то можно написать:
cin >> x >> y >> z; .

2 Основные операции над числами

Чтобы быть полезной — наша программа должна делать что-то кроме ввода и вывода. В языке С++ поддреживается стандартный набор арифметических операций (для сложения, вычитания, деления и т.д.). Я рекомендую запустить следующий пример:

Директива using namespace std; сообщает компилятору, что в этом месте вы используете имена из пространства имен std , за счет нее вы, в частности, можете писать cout или cin вместо std::cout и std::cin . Тему пространств имен мы подробно изучим в следующих уроках.

Поиграйтесь с исходными числами, обратите внимание, что в результате деления вы получаете целое число (округляется вниз — как при выполнении операции div в Паскале). Очень часто вам будет пригождаться операция получения остатка от деления ( a%b ) — разберитесь с тем, что она возвращает.

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

Помимо целых чисел, компьютер может обрабатывать дробные — замените тип int в нашей программе на float или double , при попытке собрать программу вы получите ошибки, т.к. не все используемые тут операторы могут применяться к дробным числам. Изучите сообщения об ошибках — вам нужно научиться их читать. Запустите следующую программу:

Обратите внимание, что теперь даже если на вход будут поданы целые числа — результат операции деления будет дробным. Различия между типами данных double и float в данный момент для нас несущественны — достаточно помнить, что float обычно занимает 4 байта, а double — 8, за счет этого при вычислениях над переменными double мы можем получить более высокую точность и диапазон значений (см. справочный материал в конце урока).

Теперь рассмотрим изученное на примере более сложной задачи (наконец, заставим наш компьютер посчитать что-нибудь полезное):

Известны плотность p , высота h и радиус основания R цилиндрического слитка.
Найти объем V , массу m и площадь S основания слитка.

Составим текст программы, учитывая что:
$$S = \pi \cdot R \cdot R, \\
V = S \cdot h,\\
m = p \cdot V.$$

Результаты работы программы:

Исследуя эту программу, обратите внимание на:

  1. описание констант с помощью ключевого слова const . Константе значение присваивается лишь один раз, если вы попробуете сделать это еще раз — программа не скомпилируется. Очень хорошая практика — явно указывать константность везде, где это возможно. Это с одной стороны защитит вас от ошибок в дальнейшем (при попытке изменить константу вы сразу получите ошибку), а с другой — позволит генерировать более оптимальный код компилятору.
  2. в конце программы мы написали cin.get() дважды. Дело в том, что:
    • функция get извлекает из потока cin один символ. Символы попадут в поток после нажатия пользователем кнопки Enter;
    • оператор >> считывает из потока слово и, в нашем случае, преобразует его в число. Исследуя программы, вы должны были заметить, что если ввести в одной строке несколько чисел — то «сработают» сразу несколько последовательных операторов ввода. Мы пользовались этим, например, при исследовании математических операторов;
    • считав первое слово с потока — оператор >> не «трогает» остальные символы. В результате, в потоке остается символ-разделитель — в нашем случае — символ перевода строки (соответствующий клавише Enter). Этот символ и будет считан первым вызовом функции get() ;
    • таким образом, если оставить только один вызов get() программа отобразит на экран результаты вычислений и сразу завершится. Второй вызов get() ожидает еще одного нажатия клавиши Enter пользователем;
    • вам нужно помнить об этом всякий раз, когда вы используете get после оператора >> .
  3. в этой программе не так легко разобраться, как хотелось бы и очень легко запутаться. Проблема заключается в «плохих» именах переменных. По мере усложнения ваших программ эта проблема станет более очевидной. Заведите правило — давать переменным имена, которые отражают суть. Более подробно про это можно прочитать в статье «Теория чистого кода. Стиль кодирования«. Попробуйте переписать эту программу, используя более понятные имена.

3 Справочный материал

3.1 Переменные и типы данных

Переменная это область памяти заполненная данными, которые называются значением переменной. У каждой переменной должно быть своё уникальное имя на латинице с учетом регистра. Переменные делятся на целочисленные, дробные, символьные, логические (т.е «да» или «нет»).

Для решения задачи в любой программе выполняется обработка каких-либо данных. К основным типам данных языка C++ относят:

  • char — символьный;
  • int — целый;
  • float — дробное число с плавающей точкой;
  • double — дробное число двойной точности;
  • bool — логический.
  • void — неполный тип и спецификатор типа. Множество значений этого типа пусто (поэтому его нет в таблице ниже). Он используется для определения функций, которые не возвращают значения, а также как базовый тип для указателей. Вы не можете создать переменную этого типа, позже станет понятно как им пользоваться.

Для формирования других типов данных используют основные и так называемые спецификаторы:

  • short — короткий;
  • long — длинный;
  • signed — знаковый;
  • unsigned — беззнаковый.
  • const — константа.

В таблице приведена справочная информация о различных комбинациях типов данных с учетом спецификаторов для операционной системы Windows:

Имя типа Размер (в байтах) Диапазон значений
int (signed int) 4 От -2 147 483 648 до 2 147 483 647
unsigned int 4 От 0 до 4 294 967 295
bool 1 false или true
char (unsigned char) 1 -128 до 127 знаков по умолчанию
signed char 1 От -128 до 127
unsigned char 1 От 0 до 255
short (signed short) 2 От -32 768 до 32 767
unsigned short 2 От 0 до 65 535
long (signed long) 4 От -2 147 483 648 до 2 147 483 647
unsigned long 4 От 0 до 4 294 967 295
long long (signed long long) 8 От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
unsigned long long 8 От 0 до 18 446 744 073 709 551 615
float 4 3,4E +/- 38 (7 знаков)
double (long double) 8 1,7E +/- 308 (15 знаков)
wchar_t 2 От 0 до 65 535

Тип char предназначен для хранения символов, обрабатывать строки (состоящие из символов) мы научимся в следующих уроках, сейчас нужно знать, что внутри компьютера символы хранятся в виде целых чисел в небольшом диапазоне. Преобразование символов в числа и назад производится на основе кодовых таблиц, которые можно менять (в зависимости от языка — русский, английский, китайский, …). Строка записывается в двойных кавычках («hello world»), а одиночный символ — в одинарных (‘a’).

Тип wchar_t также используется для хранение символов, однако занимает 2 байта (в Unix — 4 байта) и хранит данные в формате Юникода.

Переменная типа bool может принимать только два значения true (истина) или fasle (ложь), тем не менее, в памяти занимает не 1 бит, а 1 байт. Любое значение, не равное нулю, интерпретируется как true .

3.2 Битовые операции

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

Ниже показано как выполняется операция логического ИЛИ для такого фрагмента кода:

Подобным образом работают операции — И ( a & b ), исключающее ИЛИ ( a ^ b ). Операции << и >> , примененные для чисел, осуществляют битовый сдвиг двоичного представления числа влево и вправо на заданное число разрядов.

$$
Ниже: 20_<10>\;-\;число\;20\;в\;десятичной\;системе\;счисления, \\
10001_<2>\;-\;число\;20\;в\;двоичной\;системе\;счисления. \\
20_<10>\;|\;17_ <10>= 10001_2\;|\;10100_2 = 10101_2 = 21_<10>. \\
20_<10>\;\&\;17_ <10>= 10001_2\;\&\;10100_2 = 10000_2 = 16_<10>. \\
20_<10>\;\hat<>\;17_ <10>= 10001_2\;\hat<>\;10100_2 = 00101_2 = 5_<10>. \\
47_ <10>> 2 = 101111_2 >> 2 = 1011_2 = 11_<10>.
$$

3.3 Приведение типов

В C++ различают два вида преобразования типов данных: явное и неявное.

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

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

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

Явное преобразование в отличие от неявного осуществляется программистом. Записать это можно следующим образом:
b = (int) a;
или
b = int(a);

Тут мы явно указываем, что переменной b нужно присвоить значение a, приведенное к типу int .

Приведенные ниже конструкции могут встретиться вам при просмотре чужого исходного кода, вам нужно иметь представление о них, при необходимости — более подробно прочитайте в статье «Явное приведение типов в C++«.

В С++ определены следующие операторы:

    static_cast<> () — осуществляет преобразование связанных типов данных. Этот оператор приводит типы по обычным правилам, что может потребоваться в случае, когда компилятор не выполняет автоматическое преобразование. Синтаксис будет выглядеть так:

Тип static_cast <Тип> (объект);

С помощью static_cast нельзя убрать константность у переменной, но это по силам следующему оператору.

3.4 Составное присваивание, инкремент/декремент

В ваших программах часто нужно выполнить что-то типа
a = a+b;
вместо такой конструкции можно использовать специальный вид оператора:
a += b;

Еще чаще в программах нужно увеличивать или уменьшать значение переменной ровно на единицу:

Для таких случаев в С++ тоже определены специальные операторы: ++ и — . Каждый из которых имеет две формы — префиксную и постфиксную, понять которые можно изучив пример:

В этом примере оба вида оператора применяются к переменной a и оба они приводят к увеличению значения переменной на единицу. Однако, постфиксная форма возвращает старое значение пеерменной (до инкремента), а префиксная — новое значение. Поэтому на экран будет выведено:

Аналогично работает постфиксный и префиксный декремент (оператор — ).

Здравствуйте!
Интересно, когда нужно использовать целую переменную, часто ли пишут что-то кроме int? Когда на практике это бывает нужно?

В каком-нибудь небольшом цикле, к примеру, от 0 до 9, в учебниках обычно используют тип int.

Нечасто. Если эта переменная будет создана одна — то смысла оптимизировать (заменять ее на short или char) — нет. Мало того, это называется преждевременной оптимизацией и это плохо, т.к. реально усложняет восприятие кода.

На практике бывает нужно. Ну например, пишите вы игру, в которой перемещаются миллионы объектов. При этом объекты распределяются по слоям — наземные, летающие (ну может быть в будущем вы добавите подземеные). Также объектами являтся природа (трава, горы, деревья). Если объекты другом не пересекаются, то реально вам нужно только 4-5 слоев. Ну может быть незначительно больше (например для анимаций падающих или идущих на посадку самолетов и т.п.). И в силу того, что таких объектов миллионы и каждый из них мог бы хранить номер слоя — тут стоит использовать char для этого номера. На каждом миллионе объектов мы пр этом сэкономили бы примерно 3Мб оперативной памяти.

Хотя, опять же, заморачиваться с этим на ранних этапах разработки не стоит. Лучше пораньше выпустить программу, а потом уже заниматься ее профилированием.

Как вывести значение выражения на экран компьютера

В предыдущей теме мы познакомились со структурой программы на языке Pascal, научились описывать данные, рассмотрели оператор присваивания. Этого достаточно для того, чтобы записать программу преобразования данных. Но результат этих преобразований нам виден не будет.

Для вывода данных из оперативной памяти на экран монитора используется оператор вывода write :

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

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

Пример

Оператор write (‘s= ‘, s) выполняется так:

  1. на экран выводятся символы, заключённые в апострофы: s=
  2. на экран выводится значение переменной, хранящееся в ячейке оперативной памяти с именем s .

Если значение переменной s равно 15 и она имеет целочисленный тип, то на экране появится: s=15

Если значение переменной s равно 15, но она имеет вещественный тип, то на экране появится: s=1.5Е+01

При выполнении оператора вывода все элементы списка вывода печатаются непосредственно друг за другом. Так, в результате работы оператора write (1, 20, 300) на экран будет выведена последовательность цифр 120300, которая будет восприниматься нами как число 120300, а не как три отдельные числовые константы. Сделать выводимые данные более доступными для восприятия можно разными способами:

Способы вывода данных

Вариант организации вывода Оператор вывода Результат
Добавить разделители — запятые write (1, ‘,’, 20, ‘,’, 300) 1,20,300
Добавить разделители — пробелы write (1, ‘ ‘, 20, ‘ ‘, 300) 1 20 300
Указать формат вывода write (1:3, 20:4, 300:5) 1 20 300

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

Для вывода вещественного числа в списке вывода для каждого выражения указываются два параметра: 1) общее количество позиций, отводимых под число; 2) количество позиций в дробной части числа:

Способы вывода вещественных данных

Оператор вывода Результат выполнения оператора
write (‘s=’, s:2:0); s=15
write (‘s=’, s:3:1); s= 15.0
write (‘s=’, s:5:1); s= 15.0

При выполнении нового оператора write вывод продолжается в той же строке. Чтобы осуществить переход к новой строке, используется оператор writeln . Других различий между операторами write и writeln нет.

Первая программа на языке Pascal

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

Исходным данным в этой задаче является радиус: r = 5,4 см. Результатом работы программы должны быть величины c — длина окружности и s — площадь круга. c, s и r — величины вещественного типа.

Исходные данные и результаты связаны соотношениями, известными из курса математики: c=2πr, s = πr 2 . Программа, реализующая вычисления по этим формулам, будет иметь вид:

Эта программа верна и решает поставленную задачу. Запустив её на выполнение, вы получите следующий результат:

Первая программа

Первая программа

И всё-таки составленная нами программа имеет существенный недостаток: она находит длину окружности и площадь круга для единственного значения радиуса (5,4 см).

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

Ввод данных с клавиатуры

Для ввода в оперативную память значений переменных используется оператор ввода read :

При выполнении оператора read компьютер переходит в режим ожидания данных: пользователь должен ввести данные с клавиатуры и нажать клавишу Enter . Несколько значений переменных числовых типов могут вводиться через пробел или через запятую. При вводе символьных переменных пробел и запятая воспринимаются как символы, поэтому ставить их нельзя.

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

Пример

var i, j: integer; x: real; a: char;

Присвоим переменным i, j, x, а значения 1, 0, 2.5 и ‘А’. Для этого воспользуемся оператором

и организуем входной поток одним из следующих способов:

Пример ввода

Пример ввода

Здесь мы не только использовали различные разделители (пробел, запятая), но и представляли входной поток в виде одной, двух и четырёх строк.

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

Усовершенствуем программу p_1, организовав в ней ввод данных с помощью оператора read . А чтобы пользователь знал, для чего предназначена программа, и понимал, какое именно действие ожидает от него компьютер, выведем соответствующие текстовые сообщения с помощью оператора writeln :

Результат работы усовершенствованной программы

Результат работы усовершенствованной программы

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

САМОЕ ГЛАВНОЕ

Для ввода в оперативную память значений переменных используются операторы ввода read и readln .

Для вывода данных из оперативной памяти на экран монитора используются операторы вывода write и writeln .

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

Организация ввода и вывода данных
Организация ввода и вывода данных
  • оператор вывода print
  • формат вывода
  • оператор ввода input
Вывод данных

В предыдущей теме мы познакомились со структурой программы на языке Python, научились описывать данные, рассмотрели оператор присваивания. Этого достаточно для того, чтобы записать программу преобразования данных. Но результат этих преобразований нам виден не будет.

Для вывода данных из оперативной памяти на экран монитора используется оператор вывода print :

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

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

Пример

Оператор print (‘s= ‘, s) выполняется так:

  1. на экран выводятся символы, заключённые в апострофы: s=
  2. на экран выводится значение переменной, хранящееся в ячейке оперативной памяти с именем s .

Если значение переменной s равно 15, и она имеет целочисленный тип, то на экране появится: s=15

Оператор print вставляет между выводимыми значениями так называемый разделитель (или сепаратор, англ. separator). По умолчанию разделитель — это пробел, но мы можем его изменить, указав новый разделитель после слова sep

Способы вывода данных

Вариант организации вывода Оператор вывода Результат
По умолчанию print (1, 20, 300) 1 20 300
Убрать разделители — пробелы print (1, 20, 300, sep=») 120300
Добавить другой разделитель print (1, 20, 300, sep=’,’) 1,20,300

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

Для вывода вещественного числа в списке вывода для каждого выражения указываются два параметра: 1) общее количество позиций, отводимых под число; 2) количество позиций в дробной части числа: (◦ — обозначение пробела)

Способы вывода вещественных данных

Оператор вывода Результат выполнения оператора
a = 4
print (‘a=’, ‘<:5d><:5d>‘.format(a, a * a))
a= ◦◦◦◦4◦◦◦16
a = 1 / 3
b = 1 / 9
print («<:7.3f><:7.3f>«.format(a, b))
◦◦0.333◦◦0.111
a = 1 / 3
b = 1 / 9
print (‘<:10.3e><:10.3e>‘.format(a, b))
◦3.333e-0.1◦◦1.111e-01

При выполнении нового оператора print вывод продолжается в новой строке. Чтобы убрать переход к новой строке, используется параметр end .

Первая программа на языке Python

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

Исходным данным в этой задаче является радиус: r = 5,4 см. Результатом работы программы должны быть величины c — длина окружности и s — площадь круга. c, s и r — величины вещественного типа.

Исходные данные и результаты связаны соотношениями, известными из курса математики: c=2πr, s = πr 2 . Программа, реализующая вычисления по этим формулам, будет иметь вид:

Эта программа верна и решает поставленную задачу. Запустив её на выполнение, вы получите следующий результат:

Первая программа

Первая программа

Вывод по формату:

Первая программа с выводом по формату

Первая программа с выводом по формату

И всё-таки составленная нами программа имеет существенный недостаток: она находит длину окружности и площадь круга для единственного значения радиуса (5,4 см).

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

Ввод данных с клавиатуры

Для ввода в оперативную память значений переменных используется оператор ввода input . Каждая функция input() захватывает только ОДНУ строку данных и воспринимает ее как ТЕКСТ (строковый тип):

    Тип переменной можно преобразовать налету:
  • для целых: a = int (input())
  • для вещественных: a = float (input())

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

Есть задачи, в которых вводимые данные заданы в одной строке, например, 10 20. Чтобы была возможность работать с такими данными, их надо разделить.

Для этого нужно применить следующий синтаксис:

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

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

В таких случаях надо для split() указывать конкретный символ разделителя. Разделителем будет символ ‘:’ , взятый в кавычки или апострофы.

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

При вызове функции input в скобках можно записать сообщение-подсказку:

Усовершенствуем программу 1, организовав в ней ввод данных с помощью оператора input , включив строку с приглашением для ввода:

Результат работы усовершенствованной программы

Результат работы усовершенствованной программы

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

САМОЕ ГЛАВНОЕ

Для ввода в оперативную память значений переменных используются оператор ввода input .

Для вывода данных из оперативной памяти на экран монитора используются оператор вывода print .

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

Ввод-вывод в Си

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

Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h . Эта библиотека содержит функции

  • printf() — для вывода информации
  • scanf() — для ввода информации.

Вывод информации

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

Общая форма записи функции printf() :

СтрокаФорматов состоит из следующих элементов:

  • управляющих символов;
  • текста, представленного для непосредственного вывода;
  • форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.

Основные управляющие символы:

  • ‘\n’ — перевод строки;
  • ‘\t’ — горизонтальная табуляция;
  • ‘\v’ — вертикальная табуляция;
  • ‘\b’ — возврат на символ;
  • ‘\r’ — возврат на начало строки;
  • ‘\a’ — звуковой сигнал.

Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:

  • %d — целое число типа int со знаком в десятичной системе счисления;
  • %u — целое число типа unsigned int ;
  • %x — целое число типа int со знаком в шестнадцатеричной системе счисления;
  • %o — целое число типа int со знаком в восьмеричной системе счисления;
  • %hd — целое число типа short со знаком в десятичной системе счисления;
  • %hu — целое число типа unsigned short ;
  • %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
  • %ld — целое число типа long int со знаком в десятичной системе счисления;
  • %lu — целое число типа unsigned long int ;
  • %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
  • %f — вещественный формат (числа с плавающей точкой типа float );
  • %lf — вещественный формат двойной точности (числа с плавающей точкой типа double );
  • %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
  • %c — символьный формат;
  • %s — строковый формат.

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

Результат работы программы
Вывод в Си

Тот же самый код может быть представлен с использованием одного вызова printf :

Табличный вывод

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

Результат выполнения
Форматированный вывод в Си

В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

Вывод числа с указанием количества знакомест

Ввод информации

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

Строка форматов аналогична функции printf() .
Для формирования адреса переменной используется символ амперсанд ‘&’ :
адрес = &объект

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

Результат работы программы:
Функция scanf()

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

Другой вариант — воспользоваться функцией защищенного ввода scanf_s( ) , которая появилась несколько позже, но содержит тот же самый список параметров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *