Курсовая работа (т): Основы алгоритмизации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Основы алгоритмизации

Постановка задачи

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

номер максимального отрицательного элемента;

преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в исходном массиве на нечётных позициях, во второй - элементы, стоявшие на чётных позициях. Предусмотреть случаи, когда n - четно и когда n - нечетно.

Дана целочисленная квадратная матрица размерностью NxN. Определить:

количество строк, среднее арифметическое элементов которых больше заданной пользователем величины;

сумму элементов, расположенных ниже побочной диагонали

С помощью генератора случайных чисел занести в массив Х(18) числа из диапазона от -15 до 20. Написать функцию для нахождения индекса минимального элемента массива. Ввод элементов массива и вызов созданной функции осуществлять в основной программе. Определить, в какой половине массива расположен минимум (1-ой или 2-ой).

Написать функцию, выводящую номера тех строк матрицы В(6,4), первый и последний элементы которых равны нулю, и подсчитывающую количество таких строк. Ввод элементов матрицы (с помощью генератора случайных чисел) и вызов созданной функции осуществлять в основной программе.

Дана строка символов. Выяснить, верно ли, что среди символов строки имеются все буквы, входящие в заданное пользователем слово.

Описание глобальных переменных

Было разработано программное средство согласно заявленным в методических указаниях требованиям. Для успешной работы данного программного средства в соответствии с предъявляемыми требованиями разработчиком было решено глобальные переменные не использовать. Это повышает мобильность программы и и соответствует основным принципам структурного программирования.

Выполнение каждой подзадачи производится в отдельной функции, вызов которых производится из главного меню, расположенного в головной функции main(). Организация работы меню выполнена с использованием одной переменной - punkt. В эту переменную считывается значение, вводимое пользователем программного средства и соответствующее тому номеру пункта меню, которое пользователь выбирает для выполнения.

Блок-схема головной функции main().

























Описание основных подпрограмм

В данном программном средстве разработчиком были составлены 2 основные функции Zadacha1() и Zadacha2() соответственно, реализующие одну из поставленных в условии задач. При этом каждая из этих функций содержит в себе обращение еще к ряду подпрограмм, отвечающих за реализацию отдельных типовых алгоритмов.

Описания функций программного средства:

Zadacha1() - функция содержит подменю, пункты которого соответствую подзадачам, изложенным в задании Задача 1 (см. «Постановка задачи»); входных параметров функция не имеет; возвращаемого значения функция не формирует.

Zadacha2() - функция содержит подменю, пункты которого соответствую подзадачам, изложенным в задании Задача 2 (см. «Постановка задачи»); входных параметров функция не имеет; возвращаемого значения функция не формирует

Zadacha3() - функция содержит подменю, пункты которого соответствую подзадачам, изложенным в задании Задача 3 (см. «Постановка задачи»); входных параметров функция не имеет; возвращаемого значения функция не формирует

Zadacha4() - функция содержит подменю, пункты которого соответствую подзадачам, изложенным в задании Задача 4 (см. «Постановка задачи»); входных параметров функция не имеет; возвращаемого значения функция не формирует

Fzad5() - функция содержит подменю, пункты которого соответствую подзадачам, изложенным в задании Задача 5 (см. «Постановка задачи»); входных параметров функция не имеет; возвращаемого значения функция не формирует

Блок-схема подпрограммы Zadacha1

























Блок-схема подпрограммы Zadacha2
























Блок-схема подпрограммы Zadacha3



















Блок-схема подпрограммы Zadacha4























void PrintMass2 (unsigned int M, unsigned int N, int **p) - функция печатает элементы массива. Входные параметры: N, M - размерность массива, p -указатель на массив. Выходного значения нет.

Блок-схема подпрограммы PrintMass2












void PrintMass (unsigned int size, unsigned int N, int *p) - функция печатает элементы массива. Входные параметры: sz - размерность массива, p -указатель на массив. Выходного значения нет.

Блок-схема подпрограммы PrintMass














Функция void SortMass (unsigned int sz, int* p) - функция сортирует элементы массива между заданными индексами

