Организация повторения программы

Лабораторная работа №1

Тема: “Программы, использующие команды ветвления.
Отладка программы“

Отладка программы

Отладку программы выполняют для поиска логических ошибок в программе.

Перед отладкой необходимо откомпилировать программу (F7).

Отладка осуществляется с помощью пошагового выполнения программы и просмотра текущих значений переменных. Для просмотра текущего значения переменной нужно поставить курсор на строку, следующую за строкой с интересующей нас переменной, и поставить точку останова программы <F9>. Далее нажать кнопку <F5> для выполнения программы до данной строки. Значение переменной будет отображено на вкладке Locals в нижней части экрана. Можно также просто перетащить переменную на вкладку Watch.

Вкладки Locals и Watch

Команды отладчика:

<Ctrl> + <F10> -выполняет программу до строки, в которой находится курсор.

<F10> - выполняет один шаг программы (одну строку); подпрограммы выпол­ня­ют­ся как один шаг.

<F11>- если курсор стоит на строке, в которой выполняется вызов подпрограммы, то выполняется заход в подпрограмму.

<F5> - выполняет программу до той строки, где стоит точка останова программы, в случае если таких точек нет, программа выполняется полностью.

<F9> - поставить/снять точку останова программы

<Shift> + <F5> - останавливает отладку программы.

Эти клавиши необходимо нажимать, когда активно окно с текстом программы. Сделать нужное окно активным можно щелчком мыши в этом окне, или с помощью панели задач, или с помощью комбинации клавиш <Alt> + <Tab>.

Часть 1

Ветвление в программе с помощью вложенных конструкций if-else

 

Задание

 

Запустите среду программирования Microsoft Visual Studio 2005.

Вы увидите стартовую страницу данной среды разработки. Далее создайте проект консольного приложения. Для этого выполните команду меню File|New|Project (или нажмите <Ctrl>+<Shift>+<N>). Затем выберите тип проекта (Project types:) Visual C++, если дерево доступных проектов еще не открылось нажмите левой клавишей мыши по значку «+» с лева от названия типа проекта. Теперь нажмите Win32, выберите из предоставленных шаблонов (Templates:) Win32 Console Applicationвведите в поле Name: свою фамилию латинскими буквами. В поле Location: C:\Work (см. рисунок).

Создание нового консольного приложения

 

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

Нажмите кнопку Next>.

 

В следующем окне в поле Additional Options:установите флажок Empty project(см. рисунок).

 

Нажмите кнопку Finish.

В следующем окне щелкните правой клавишей мыши по папке Source Files на вкладке Solution Explorer, выберите пункт выпадающего меню Add|New Item…

Перед вами появится окно мастера Add New Item. В появившемся окне в разделе Categories:(находится слева)выберите Code(см. рисунок).Затем в разделе Templates:выберите C++ File (.cpp) и в поле Nameвведите имя файла: свою фамилию латинскими буквами.

Затем нажмите кнопку Add.

Набирая далее текст программы, периодически нажимайте <Ctrl>+<S>, при этом выполняет­ся команда Save и сохраняется текущее состояние программы. Делать это необ­хо­ди­мо во избежание потери результатов своей работы.

Пример 1

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

Наберите текст программы (комментарии набивать не нужно!). Команды языка С++ должны заканчиваться точкой с запятой.

 

// С помощью команды #include подключаются дополнительные
// библиотеки:

#include <iostream> // обеспечивает потоковый ввод-вывод

#include <windows.h> // обеспечивает использование русских букв

using namespace std; // определяет пространство имен

 

int main()// выполнение программы всегда начинается с этой строчки

// команды программы всегда пишут внутри блока (внутри фигурных
// скобок)

{

SetConsoleCP(1251); // подключаем кодовую страницу CP 1251

SetConsoleOutputCP(1251); // то же для вывода

cout << "Задайте два числа "; // выводим текст на экран

double a, b, c; // объявляем переменные

cin >> a >> b;

// считываем два числа (при вводе числа должны разделяться пробелами)

if (b) // если b не равно 0

{

c = a / b;

// находим частное (присваивание выполняется справа налево

cout << "Их частное: " << c << endl;

// выводим результат на экран

}

Else

// в противном случае (если b равно 0), выводим сообщение об ошибке
// в данных

cout << "Второе число должно быть не равно 0\n";

 

return 0; // программа должна заканчиваться этой командой

}

 

