Witam na mojej stronie na Wydziale Elektrycznym
Menu
Magister

Informatyka w Elektroenergetyce - Laboratorium

Materiały


Literatura:

  1. Jerzy Grębosz - "Symfonia C++ standard"
  2. Jerzy Grębosz - "Symfonia C++", tom 1/2/3 - wcześniejsza wersja [1]
  3. Jerzy Grębosz - "Pasja C++", tom 1/2
  4. Nicolai M. Josuttis - "C++ Biblioteka standardowa. Podręcznik programisty."
  5. Kursy języka C++ w internecie, np:
    http://it.hk.pl

Środowisko zintegrowane z kompilatorem:

Microsoft Visual C++ 2005 Express Edition
dev-C++


Funkcja do odwracania macierzy

Poniższa funkcja (ściślej szablon funkcji) służy do odwracania macierzy kwadratowych. Można jej użyć do odwracania macierzy liczb rzeczywistych oraz liczb zespolonych. Tablica może być statyczna lub dynamiczna. Jako drugi argument funkcja powinna dostać wymiar tablicy. Uwaga: jeżeli przydzielono pamięć na tablicę o wymiarze np. 10x10, a wypełniono ją tablicą mniejszą, np. 5x5, to jako wymiar należy przesłać wartość 5. Odwrócona tablica będzie znajdować się w miejscu "starej" tablicy.
template<class _E>
void InvMtrx(_E Tab, int W /*Wymiar*/)
{
  int i,j,k;
  double r=0.;
  for(i=0;i<W;i++)
  {
    Tab[i][i] = 1./Tab[i][i];
    for(j=0;j<W;j++) if(j!=i)
    {
      Tab[j][i] = Tab[j][i] * Tab[i][i];
      for (k=0;k<W;k++) if(k!=i)
      {
        Tab[j][k] -= Tab[j][i] * Tab[i][k];
        if(j==(W-1))
          Tab[i][k] = -( Tab[i][k] * Tab[i][i] );
      }
    }
  }
  W--;
  for(j=0;j<W;j++)
    Tab[W][j] = -(Tab[W][j] * Tab[W][W]);
}
Przykład użycia na liczbach rzeczywistych
double t[2][2];  //definicja tablicy

t[0][0]=1.;      //wypełnienie
t[0][1]=2.;
t[1][0]=-1.;
t[1][1]=1.;

InvMtrx(t,2);    //odwrócenie
Przykład użycia na liczbach zepsolonych

// zakładam, że te trzy linijki 
// są już wpisane gdzieœ wyżej
// #include <complex>             
// using namespace std;           
// typedef complex LZesp;

LZesp Tab[2][2];  //definicja

Tab[0][0]=LZesp(1.,1.);      //wypełnienie
Tab[0][1]=LZesp(0.,2.);
Tab[1][0]=LZesp(-1.-2.);
Tab[1][1]=LZesp(1.,2.);

InvMtrx(Tab,2);    //odwrócenie

Problem z funkcją getline w MS Visual C++ 6.0

Na wstępie: chodzi o funkcję globalną, a nie klasy istream.
Funkcja getline w standardowej bibliotece C++ w Visualu 6.0 jest "robaczywa", co stwierdził nawet sam Microsoft:
http://support.microsoft.com/kb/q240015/
Pod tym samym linkiem jest opis, co należy zrobić, aby funkcja działała prawidłow. W skrócie: należy odszukać plik nagłówkowy <string>, tam jest definicja funkcji getline, którą trzeba poprawić jak następuje:
else if (_Tr::eq((_E)_C, _D))
    {_Chg = true;
    //  _I.rdbuf()->snextc(); //zakomentować
    _I.rdbuf()->sbumpc(); //dopisać
    break; }
Problem ten nie dotyczy następnych wersji Visuala, w tym Visual C++ 2005 Express Edition oraz środowiska Dev-Cpp.


 


Napisz do mnie



Nowości:

- UWAGA!!!

- Instalacje elektryczne

- Operacja Sesja-Lato'06

- Nowy semestr

- Boże Narodzenie

- 3..2..1..Start

- Koniec kampani wrześniowej

- Wakacje

- Wielkanoc

- Dżingel bels, dźingel bels

- Początek semestru zimowego

więcej...


Jesteś

gościem na mojej stronie

Masz jakieś uwagi? Napisz: tomasz.zdun@ien.pw.edu.pl
Warszawa, luty 2004