- •Лабораторная работа 1. Системы счисления
- •Лабораторная работа 2 Способы представления алгоритмов
- •Лабораторная работа № 4. Ввод и вывод информации
- •Лабораторная работа № 5. Разветвляющиеся программы
- •Лабораторная работа № 6. Циклические программы
- •Лабораторная работа № 7. Отладка программ
- •Лабораторная работа № 8. Вычисление сумм, произведений, экстремумов
- •Лабораторная работа № 9. Решение инженерных задач на основе циклических программ
- •Лабораторная работа № 10. Одномерные массивы
- •Лабораторная работа № 11. Битовые операции
- •Лабораторная работа № 12. Использование указателей
- •Лабораторная работа № 13. Обработка символьной информации
- •Лабораторная работа № 14. Многомерные массивы
- •Лабораторная работа № 15. Динамическое выделение памяти
- •Лабораторная работа № 16. Функции пользователя
- •Лабораторная работа № 17. Указатели и ссылки при работе с функциями
Лабораторная работа № 16. Функции пользователя
1. Найти сумму элементов, лежащих ниже главной диагонали в целочисленном массиве A[n, n].
2. Написать программу, которая вводит несколько строк текста и символ «m» и использует функцию, чтобы определить суммарное число вхождений символа в текст.
#include <iostream>
using namespace std;
void Fill(int** matrix, int sz, int max_value)
{
for (int i = 0; i < sz; i++)
{
for (int j = 0; j < sz; j++)
{
matrix[i][j] = rand() % (max_value + 1);
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
void getstring(char** string_array, int x)
{
string_array[x] = new char[200];
cin.getline(string_array[x], 200);
}
void define_amount(char** string_array, int x)
{
int amount = 0;
for (int i = 0; string_array[x][i] != '\0'; i++)
{
if (string_array[x][i] == 'm') amount++;
}
cout << "Количество вхождений символа m в строку " << x + 1 << ": " << amount << endl;
}
void First()
{
int sz, sum = 0;
cout << "Размер матрицы: "; cin >> sz;
cout << "\n\n";
int** matrix = new int* [sz];
for (int i = 0; i < sz; i++) matrix[i] = new int[sz];
Fill(matrix, sz, 100);
for (int i = 0; i < sz; i++)
{
for (int j = 0; j < sz; j++)
{
if (j != i)
{
sum += matrix[i][j];
}
else break;
}
}
cout << "\n\nСумма элементов под главной диагональю: " << sum << "\n\n";
// Free space
for (int i = 0; i < sz; i++) delete[] matrix[i];
delete[] matrix;
}
void Second()
{
int strings_amount;
cout << "Количество строк: "; cin >> strings_amount;
char** string_array = new char* [strings_amount];
cout << endl;
for (int i = 0; i < strings_amount; i++)
{
cout << "\nСтрока " << i + 1 << ":\n";
if (i == 0) cin.ignore();
getstring(string_array, i);
}
cout << "\n\n";
for (int i = 0; i < strings_amount; i++)
{
define_amount(string_array, i);
}
for (int i = 0; i < strings_amount; i++) delete[] string_array[i];
delete[] string_array;
}
int main()
{
setlocale(LC_ALL, "");
int x;
cout << "Задание 1:\nНайти сумму элементов, лежащих ниже главной диагонали в целочисленном массиве A[n, n].\n\nЗадание 2:\n";
cout << "Написать программу, которая вводит несколько строк текста и символ «m» и использует функцию, чтобы определить суммарное число вхождений символа в текст.\n\n";
cout << "Выполнить задание #"; cin >> x;
cout << "\n";
switch (x)
{
case 1: First(); break;
case 2: Second(); break;
default: cout << "Некорректный номер!\n\n"; exit(1);
}
}
Лабораторная работа № 17. Указатели и ссылки при работе с функциями
1. В массиве из целых чисел определить сумму элементов, расположенных между первым и последним нулевыми элементами
#include <iostream>
using namespace std;
void fill(int*, int*, int); //прототип
int define(int*, int*);
void writer(int*, int*);
int main()
{
setlocale(LC_ALL, "");
srand(time(0));
int sz, * arr;
cout << "Размер массива: ", cin >> sz;
arr = new int[sz];
fill(arr, &sz, 10);
writer(arr, &sz);
cout << endl << define(arr, &sz) << endl;
delete[]arr;
}
void fill(int* arr, int* size, int max_value)
{
for (int i = 0; i < *size; i++) arr[i] = rand() % (max_value);
}
int define(int* arr, int* size)
{
int sum = 0, first = -1, last = -1;
for (int i = 0; i < *size; i++) if (arr[i] == 0)
{
first = i;
break;
}
for (int i = *size; i > first; i--) if (arr[i] == 0)
{
last = i;
break;
}
if (first != -1 && last != -1)
{
for (int i = first; i < last; i++) sum += arr[i];
return sum;
}
else return 0;
}
void writer(int* arr, int* size)
{
cout << endl;
for (int i = 0; i < *size; i++) cout << arr[i] << " ";
cout << endl;
}
2. Если есть в матрице строка, все элементы которой положительны, то найти сумму этих элементов. Уменьшить все элементы матрицы на эту сумму.
#include <iostream>
#include <iomanip>
using namespace std;
void write(int**, int*, int*);
void fill(int**, int*, int*, int);
int find_positive_string(int**, int*, int*);
int sum(int**, int, int*);
void reduce(int**, int*, int*, int);
int main()
{
setlocale(LC_ALL, "");
int** matrix;
int strings, columns;
cout << "Количество строк матрицы: "; cin >> strings;
cout << "Количество столбцов матрицы: "; cin >> columns;
matrix = new int* [strings];
for (int i = 0; i < strings; i++) matrix[i] = new int[columns];
fill(matrix, &strings, &columns, 100);
write(matrix, &strings, &columns);
if (find_positive_string(matrix, &strings, &columns) != -1)
{
reduce(matrix, &strings, &columns, sum(matrix, find_positive_string(matrix, &strings, &columns), &columns));
cout << "Обновленная матрица: ";
write(matrix, &strings, &columns);
}
for (int i = 0; i < strings; i++) delete[] matrix[i];
delete[] matrix;
}
void write(int** matrix, int* str, int* col)
{
cout << endl;
for (int i = 0; i < *str; i++)
{
for (int j = 0; j < *col; j++)
{
cout << setw(4) << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void fill(int** matrix, int* str, int* col, int max_value)
{
srand(time(0));
for (int i = 0; i < *str; i++)
{
for (int j = 0; j < *col; j++)
{
matrix[i][j] = (rand() - (RAND_MAX / 4)) % max_value;
}
}
}
int find_positive_string(int** matrix, int* str, int* col)
{
bool cond;
for (int i = 0; i < *str; i++)
{
cond = true;
for (int j = 0; j < *col; j++)
{
if (matrix[i][j] < 0) cond = false;
}
if (cond) return i;
}
return -1;
}
int sum(int** matrix, int str, int* col)
{
int sum = 0;
for (int i = 0; i < *col; i++)
{
sum += matrix[str][i];
}
return sum;
}
void reduce(int** matrix, int* str, int* col, int sum)
{
for (int i = 0; i < *str; i++)
{
for (int j = 0; j < *col; j++)
{
matrix[i][j] -= sum;
}
}
}