Входные параметры:

sz - количество элементов в массиве

р - указатель на массив

Локальные переменные:

к1 - начальный индекс элемента массива

к2 - конечный индекс элемента массива

i, j - индексы текущего элемента массива

buf - дополнительная переменная для обмена значений двух элементов массива

В функции предусмотрено аварийное завершение работы с выводом соответствующего сообщения при не правильном вводе пользователем значений индексов элементов.

Блок-схема подпрограммы SortMass























блок схема матрица программа

Блок-схема подпрограммы MaxMass






















Блок-схема подпрограммы SumAfterZerro




















Блок-схема подпрограммы CreateMass2
























Блок-схема подпрограммы PrintMass2













Блок-схема подпрограммы NonZerroRows

















Блок-схема подпрограммы SwitchColumn











Листинг программного продукта на языке С++

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

// Подключение библиотечных файлов C++:

#include<stdlib.h> // необходим для операций с генератором случайных чисел

#include<iostream.h> // необходим для операций потокового ввода-вывода

#include<conio.h> // необходим для работы с консолью

#include<stdio.h> // необходим для форматированного ввода-вывода

#include <iostream>

#include <windows.h>

#include <math.h>

// Прототипы функцийZadacha1 ();Zadacha2 ();Zadacha3 ();Zadacha4 ();* CreateMass (unsigned int &);** CreateMass2 (unsigned int &, unsigned int &);PrintMass (unsigned int, int*);PrintMass2 (unsigned int, unsigned int , int**);PrChetn (unsigned int, int*);NonMinusCols (unsigned int, unsigned int, int**);SumBetweenMinus (unsigned int sz, int* p);SwitchColumn (unsigned int M, unsigned int N, int** p);Fzad4 (unsigned int M, unsigned int N, int** p);Fzad3 (unsigned int sz, int* p);

#pragma argsused

//---------------------------------------------------------------------------

// Главная программаmain ()

{(1251); // регистры в C++ учитываются(1251);punkt;

{();<< "\n СЕМЕСТРОВАЯ РАБОТА. ВАРИАНТ 26.\n";

cout << "\n ГЛАВНОЕ МЕНЮ\n\n";

cout << "1. ЗАДАЧА 1\n";

cout << "2. ЗАДАЧА 2\n";

cout << "3. ЗАДАЧА 3\n";

cout << "5. ЗАДАЧА 5\n";

cout << "6. ВЫХОД\n";

punkt=getch();(punkt)

{'1':();;'2':();;'3':();;'4':();;

}

}while (punkt!='6');

}

// ************************************************************************

// ******************************** ФУНКЦИИ ******************************

// ************************************************************************Zadacha1 ()

{punkt; *a=NULL; // указатель на создаваемый массив

unsigned int size; // размер массива

{();<< "\n ЗАДАЧА 1. \n МЕНЮ\n\n"; << "1. Создать массив\n";

cout << "2. Распечатать массив\n";

cout << "3. Сумма элементов массива, расположенных между первым и вторым отрицательными элементами\n";

cout << "4. Произведение элементов массива с чётными номерами\n";

cout << "5. Вернуться в главное меню\n";

punkt=getch();(punkt)

{'1':(a) delete[] a;=CreateMass(size);;'2':(size, a);;'3':(size,a);;'4':(size,a);;

}

}while (punkt!='5');(a) delete[] a; // освобождение памяти;

}Zadacha2 ()

{int M,N; // Размер массиваi,j;punkt; **a=NULL; // указатель на создаваемый массив

do{();<< "\n ЗАДАЧА 2. \n МЕНЮ\n\n";<< "1. Создать двумерный массив\n";

cout << "2. Распечатать массив\n";

cout << "3. Подсчет суммы элементов в тех столбцах, которые не содержат отрицательных элементов\n";

cout << "4. Найти минимум среди сумм элементов диагоналей, параллельных побочной диагонали матрицыв\n";

cout << "5. Вернуться в главное меню\n";

punkt=getch();(punkt)

{'1':

// Удаление массива из памяти

if (a)

{(i=0;i<M;i++) delete[] a[i];[] a;

}=CreateMass2(M,N);;'2':(M,N,a);;'3':(M,N,a);;'4':(M,N,a);;

}

}while (punkt!='5');

// Удаление массива из памяти

if (a)

{(i=0;i<M;i++) delete[] a[i];[] a;

};

}Zadacha3 ()