//============================================================

 

Запустите программу, нажав <Ctrl> + <F5>. В появившемся окне нажмите Yes. Скорее всего сна­чала Вы увидите сооб­ще­ния об ошибках (но если вы ВНИМАТЕЛЬНО!!! набирали, ошибокНЕ будет). Исправляя ошибки, нуж­­но начинать с первой, поскольку ошибки мо­гут быть наве­ден­ными, т.е. одна ошибка может повлечь за собой множество сооб­ще­ний. Нажмите <F8>, исправьте ошибку в выделенной строке и опять нажмите <F8>. Повторяйте эти действия, пока программа не запустится.

ВАЖНО!!! Для того, чтобы вы могли работать с русскими символами, необходимо при первом запуске вашего приложения правой клавишей мыши щелкнуть на заголовке консольного окна. Затем выбрать пункт выпадающего меню Умолчания, перейти на вкладку Шрифт и выбрать там шрифт Lucida Console и нажмите OK. На вопрос хотите ли вы применить эти свойства только к текущему окну или ко всем окнам с тем же именем выберете, применить ко всем окнам с тем же именем.

 

Задайте какие-либо исходные данные и получите ответ.

 

Пример 2

 

В качестве второго примера возьмем программу решения уравнения для любых a, b, c. Известно, что решением этого уравнения являются , где
d = b2 - 4ac при . Хорошая программа должна выдавать ответ в любом случае, поэтому мы должны рассмотреть все возможные варианты ответа. Если , то наша программа будет решать квадратное уравнение, в противном случае – линей­ное. В каждом из этих случаев должен быть выдан один из трех вариантов ответа, следовательно, всего эта программа должна выдавать один из шести вариантов сообще­ний.

Наберите нижеследующий текст программы. Обязательно делайте отступы, используя клавишу <Tab>. Это делает структуру программы более понятной.

ВАЖНО!!! Для того, чтобы вы могли работать с русскими символами, необходимо при первом запуске вашего приложения правой клавишей мыши щелкнуть на заголовке консольного окна. Затем выбрать пункт выпадающего меню Умолчания, перейти на вкладку Шрифт и выбрать там шрифт Lucida Console и нажмите OK. На вопрос хотите ли вы применить эти свойства только к текущему окну или ко всем окнам с тем же именем выберете, применить ко всем окнам с тем же именем.

 

#include <iostream> //!!! Потоковый ввод/вывод

#include <math.h>

#include <windows.h>

using namespace std;

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

cout<<"Программа решает уравнение вида A*x*x + B*x + C = 0\n";

cout<<"Введите A,B,C, разделяя их пробелом ";

double a=0,b=0,c=0,x1=0,x2=0;

cin >> a >> b >> c;

if ( a != 0 ) // Решение квадратного уравнения:

{

double d = b*b - 4*a*c;

//формула вычисления дискриминанта

if ( d > 0 )

{

x1 = (-b + sqrt(d)) / (2*a);

x2 = (-b - sqrt(d)) / (2*a);

cout << "Уравнение имеет два корня: " << x1 <<" и "<< x2 << endl;

}

else if ( d == 0 )

{

x1=(-b) / (2*a);

cout<<"Уравнение имеет один корень: " << x1 << endl;

}

else

cout<<"Действительных корней нет\n";

}

else // Решение линейного уравнения b*x + c = 0:

{

if (b) // Если b != 0

{

x1 = -c / b;

cout<<"Уравнение имеет один корень: " << x1 << endl;

}

else if (!c) // Если с == 0

cout<<"Решением уравнения является любое число \n";

else

cout<<"Уравнение не имеет решений\n";

}

return 0;

}

Организация повторения программы

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

 

#include …

#include <conio.h>

/* Необходимо подключить этот файл для использования фнкции _getch() */

using namespace std;

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

 

Do

{

 

… //текст программы

 

} while (_getch() != 27);

return 0; }

}

Повторение происходит при нажатии любой клавиши на клавиа­ту­ре после по­лучения окончательного ответа программы. При на­жа­тии клавиши <Esc>происходит остановка программы.