
- •Дисциплина: технология программирования
- •Лабораторная работа №1
- •Результаты работы программы для данных типа float
- •Объяснение результатов
- •Программа решения задания 2
- •Результат работы программы
- •Лабораторная работа №3
- •Постановка задачи
- •Текст программы
- •Результат работы программы
- •Лабораторная работа №8
- •Постановка задачи
- •Текст программы
- •Результат работы программы
- •Лабораторная работа №11
- •Постановка задачи
- •Текст программы
- •Результат работы программы
Результат работы программы
Рис.3. Результат работы программы
Лабораторная работа №3
«Вычисление функций с использованием их разложения в степенной ряд»
Постановка задачи
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:
а) для заданного n;
б) для заданной точности (=0.0001).
Для сравнения найти точное значение функции.
функция |
диапазон изменения аргумента |
n |
сумма |
|
|
10 |
|
Текст программы
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
#include <stdio.h>
#include <windows.h>
char* rus(const char* text);
void func ();
int main(int argc, char* argv[])
{
cout << "Function y = sinX\n" << "0.1<=x<=1\n" << "Step 0.09\n";
cout << rus(" Вычисление...\n");
func ();
getch ();
return 0;
}
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
void func ()
{
double x = 0.1;
double y = 0;
double w;
double d = 0;
double q=0;
while (x <= 1)
{
double an,s, ann;
int n = 0;
s = 0;
ann = x;
an = x;
q = pow(x, 2);
while (n <= 10)
{
y = (q*an)/(2*n+2);
s = s + y;
an = y;
n++;
}
n = 0;
while(ann > 0.0001)
{
w = (q*ann)/(2*n+2);
d = d + w;
ann = w;
n++;
}
printf(" X= %f", x);
printf(" SN= %f", s);
printf(" SE= %f", d);
printf(" Y= %f\n", sin(x));
x = x + 0.09;
}
}
Результат работы программы
Рис.4.
Результат работы программы
Лабораторная работа №4
«Работа с одномерными массивами»
Постановка задачи
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2) Распечатать полученный массив.
3) Удалить все элементы равные 0.
4) Добавить после первого четного элемента массива элемент со значением M[ I-1 ]+2.
5) Распечатать полученный массив.
Текст программы
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <iomanip.h>
/*
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2) Распечатать полученный массив.
3) Удалить все элементы равные 0.
4) Добавить после первого четного элемента массива элемент со значением M[ I-1 ]+2.
5) Распечатать полученный массив.
*/
class Error {}; //создание пустого класса для обработки ошибок
char* rus(const char* text);
int func1 (int *, int&);
int func2 (int *, int, int&);
int func3 (int *, int, int);
int main(int argc, char* argv[])
{
const int n = 100; //создание массива и задавание его размерности
int m;
int q = 0;
int mas[n];
cout << rus ("1) Введите количество символов в массиве ");
cin >> m;
func1 (mas, m); //заполнение массива случайными числами
cout << "\n[" << setw(5);
for (int i = 0; i < m; i++) //вывод полученного массива
{
cout << *(mas + i) << setw(5);
}
cout << "]";
func2 (mas, m, q); //удаление из массива всех нулей
cout << rus("\t\n\n2) Массив без нулей: \n"); //вывод массива без нулей
cout << "\n[" << setw(5);
for (int i = 0; i < m - q; i++)
{
cout << *(mas + i) << setw(5);
}
cout << "]";
func3 (mas, m, q); //добавление нового элемента
cout << rus("\t\n\n3) Добавление после первого четного элемента массива \t\nэлемент со значением M [I-1]+2: \n");
cout << "\n[" << setw(5);
for (int i = 0; i < m-q+1; i++) //вывод массива с новым элементом
{
cout << *(mas + i) << setw(5);
}
cout << "]";
getch();
return 0;
}
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//функция заполнения массива случайными числами
int func1 (int *mas, int& m1)
{
randomize();
try //славливание ошибок в случае
{ //когда пользователь ввел размерность массива
if (m1 > 100) // больше ста
throw Error();
}
catch (Error)
{cerr << "ERROR!\n";}
for (int i = 0; i < m1; i++) //заполнение массива случайными числами
{
mas[i] = random (10);
}
return *mas;
}
//функция удаления нулей из массива
int func2 (int *mas, int m2, int& q1)
{
for (int i = 0; i < m2; i++)
{ //удаление из массива всех нулей
if (mas[i] == 0)
{ //с уменьшением размера массива
q1++;
for (int j = i; j < m2; j++) {
mas[j] = mas[j+1]; //смещение элементов влево
}
}
}
return *mas;
}
//функция добавления нового элемента
int func3 (int *mas, int m3, int q3)
{
for (int i = 0; i < m3 - q3; i++)
{
if (mas[i]%2)
{} //если остатка от деления элемента на два нет
else //то добавляем после этого элемента новый элемент
{
for (int j = m3 - q3; j > i; j--)
{
mas[j] = mas[j-1]; //смещение элементов вправо
}
mas[i+1] = mas[i-1] + 2; //непосредственное добавление элемента
break;
}
}
return *mas;
}
//---------------------------------------------------------------------------
Результат работы программы
Рис.5. Результат работы программы
Лабораторная работа №5
«Функции и массивы»
Постановка задачи
Написать процедуру для суммирования матриц.
С ее помощью сложить исходную матрицу и транспонированную
(т. е. полученную поворотом исходной на 90).
Текст программы
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <iomanip.h>
#include <stdio.h>
/*
Написать процедуру для суммирования матриц.
С ее помощью сложить исходную матрицу и транспонированную
(т. е. полученную поворотом исходной на 90).
*/
//объявление прототипов
int** func1 (int **, int **, int);
int** func2 (int **, int **, int **, int);
int** zapol1 (int **, int);
int** zapol2 (int **, int);
int** show (int **, int);
char* rus(const char* text);
int main(int argc, char* argv[])
{
int n;
cout << rus ("\tВведите N: ");
cin >> n; // задание размерности матриц
int **mas1 = new int *[n];
int **mas2 = new int *[n]; //создание матриц
int **mas3 = new int *[n];
zapol1 (mas1, n);
zapol2 (mas2, n); //заполнение матриц
zapol2 (mas3, n);
cout << rus ("\t\n\nВывод матрицы\n");
show (mas1, n); //вывод первой матрицы
func1 (mas1, mas2, n); //транспонирование первой матрицы
cout << rus ("\t\n\nВывод транспонированной матрицы\n");
show (mas2, n); //вывод второй матрицы
func2 (mas1, mas2, mas3, n); //суммирование первой и второй матриц
cout << rus ("\t\n\nВывод суммы матриц\n");
show (mas3, n); //вывод третей матрицы
delete []mas1;
delete []mas2;
delete []mas3;
getch ();
return 0;
}
//русификация программы
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//функция вывода матрицы
int** show (int** mas, int n)
{
for (int i = 0; i < n; i++) //вывод заполненного массива
{
cout << "\n[" << setw(5);
for (int j = 0; j < n; j++)
{
cout << mas[i][j] << setw(5);
}
cout << "]\n";
}
return mas;
}
//функция заполнения первой матрицы случайными числами
int** zapol1 (int **mas1, int n)
{
randomize(); //заполнение массива случайными числами
for (int i = 0; i < n; i++)
{
int *temp = new int [n];
for (int j = 0; j < n; j++)
{
temp[j] = random(10);
}
mas1[i] = temp;
}
return mas1;
}
//функция заполнения второй и третей матриц нолями
int** zapol2 (int **mas2, int n)
{
for (int i = 0; i < n; i++)
{
int *temp = new int [n];
for (int j = 0; j < n; j++)
{
temp[j] = 0;
}
mas2[i] = temp;
}
return mas2;
}
//функция транспонирование первой матрицы
int** func1 (int **mas1, int **mas2, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
mas2[j][i] = mas1[i][j];
}
}
return mas2;
}
//функция суммирование первой и второй матриц
int** func2 (int **mas1, int **mas2, int **mas3, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
mas3[i][j] = mas1[i][j] + mas2[i][j];
}
}
return mas3;
}
Результат работы программы
Рис.6. Результат работы программы
Лабораторная работа №6
«Строки»
Постановка задачи
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В конце текста ставится точка. Текст содержит не более 255 символов. Выполнить ввод строки, используя функцию Gets(s) и напечатать все слова,
которые не содержат гласных букв.
Текст программы
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <cstring>
/*Напечатать все слова,
которые не содержат гласных букв.*/
//прототип функции проверки слов в строке на наличие гласных
char* prov (char*, char*);
char* rus(const char* text);
int main(int argc, char* argv[])
{
const int size = 255; //задание размера строк
char str [size]; //создание двух строк
char str2 [size];
cout << rus ("Введите строку: ");
gets (str); //ввод первой строки
prov (str, str2); //обработка строк
cout << rus ("Полученная строка: ") << str2; //вывод второй строки
getch();
return 0;
}
char bufrus[256];
//функция русификации программы
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//функция проверки слов в строке на наличие гласных
char* prov (char* str, char* str2)
{
const int size = 255; //задаем размер строк
char str1 [size]; //создаем дополнительную строку
int i = 0, y = 0; //в которую будем копировать слова
int q = strlen(str);
for (int s = 0; s <= q+1; s++) //заполняем доп. строку нулями
str1[s] = '\0';
while (i < q)
{
int j, k, w, t;
if (str[i] != ' ')
{
j = i;
while ((str[j] != ' ') && (str[j] != '\0'))
{
str1 [j] = str [j]; //копируем слово из основной строки
j++; //в доп. строку
}
}
str1[j] = ' ';
w = strlen(str1); //определяем длину доп. строки
t = 0;
for (k = i; k < w; k++) //запускаем проверку на наличие гласных
{ //в слове, скопированном в доп. строку
int key = str1[k];
if ((key == -29)||(key == -91)||(key == -21)||(key == -96)||(key == -82)
||(key == -19)||(key == -17)||(key == -88)||(key == -18))
t++;
}
if (t == 0) //если гласных в доп. строке нет,
for (k = i; k < w; k++) //то копируем ее во вторую строку
{ //которую в дальнейшем выведем на экран
str2[y] = str1[k];
y++;
}
i = j;
i++;
}
str2[y] = '\0';
return str2;
}
//---------------------------------------------------------------------------
Результат работы программы
Рис.7. Результат работы программы
Лабораторная работа №7.1
«Перегрузка функций в Си++»
Постановка задачи
Написать перегруженные функции и основную программу, которая их вызывает.
а) для умножения целых чисел;
б) для умножения комплексных чисел.
Текст программы
#include <iostream.h>
#include <conio.h>
#include <windows.h>
/*7.1
Написать перегруженные функции и основную программу, которая их вызывает.
а) для умножения целых чисел;
б) для умножения комплексных чисел.*/
int mult (int, int);
void mult (int [2], int [2]);
int sum (int n, ...);
char* rus(const char* text);
int main(int argc, char* argv[])
{
int a, b, x; //создание целых чисел
int mas1[2], mas2[2]; //создание массивов
while (x != 0)
{
cout << rus ("\nВыберите действие:\n1 - умножение целых чисел\n2 - умножение комплексных чисел\n0-Выход из программы\n ");
cin >> x;
if (x == 1)
{
cout << rus("\n\nВведите первое целое число: ");
cin >> a; //ввод первого числа
cout << rus("Введите второе целое число: ");
cin >> b; //ввод второго числа
cout << rus ("Результат: ") << mult(a, b); //вывод результата
}
else if ( x == 2)
{
cout << rus("\n\nВведите через запятую вещественную \nи мнимую часть первого комплексного числа: ");
scanf ("%d, %d", &mas1[1], &mas1[2]); //ввод первого массива
cout << rus("\nВведите через запятую вещественную \nи мнимую часть второго комплексного числа: ");
scanf ("%d, %d", &mas2[1], &mas2[2]); //ввод второго массива
mult(mas1, mas2); //результат
}
}
getch();
return 0;
}
//русификация программы
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//функция умножения целых чисел
int mult (int a, int b)
{
return a*b; //возвращение результата умножения целых чисел
}
//функция умножения комплексных чисел
void mult (int mas1[2], int mas2[2])
{
int q, w, e, r, t, y; //создание дополнительных переменных
q = mas1[1]*mas2[2]; //для хранения ппромежуточной информации
w = mas1[2]*mas2[2];
e = mas1[2]*mas2[1];
r = mas1[1]*mas2[2];
t = q - w;
y = e - r;
if (y < 0) //вывод результата в случае отрицательной мнимой части
printf (rus("\nРезультат: %d%d*i"), t, y);
else //вывод результата в случае положительной мнимой части
printf (rus("\nРезультат: %d+%d*i"), t, y);
}
Результат работы программы
Рис.8. Результат работы программы
Лабораторная работа №7.2
«Функции с переменным числом параметров»
Постановка задачи
Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по формуле: S=a1*a2+a2*a3+a3*a4+. . . . .
Написать вызывающую функцию main, которая обращается к функции sum не менее трех раз с количеством параметров 5, 10, 12.
Текст программы
#include <iostream.h>
#include <conio.h>
#include <windows.h>
/*7.2.
Написать функцию sum с переменным числом параметров,
которая находит сумму чисел типа int по формуле:
S=a1*a2+a2*a3+a3*a4+. . . . .
Написать вызывающую функцию main,
которая обращается к функции sum не менее трех раз
с количеством параметров 5, 10, 12.*/
int mult (int, int);
void mult (int [2], int [2]);
int sum (int n, ...);
char* rus(const char* text);
int main(int argc, char* argv[])
{
while (x != 0)
{
cout << rus ("\nВыберите действие: \n3 - сумма целых чисел\n0-Выход из программы\n ");
cin >> x;
if (x == 3)
{
cout << rus("\n\nСумма пяти элементов:\n 1+5+7+15+10 = ")<< sum(5, 1,5,7,15,10);
cout << rus("\n\nСумма десяти элементов:\n 1+5+7+15+10+11+3+9+4+20 = ")<< sum(10, 1,5,7,15,10,11,3,9,4,20);
cout << rus("\n\nСумма двенадцати элементов:\n 1+5+7+15+10+11+3+9+4+20+12+2 = ")<< sum(12, 1,5,7,15,10,11,3,9,4,20,12,2);
}
}
getch();
return 0;
}
//русификация программы
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//функция суммирования с переменным числом параметров
int sum (int n, ...)
{
int *p = &n; //настраиваем указатель на количество элементов
int sum = 0;
for ( ; n != 0; n--)
sum+=*(++p);
return sum;
}