Лабораторная работа № 26.
Линейные алгоритмы в C++

Время выполнения

2 часа

Цель работы

Научиться работать в интегрированной среде программирования (ИСП) и приобрести навыки  составления линейных алгоритмов.

Задачи лабораторной работы

После выполнения работы студент должен уметь:
  • Вводить и редактировать текст (манипуляция с символами, строками, блоками как в пределах одного окна, так и между ними);
  • Получать справку от ИСП;
  • Компилировать и запускать на выполнение программу;
  • Искать и исправлять синтаксические и семантические ошибки;
  • Выполнять трассировку (пошаговую отладку) программы;
  • Инициировать и изменять значения переменных;
  • Написать текст программы по схеме алгоритма, и, наоборот, по тексту программы составить схему её алгоритма;
  • Написать текст программы на языке программирования C++; 
  • Применять в структуре программы типы данных, арифметические операции, математические функции, функции ввода и вывода, оператор присваивания – и правила их использования;
  • Проводить тестирование программы, используя известные ему приложения (например, Excel или MathCAD).

Перечень обеспечивающих средств

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

Общие теоретические сведения

Интегрированная среда программирования Borland С++ 

Интегрированная среда программирования (ИСП) для Borland C++ (BC) и для Turbo Pascal (TP) очень схожи, поэтому здесь описаны команды для среды BC. Окно ИСП состоит из 4-х основных частей: главного меню, окна редактирования, окна сообщений и строки состояния, в каждую из которых можно войти с помощью «мыши».
Рисунок 1. Интерфейс интегрированной среды программирования Borland C++

«Главное меню» доступно клавишей F10 или путем нажатия комбинаций клавиш ALT и первой буквы соответствующего элемента меню. 
Таблица 1. Меню File, команды работы с файлами
 New  открыть новое окно редактирования
 Open...F3  открыть существующий файл с диска
 Save   F2  сохранить программу под старым именем
 Save as...  сохранить программу под новым именем
 Save all  сохранить все файлы из всех окон
 Change dir...  сменить каталог
 Print печать программы 
 Print setup...  установка параметров печати
 Dos shell  временный выход в MS DOS
 Exit   Alt+X  выход из ИПС

Таблица 2. Меню Edit, команды редактирования
 Undo   Alt+BksSp  отменить последнее действие
 Redo  повторить последнее действие
 Cut      Shift+Del  вырезать выделенный фрагмент
 Copy    Ctrl+Ins  копировать выделенный фрагмент в буфер обмена
 Paste    Shift+Ins  вставить содержимое буфера обмена
 Clear    Ctrl+Del  удалить выделенный фрагмент
 Show clipboard  показать окно буфера обмена
 Search  команды поиска
 Find...  найти фрагмент, указанный в окне
 Replace...  найти фрагмент и заменить его на указанный в окне
 Search again  повторить поиск
 Go to  line number  перейти к указанному номеру строки
 Show last compiler error  показать последнюю ошибку компиляции
 Find error...  найти ошибку
 Find procedure...  найти процедуру, заданную в окне
 Previous browser  покачать информацию предыдущего окна
 Objects  показать в окне «дерево» объектных файлов
 Units  показать в окне «дерево» модулей
 Global  показать все глобальные переменные
 Symbol...  задать идентификатор для выдачи номеров строк с ним

Таблица 3. Меню Run, команды запуска расчета
 Run    Ctrl+F9  запуск программы на исполнение
 Step over    F8  пошаговое выполнение процедур
 Trace into    F7  пошаговое выполнение операторов
 Go to  cursor    F4  выполнение фрагмента до курсора
 Program reset    Ctrl+F2  завершение сеанса отладки
 Parameters...  настройка параметров

Таблица 4. Меню Compile, компиляция программы
 Compile    Alt+F9  компиляция файла
 Make        F9  перекомпиляция только измененных модулей
 Build  перекомпиляция всех модулей
 Target...Real  выбор режима-приложения
 Primary file...  указание главного файла для команд Make и Build
 Clear primary  отмена указания главного файла
 Information...  информация о скомпилированном файле

