Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шафеева О.П., ИВТ, прога на СИ / дз / 7 / сложение чисел с плав. запятой

.cpp
Скачиваний:
0
Добавлен:
21.01.2025
Размер:
2 Кб
Скачать
#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;
}