{

char punkt;

int *a=NULL; // указатель на создаваемый массив

unsigned int size; // размер массива

{();<< "\n ЗАДАЧА 3. \n МЕНЮ\n\n"; << "1. Создать массив\n";

cout << "2. Распечатать массив\n";

cout << "3. Вызов функции\n";

cout << "4. Вернуться в главное меню\n";

punkt=getch();(punkt)

{'1':(a) delete[] a;=CreateMass(size);;'2':(size, a);;'3':(size,a);;

}

}while (punkt!='4');(a) delete[] a; // освобождение памяти;;

}Zadacha4 ()

{int M,N; // Размер массиваi,j;punkt; **a=NULL; // указатель на создаваемый массив

do{();<< "\n ЗАДАЧА 4. \n МЕНЮ\n\n";<< "1. Создать двумерный массив\n";

cout << "2. Распечатать массив\n";

cout << "3. Решение функции\n";

cout << "4. Вернуться в главное меню\n";

punkt=getch();(punkt)

{'1':

// Удаление массива из памяти

if (a)

{(i=0;i<M;i++) delete[] a[i];[] a;

}=CreateMass2(M,N);;'2':(M,N,a);;'3':(M,N,a);;

}

}while (punkt!='4');

// Удаление массива из памяти

if (a)

{(i=0;i<M;i++) delete[] a[i]; [] a;

return;

}

//----------------------------------------------------------------------

// Распечатка двумерного массива

//----------------------------------------------------------------------PrintMass2 (unsigned int M, unsigned int N, int **p)

{i,j;(!p)

{<< "\n\nОшибка! Массив еще не создан.";

getch();

return;

}("\n\nМассив a[%d][%d] имеет вид:\n",M,N);(i=0;i<M;i++)

{(j=0;j<N;j++) printf("%4d",p[i][j]);("\n");

}

getch();

return;

}

//----------------------------------------------------------------------

// Выделение памяти под двумерный массив и заполнение его

//----------------------------------------------------------------------** CreateMass2 (unsigned int &M,unsigned int &N)

{i,j,r;punkt; << "\n\nЗадайте размер для двумерного массива \n";

cout << "Строк в массиве M = "; cin >> M;

cout << "Cтолбцов в массиве N = "; cin >> N;

//Динамически определим память для двумерного массива

int **p=new int*[M]; // сначала массив из M указателей на int

// при этом переменная p является так назыв. указателем на указатель

for (i=0;i<M;i++) p[i]=new int[N]; // теперь каждый указатель укажет на массив N целых

if (!p)

{<< "\n\nОшибка! Невозможно создать массив! \nПопробуйте задать меньший размер.";

getch();

return NULL;

}

cout << "\n\nВвод значений в массив:";

cout << "\n1. Вручную";<< "\n2. Автоматически (случайные значения)\n";

punkt=getch();

switch (punkt)

{

case '1':

cout << "\nВвoдите числo в каждый элемент массива:\n";

for (i=0;i<M;i++)(j=0;j<N;j++)

{("a[%d][%d] = ",i,j); cin >> p[i][j];

}

break;

case '2':

cout << "\nВведите диапазон для случайных чисел (от 0 до r) r = ";

cin >> r;();(i=0;i<M;i++)(j=0;j<N;j++) p[i][j]=random(r);

}

cout << "\n\nМассив создан.";

getch();

return p;

}

//----------------------------------------------------------------------

// Выделение памяти под одномерный массив и заполнение его

//----------------------------------------------------------------------* CreateMass (unsigned int &sz)

{*p;i,r,t;punkt;<< "\n\nЗадайте размер массива "; >> sz;

// Динамическое выделение памяти под массив

p=new int[sz];(!p)

{

cout << "\n\nОшибка! Невозможно создать массив! \nПопробуйте задать меньший размер.";

getch();

return NULL;

}

cout << "\n\nВвод значений в массив:";

cout << "\n1. Вручную";<< "\n2. Автоматически (случайные значения)\n";

punkt=getch();

switch (punkt)

{'1':(i=0;i<sz;i++)

{

cout << "Ввод " << i <<"-го элемента: ";

cin >> p[i];

};'2': << "\nВведите минимум для случайных чисел: ";

cin >> t;

cin >> r;

randomize(); // Настройка генератора случайных чисел

for (i=0;i<sz;i++) { p[i]=random(r)%(r-t+1)+t; }

}

cout << "\n\nМассив создан.";

getch();

return p;

}

//----------------------------------------------------------------------

// Распечатка одномерного массива

//----------------------------------------------------------------------

void PrintMass (unsigned int sz, int* p)

{i;(!p)

{<< "\n\nОшибка! Массив еще не создан.";

getch();

return;

}

cout << "\n\nМассив a[" << sz << "] содержит следующие значения:\n";

for (i=0;i<sz;i++) cout << p[i]<< " ";();

return;

}

//-------------------------------------------------------------------

// Нахождение произведения элементов с четными номерами

//-------------------------------------------------------------------PrChetn (unsigned int sz, int* p)

{

int i;

int sum=1; // сумма элементов после нуля

if (!p)

{<< "\n\nОшибка! Массив еще не создан.";

getch();

return;

}

// Находим четные индексы и затем считаем произведение

for (i=0;i<sz;i++)

{

// Если номер элемента делится на 2 без остатка, то подсчет произведения

if (i%2) sum*=p[i];

}

if (sz==1) cout << "\n\n В массиве нет четных номеров элементов! Произведение не может быть найдена!";

else cout << "\n\n Произведение элементов с четными номерами равна " << sum;

getch();

return;

}

//-------------------------------------------------------------------

// Нахождение суммы элементов между отрицательными элементами

//-------------------------------------------------------------------SumBetweenMinus (unsigned int sz, int* p)

{

int i;

int otr1=-1; // индекс первого отрицательного элемента (если равен -1, отриц. значений массиве нет)

int otr2=-1; // индекс второго отрицательного элемента (если равен -1, отриц. значений в массиве нет)

int sum=0; // сумма элементов между 1м и 2м отрицательным элементом

if (!p)

{<< "\n\nОшибка! Массив еще не создан.";

getch();

return;

}

// Находим первый отрицательный элемент

for (i=0;i<sz;i++)

{

// Если индекс элемента найден, запомнить индекс

if (p[i]<0){ otr1=i;; }

}

for (i=0;i<sz;i++)

{

// Если индекс элемента найден, запомнить индекс

if ((p[i]<0)&&(i>otr1)) {otr2=i;; }

}(i=otr1;i<=otr2;i++)

{

sum+=p[i];

}

else cout << "\n\n Cумма между отрицательными элементами a["<<otr1<<"] и a["<<otr2<<"] равна " << sum;

getch();

return;

}

//-------------------------------------------------------------------

// Подсчет суммы элементов в тех столбцах, которые не содержат отрицательных элементов

//-------------------------------------------------------------------NonMinusCols (unsigned int M, unsigned int N, int** p)

{int l,chk;i,j,sum;(!p)

{<< "\n\nОшибка! Массив еще не создан.";

getch();

return;

}=0;(j=0;j<N;j++)

{

sum=0;

chk=0; // Сначала предположим что i-я строка не содержит отрицательных элементов

for (i=0;i<N;i++)

{

// Если найден отрицательный элемент, то установить переменную проверки в 1

if (p[i][j]<0) chk=1;

}

// Если в ходе проверки отрицательных элементов не найдено в столбце то найти сумму столбца

Источник: https://www.bibliofond.ru/detail.aspx?id=786614