Таблица 5. Меню Debug, команды отладки
 Breakpoints  управление точками прерывания
 Call stack    Ctrl+F3  показ имен процедур до работающей процедуры
 Register  информация о регистрах процессора
 Watch  информация о значениях переменных и выражений
 Output  отображение результатов без графики
 User screen    Alt+F5  просмотр результатов программы
 Evaluate modify...Ctrl+F4  просмотр и изменение значений переменных
 Add watch...    Ctrl+F7  просмотр конкретных значений переменных
 Add breakpoint...  установка условных и безусловных точек прерывания

Таблица 6. Меню Tools, команды работы с сообщениями ИПС и утилитами отладки
 Messages  переход в окно сообщений
 Go to  next    Alt +F8  переход к следующему элементу окна
 Go to  previous    Alt+F7  переход к предыдущему элементу окна
 Grip    Shift+F2  вызов программы Grip
 Turbo Assembler  Shift+F3  вызов программы Assembler
 Turbo Debugger Shift+F4  вызов программы Debugger
 Turbo Profiler    Shift+F5  вызов программы Profiler

Таблица 7. Меню Options, команды установки параметров интегрированной среды
 Compiler  параметры, определяющие работу компилятора
 Memory Sizes  размеры стека, размер памяти
 Linker  параметры компоновщика
 Directories  задает каталоги, для помещения и извлекания файлов
 Browser  опции, связанные с просмотром
 Tools  местоположение программных компонентов меню
 Environment  параметры работы с мышью, редактором и т.п.
 Open  открывает файл конфигурации
 Save  сохраняет файл конфигурации
 Save as…  сохраняет файл конфигурации с запросом имени

Таблица 8. Меню Window, команды управления окнами
 Tile  показать все открытые окна редактирования
 Cascade  показать в каскадном виде все открытые окна редактирования
 Close all  закрыть все открытые окна
 Refresh display  восстановление изображения ИПС после сбоев
 Save Move    Ctrl+F5  изменение размеров окна
 Zoom     F5  раскрытие окна до полного размера экрана
 Next       F6  переход в следующее окно
 Previous  Shift+F6  переход в предыдущее окно
 Close    Alt+F3  закрытие окна
 List    Alt+0  перечисление всех окон с момента работы ИПС

Таблица 9. Меню Help, вызов справочной информации
 Contents  вывод оглавления справки
 Index    Shift+Fl  вывод алфавитного перечня терминов 
 Topic search    Ctrl+Fl  вывод справки о термине, указанным курсором
 Previous topic  Alt+Fl  переход к предыдущей справке
 Using help  вывод инструкции по работе со справочной информацией
 Filet...  добавление и удаление информационных файлов
 Compiler directives  вывод списка всех директив компилятора
 Procedures and functions  вывод алфавитного перечня процедур и функций
 Reserved words  вывод зарезервированных слов
 Standards units  вывод стандартных модулей
 Error messages  вывод о сообщениях ошибок
 About ...  служебная информация

Для входа в «Окно редактирования» нажать комбинацию клавиш <Alt> и <цифра>, где <цифра> - номер окна.  С окнами можно:
создавать новое – <Alt>+<F>+<N> (или File/New),
закрывать текущее – <Alt>+<F3>.

Таблица 10. «Горячие» клавиши
 <Insert>  переключение режима вставки/замены символов
 <Delete>  удаление символа, находящегося над курсором
 <Backspace>  удаление символа, находящегося слева от курсора
 <End>  перемещение курсора в конец текущей строки
 <Home>  перемещение курсора и начало текущей строки
 <Enter>  для перехода на новую строку и разрезания текущей строки на две
