#include <iostream>
#include <cassert>
using namespace std;
 
void zero(int* v, int r, int s)
{
    int cnt = r * s;
    for (int i = 0; i < cnt; i++)
        v[i] = 0;
}
 
void one(int* v, int r, int s)
{
    zero(v, r, s);
    assert (r == s);
    for (int i = 0; i < r; i++)
        v[i * s + i] = 1;
}
 
void print (int* v, int r, int s)
{
    for (int i = 0; i < r; i++)
    {
        cout << "(";
        for (int k = 0; k < s; k++)
        {
            cout << v[i * s + k];
            if (k < s - 1) cout << ", ";
        }
        cout << ")" << endl;
    }
    cout << endl;
}
 
void add (int* v, int* x, int* y, int r, int s)
{
    /*
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
        { 
            // v[i,k] = x[i,k] + y[i,k];
            v[i*s+k] = x[i*s+k] + y[i*s+k];
        }
    */
 
    int cnt = r * s;
    for (int i = 0; i < cnt; i++)
        v[i] = x[i] + y[i];
}
 
void mul(int* v, int* x, int* y, int r, int s, int t)
// v = x * y
// x .. r * s
// y .. s * t
// v .. r * t
{
    for (int i = 0; i < r; i++) // i ... radek z matice x
        for (int j = 0; j < t; j++) // j ... sloupec z matice y
        {
            // v[i,j]  ... v[i*t+j]
            int sum = 0;
            for (int k = 0; k < s; k++)
            {
                // sum = sum + x[i,k] * y [k,j]
                sum = sum + x[i * s + k] * y[k * t + j];
            }
            v[i * t + j] = sum;
        }
}
 
void step(int* v, int r, int s, int i, int j)
{
    v[i * s + j] = 1;
    v[j * s + i] = 1;
}
 
int main()
{
    int r = 3;
    int s = r;
 
    int* a = new int[r * s];
    int* b = new int[r * s];
    int* c = new int[r * s];
 
    one  (a, r, s);
    one  (b, r, s);
    // step(a, r, s, 0, 1);
    // step(a, r, s, 1, 2);
    mul(c, a, b, r, r, r); // c = a * b
    // NELZE mul (a, a, b, r, r, r); // a = a * b
    print(a, r, s);
    print(c, r, s);
}
#include <iostream>
#include <cassert>
using namespace std;
 
const int r = 10;
const int s = 10;
typedef double M [r][s];
 
void zero(M v)
{
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
            v[i][k] = 0;
}
 
void one (M v)
{
    zero(v);
    assert (r == s);
    for (int i = 0; i < r; i++)
        v[i][i] = 1;
}
 
void print (M v)
{
    for (int i = 0; i < r; i++)
    {
        cout << "(";
        for (int k = 0; k < s; k++)
        {
            cout << v[i][k];
            if (k < s - 1) cout << ", ";
        }
        cout << ")" << endl;
    }
    cout << endl;
}
 
void add (M v, M x, M y)
{
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
        { 
            v[i][k] = x[i][k] + y[i][k];
        }
}
 
void mul(M v, M x, M y)
{
    assert (r == s);
    for (int i = 0; i < r; i++) // i ... radek z matice x
        for (int j = 0; j < r; j++) // j ... sloupec z matice y
        {
            int sum = 0;
            for (int k = 0; k < r; k++)
            {
                sum = sum + x[i][k] * y[k][j];
            }
            v[i][j] = sum;
        }
}
 
int main()
{
    M a;
    M b;
    M c;
 
    one (a);
    one (b);
    add (a, a, b);
    mul (c, a, a); // c = a * b
    // NELZE mul (a, a, b); // a = a * b
    print (a);
    print (c);
}
#include <iostream>
#include <cassert>
using namespace std;
 
const int r = 10;
const int s = 10;
 
struct M
{
   double data [r][s];
};
 
// void zero(double v [r][s])
 
void zero(M & v)
{
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
            v.data[i][k] = 0;
}
 
void one (M & v)
{
    zero(v);
    assert (r == s);
    for (int i = 0; i < r; i++)
        v.data[i][i] = 1;
}
 
void print (M & v)
{
    for (int i = 0; i < r; i++)
    {
        cout << "(";
        for (int k = 0; k < s; k++)
        {
            cout << v.data[i][k];
            if (k < s - 1) cout << ", ";
        }
        cout << ")" << endl;
    }
    cout << endl;
}
 
void add (M & v, M x, M y)
{
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
        { 
            v.data[i][k] = x.data[i][k] + y.data[i][k];
        }
}
 
void mul(M & v, M x, M y)
{
    assert (r == s);
    for (int i = 0; i < r; i++) // i ... radek z matice x
        for (int j = 0; j < r; j++) // j ... sloupec z matice y
        {
            int sum = 0;
            for (int k = 0; k < r; k++)
            {
                sum = sum + x.data[i][k] * y.data[k][j];
            }
            v.data[i][j] = sum;
        }
}
 
int main()
{
    M a;
    M b;
    M c;
 
    one (a);
    one (b);
    add (a, a, b);
    mul (c, a, a); // c = a * b
    // O.K. mul (a, a, b); // a = a * b
    print (a);
    print (c);
}
#include <iostream>
#include <cassert>
using namespace std;
 
const int r = 10;
const int s = 10;
 
struct M
{
   double data [r][s];
};
 
// void zero(double v [r][s])
 
M zero()
{
    M v;
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
            v.data[i][k] = 0;
    return v;
}
 
M one ()
{
    M v = zero ();
    assert (r == s);
    for (int i = 0; i < r; i++)
        v.data[i][i] = 1;
    return v;
}
 
void print (M & v)
{
    for (int i = 0; i < r; i++)
    {
        cout << "(";
        for (int k = 0; k < s; k++)
        {
            cout << v.data[i][k];
            if (k < s - 1) cout << ", ";
        }
        cout << ")" << endl;
    }
    cout << endl;
}
 
M add (M x, M y)
{
    M v;
    for (int i = 0; i < r; i++)
        for (int k = 0; k < s; k++)
        { 
            v.data[i][k] = x.data[i][k] + y.data[i][k];
        }
    return v;
}
 
M mul (M x, M y)
{
    M v;
    assert (r == s);
    for (int i = 0; i < r; i++) // i ... radek z matice x
        for (int j = 0; j < r; j++) // j ... sloupec z matice y
        {
            int sum = 0;
            for (int k = 0; k < r; k++)
            {
                sum = sum + x.data[i][k] * y.data[k][j];
            }
            v.data[i][j] = sum;
        }
    return v;
}
 
int main()
{
    M a;
    M b;
    M c;
 
    a = one ();
    b = one ();
    a = add (a, b);
    c = mul (a, a); // c = a * a
    print (a);
    print (c);
}
 
cmatice2019.txt · Last modified: 2019/12/05 15:09 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki