Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

ItsJustMe

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
#include "stdafx.h"
#include <memory.h>
#include <stdlib.h>
#include <stdio.h>
 
typedef unsigned long DWORD;
typedef const TCHAR *LPCTSTR;
 
class SquareM
{
  double *m;
  DWORD dDim;
public:
  SquareM(DWORD dim = 0)
    : m(NULL), dDim(dim)
  {
    if (dDim)
    {
      size_t i = dDim * dDim;
      m = new double[i];
      memset(m, 0, i * sizeof(double));
    }
  }
  SquareM(const SquareM &mm)
    : m(NULL), dDim(mm.dDim)
  {
    if (dDim)
    {
      size_t i = dDim * dDim;
      m = new double[i];
      i *= sizeof(double);
      if (mm.m)
        memcpy_s(m, i, mm.m, i);
      else
        memset(m, 0, i);
    }
  }
  ~SquareM()
  {
    delete[] m;
  }
  DWORD size() const
  {
    return dDim;
  }
  double el(DWORD x, DWORD y) const
  {
    if ((x < dDim) && (y < dDim))
      return m[x * dDim + y];
    throw _T("Element does not exist.");
  }
  void el(DWORD x, DWORD y, double d)
  {
    if ((x < dDim) && (y < dDim))
      m[x * dDim + y] = d;
    else
      throw _T("Element does not exist.");
  }
  SquareM &operator=(const SquareM &mm)
  {
    dDim = mm.dDim;
    delete[] m;
    m = NULL;
    if (dDim)
    {
      size_t i = dDim * dDim;
      m = new double[i];
      i *= sizeof(double);
      if (mm.m)
        memcpy_s(m, i, mm.m, i);
      else
        memset(m, 0, i);
    }
    return *this;
  }
  SquareM &operator*=(double d)
  {
    for (DWORD x = 0; x < dDim; ++x)
      for (DWORD y = 0; y < dDim; ++y)
        el(x, y, el(x, y) * d);
    return *this;
  }
  SquareM operator+(const SquareM &mm) const
  {
    SquareM m2(dDim);
    if (dDim == mm.dDim)
      for (DWORD x = 0; x < dDim; ++x)
        for (DWORD y = 0; y < dDim; ++y)
          m2.el(x, y, el(x, y) + mm.el(x, y));
    return m2;
  }
  SquareM operator-(const SquareM &mm) const
  {
    SquareM m2(dDim);
    if (dDim == mm.dDim)
      for (DWORD x = 0; x < dDim; ++x)
        for (DWORD y = 0; y < dDim; ++y)
          m2.el(x, y, el(x, y) - mm.el(x, y));
    return m2;
  }
  SquareM operator*(double d) const
  {
    SquareM m2(dDim);
    for (DWORD x = 0; x < dDim; ++x)
      for (DWORD y = 0; y < dDim; ++y)
        m2.el(x, y, el(x, y) * d);
    return m2;
  }
  void print() const
  {
    _tprintf_s(_T("Matrix size: %u\n"), dDim);
    for (DWORD x = 0; x < dDim; ++x)
      for (DWORD y = 0; y < dDim; ++y)
        _tprintf_s(_T("[%u,%u]=%f\n"), x+1, y+1, el(x, y));
  }
  bool write(LPCTSTR fn) const
  {
    bool res = false;
    FILE *f;
    if (_tfopen_s(&f, fn, _T("wb")))
      _tprintf_s(_T("Cannot create file %s \n"), fn);
    else
    {
      fwrite(&dDim, sizeof(dDim), 1, f);
      fwrite(m, sizeof(double), dDim * dDim, f);
      fclose(f);
      _tprintf_s(_T("File %s was saved successfully.\n"), fn);
      res = true;
    }
    return res;
  }
  bool read(LPCTSTR fn)
  {
    bool res = false;
    FILE *f;
    if (_tfopen_s(&f, fn, _T("rb")))
      _tprintf_s(_T("Cannot open file %s \n"), fn);
    else
    {
      size_t r = fread(&dDim, sizeof(dDim), 1, f);
      if (r == 1)
      {
        delete[] m;
        size_t i = dDim * dDim;
        m = new double[i];
        r = fread(m, sizeof(double), i, f);
        if (r != i)
        {
          memset(m, 0, i * sizeof(double));
          r = 0;
        }
      }
      fclose(f);
      if (res = r)
        _tprintf_s(_T("File %s was loaded successfully.\n"), fn);
      else
        _tprintf_s(_T("Cannot load file %s \n"), fn);
    }
    return res;
  }
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
  if (argc > 1)
  {
    SquareM mx;
    if (mx.read(argv[1]))
    {
      _tprintf_s(_T("Matrix A+A*2:\n"));
      mx *= 3; // что эквивалентно mx = mx + mx * 2;
      mx.print();
    }
  }
  else
  {
    _tprintf_s(_T("Enter matrix size: "));
    DWORD sz = 0;
    _tscanf_s(_T("%u"), &sz);
    SquareM mx(sz);
    for (DWORD x = 0; x < sz; ++x)
      for (DWORD y = 0; y < sz; ++y)
      {
        float d = 0.0;
        _tprintf_s(_T("Enter matrix element[%u,%u](float): "), x+1, y+1);
        _tscanf_s(_T("%f"), &d);
        mx.el(x, y, d);
      }
    _tprintf_s(_T("\nSave to a file? (y/n) "));
    TCHAR c = _gettch();
    _tprintf_s(_T("\n"));
    if ((c == _T('y')) || (c == _T('Y')))
    {
      _tprintf_s(_T("File name: "));
      TCHAR fn[_MAX_PATH];
      _tscanf_s(_T("%s"), fn, _countof(fn));
      mx.write(fn);
    }
    _tprintf_s(_T("Matrix A+A*2:\n"));
    mx *= 3; // что эквивалентно mx = mx + mx * 2;
    mx.print();
  }
    return 0;
}
 

Всего записей: 2028 | Зарегистр. 02-09-2005 | Отправлено: 04:06 14-11-2008 | Исправлено: ItsJustMe, 05:52 14-11-2008
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru