дз 1 семестр / ДЗ 6
.docxДомашняя работа №6
Задание 1
Условие задачи:
Оптимизировать алгоритм для примера 2, объединяя вычисление суммы и факториала. Отладить программу.
Схема алгоритма:
Текст программы:
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
float func(int* mas, int size)
{
float fact = 1;
float sum = 0;
for (int i = 0; i < size; i++) {
sum += mas[i];
fact *= (i + 1);
}
return sum / fact;
}
int main()
{
int A[5]{ 4, 6, 7, 1, 3 };
int B[7]{ 5, 2, 8, 1, 9, 3, 4 };
float a = func(A, 5);
float b = func(B, 7);
cout << a + b;
_getch();
return 0;
}
Результаты выполнения программы:
Задание 2
Условие задачи:
Разработать программы для примера 3: а) через 3 функции; б) через 2 функции (главную и объединив нахождение «Max» и «Min» в одной подпрограмме).
Схема алгоритма:
a )
б)
Текст программы:
а)
#include <iostream>
#include <math.h>
#include <conio.h>
#include <locale.h>
using namespace std;
float max(int x, int y, int z)
{
float mx = 0;
if (x > y) mx = x;
else mx = y;
if (z > mx) mx = z;
return mx;
}
float min(int x, int y, int z)
{
float mn = 1000000;
if (x < y) mn = x;
else mn = y;
if (z < mn) mn = z;
return mn;
}
int main()
{
setlocale(LC_ALL, "ru");
int x, y, z, a, d, e;
float w;
cout << "Введите x,y,z" << endl;
cin >> x >> y >> z;
cout << "Введите a,d,e" << endl;
cin >> a >> d >> e;
w = ((max(x, y, z) - min(x, y, z))) / ((max(a, d, e) - min(a, d, e)));
cout << w;
_getch();
return 0;
}
б)
#include <iostream>
#include <locale.h>
#include <math.h>
#include <conio.h>
using namespace std;
float mm(int* max, int x, int y, int z) {
float mx = 0, mn = 100000;
if (x > y) {
(*max) = x;
mn = y;
}
else {
(*max) = y;
mn = x;
}
if (z > mx) (*max) = z;
if (z < mn) mn = z;
return mx;
}
int main() {
setlocale(LC_ALL, "ru");
int x, y, z, a, d, e, max1, max2, min1 = 0, min2 = 0;
float w, h;
cout << "Введите x,y,z" << endl;
cin >> x >> y >> z;
cout << "Введите a,d,e" << endl;
cin >> a >> d >> e;
min1 = mm(&max1, x, y, z);
min2 = mm(&max2, a, d, e);
w = (max1 - min1) / (max2 - min2);
printf("Ответ %4f", w);
_getch();
return 0;
}
Результаты выполнения программы:
а ) ввввввввввв ввввб)
Задание 3
Условие задачи:
Разработать схемы алгоритмов перевода смешанных чисел из десятичной системы счисления в другую (2, 8) (использовать подпрограмму для перевода каждой части).
Схема алгоритма:
Текст программы:
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <math.h>
void cel(int x, int c)
{
if (x == 0) return;
cel(x / c, c);
printf("%i", x % c);
}
int drob(float x, int c)
{
static int i = 0;
if (i > 6) return(0);
x = x * c;
printf("%i", int(x));
x = x - int(x);
i++;
drob(x, c);
}
void main()
{
setlocale(LC_ALL, "ru");
float x;
int c;
printf("Введите размерность системы: ");
scanf_s("%i", &c);
printf("Введите десятичную дробь: ");
scanf_s("%f", &x);
cel(int(x), c);
printf(",");
drob(x - int(x), c);
_getch();
}
Результаты выполнения программы:
Задание 4
Условие задачи:
Разработать алгоритмы и отладить программы для моделирования сложения чисел в двоичной системе счисления (числа представить массивами A, B, C (результат) из нулей и единиц), т.е. сложить 2 массива по 6 элементов из «0» и «1» по правилам двоичной арифметики.
Схема алгоритма:
Текст программы:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int A[6] = { 1,1,0,1,0,0 };
int B[6] = { 1,0,1,1,0,1 };
int i, k, p = 0, C[7]{}, n = 6;
for (i = n - 1; i >= 0; i--)
{
k = A[i] + B[i] + p;
C[i + 1] = k % 2;
p = k / 2;
}
if (p > 0) C[0] = p;
for (i = 1; i < 7; i++)
{
cout << C[i];
}
_getch();
return 0;
}
Результаты выполнения программы: