[Мы решаем ваши проблемы с Си и Паскалем ]
Главная » Статьи » Задачи из заказов » Заказ 09.11.07

Написать и протестировать функцию для сложения и вычитания вещественных матриц.
// 3.26
// Написать и протестировать функцию для сложения и вычитания вещественных
// матриц. Одним из формальных параметров должен быть признак вида операции

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

float *creatematrix(int n)
{
    float* a = (float*)malloc(n * n * sizeof(float));
    return a;
}

void randmatrix(float *a, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            *(a + i * n + j) = rand();
}

void inputmatrix(float *a, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
        {
            printf("[%d, %d] = ", i, j);
            scanf("%f", a + i * n + j);
        }
}

void printmatrix(float *a, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            printf("%f ", *(a + i * n + j));
        printf("\n");
    }
}

int func(float *a, float *b, int op, float *c, int n)
{
    if (op != 1 && op != 2)
        return -1;

    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (op == 1)
                *(c + i * n + j) = *(a + i * n + j) + *(b + i * n + j);
            else
                *(c + i * n + j) = *(a + i * n + j) - *(b + i * n + j);
    return 0;
}

void main()
{
    clrscr();

    int n, op;
    float *a , *b, *c;
    char ans;

    printf("Vvedite n: ");
    scanf("%d", &n);

    a = creatematrix(n);
    b = creatematrix(n);
    c = creatematrix(n);

    printf("Vvod matrici a:\n");

    printf("Vruchnuyu? (Y/N): \n");
    ans = getch();
    printf("%c\n", ans);

    if (ans == 'Y' || ans == 'y')
        inputmatrix(a, n);
    else
        randmatrix(a, n);

    printf("Vvod matrici b:\n");

    printf("Vruchnuyu? (Y/N): \n");
    ans = getch();
    printf("%c\n", ans);

    if (ans == 'Y' || ans == 'y')
        inputmatrix(b, n);
    else
        randmatrix(b, n);

    printf("Vibor operacii:\n1. slogenie\n2. vichetanie\n");
    scanf("%d", &op);

    if (func(a, b, op, c, n) != -1)
    {
        printf("Matrica A: %s\n");
        printmatrix(a, n);
        printf("Matrica B: %s\n");
        printmatrix(b, n);
        printf("Resultat raboti functii: %s\n");
        printmatrix(c, n);
    } else
        printf("Nekorektno vvedennie dannie!\n");
    getch();

    free(a);
    free(b);
    free(c);
}


Категория: Заказ 09.11.07 | Добавил: solver (09.11.2007)
Просмотров: 1131