- •Лабораторная работа №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-й элемент до тех пор, пока не будут удалены все.
- •Программа, которая работает со стеком.
- •Программа, которая работает с деревом.
- •Задания для самостоятельного выполнения
Программа, сортирующая файл по длине строки методом быстрой сортировки.
Программа запоминает в массиве длины строк, считанных из файла, и их позиции в файле ( использование такого массива позволит не переписывать весь файл в оперативную память), затем массив сортируется по возрастанию длины строк. В результате мы получим начальные позиции строк в такой последовательности, какая нам нужна. Используя позиционирование, прочитаем строки в нужном порядке и запишем их в результирующий файл.
#include<iostream>
#include<iomanip>
#include<math.h>
#include<conio.h>
#include<String.h>
#include<ctype.h>
#include <stdlib.h>
#include<fstream>
#include<windows.h>
using namespace std;
// структура, соответствующая одной строке файла:
struct stroka
{
long pos; // позиция, с которой начинается строка в файле
int len; // длина строки
};
// пример оформления шаблонной функции:
template <class Type> void swapq(Type &a, Type &b)
/* в данной программе эта функция будет переставлять структуры (записи о каждой строке файла)*/
{
Type tmp;
tmp=a; a=b; b=tmp;
}
// функция быстрой сортировки:
void qusort( stroka *mas, int left, int right )
{
/*параметры: указатель на массив и индексы, определяющие ту часть массива, в которой в данный момент выполняется сортировка */
register int i,j; // индексы элементов
int x;
i=left; j=right;
x=mas[(left+right) / 2].len; // Берем средний элемент в массиве
do // этот цикл будет сравнивать длины строк
{
while( mas[i].len < x && i < right ) i++;
// Находим элемент, который должен стоять правее X
while( mas[j].len > x && j > left ) j--;
// Находим элемент, который должен стоять левее X
if (i <= j )
{
// и меняем их местами:
swapq<stroka>( mas[i], mas [j] );
i++; j--;
}
} while ( i <= j );
/*В результате получили 2 части массива: в одной все элементы меньше X, в другой – больше */
/* Рекурсивный вызов функции сортировки для двух полученных частей массива: */
if ( left < j ) qusort( mas, left, j);
if ( i < right ) qusort( mas, i, right);
}
int main()
{
if(SetConsoleCP(1251)==0)
{
cerr<<"Fialed to set codepage!"<<endl;
}
if(SetConsoleOutputCP(1251)==0)
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
// Объявляем файлы:
ifstream inf;
char *name=new char[81]; // имя файла
do // повторение ввода имени файла
{
cout<<"Введите имя файла или нажмите <Esc>";
cout<<" для прекращения работы программы ";
name[0]=_getche(); // считываем первый символ
if (name[0]==27) exit(0);
// Если нажата клавиша <Esc>, прерываем выполнение программы
cin.getline(&name[1],80);
// считываем остальные символы имени
inf.open(name); // открываем файл
if (!inf)
cout<<"Файл не найден ! \n";
} while(!inf); /* повторяем ввод, пока имя файла не будет введено правильно */
/* этот цикл стоит рассматривать не как руководство к действию, а скорее как пример возможных вариантов манипуляций со строками */
fstream outf("rez.txt",ios::out);
// файл для записи отсортированного текста
char *str=new char[102]; // строка для чтения файла
char *beg=str; // указатель на начало строки
// Определяем количество строк в файле:
int kol=0;
while ( !inf.eof() )
{
inf.getline(str,102);
kol++;
}
// Создаем массив записей о строках:
stroka *mas = new stroka[kol];
inf.clear();
inf.seekg(0l,ios::beg);
mas[0].pos=0; // позиция первой строки
int l; // длина очередной считываемой строки
// считываем текст построчно:
for (int i = 0; i < kol; i++)
{
str = beg;
/* мы будем изменять значение str, но для каждой новой строки указатель str опять будет хранить адрес начала области памяти, выделенной для строки */
inf.getline(str,102); // считываем строку
l=strlen(str);
if (i < kol-1) // если мы считываем не последнюю строку
{
mas[i+1].pos=inf.tellg();
// запоминаем текущую позицию как начало следующей строки
while ( *str == ' ' || *str == 9 )
{
str++;
mas[i].pos++;
} // обрезали пробелы и знаки табуляции в начале строки
}
mas[i].len = strlen(str) ;
// запомнили длину получившейся строки
}
// Сортируем массив по длине строк:
qusort(mas,0,kol-1);
// считываем текст, используя позиции, хранящиеся в массиве:
inf.clear();
for (int i = 0; i < kol; i++)
{
if (inf.eof()) inf.clear();
// если считана последняя строка в файле
inf.seekg( mas[i].pos, ios::beg );
inf.getline(str,102); // считываем нужную строку
if (*str) outf<<str<<endl;
// и записываем ее в результирующий файл
}
outf.close();
cout<<"Смотрите результат работы программы в файле \"rez.txt\"";
_getch();
return 0;
}