<Page Up>   «прочитывание» текста на один экран вперед
 <Page Down>  «прочитывание» текста на один экран назад
 <Сарs Lock>  переключение режима прописные/строчные буквы
 <Shift>  временное переключение режима прописные/строчные буквы
 <Ctrl> + <y>  позволяет удалить текущую строку
 <Ctrl> + <К> + <С> 
(или <Ctrl> + <Insert>)
 копирование
 <Ctrl> + <К> + <V>
(или <Shift> + <Insert>)
 перемещение
 <Ctrl> + <К> + <Y>
(или <Ctrl>+<Delete>)
 удаление
 <Ctrl> + <К> + <H>  отмена выделения блока
 <F2> (или <Alt> + <F2>)  сохранение в файле на диске
 <F3> (для существующего)  считывание из файла на диске
 <Tab>  перемещение указателя в открывшемся окне
 <Alt>+<F9>  проверка программы на ошибки (компиляция)
 <Ctrl>+<F1>  справка по ошибке
 <Ctrl> + <F9>  создание файла с расширением «.ехе»
 <Alt> + <F5>  просмотр результатов отчетов
Для обнаружения алгоритмических ошибок можно воспользоваться следующими  операциями, условно состоящими из нескольких шагов:
  • Установить индикацию (или просмотреть значения переменных) в процессе выполнения программы – <Ctrl>+<F7>. В открывшемся окне ввести имя переменной;
  • Провести трассировку (т. е. построчно выполнить) – нажимать на <F7> (или <F8> – для исключения функций); 
  • Изменить (если требуется) значения переменной в процессе трассировки программы – <Ctrl>+<F4>. Набрать в окне “Expression” имя интересующей переменной, после чего в окне “Result” высветится ее значение. Если в окне “New Value” ввести новое значение, то дальнейшие вычисления будут выполняться уже с ним. 
Во всех операциях указатель можно передвигать с помощью клавиши <Tab>. 
Для входа в «Окно сообщений» можно воспользоваться командой главного меню Tools/Messages. Переход к следующему элементу сообщения <Alt> + <F8>. Переход к предыдущему элементу сообщения  <Alt> + <F7>.
«Строка состояния» содержит пояснения о назначении пунктов выпадающего меню (см. выше).
С учетом представленной ИСП, может быть рекомендован следующий план работы при создании и отладки новой программы.
  1. Открыть новое окно редактирования для ввода новой программы (File/New).
  2. Набрать текст новой программы.
  3. Записать текст программы на диск  (File/Save или <F2>).
  4. Запустить программу на выполнение (Run/Run или <CTRL>+<F9>).
  5. Посмотреть результаты выполнения программы (<ALT>+<F5>).
  6. Сохранить отлаженную программу на диске (<F2>).

Основы языка С++

Приступая к составлению программ, следует помнить, что:
    1) Программа должна оформляться в соответствии со структурой языка программирования С++ (табл. 11);
    2) Программа должна иметь начало и конец, обозначенные операторным  блоком { … }; 
    3) Каждая переменная программы должна быть объявлена в начале программы с указанием её типа. Переменная может быть инициализирована некоторым значением. В имени переменной могут использоваться цифры и буквы латинского алфавита. Базовые типы данных даны в табл. 12;
    4) Все арифметические выражения состоят из операндов, которые должны расписываться в одну строчку. Если в формуле имеется дробь, то числитель и знаменатель указывается в круглых скобках. Основные операции, применяемые в выражениях, представлены табл. 13. 

