Сделай Сам Свою Работу на 5

Реализация и результаты работы

Задачи

По программированию

С++

Вариант № 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- 2017 stydopedia.ru Все материалы защищены законодательством РФ.