
- •1. Общие правила выполнения лабораторных работ
- •2. Программное обеспечение, используемое для выполнения лабораторных работ
- •3. Лабораторная работа № 1. Создание простейшего консольного приложения C
- •3.1. Задание
- •3.2. Методические указания по выполнению лабораторной работы
- •3.2.1. Создание проекта консольного приложения
- •3.2.2. Открытие существующего проекта
- •3.2.3. Редактирование функции main Вашего проекта
- •3.2.4. Компиляция и сборка проекта
- •3.2.5. Пробный запуск проекта из интегрированной среды CodeBlocks
- •3.2.6. Запуск откомпилированного исполнительного файла проекта непосредственно из операционной системы
- •4.1. Задание
- •4.2. Методические указания по выполнению лабораторной работы
- •4.2.1.1. Создание переменных
- •4.2.1.2. Ввод значения входной переменной с клавиатуры
- •4.2.1.3. Выполнение арифметических вычислений
- •4.2.1.4. Вывод результата вычисления
- •4.2.1.5. Пример исходного текста программы
- •4.2.2. Использование переменных с модификатором const в исходных текстах приложений
- •5. Лабораторная работа № 3. Использование оператора выбора и преобразования типов значений переменных
- •5.1. Задание
- •5.2. Методические указания по выполнению лабораторной работы
- •5.2.1. Создание проекта приложения
- •5.2.3. Преобразование сигнала АЦП из целочисленного формата в формат с плавающей десятичной точкой и его масштабирование
- •5.2.4. Вычисление значения физического параметра (температуры) по значению напряжения на выходе датчика
- •5.2.5. Вывод вычисленного значения физического параметра (температуры) на дисплей
- •6. Лабораторная работа № 4. Использование оператора переключателя switch
- •6.1. Задание
- •6.2. Методические указания по выполнению лабораторной работы
- •6.2.1. Создание проекта консольного приложения
- •6.2.2. Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
- •6.2.3. Преобразование ASCII-символа шестнадцатеричной цифры в числовой формат
- •6.2.4. Вывод результата преобразования
- •6.2.5. Ввод с клавиатуры произвольного символа и завершение работы приложения
- •7. Лабораторная работа № 5. Создание и использование пользовательских функций
- •7.1. Задание
- •7.2. Методические указания по выполнению лабораторной работы
- •7.2.1. Создание проекта консольного приложения
- •7.2.2. Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
- •7.2.3. Создание и вызов функции преобразования кода ASCII-символа в число
- •7.2.3.1. Общий порядок создания и вызова функции
- •7.2.3.2. Использование функции для получения числового значения шестнадцатеричной цифры
- •7.2.4. Вывод на дисплей результата вычисления
- •7.2.5. Ввод с клавиатуры произвольного символа и завершение работы приложения
- •8.1. Методические указания по выполнению лабораторной работы
- •8.1.1. Создание проекта консольного приложения
- •8.1.2. Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
- •8.1.3. Создание и вызов функции, размещенной в отдельном файле исходного текста
- •8.1.3.1. Создание нового файла исходного текста и размещение в нем пользовательской функции
- •8.1.3.2. Создание нового файла заголовка и подключение его к проекту
- •8.1.4. Вывод на дисплей результата вычисления
- •8.1.5. Ввод с клавиатуры произвольного символа и завершение работы приложения
- •9. Лабораторная работа №7. Использование массивов, структур и указателей
- •9.1. Методические указания по выполнению лабораторной работы
- •9.1.1. Создание проекта приложения
- •9.1.3. Создание пользовательского типа данных - структуры
- •9.1.4. Подключение файла-заголовка к проекту
- •9.1.5. Создание файла исходного текста и подключение его к проекту
- •9.1.6. Создание функции, выполняющей вычисление значения линейной функции по значению ее аргумента
- •9.1.7. Создание функции, выполняющей поиск линейного отрезка, на котором находится аргумент линеаризуемой функции, и вычисление ее (линеаризуемой функции) значения
- •9.1.7.1. Оператор итерационного цикла for
- •9.1.7.2. Оператор цикла с предусловием while
- •9.1.7.3. Оператор цикла с постусловием do while
- •9.1.7.4. Передача функции вычисления значения линейной функции указателей на используемые элементы массива
- •9.1.8. Создание в файле заголовка прототипа функции
- •9.1.9. Создание константного одномерного массива, содержащего параметры граничных точек линейных отрезков линеаризуемой функции
- •9.1.10. Определение размера массива
- •9.1.11. Объявление объекта данных как глобального
- •9.1.12. Вызов функции MultyLinearFuncCalc из файла main.cpp
- •9.1.13. Вывод результата вычислений и завершение работы приложения

1.Вывод на экран стандартного заголовка приложения, включающего 3 строки: номер работы, фамилию и инициалы исполнителя, номер курса, группы и подгруппы (см. раздел 3.1.).
2.Вывод на экран строки-приглашения для ввода шестнадцатеричной цифры "Input symbol:" и ввод с клавиатуры одного символа - шестнадцатеричной цифры.
3.Преобразование введенного символа - шестнадцатеричной цифры в числовой формат и помещение полученного числа в переменную типа int, если это возможно, и установку флага
ошибки, если введенный символ не является шестнадцатеричной цифрой.
4.Вывод на экран строки "Result = " и числа, полученного в результате преобразования, если введен корректный символ, или строки "Illegal symbol", если введенный символ не является шестнадцатеричной цифрой.
5.Ввод с клавиатуры любого символа и завершение работы приложения после его ввода и нажаия на клавишу Enter.
Консольное окно приложения в случае успешного выполнения должно иметь вид, показанный на рис. 29.
Рис. 29. Результат работы приложения при успешном выполнении для лабораторной работы 4
Запустите приложение и продемонстрируйте его работу преподавателю, введя с клавиатуры символ и получив соответствующее ему числовое значение.
6.2. Методические указания по выполнению лабораторной работы
6.2.1. Создание проекта консольного приложения
Создание проекта консольного приложения, создание исходного текста главной функции main, вывод на экран строк заголовка приложения (номер лабораторной работы, фамилия и инициалы автора, номер курса, группы и подгруппы) уже рассматривались в предыдущих работах (см. раздел 3.2.).
6.2.2.Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
Для ввода с клавиатуры кола символа используется стандартный входной поток cin, использование которого уже было рассмотрено в предыдущих работах.
В данной работе предлагается создать переменную типа char, в которую стандартный входной поток cin и будет вводить значение с клавиатуры. В качестве такой переменной может
использоваться та же переменная, которая потом будет использоваться в конце приложения для ввода произвольного символа и завершения работы приложения. Переменная может быть создана в той же области, что и в предыдущих работах (например - в начале функции main).
При использовании для ввода с клавиатуры переменной типа char без явного указания типа вводимого значения в эту переменную будет помещен ASCII-код введенного символа. В данном
46
случае при корректном вводе в данную переменную будет помещен ASCII-код цифр '0' - '9' или буквы английского алфавита 'A', 'B', 'C', 'D', 'E' и 'F', которые являются шестнадцатеричными
числами. Обратите внимание на то, что пользователь может ввести с клавиатуры строчную как заглавную (большую), так и строчную (маленькую) буквы английского алфавита, используемую в качестве шестнадцатеричной цифры, что должно быть учтено далее в процессе преобразования введенного символа.
6.2.3. Преобразование ASCII-символа шестнадцатеричной цифры в числовой формат
Для преобразования символа шестнадцатеричной цифры в числовой формат в данной работе предлагается использовать оператор переключатель. Оператор переключатель имеет следующую структуру:
switch (переключающее_выражение)
{
case ключ_1: действия_1;
case ключ_2: действия_2;
...
case ключ_N: действия_N;
default: действия_по_умолчанию;
}
При выполнении оператора вначале вычисляется переключающее_выражение. Затем
оператор переходит к выполнению действия, описание которого начинается с ключевого слова case, аргумент которого (ключ_1, ключ_2 и т.д.) равен значению переключающего_выражения.
Далее выполняются все действия от этого ключа до закрывающей фигурной скобки оператора (именно все действия, а не только действия, соответствующие этому ключу).
Все действия могут
Если ни одно значение ключа не равно значению переключающего выражения, выполняются действия, начинающиеся с ключевого слова default. Ключ default и следующее после него действие_по_умолчанию не является обязательным при создании оператора switch, однако его наличие необходимо в случае, если значение переключающего выражения может принимать значения, не соответствующие ни одному из значений ключей case оператора.
Следующий пример вычисляет периметр (сумму длин сторон) фигуры, количество сторон которой меняется от 3 (треугольник) до 6 (шестиугольник). Количество сторон фигуры и их длина заранее неизвестны.
... |
// Переменная - количество сторон фигуры. |
|
int SideNumber = 2; |
||
int Side1 = 6; |
// Длина стороны 1 фигуры. |
|
int Side2 = 7; |
// Длина стороны 2 фигуры. |
|
int Side3 = 3; |
// Длина стороны 3 |
фигуры. |
int Side4 = 4; |
// Длина стороны 4 |
фигуры. |
int Side5 = 8; |
// Длина стороны 5 |
фигуры. |
int Side6 = 2; |
// Длина стороны 6 |
фигуры. |
int OutputVal = 0; |
// Переменная - результат вычисления |
|
периметра. |
|
|
... |
|
|
switch (SideNumber) |
|
|
47
{
case 6:
OutputVal += Side6; // Суммирование длины стороны с // периметром.
case 5:
OutputVal += Side5; // Суммирование длины стороны с // периметром.
case 4:
OutputVal += Side4; // Суммирование длины стороны с // периметром.
case 3:
OutputVal += Side3; // |
Суммирование длин сторон с |
|
OutputVal += Side2; // периметром. |
||
OutputVal += Side1; |
// Количество сторон находится |
|
default: |
||
|
// вне допустимых пределов. Не |
|
|
// вычислять периметр. |
}
В данном примере в случае, если количество сторон фигуры (значение переменной SideNumber) имеет значение 6, значение переменной OutputVal (в которую записано значение
0 при создании) скалдывается со значением переменной Side6, затем - со значением переменной Side5 и далее со всеми остальными переменными, содержащими значения длин строк. Если переменная SideNumber имеет значение 5, суммирование начинается с переменной Side5, и т.д. В случае, если значение переменной SideNumber находится вне диапазона 1 - 6, происходит переход к ключу default и никаких действий не выполняется.
Однако, как правило, при выполнении подобного выбора действий требуется выполнить не все действия, следующие после этого, а только одно выбранное действие, после чего завершить выполнение оператора switch. В этом случае для завершения выполнения действия и выхода их
выхода из оператора switch используется оператор break. Оператор switch принимает следующий вид:
switch (переключающее_выражение)
{
case ключ_1: действия_1; break;
case ключ_2: действия_2; break;
...
case ключ_N: действия_N; break;
default: действия_по_умолчанию; break;
}
Рассмотрим пример реализации такого оператора применительно к заданию данной лабораторной работы. Предположим, что ранее мы уже определили переменную CharInputBufer типа char, в которую с клавиатуры вводится ASCII-код символа, который
требуется преобразовать в цифровой формат. Кроме того, заранее создана переменная типа int (назовем ее NumberVal), в которую будет помещен результат преобразования. В таком случае
48
оператор switch, выполняющий преобразование, принимает следующий вид:
switch (CharInputBufer) |
|
{ |
|
case '1': |
|
NumberVal = 1; |
|
break; |
|
case '2': |
|
NumberVal = 2; |
|
break; |
|
... |
|
case 'A': |
|
NumberVal = 10; |
|
break; |
|
case 'B': |
|
NumberVal = 11; |
|
break; |
|
... |
|
case 'F': |
|
NumberVal = 15; |
|
break; |
// Некорректный код. Никакие действия |
default: |
|
break; |
// не выполняются. |
|
|
} |
|
Часть строк для выбора символов в примере опущена, чтобы сократить его размер.
В качестве значений входной переменной CharInputBufer в ключевых словах case
используются символьные константы - один или два символа, заключенные в одинарные кавычки (апострофы), например: '1', '2', 'A'. При компиляции данные символы заменяются их ASCII-кодами, которые и сравниваются с содержимым переменной CharInputBufer. Количество байтов ASCII-кодов будет совпадать с количеством символов константы.
Данный пример имеет два недостатка, которые надо устранить, чтобы реализовать задание к лабораторной работе:
1.В качестве шестнадцатеричных цифр используются буквы английского алфавита. При этом пользователь может ввести с клавиатуры как прописную, так и строчную буквы. Пример же работает только с прописными буквами.
2.Приложению требуется сигнализировать о некорректном символе, введенном пользователем (символе - не шестнадцатеричной цифре). В данном случае оператор switch никак не реализует такую сигнализацию.
Для устранения первой проблемы можно создавать пункты оператора switch,
обрабатывающие шестнадцатеричные цифры - английские буквы, можно реализовывать следующим образом:
switch (CharInputBufer)
{
...;
case 'A': case 'a':
NumberVal = 10; break;
case 'B': case 'b':
49
NumberVal = 11; break;
...
}
Для решения второй проблемы предлагается использовать еще одну переменную - флаг обнаружения ошибки. В качестве такой переменной предлагается использовать переменную типа bool. Это - логическая переменная, которая может принимать только 2 значения: true (истинно) b false (ложно). На самом деле во внутреннем представлении C это - переменная размером 1 байт, которая принимает значения 0 (соответствует false) и 1 (соответствует true).
Переменная может быть создана в той же области функции C, что и остальные переменные, следующим образом:
bool Result; |
// Буфер кода результата преобразования. |
Считаем, что если преобразование цифры в числовой формат прошло успешно, переменная Result должна содержать значение true, в случае ошибки - значение false. Тогда оператор
switch нужно преобразовать следующим образом:
switch (CharInputBufer)
{
case '1': NumberVal = 1; Result = true; break;
case '2': NumberVal = 2; Result = true; break;
...
case 'A': case 'a':
NumberVal = 10; Result = true; break;
...
default:
Result = false; break;
}
то есть в каждое действие, определяемое своим ключом case или default, добавляется одна строка, выполняющая ввод в переменную Result значение true или false.
Однако данное действие можно упростить, введя в переменную Result значение сразу при ее создании, например:
bool Result = true; |
// Буфер кода результата преобразования. |
Тогда не потребуется выполнять это действие в операторе switch в каждом из 16 пунктов case (то
есть добавлять 16 лишних строк исходного текста). Достаточно будет изменить значение переменной только в пункте default оператора switch, отреагировав тем самым на
неправильный введенный символ.
50