- •Лабораторная работа №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-й элемент до тех пор, пока не будут удалены все.
- •Программа, которая работает со стеком.
- •Программа, которая работает с деревом.
- •Задания для самостоятельного выполнения
Программа создающая новый текстовый файл из двух данных, в котором 1-я строка –строка из первого файла, 2-я строка – строка из 2-го файла, 3-я строка – содержит общие символы первых 2-х строк.
Программа иллюстрирует использование типа string для работы со строками.
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string>
#include <ctype.h>
#include <stdlib.h>
#include <windows.h>
#include <fstream> // Этот файл обеспечивает работу с файлами
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;
}
ifstream fi1,fi2; //файлы для чтения
ofstream fo; //файл для записи
string sName1,sName2,sNameRez; //строки для имён файлов
do //проверка правильности ввода
{
cout <<"Введите имя первого файла ";
getline(cin,sName1);
basic_string<char>::size_type index;
//переменная для хранения индекса элемента строки
// следующий цикл удаляет пробелы из имени файла:
while((index=sName1.find(" "))!= string::npos)
sName1=sName1.replace(index,1, basic_string<char>(""));
} while(sName1.length()==0);
// Повторяем цикл, если длина имени файла стала равна нулю
do
{
cout <<"Введите имя второго файла ";
getline(cin,sName2);
basic_string<char>::size_type index;
//переменная для хранения индекса элемента строки.
while((index=sName2.find(" "))!= string::npos)
sName2=sName2.replace(index,1, basic_string<char>(""));
}while(sName2.length()==0 || sName2.compare(sName1)==0);
/* Повторяем цикл, если длина имени равна нулю или имя второго файла совпадает с именем первого */
do
{
cout <<"Введите имя результирующего файла ";
getline(cin,sNameRez);
basic_string<char>::size_type index;
//переменная для хранения индекса элемента строки.
while((index=sNameRez.find(" "))!= string::npos)
sName2=sNameRez.replace(index,1, basic_string<char>(""));
} while(sNameRez.length()==0 ||(sNameRez.compare(sName1) ==0 || sNameRez.compare(sName2)==0));
fi1.open(sName1.c_str()); //открытие файла
if(!fi1)
{
cerr<<"Не могу открыть первый файл.\n";
return 1; //закрытие файла
}
fi2.open(sName2.c_str()); //открытие файла
if(!fi2)
{
cerr<<"Не могу открыть второй файл.\n";
fi1.close(); //закрытие файла
return 2;
}
fo.open(sNameRez.c_str()); //открытие файла
if(!fo)
{
cerr<<"Не могу открыть результирующий файл.\n";
fi1.close();//закрытие файла
fi2.close();//закрытие файла
return 3;
}
string str1,str2,str3="";
do
{
getline(fi1,str1);
getline(fi2,str2);
str3.clear();
int *map1=new int [256],*map2=new int [256];
//создание карт символов в строке
for(int i=0;i<255;++i) //обнуляем карты
map1[i]=map2[i]=0;
/* Следующие три цикла записывают в массивы количество повторений каждого символа соответствующей строки */
for(int i=0;i<str1.length();++i)
map1[static_cast<unsigned char>(str1[i])]++; //приведение к беззнаковому типу
for(int i=0;i<str2.length();++i)
map2[static_cast<unsigned char>(str2[i])]++;
for(int i=0;i<255;++i)
if(map1[i]&&map2[i])
// Если символ присутствует и в первой и во второй строке:
str3.push_back((char)(i));
// записываем его в конец результирующей строки
// записываем результат в файл:
fo<<str1<<endl;
fo<<str2<<endl;
fo<<str3<<endl;
cout<<str1<<endl;
cout<<str2<<endl;
cout<<str3<<endl;
delete map1; //удаление карт символов для строки
delete map2;
}while(!fi1.eof()&& !fi2.eof()); //выполняем пока одновременно не конец файлов
fi1.close(); //закрытие файла
fi2.close();
fo.close();
_getch();
return 0;
}
8. Программа создаёт из двух файлов третий, в котором содержатся максимальные по длине слова из соответствующих строк исходных файлов, причём все слова длиннее 5-ти символов заключаются в квадратные скобки.
#include<iostream>
#include<iomanip>
#include<conio.h>
#include<string>
#include<ctype.h>
#include<stdlib.h>
#include<windows.h>
#include<fstream>
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;
}
ifstream fi1,fi2;
ofstream fo;
string sName1,sName2,sNameRez; //строки, для имён файлов
do //проверка правильности ввода
{
cout <<"Введите имя первого файла ";
getline(cin,sName1);
basic_string<char>::size_type index;
//переменная для хранения индекса элемента строки.
while((index=sName1.find(" "))!=string::npos)
sName1=sName1.replace(index,1, basic_string<char>(""));
}while(sName1.length()==0);
do
{
cout <<"Введите имя второго файла ";
getline(cin,sName2);
basic_string<char>::size_type index;
//переменная для хранения индекса элемента строки.
while((index=sName2.find(" "))!=string::npos)
sName2=sName2.replace(index,1, basic_string<char>(""));
}while(sName2.length()==0 || sName2.compare(sName1)==0);
do
{
cout <<"Введите имя результирующего файла ";
getline(cin,sNameRez);
basic_string<char>::size_type index;
//переменная для хранения индекса элемента строки.
while((index=sNameRez.find(" "))!=string::npos)
sName2=sNameRez.replace(index,1, basic_string<char>(""));
}while(sNameRez.length()== 0 || (sNameRez.compare(sName1)==0 || sNameRez.compare(sName2)==0));
fi1.open(sName1.c_str()); // открытие первого файла
if(!fi1)
{
cerr<<"Не могу открыть первый файл.\n";
return 1;
}
fi2.open(sName2.c_str()); //открытие второго файла
if(!fi2)
{
cerr<<"Не могу открыть второй файл.\n";
fi1.close(); //закрытие файла
return 2;
}
fo.open(sNameRez.c_str());
//открытие результирующего файла
if(!fo)
{
cerr<<"Не могу открыть результирующий файл.\n";
fi1.close(); //закрытие файла
fi2.close();
return 3;
}
string str1,str2,str3="",sub1,sub2;
// следующий цикл выполняется, пока не закончится хотя бы один из файлов
do
{
getline(fi1,str1);
getline(fi2,str2);
str3.clear();
fo<<str1<<endl;
fo<<str2<<endl;
cout<<str1<<endl;
cout<<str2<<endl;
basic_string<char>::size_type ind1;
//переменная для хранения индекса элемента строки
basic_string<char>::size_type ind2;
// следующий цикл обрабатывает две соответствующие строки, считанные из файлов
do
{
ind1=str1.find(" ");
//находим первый пробел в первой строке
// следующий цикл удаляет пробелы в начале строки
while(ind1==0 && ind1 != string::npos)
// пока пробел – первый и он вообще есть в строке
{
str1=str1.replace(0,1,"");
//удаляем пробелов слева
ind1=str1.find(" ");
// и находим следующий пробел
}
// выделяем слово из строки:
if(ind1!=string::npos)
//если не конец строки
{
sub1=str1.substr(0,ind1);
//копируем подстроку
str1=str1.replace(0,ind1,"");
//удаляем только что скопированное слово из строки
}
else //конец строки
{
sub1=str1.substr(0,str1.length());
// берем подстроку
str1=str1.replace(0,str1.length(),"");
//удаляем её
}
// аналогично только со второй строкой
ind2=str2.find(" ");
while(ind2==0&&ind2!=string::npos)
{
str2=str2.replace(0,1,"");
ind2=str2.find(" ");
}
if(ind2!=string::npos)
{
sub2=str2.substr(0,ind2);
str2=str2.replace(0,ind2,"");
}
else
{
sub2=str2.substr(0,str2.length());
str2=str2.replace(0,str2.length(),"");
}
if(max(sub1.length(),sub2.length())>5)
//если подстрока больше пяти символов тогда
{
str3.append((sub1.length()<sub2.length())?("["+sub2+"] "):("["+sub1+"] ")); /* к третьей строке присоединяем большую из двух подстрок заключенную в квадратные скобки */
}
else //в противном случае
{
str3.append((sub1.length() < sub2.length())? sub2+" " : sub1+" "); // мы просто копируем и добавляем пробел
}
}while(str1.length()||str2.length());
fo<<str3<<endl;
cout<<str3<<endl;
}while(!fi1.eof()&&!fi2.eof());
fi1.close(); //закрытие файла
fi2.close();
fo.close();
_getch();
return 0;
}