Реализация и результаты работы
Задачи
По программированию
С++
Вариант № 3
СОДЕРЖАНИЕ
1. Задача № 2. 3
1.1 Условие задачи. 3
1.2 Реализация и результаты работы.. 3
1.3 Листинг программы.. 4
2. Задача № 3. 6
2.1 Условие задачи. 6
2.2 Реализация и результаты работы.. 6
2.3 Листинг программы.. 7
3. Задача № 5. 10
3.1 Условие задачи. 10
3.2 Реализация и результаты работы.. 10
3.3 Листинг программы.. 12
4. Задача № 6. 15
4.1 Условие задачи. 15
4.2 Реализация и результаты работы.. 15
4.3 Листинг программы.. 16
Задача № 2
Условие задачи
(Строковый тип). Сжать каждую из некоторого количества строк текста удалением пробелов в начале, в конце строки и заменой групп внутренних последовательных пробелов одним пробелом. Указать количество пробелов, удаленных при сжатии строки.
Реализация и результаты работы
В программе организован ввод из текстового файла «InpS.txt» некоторой последовательности строк. Содержимое файла приведено на рисунок 1.1.
Рисунок 1.1 – Исходный файл «InpS.txt»
Далее выполняется подсчет и удаление пробелов перед текстом, после текста и лишних пробелов внутри текста.
Результаты работы программы приведены на рисунок 1.2
Рисунок 1.2 – Результаты работы программы
Листинг программы
Листинг программы приведен ниже.
#include <fstream>
#include <iostream>
#include <cstdlib>
#include "windows.h"
#include "string.h"
#include <locale.h>
#include <cstring>
using namespace std;
//==================================Функция позиционирования курсора
void gotoxy(int xpos, int ypos)
{
COORD scrn;
HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
scrn.X = xpos; scrn.Y = ypos;
SetConsoleCursorPosition(hOuput,scrn);
}
//=====================================Основная функция
int main()
{
const int Lmax = 250; //Максимальная длина строки
const int Nmax = 100; //Максимальное количество строк
//===========Объявление структуры
char StrSource[Nmax][Lmax]; //Строка-источник
char StrDest[Nmax][Lmax]; //Строка-приемник
int N = 0; //Реальное количество строк
//===========================Ввод элементов в строковый массив из файла InpS.txt
setlocale(LC_ALL,"RUS");
system("CLS");
fstream inp("InpS.txt");
if (!inp.is_open())
{
cout << "Ошибка открытия файла!\n";
system("PAUSE");
return 0;
}
while(!inp.eof())
{
inp.getline(StrSource[N],Lmax);
N++;
}
inp.close();
//=====================Вывод массива строк на экран
system("CLS");
cout<<" Исходный текст\n\n";
for (int i=0;i<N;i++)
cout<<StrSource[i]<<"\n";
cout<<"\n\n";
cout<<" Сжатый текст\n\n";
//=========================Преобразование пробелов
for (int i=0;i<N;i++)
{
int Destj=0; //Позиция результирующей строки
int SpaceDel = 0; //Удалено пробелов в строке
char SpaceSymb=' '; //Проверочный символ в строке
char Prev; //Предыдущий символ
int j=0; //Служебная переменная
int jB; //первый непробел сначала
int jE; //первый непробел с конца
strcpy(StrDest[i],"");
//=============Проверка лишних пробелов в начале строки
j=0;
while (j<strlen(StrSource[i]))
if (StrSource[i][j]!=SpaceSymb)
{
jB = j;
j=strlen(StrSource[i]);
}
else
{
SpaceDel++;
j++;
}
//============Проверка лишних пробелов в конце строки
j=strlen(StrSource[i]) - 1;
while (j>=0)
if (StrSource[i][j]!=SpaceSymb)
{
jE = j;
j=-1;
}
else
{
SpaceDel++;
j--;
}
//====================Проверка лишних пробелов в середине строки
j=jB;
while (j<=jE)
{
if (StrSource[i][j]!=SpaceSymb)
{
StrDest[i][Destj]=StrSource[i][j];
Destj++;
Prev = StrSource[i][j];
j++;
}
else
{
if (Prev!=SpaceSymb)
{
StrDest[i][Destj]=StrSource[i][j];
Destj++;
Prev = SpaceSymb;
j++;
}
else
{
SpaceDel++;
j++;
}
}
}
//==================Вывод результирующей строки
cout<<StrDest[i]<<"\n";
cout<<" Удалено пробелов: "<<SpaceDel<<"\n";
}
cout<<"\n";
system("PAUSE");
return 0;
}
Задача № 3
Условие задачи
Одномерные массивы. Вычислить среднее арифметическое элементов массива Х, расположенных между максимальным и минимальным элементами. Если в массиве несколько минимальных/максимальных элементов, считать минимальным/максимальным крайний левый/правый из них. Если минимальный элемент в массиве расположен до максимального элемента, отсортировать по возрастанию группу элементов от минимального до максимального.
Реализация и результаты работы
В данной задаче реализован ввод одномерного массива с клавиатуры, сначала предлагается ввести размерность массива (максимум – 50 элементов) (рисунок 2.1), вслед за этим вводятся элементы массива (рисунок 2.2). Следует отметить, что нумерация элементов массива начинается с 0.
Рисунок 2.1 – Ввод размерности массива
Рисунок 2.2 – Ввод элементов массива (фрагмент)
Результаты работы программы, для двух случаев взаимного расположения минимального и максимального элементов представлены на рисунок 2.3 и рисунок 2.4.
Рисунок 2.3 – Результаты работы для случая, когда минимальный элемент перед максимальным
Рисунок 2.4 – Результаты работы для случая, когда минимальный элемент после максимального
Листинг программы
Листинг программы приведен ниже.
#include <fstream>
#include <iostream>
#include <cstdlib>
#include "windows.h"
#include "string.h"
#include <locale.h>
#include <cstring>
using namespace std;
//==================================Функция позиционирования курсора
void gotoxy(int xpos, int ypos)
{
COORD scrn;
HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
scrn.X = xpos; scrn.Y = ypos;
SetConsoleCursorPosition(hOuput,scrn);
}
//=====================================Основная функция
int main()
{
const int Nmax = 50; //Максимальная длина массива
int Arr[Nmax]; //Одномерный массив
int ArrSort[Nmax]; //Одномерный отсортированный массив
int N = 0; //Реальная длина массива
int Nsort = 0; //кол-во элементов в массиве сортировки
int ArrMax; //Максимальный элемент массива
int PosMax; //Позиция максимального элемента
int ArrMin; //Минимальный элемент массива
int PosMin; //Позиция минимального элемента
double SumSr; //Среднее арифметическое
//===========================Ввод элементов в строковый массив из файла InpS.txt
setlocale(LC_ALL,"RUS");
system("CLS");
//==========================Ввод массива вещественных чисел с клавиатуры
N = Nmax+1;
while (N>Nmax)
{
system("CLS");
cout<<"Введите размерность массива (не более 50): ";
cin>>N;
}
cout<<"\n";
for (int i=0;i<N;i++)
{
cout<<"Введите Arr["<<i<<"]= ";
cin>>Arr[i];
cout<<"\n";
}
//=====================Вывод массива чисел на экран
system("CLS");
cout<<" Массив\n\n";
for (int i=0;i<N;i++)
cout<<Arr[i]<<" ";
cout<<"\n";
//==================Поиск минимального и максимального элемента и их позиций
ArrMax=ArrMin=Arr[0];
PosMax=PosMin=0;
for (int i=1;i<N;i++)
{
if (Arr[i]<ArrMin)
{
ArrMin = Arr[i];
PosMin = i;
}
if (Arr[i]>=ArrMax)
{
ArrMax = Arr[i];
PosMax = i;
}
}
//==================Вычисление среднего арифметического и помещение в массив при необходимости
SumSr = 0;
if (PosMax<=PosMin)
{
for (int i=PosMax+1;i<PosMin;i++)
SumSr=SumSr+(double)Arr[i];
if ((PosMin-PosMax-1)!=0)
SumSr = SumSr/(PosMin-PosMax-1);
else
SumSr = 0;
}
else
{
for (int i=PosMin+1;i<PosMax;i++)
{
SumSr=SumSr+(double)Arr[i];
ArrSort[Nsort]=Arr[i];
Nsort++;
}
if ((PosMax-PosMin-1)!=0)
SumSr = SumSr/(PosMax-PosMin-1);
else
SumSr = 0;
//======================сортировка массива ArrSort
for (int i=0;i<Nsort-1;i++)
for (int j=i+1;j<Nsort;j++)
if (ArrSort[j]<ArrSort[i])
swap(ArrSort[i],ArrSort[j]);
}
//============================================Вывод результатов
cout<<"\n Результаты\n\n";
cout<<"Минимальный элемент = "<<ArrMin<<" .Его позиция в массиве = "<<PosMin<<"\n";
cout<<"Максимальный элемент = "<<ArrMax<<" .Его позиция в массиве = "<<PosMax<<"\n";
cout<<"Среднее арифметическое = "<<SumSr<<"\n";
if (PosMin<=PosMax)
{
cout<<"Отсортированная последовательность \n";
for (int i=0;i<Nsort;i++)
cout<<ArrSort[i]<<" ";
cout<<"\n";
}
else
cout<<"Сортировка не требуется \n";
cout<<"\n";
system("PAUSE");
return 0;
}
Задача № 5
Условие задачи
Квадратная матрица – ее размер, последовательность элементов строка за строкой. Выбрать из совокупности L квадратных матриц размера, не большего n*n (A1, A2,…,AL) нижние треугольные матрицы, упорядочить их по возрастанию минимальных элементов матриц. В случае отсутствия в совокупности нижних треугольных матриц выдать сообщение.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|