Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Skrócony regulamin

Bardzo złożone losowanie.



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Pascal, Delphi, ...
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Maro88
Gość





PostWysłany: Pon Sty 16, 2012 1:44 am      Temat postu: Bardzo złożone losowanie. Odpowiedz z cytatem Pisownia

Witam.
Mam problem, bo potrzebuję napisać funkcję, która zwraca kwadratową macierz. Macierz ta musi spełniać następujące punkty:
a) nie być osobliwa (to nie problem)
b) być symetryczna (nie problem)
c) zawierać zarówno liczby dodatnie, ujemne, rzeczywiste i całkowite (w sumie też nie problem)
d) spełniać taką zależność, że liczby na przekątnych będą większe od poprzedników w danym rzędzie
e) w jednym losowaniu posiadać elementy tego samego rzędu, a w innym rzędów odległych.
Na razie doszedłem do czegoś takiego i o ile algorytm Gaussa bez wyboru elementu podstawowego do rozwiązywania układów równań radzi sobie dobrze, o tyle już z pełnym wyborem jest problem. I tu proszę o pomoc. Oto losowanie:
Kod:
function losuj(n : Integer) : matrix;
var
i, j, k: Integer;
macierz : matrix;
temp, suma: Extended;
begin
  SetLength(macierz, n+1, n+2);
  Randomize();

  for i:=1 to n do
  begin
    for j:=i to n+1 do
    begin
    if j = n+1 then
      while macierz[i][j] <= 0 do
        macierz[i][j] := random(1000)/10
    else
      macierz[i][j] := -1;
    end;
  end;

  for i:=1 to n do
  begin
    suma := 0;
    for j:=1 to i do
    begin
      while macierz[i][j] <= 0 do
      begin
        macierz[i][j] := random(1000)/10;
        temp := random(100);
        macierz[i][j] := macierz[i][j] * temp;
        if macierz[i][i] <= 0 then
        begin
          while macierz[i][i] = 0 do
          begin
            macierz[i][i] := random(1000)/10;
          end;
        end;
      end;
      if i > 1 then
      begin
        for k:=1 to i-1 do
        begin
          suma := suma + power(macierz[i][k],2);
        end;
        while (sqr(macierz[i][i]-suma))<=0 do
        begin
          macierz[i][i] := random(1000)/10;
        end;
      end;
    end;
  end;

  for i:=1 to n-1 do
  begin
    for j:=i+1 to n do
    begin
      macierz[i][j] := macierz[j][i];
    end;
  end;

  Result := macierz;
end;
Powrót do góry
kortyg



Dołączył: 15 Cze 2009
Posty: 49
Skąd: Wrocław

PostWysłany: Czw Sty 26, 2012 4:38 pm      Temat postu: Odpowiedz z cytatem Pisownia

Jakoś tego nie rozumiem. Definiujesz macierz:
SetLength(macierz, n+1, n+2);
a musi być kwadratowa.
Pogaj jak zadeklarowałeś matrix.

_________________
Ed
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Pascal, Delphi, ... Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.06527 sekund, zapytan = 7
contact

| Darmowe programy i porady Jelcyna | VB4all | Tansze zakupy w Helionie |