Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать

Задание для самостоятельного выполнения

Напишите программу, которая считывает с клавиатуры число типа double, затем символ, обозначающий знак операции (+ - * / % ^) и второе число типа double. С помощью оператора switch организуйте проверку символа и выполнение соответствующей операции для заданных чисел (если это возможно). Знак ^ используйте для обозначения возведения в степень. Возведение в степень в C выполняется функцией pow(x,y), которая возводит x в степень y. Для того, чтобы использовать эту функцию, не забудьте вставить в начало файла #include <math.h>

Организуйте повторение всей программы до нажатия клавиши <Esc>.

Продемонстрируйте результаты своей работы преподавателю.

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

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

Часть 1

Программы, работающие с натуральными числами

Наберите одну из трех нижеследующих программ (комментарии набивать не нуж­но), подберите тестовые исходные дан­ные и выполните программу в поша­го­вом режиме. Остальные программы внимательно просмотрите и запомните реализован­ные в них алгоритмы.

  1. Программа, которая находит наибольший общий делитель двух натуральных чисел m и n

В программе реализован алгоритм Евклида нахождения НОД: пока числа не рав­ны, заменять большее число на разность большего и меньшего, затем взять любое из получившихся чисел в качестве ответа.

m

n

12

16

12

4

8

4

4

4

Пример: найдем НОД чисел 12 и 16

НОД(12,16) = 4

#include<iostream>

#include <math.h>

#include <conio.h>

#include <windows.h>

using namespace std

int main()

{

//Настройки шрифтов и региональных стандартов:

if(SetConsoleCP(1251)==0)

//проверка правильности установки кодировки символов для ввода

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

long m, n, nod;

/* Выполним проверку исходных данных: оба числа должны быть > 0; */

/* для проверки исходных данных используется цикл do, поскольку тело цикла должно выполнится хотя бы один раз */

do

{

cout<<"Введите 2 натуральных числа ";

cin >> m >> n;

} while (m < 1 || n < 1);

// алгоритм Евклида:

/* используем цикл while потому, что при равенстве введенных чисел тело цикла не должно выполниться ни разу */

while (m != n) // пока числа не равны

if (m > n) m -= n;

// заменяем большее число на разность большего и меньшего

else n -= m; //

nod = m; // берем любое число в качестве ответа

cout<<"НОД этих чисел= "<< nod << endl;

// выводим ответ на экран

_getch();

return 0;

}

  1. Программа, которая проверяет, является ли число простым

Простым называется число, которое делится только на себя и на единицу. Для того чтобы проверить, является ли число простым, проверим все возможные делители, отличные от 1 и самого числа. Первый делитель числа n находится на отрезке от 2 до , если на этом отрезке нет делителей, значит число - простое.

#include<iostream>

#include <math.h>

#include <conio.h>

#include <windows.h>

using namespace std;

int main()

{

//Настройки шрифтов и региональных стандартов

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

double x;

char flag = 1;

/* проверим, что задано натуральное число, т.е. целое и больше 0:

используем сначала число x типа double, которое может иметь дробную часть,и если задано число, которое <= 0 или не целое, или его нельзя преобразовать к целому типу, будем повторять ввод */

do

{

cout<<"Введите натуральное число <= 4e9 --> ";

cin >> x;

} while (x <= 0 || (unsigned long)x != x || x > 4e9 );

unsigned long n = x; //преобразуем число x в число n целого типа

/* поищем первый делитель; для поиска используем цикл for, поскольку счетчик цикла i можно использовать в качестве очередного проверяемого делителя: */

for (unsigned long i = 2; i <= sqrt(x); i++)

{

if (n % i == 0) // если n делится на i

{

flag=0;/* отмечаем с помощью специальной переменной (флажка), что делитель найден */

break; // и прерываем выполнение цикла

}

}

if (flag) cout<< n<<" - простое число\n";

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

else cout << n<<" - не простое число\n";

_getch();

return 0;

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.