
Добавил:
nnn
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Шафеева О.П., ИВТ, прога на СИ / дз / 7 / сложение чисел с плав. запятой
.cpp#include <stdio.h>
#include <string.h>
#include <math.h>
#include <locale.h>
#define M_SIZE 8 // Размер мантиссы
#define P_SIZE 4 // Размер порядка
// Функция для сложения чисел с плавающей точкой
void sum(int mant1[], int por1[], int mant2[], int por2[], int resultMant[], int resultPor[]) {
// Приведение к одинаковому порядку
int diff = por1[0] - por2[0];
int smallerP;
if (diff > 0) {
smallerP = por2[0];
}
else {
smallerP = por1[0];
}
int biggerM[M_SIZE], biggerP[P_SIZE];
int smallerM[M_SIZE];
//Сдвиг мантиссы меньшего числа
for (int i = 0; i < abs(diff); i++) {
int temp = smallerM[M_SIZE - 1];
for (int j = M_SIZE - 1; j > 0; j--) {
smallerM[j] = smallerM[j - 1];
}
smallerM[0] = temp;
}
int sumM[M_SIZE];
int carry = 0;
for (int i = M_SIZE - 1; i >= 0; i--) {
int temp = biggerM[i] + smallerM[i] + carry;
sumM[i] = temp % 2;
carry = temp / 2;
}
}
int main() {
setlocale(LC_ALL, "rus");
int mant1[M_SIZE], por1[P_SIZE];
int mant2[M_SIZE], por2[P_SIZE];
int resultMant[M_SIZE], resultPor[P_SIZE];
printf("Введите мантиссу первого числа (0 и 1):\n");
for (int i = 0; i < M_SIZE; i++) scanf_s("%d", &mant1[i]);
printf("Введите порядок первого числа:\n");
for (int i = 0; i < P_SIZE; i++) scanf_s("%d", &por1[i]);
printf("Введите мантиссу второго числа (0 и 1):\n");
for (int i = 0; i < M_SIZE; i++) scanf_s("%d", &mant2[i]);
printf("Введите порядок второго числа:\n");
for (int i = 0; i < P_SIZE; i++) scanf_s("%d", &por2[i]);
sum(mant1, por1, mant2, por2, resultMant, resultPor);
printf("\nРезультат:\n");
printf("Мантисса: ");
for (int i = 0; i < M_SIZE; i++) printf("%d", resultMant[i]);
printf("\n");
printf("Порядок: ");
for (int i = 0; i < P_SIZE; i++) printf("%d", resultPor[i]);
return 0;
}
Соседние файлы в папке 7