Операция % выполняется только с целыми числами, и результатом вычисления является целое число.
В языке С++ операции инкремента (++) и декремента (––) могут появляться перед или после своего операнда. Когда операция является префиксом своего операнда, то операнд инкрементируется или декрементируется и его новое значение является результатом вычисления выражения. Когда операция является постфиксом своего операнда, то непосредственным результатом выражения является значение операнда перед его инкрементированием или декрементированием. После этого результат используется в контексте, а операнд инкрементируется или декрементируется;
    5) Вычисления в выражениях выполняются в соответствии с приоритетом операций, распределенных по категориям (табл. 14);
    6) Каждый оператор должен заканчиваться символом « ; » - признаком окончания действия;
    7) Для ввода и вывода информации используются специальные функции (табл. 15). После вывода информации курсор устанавливается в этой же строке. Если есть необходимость переслать курсор на начало следующей строки, то используются в С++ – специальные управляющие символы «\n» и «endl»;
    8) В составе транслятора среды программирования имеются стандартные функции, применяемые при вычислениях. Основные, наиболее часто используемые функции представлены табл. 16. Необходимо обращать внимание на подключаемые библиотечные модули, содержащие стандартные функции. 

Таблица 11. Структура программы
 Назначение  Структура
 Директивы препроцессора  # include < Имя библиотеки>
 # define  Имя Макрос
 Раздел объявлений и соглашений   label    Номер метки;
const    Имя константы = Значение константы;
Имя типа переменной    Список имен переменных;
 Раздел описания процедур и функций  function Имя функции (входные и выходные данные)
{
Тело функции
}
 Основная программа  main ( )
{ Тело программы }

Таблица 12. Типы данных и диапазон представления чисел
   Диапазон  Тип
 целые числа  0…255  uns char
 -128…127  char
 -32768…32767  int, short
 0…65535  uns short
 -2147483648…2147483647  long
 0…4294967295  uns long
 вещественные числа  3,4Е-38…3,4Е38  float
   
 1,7Е-308…1,7Е308  double
 3,4Е-4932…1,1Е4932  long double
   

Таблица 13. Операции
   Назначение  Операция
 аддитивные  арифметические  +,  –
 мультипликативные  *, /
 остаток от деления  %
 отношений  равно  == 
 не равно  !=
 больше  >
 меньше  <
 больше или равно  >=
 меньше или равно  <=
 логические  и  &&
 или  ||
 отрицание  !
 присваивания  простое  присваивание  =
 сложение с присваиванием  +=
 вычитание с присваиванием  –=
 умножение с присваиванием  *=
 деление с присваиванием  /=
 остаток от деления с присваиванием  %=
 унарный инкремент  ++
 унарный декремент  – –

Таблица 14. Приоритет выполнения операций
 Операция  Приоритет  Категория
 !,  ++,  – –  Первый  Унарные
 *,  /,  %,  &&  Второй  Мультипликативные
 +,  –, ||  Третий  Аддитивные
 ==, !=, <, >, <=, >=  Четвертый  Отношения
 =, *=, /=, %=, +=, –=  Низший  Простое и составное

Таблица 15. Функции  и процедуры ввода и вывода
   Спецификаторы форматов и управляющие символы  Функции
 Ввод  Библиотека: stdio.h
 %d, %i – целые
 %f – вещественные
 %с – символьные
 %s – строковые
 scanf (“специф“, & идентификатор);
 например,
 scanf (“%d%f”, &a, &b);
 scanf (“%c”, &ch);
 scanf (“%s”, st);
 Библиотека: iostream.h  cin>>идентификатор;
 например,
 cin>>a;  cin>>b>>ch; cin>>st;
 Вывод  Библиотека: stdio.h
 %d, %i – целые
 %f – вещественные
 %с – символьные
 %s – строковые
 \n – перевод строки
 printf (“текст специф“, идентиф);
 например,
 printf (“Значение а= %d\n”, a);
 printf (“а= %d\n и b= %f\n ”, a, b); 
 printf (“\n символ= %c \n ”, ch);
 printf (“ строка: %s \n ”, st);
 Библиотека: iostream.h
 \n и endl – перевод строки
 cout<<текст<<идентификатор;
 например,
 cout<<”Значение a=”<<a<<”\n”; 
 cout<<” a=”<<a<<” b=”<<b<<endl;
 cout<<”символ: ”<<ch<<endl;
 cout<<”строка: ”<<st<<endl;

Таблица 16. Часто используемые стандартные функции
 Назначение  Функция
 абсолютное значение по модулю  abs (int x),  fabs (double x),
 labs ( longint x)
 тригонометрические функции (в радианах)  double cos (double x)
 double sin (double x)
 double atan (double x)
 double tan (double x)
 экспонента числа – expx  double exp (double x)
 вычисляет остаток от числа  double fmod (double x, double y)
 вычисляет целую часть от числа  struct div ( int x; int y)
 натуральный логарифм числа  double log (double x)
 десятичный логарифм  double log10 (double x)
 квадрат числа  double sqr (double x)
 квадратный корень числа  double sqrt (double x)
 вычисляет число x в степени y  double pow (double x, double y)
 возвращает случайное число в диапазоне 0…x;  int rand () 
 округляет число до целого   double floor (double x)

Составление линейных алгоритмов

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

Пример. Дано двухзначное целое число b. Найти сумму его цифр.
Текстуальная форма алгоритма задачи:
    1) Ввести  число b с клавиатуры в ЭВМ;
    2) Для выделения первой цифры воспользуемся известным в математике способом деления числа b на 10, и возьмем целое число от этого деления;
    3) Для выделения второй цифры разделим число b на 10, и возьмем дробную часть от этого деления;
    4) Найдем сумму найденных цифр;
    5) Полученный результат выдать на экран дисплея.

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

#include <iostream.h>                                              
#include <math.h>
#include <stdlib.h>
       main ()
      { int b, x, y,  z;
         div_t  res;     // описание структуры функции div:
    // struct div_t ( int quit; int rem;) div (n, d);
                                  // где n    – числитель, d -  знаменатель,
                                    //       quit – целая часть от деления,.
          //       rem – дробная часть от деления.
       cout <<“ Введите целое число : “ ;  cin >> b >>endl ;
          res = div (b, 10) ;   // делим число b на 10, и расчленяем на 
         x = res.quit ;   //     целую часть и
         y = res.rem ; //     дробную часть
          z = x + y ;
         cout <<“ Сумма цифр числа ”<< b << “ равна “ << z <<endl;
       }

Варианты заданий

Содержание отчета
  1. Титульный лист по стандартной форме.
  2. Постановку задачи.
  3. Необходимые математические выкладки (и/или поясняющую картинку).
  4. Алгоритм решения задачи (в виде блок-схемы или в текстуальной форме).
  5. Тексты программы.
  6. Тестовые наборы  (тест – это проверка работоспособности программы по контрольным значениям данных).
  7. Результаты вычислений по каждому тесту.
Отчет для лабораторной работы составляется в одном и подлежит защите. Для защиты лабораторной работы студент должен подготовиться к ответу на контрольные вопросы.

Технология выполнения работы

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

Вопросы для защиты работы

  1. В чем особенности формализованного языка?
  2. Что понимают под вычислительным алгоритмом?
  3. Какие требования предъявляются к алгоритмам?
  4. В чём суть основных этапов подготовки и компьютерного решения задач?
  5. Общие правила построения программ.
  6. Как получают исполняемую программу?
  7. Какие операции можно выполнять над величинами целого типа? Укажите приоритет их выполнения при расчете значения арифметического выражения.
  8. Как определить остаток от деления одной величины целого типа на другую?
  9. Как оформляется оператор вывода результатов на экран? Что можно указывать в качестве элементов списка вывода? Какой символ используется для разделения элементов списка вывода? Как должен быть оформлен оператор вывода, чтобы информация выводилась на экран с новой строки?
  10. Как оформляется оператор ввода? Что можно указывать в качестве элементов списка ввода? Как работает оператор ввода (что происходит при его выполнении)?
  11. Как оформляется оператор присваивания? Как он работает (что происходит при его выполнении)?
  12. Как проверить, правильно ли работает программа, в которой проводятся какие-то вычисления?