Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Off topic (https://forum.cdrinfo.pl/f5/)
-   -   Algorytm, może ktoś pomoże :) (https://forum.cdrinfo.pl/f5/algorytm-moze-ktos-pomoze-63612/)

pawelblu 19.03.2006 19:47

a moze to cos z semantyka:
Kod:

(( r < a[j][i+j]) = true )
albo r < a[j][i+j]

caly czas tak samo ??

Ziele 19.03.2006 18:59

bez tego false dostaje to:
(M[1])*((M[2])*((M[3])*((M[4])*((M[5])*((M[6])*((M[7])*(M[8])))))))

czyli brak wyznaczonego optymalnego nawiasowania

pawelblu 19.03.2006 18:47

w C warunek jest spelniony gdy wartosc wylicza sie do nie-zera, czyli jak jest cokolwiek innego od 0 to spelnia, a jak 0 to else.

if (r<a[j][i+j])

to porownanie zwraca chyba 1 (napewno cos rownego od 0) jak jest spelnione 0 jak niespelnione.

w Pascalu jest podobnie, tylko tam 0 nazywa sie false a cokolwiek innego - true.

Czyli nie powinno byc tego =false.

Ziele 19.03.2006 18:31

bo chyba w c++ warunek si***281; spe***322;nia gdy jest false a w delphi gdy jest true wi***281;c doda***322;em gdy false. Nie zam si***281; za dobrze na c++ ale bez tego kod w delphi si***281; wywala.

To mo***380;e inaczej... jak optymalne nawiasowanie zapisa***263; w delphi wg tego: http://www.im.pwr.wroc.pl/~kik/AiSD/aisd5-4.pdf
Algorytm podobny ale mo***380;e ten b***281;dzie dzia***322;a***263;.

pawelblu 19.03.2006 18:26

if (r < a[j][i+j])=false then

Dlaczego false ?

Ziele 19.03.2006 02:29

To teraz ja mam mały problem z algorytmami ;) Mam zrobić optymalne mnożenie macierzy. Znalazłem takie kod w c++: http://www-users.mat.uni.torun.pl/~l...orytmy/omm.htm i próbuję go przepisać pod delphi ale coś mi to nie wychodzi. Wydaje mi się że algorytm jest ten sam a mimo to nie działa.

Kod:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Label1: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure drukuj(pocz:integer;kon:integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array[0..100,0..100] of integer;

implementation

{$R *.dfm}
procedure TForm1.drukuj(pocz:integer;kon:integer);
begin
  if pocz=kon then
    begin
      edit1.Text:=edit1.Text+'M['+inttostr(pocz+1)+']';
    end
  else
    begin
      edit1.Text:=edit1.Text+'(';
      drukuj(pocz,pocz+a[kon][pocz]);
      edit1.Text:=edit1.Text+')*(';
      drukuj(pocz+a[kon][pocz]+1,kon);
      edit1.Text:=edit1.Text+')';
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,j,l,n,r:integer;
w:array[0..100] of integer;
k:array[0..100] of integer;
begin
edit1.Text:='';
n:=8;
w[0]:=2;
k[0]:=4;
w[1]:=4;
k[1]:=8;
w[2]:=8;
k[2]:=2;
w[3]:=2;
k[3]:=3;
w[4]:=3;
k[4]:=5;
w[5]:=5;
k[5]:=4;
w[6]:=4;
k[6]:=6;
w[7]:=6;
k[7]:=8;

 for i:=0 to n-1 do
  a[i][i]:=0;


 for i:=1 to n-1 do
  begin

    for j:=0 to n-i-1 do
      begin

        a[j][i+j]:=-1;
        for l:=0 to i-1 do
        begin
            r:=a[j][j+l]+a[j+l+1][i+j]+w[j]*k[j+l]*k[i+j];

            if (r < a[j][i+j])=false then
              begin
                a[j][i+j]:=r;
                a[i+j][j]:=l;

              end;

        end;

      end;

  end;
  label3.Caption:='Ilość operacji: '+inttostr(a[0][n-1]);
  drukuj(0,n-1);
end;

end.

k to ilość kolumn a w to ilość wierszy. Do testów użyłem ciagu ośmiu macierzy. Oba kody które wydają mi się takie same w działaniu wyliczją inne nawiasowanie i ilość operacji. Co tu może być nie tak?

Kod w c++ daje
operacji: 306
((((((M[1])*((M[2])*(M[3])))*(M[4]))*(M[5]))*(M[6]))*(M[7]))*(M[8])

a w delphi:
operacji: 1232
(M[1])*((M[2])*(((((M[3])*(M[4]))*(M[5]))*((M[6])*(M[7])))*(M[8])))

pawelblu 18.03.2006 21:04

zalozmy ze na wejsciu mamy zakodowany znak ASCII w HEX (czyli 2 znaki opisujace 1 litere).

Jak zrobimy scanf("%x", &a);

gdzie a jest unsigned int (int w praktyce tez moze byc).

to z 9B otrzymamy 155. Teraz jak odejmiemy od 255 (to jest 2^8 - 1, najwieksza wartosc bajtu) otrzymane 155 - bedzie 100. Robimy (char) (100) i mamy d.

To jest koncepcyjny zapis. Kuchni nie zrobie :)
(to dziala tylko dla znakow lacinskich, nie polskich).

Poza tym te dane sa bardzo ograniczone, wiec od bidy mozesz zrobic na chama alg, ze wczytujesz wszystko do tablicy i skaczesz wskaznikiem o 2 i za kazdym razem porownujesz za pomoca case/switch ze wszystkimi kodami i zapisujesz w tablicy wynikowej wlasciwy odkodowany znak.
To jest szybke, latwe, ale bardzo 'nieinformatyczne', choc zyciowe :)

gallus 18.03.2006 00:17

Algorytm, może ktoś pomoże :)
 
Witam ;)

Zainteresował mnie ten problem, udało mi się go rozwiązać, ale nie w sposób zadawalający mnie, więc dzis z nudy postanowiłem pobawić się i wpadłem na pomysł, że można byłoby stworzyć program odczytujący hasło z pliku avi, lub chociaż program, który po podaniu ciągu znaków (HEX) przeliczyłby je na haslo do pliku tzn. narazie chodzi o to, aby znaleść algorytm i przeliczyć pozostałe znaki na HEX a następnie odwrócić algorytm i napisać prosty programik do zamiany HEX-owych wartości na hasło :)

Niestety kombinuje już ładne kilka godzin, ale nie mogę wykombinować w jaki sposób zostało zaszyfrowane hasło :|
Może na forum jest ktoś znający się na algorytmach i potrafiłby to rozszyfrować, podam to co udało mi się zdobyć:
http://img208.imageshack.us/img208/1060/szyfr9qw.jpg


Wszystkie czasy w strefie CET. Aktualna godzina: 14:27.

Powered by vBulletin® Version 3.9.0 LTS
Copyright ©2000 - 2026, vBulletin Solutions Inc.