- •Лабораторная работа №1 Тема: “Программы, использующие команды ветвления. Отладка программы“ Отладка программы
- •Часть 1 Ветвление в программе с помощью вложенных конструкций if-else Задание
- •Пример 1
- •Пример 2
- •Организация повторения программы
- •Выполнение программы в пошаговом режиме
- •Задание для самостоятельного выполнения
- •Часть 2 Ветвление в программе с помощью оператора switch
- •Задание для самостоятельного выполнения
- •Программа, которая проверяет, является ли число простым
- •Программа, которая проверяет, является ли число палиндромом
- •Часть 2 Программы, использующие рекуррентные соотношения
- •Программа, которая находит числа Фибоначчи в заданном диапазоне.
- •Программа, которая находит значение квадратного корня из заданного числа, используя рекуррентное соотношение:
- •Программа, которая вычисляет сумму ряда с заданной точностью.
- •Пример – программа, которая вычисляет сумму ряда для заданного количества слагаемых.
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 3 Тема: “Программы, использующие вспомогательные функции”.
- •1. Программа, которая считывает координаты вершин треугольника на плоскости и находит все углы этого треугольника в градусах.
- •2. Программа, которая находит заданное количество чисел, содержащих цифру 3
- •3. Программа, которая находит на заданном отрезке натуральные числа, которые можно представить в виде суммы квадратов двух натуральных чисел.
- •Программа, которая находит первое автоморфное число справа от заданного.
- •6. Программа для вычисления биноминальных коэффициентов
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 4 Тема: “Программы, использующие строки символов ”.
- •Программа, которая считывает строку символов и сортирует ее по возрастанию кодов символов
- •Программа перевода числа из десятичной системы счисления в двоичную
- •Первый вариант (с использованием указателя)
- •Второй вариант ( с использованием индексации)
- •Программа перевода числа из двоичной системы в десятичную
- •Программа перевода числа из 16-ой системы счисления в 2-ую.
- •Программа перевода числа из 2-ой системы счисления в 16-ую.
- •If (!strcmp(table[j].Bin,tmp)) // если strcmp() вернула 0, значит tmp совпала с I-ой строкой таблицы
- •Программа, которая выводит на экран треугольник Паскаля (треугольник биноминальных коэффициентов)
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 5 Тема: “Программы, использующие файлы ”.
- •Программа, которая считывает имя файла, открывает его и подсчитывает количество скобок каждого вида, содержащихся в файле.
- •Программа, инвертирующая файл (переставляющая символы в обратном порядке)
- •Программа выводит на экран n-ую строку файла
- •Программа, которая переписывает текст из одного файла в другой, удаляя лишние пробелы между словами и делая ширину текста максимум 70 символов
- •5. Программа, которая считывает текст файла и создает новый файл, заменив во всем тексте заданное слово на новое (не изменяя деление на строки и количество пробелов между словами)
- •6. Программа, которая считывает данные для структуры Man из файла.
- •Программа создающая новый текстовый файл из двух данных, в котором 1-я строка –строка из первого файла, 2-я строка – строка из 2-го файла, 3-я строка – содержит общие символы первых 2-х строк.
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 6 Тема: “Программы, использующие массивы ”.
- •Программа заполняет массив a(50) случайными целыми числами из диапазона [-20, 30] и упорядочивает его по возрастанию. Исходный и упорядоченный массивы выводятся на экран дисплея.
- •Программа, которая по заданным корням многочлена степени n восстанавливает все коэффициенты многочлена.
- •Программа считывает линейный массив из файла, выводит его на экран, и подсчитывает количество элементов массива, находит min и max элементы и их индексы.
- •Программа заполняет массив a[5][5] случайными целыми числами из диапазона [-3, 3] и находит произведение элементов, стоящих на побочной диагонали.
- •Программа считывает матрицу из файла, выводит ee на экран, сортирует элементы в каждом столбце и отсортированную матрицу записывает в файл.
- •Программа, сортирующая файл по длине строки методом быстрой сортировки.
- •Задания для самостоятельного выполнения
- •Лабораторная работа № 7 Тема: “Программы, использующие динамические структуры”.
- •Программа, которая создает очередь символов.
- •Программа, которая создает закольцованный список и затем последовательно удаляет из списка каждый m-й элемент до тех пор, пока не будут удалены все.
- •Программа, которая работает со стеком.
- •Программа, которая работает с деревом.
- •Задания для самостоятельного выполнения
3. Программа, которая находит на заданном отрезке натуральные числа, которые можно представить в виде суммы квадратов двух натуральных чисел.
#include<iostream>
#include<iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>
using namespace std;
/* Определяем функцию, которая будет определять, можно ли представить число в виде суммы квадратов двух натуральных чисел. Поскольку должно выполняться равенство , будем проверять все возможные значения a в диапазоне [1, и для каждого а будем вычислять b по формуле: . Поскольку b должно быть натуральным, округлим результат вычисления по формуле до ближайшего целого. Если в результате округления равенство нарушается, значит число нельзя представить в виде суммы квадратов двух натуральных чисел.
Аргументами функции являются: проверяемое число n и ссылки на a и b; a и b объявлены как ссылки, поскольку функция должна передать их найденные значения главной программе, которая выведет их на экран. Функция возвращает либо 0, либо 1. */
byte IsPossible(long n, long& a, long& b)
{
byte flag = 0;
for (a = 1; a < sqrt((double)(n)); a++)
{
b = long(sqrt((double)(n - a*a)) + .5);
if (n == a * a + b * b)
{
flag = 1; break;
}
}
return flag;
}
//=========================================================
/* Главная программа проверяет заданный диапазон и выводит найденные числа на экран */
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;
long a, b;
cout<< "Задайте диапазон (два натуральных числа) \n";
cin >> m >> n;
byte flag=0;
// Проходим заданный диапазон [m,n] и проверяем число i:
for (long i = m; i <= n; i++)
if (IsPossible(i, a, b)) /* Если i удовлетворяет условию, выполняем нижеследующие действия: */
{
if (!flag) /* Если флажок равен 0, значит найдено первое число, в этом случае выводим поясняющий текст: */
{
cout<< "Числа, которые можно представить ";
cout<< "в виде суммы квадратов двух натуральных чисел\n";
}
flag = 1; /* Делаем флажок равным 1, текст больше выводиться не будет */
cout<< i << " = " << a << "*" << a <<" + " << b << "*" << b << endl;
// Вывели результат типа 5 = 1*1 + 2*2
}
/* Здесь проверка заданного отрезка закончилась, если флажок остался равным 0, выводим сообщение: */
if (!flag) cout<< "На этом отрезке нет нужных чисел\n";
_getch();
return 0;
}
Программа, которая находит первое автоморфное число справа от заданного.
Автоморфным называется число, которое равно последним цифрам своего квадрата, например 25 (25 * 25 = 625).
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>
using namespace std;
bool Automorfnoe(long n)
{
long copy = n; // Берем копию числа n
long m = 1; /* Сделаем число m, которое равно степени 10, причем степень равна количеству цифр проверяемого числа n, например для 25 число m = 100 */
do
{
m *= 10;
copy /= 10;
} while(copy);
if ((n*n % m) == n) /* Берем остаток от деления квадрата числа n на m и получаем число, состоящее из последние цифр квадрата n, количество которых равно количеству цифр исходного числа, сравниваем полученное число c n и возвращаем истину, если числа равны */
return true;
else return false;
}
int main()
{
if(SetConsoleCP(1251)==0
{
cerr<<"Fialed to set codepage!"<<endl;
}
if(SetConsoleOutputCP(1251)==0)
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
do
{
long m;
cout<< "Задайте целое число ";
cin>> m;
// Поиск автоморфного числа n, лежащего справа от заданного числа m:
long n = m+1; // Берем первое число
bool flag = true;
while (!Automorfnoe(n)) // пока число не автоморфное
{
n++; // переходим к следующему числу
if (n > 1e5) { flag = FALSE; break;}
/* прерываем поиск, если число стало слишком большим, чтобы ограничить время выполнения программы и не выйти за допустимый диапазон чисел */
}
if (flag) // флажок, равный true, означает, что число найдено
cout<< "Автоморфное число справа - " << n << " : " << n <<" в квадрате = " << n * n << endl;
else cout<< "Число не найдено \n";
} while (_getch() != 27);
return 0;
}
5. Программа находит точки пересечения линий y= ax+b и y = c/x +d
(программа иллюстрирует перегрузку имени функции)
Для нахождения точек пересечения решим систему:
Если a не равно 0, решаем квадратное уравнение, в противном случае – линейное.
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <windows.h>
using namespace std;
/* Определим две функции Root(корень), одну для решения квадратного уравнения, а другую – для линейного: */
void Root(double a, double b, double c, double& x1, double& x2, byte& k);
void Root(double a, double b, double& x, byte& k);
// Результаты работы функции объявлены как ссылки
int main()
{
if(SetConsoleCP(1251)==0)
//проверка правильности установки кодировки символов для ввода
{
cerr<<"Fialed to set codepage!"<<endl;
}
if(SetConsoleOutputCP(1251)==0)
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
double a, b, c, d;
double x1, y1, x2, y2;
byte k; // количество корней
do
{
cout<< "Задайте a b c d ";
cin>> a >> b >> c >> d;
if (a) // Если а не равно 0, решаем квадратное уравнение
Root(a, b-d, -c, x1, x2, k);
// передаем функции коэффициенты уравнения и получаем корни и количество корней
else // иначе решаем линейное уравнение:
Root(b-d, -c, x1, k);
// в зависимости от полученного значения k выводим ответ:
switch(k)
{
case 3: cout<< "Линии совпадают \n"; break;
case 2: y1 = a*x1 + b; y2 = a*x2 + b;
cout<<"Линии пересекаются в 2 точках: " <<setprecision(2)<< x1 << ',' << y1 << " и " << x2 << ',' << y2 << endl; break;
case 1: y1 = a*x1+ b;
cout<<"Линии имеют одну общую точку "<<setprecision(2)<< x1 << ',' << y1 << endl; break;
default: cout<<"Линии не пересекаются\n";
}
} while (_getch() != 27);
return 0;
}
// Подпрограмма для решения квадратного уравнения
void Root(double a, double b, double c, double& x1, double& x2, byte& k)
{
double d = b*b - 4*a*c;
if (d > 0)
{
k = 2;
x1 = (-b + sqrt(d)) / (2*a);
x2 = (-b - sqrt(d)) / (2*a);
if ( x1==0 || x2 == 0 ) k = 1;
// Исключаем нулевое значение x
if ( x1 == 0) x1 = x2; /* Если ненулевой корень один, то он будет храниться в x1 */
}
else if (d == 0)
{
x1 = -b / (2*a);
k = 1;
if (x1 == 0) k = 0;
}
else k = 0;
}
// Подпрограмма для решения линейного уравнения
void Root(double a, double b, double& x, byte& k)
{
if (a)
{
k = 1;
x = -b / a;
if (x == 0) k = 0;
}
else if (b) k = 0;
else k = 3;
}