Start Strona klubowa Kalendarz imprez Sklep Porsche Polska
Nazwa użytkownika Hasło Zapamiętaj mnie Zarejestruj

Strefa czasowa: UTC + 1 [ DST ]





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
Offline
PostNapisane: 14.03.2010, 17:57 

Dołączył: 17.03.2007
Posty: 2057
Witam,
Ja wiem że są fora programistyczne, ale wiem też, że tutaj mamy sporą rzeszę doświadczonych programistów.
Tak więc pytanie do Was.
Czy pisaliście kiedyś program różniczkujący analitycznie, to jest nie numerycznie(wg z góry określonej "gramatyki", czyli przekształceń matematycznych).
Na wejście dostajemy wyrażenie zapisane w formie prefiksowej, budujemy z tego drzewo, w liściach są wartości i zmienne, a w węzłach wewnętrznych operatory i funkcje:sin,cos,+,-,/ itd.
Trzeba wypluć strukturę danych która będzie zawierała wyrażenie po przekształceniu.
Co prawda mam to napisać w Pascalu, ale język programistyczny jest uniwersalny, bo tak naprawdę chcę poznać algorytm. Jeśliby ktoś z Was miał to gdzieś w jakiś swoich archiwach studenckich(problem wydaje się być powszechny) to mógłby mi go podesłać?
rk291602@students.mimuw.edu.pl

Wrzucam tu bo co prawda temat offtopicowy, ale chyba wystarczająco "górnolotny", oczywiście jeśli admin uzna, że nie wypada, to proszę skasować. W końcu to jest dział offtopicowy.


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 14.03.2010, 20:10 

Dołączył: 17.03.2007
Posty: 4091
zapytaj na www.codeguru.pl
sądze, że szybko znajdziesz tam kogoś kto Ci pomoże. kiedyś coś takiego robiłem, ale nie mam już żadnych notatek.
zachęcam do wymyślenia samemu, bo z tego jest większa frajda. samo wklepanie kodu jest nudne....


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 14.03.2010, 20:32 

Dołączył: 17.03.2007
Posty: 2057
Bardzo dziękuję za link.
Piszę wlaśnie ten program, ale raczej się z nim nie wyrobię do terminu, dlatego szukam pomocy.
Jak nie indywidualny projekt programistyczny, to obiektowe, matematyka dyskretna, analiza itd. itd. koło się zamyka brak czasu na wszystko, taki żywot, ale się cieszę że jestem tam gdzie jestem.


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 14.03.2010, 22:14 

Dołączył: 17.03.2007
Posty: 4091
pozdrawiam - fizyka techniczna i matematyka stosowana na PW...trochę lat temu ;-)....


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 15.03.2010, 2:33 

Dołączył: 17.03.2007
Posty: 2057
program pochodne;
type drzewo = ^wezel;
wezel = record
w,o : integer; // wartosc lub ekiwwalent operatora/ wlacznik trybu 'operatorowego'
lsyn, psyn : drzewo;
end;

type lista = ^elementlisty;
elementlisty=record
w: integer;
nast: lista;
end;

var
s : String;
blad : Integer;
pre, koncowe : Drzewo;

procedure insert(var d:Drzewo); //wczyt do drzewa
begin
new(d);
readln(s);
d^.o := 1;
if s = 'x' then d^.w := 0 else
if s = '+' then d^.w := 1 else
if s = '-' then d^.w := 2 else
if s = '*' then d^.w := 3 else
if s = '/' then d^.w := 4 else
if s = 'exp' then d^.w := 5 else
if s = 'ln' then d^.w := 6 else
if s = 'sin' then d^.w := 7 else
if s = 'cos' then d^.w := 8
else begin
d^.o := 0;
val(s, d^.w, blad);
end;


if (d^.o = 1) and (d^.w <> 0) then begin
insert(d^.lsyn);
if (d^.w>=1) and (d^.w<=4) then insert(d^.psyn) else d^.psyn := nil;
end else begin
d^.lsyn := nil;
d^.psyn := nil;
end;
end;

procedure licz(var co, gdzie : Drzewo);
var
pom : Drzewo;
begin
new(gdzie);
gdzie^.psyn := nil;
gdzie^.lsyn := nil;
if co^.o = 1 then begin
gdzie^.o := 1;
case co^.w of
0 : begin // x
gdzie^.o := 0;
gdzie^.w := 1;
end; //+
1 : begin
gdzie^.w := 1;
licz(co^.lsyn, gdzie^.lsyn);
licz(co^.psyn, gdzie^.psyn);
end;
2 : begin //-
gdzie^.w := 2;
licz(co^.lsyn, gdzie^.lsyn);
licz(co^.psyn, gdzie^.psyn);
end;
3 : begin //*
gdzie^.w := 1;
new(gdzie^.lsyn);
gdzie^.lsyn^.o := 1;
gdzie^.lsyn^.w := 3;
gdzie^.lsyn^.psyn := co^.psyn;
new(gdzie^.psyn);
gdzie^.psyn^.o := 1;
gdzie^.psyn^.w := 3;
gdzie^.psyn^.lsyn := co^.lsyn;
licz(co^.lsyn, gdzie^.lsyn^.lsyn);
licz(co^.psyn, gdzie^.psyn^.psyn);
end;
4 : begin // /
gdzie^.w := 4;
new(gdzie^.psyn);
gdzie^.psyn^.o := 1;
gdzie^.psyn^.w := 3;
gdzie^.psyn^.lsyn := co^.psyn;
gdzie^.psyn^.psyn := co^.psyn;

new(gdzie^.lsyn);
pom := gdzie^.lsyn;
pom^.o := 1;
pom^.w := 2;
new(pom^.lsyn);
pom^.lsyn^.o := 1;
pom^.lsyn^.w := 3;
pom^.lsyn^.psyn := co^.psyn;
new(pom^.psyn);
pom^.psyn^.o := 1;
pom^.psyn^.w := 3;
pom^.psyn^.lsyn := co^.lsyn;
licz(co^.lsyn, pom^.lsyn^.lsyn);
licz(co^.psyn, pom^.psyn^.psyn);
end;
5 : begin // exp
gdzie^.w := 3;
gdzie^.lsyn := co;
licz(co^.lsyn, gdzie^.psyn);
end;
6 : begin // ln
gdzie^.w := 3;
new(gdzie^.lsyn);
pom := gdzie^.lsyn;
pom^.o := 1;
pom^.w := 4;
new(pom^.lsyn);
pom^.lsyn^.o := 1;
pom^.lsyn^.w := 1;
pom^.lsyn^.lsyn := nil;
pom^.lsyn^.psyn := nil;
pom^.psyn := co^.lsyn;
licz(co^.lsyn, gdzie^.psyn);
end;
7 : begin // sin
gdzie^.w := 3;
new(gdzie^.lsyn);
gdzie^.lsyn^.o := 1;
gdzie^.lsyn^.w := 8;
gdzie^.lsyn^.lsyn := co^.lsyn;
gdzie^.lsyn^.psyn := nil;
licz(co^.lsyn, gdzie^.psyn);
end;
8 : begin // cos
gdzie^.w := 3;
new(gdzie^.lsyn);
gdzie^.lsyn^.o := 1;
gdzie^.lsyn^.w := 2;
new(gdzie^.lsyn^.lsyn);
gdzie^.lsyn^.lsyn^.o := 0;
gdzie^.lsyn^.lsyn^.w := 0;
gdzie^.lsyn^.lsyn^.lsyn := nil;
gdzie^.lsyn^.lsyn^.psyn := nil;
new(gdzie^.lsyn^.psyn);
gdzie^.lsyn^.psyn^.o := 1;
gdzie^.lsyn^.psyn^.w := 7;
gdzie^.lsyn^.psyn^.lsyn := co^.lsyn;
gdzie^.lsyn^.psyn^.psyn := nil;
licz(co^.lsyn, gdzie^.psyn);
end;
end;
end else begin
gdzie^.o := 0;
gdzie^.w := 0;
end;
end;


procedure wypiszd(d:drzewo);
var
wypisz : string;
begin
if d<>nil then begin
if d^.o = 1 then begin
case d^.w of
0 : wypisz := 'x';
1 : wypisz := '+';
2 : wypisz := '-';
3 : wypisz := '*';
4 : wypisz := '/';
5 : wypisz := 'exp';
6 : wypisz := 'ln';
7 : wypisz := 'sin';
8 : wypisz := 'cos';
end;
writeln(wypisz);
end else writeln(d^.w);
readln();
wypiszd(d^.lsyn);
wypiszd(d^.psyn);
end;
end;

begin
insert(pre);
licz(pre, koncowe);
wypiszd(koncowe);
end.


Jeszcze przerobić to na unit(czego jeszcze nie robiłem, jak na razie) i program.

Nie, tylko nie fizyka :confused2:, uciekam(już w liceum uczyłem się jej tuż przed klasówkami przy kawie do 3 nad ranem i na parę dni stawałem się mistrzem fal, 'freestajlowych' teorii/przekształceń i bóg wie czego... na 3 starczało:P) ! To nie dla mnie. Gratuluje bo zapewne mega ciężki kierunek. :thumbup:

Done. Podział na moduły na szczęście jest łopatologiczny. O 9 basen :roll: .


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 15.03.2010, 12:26 

Dołączył: 8.03.2007
Posty: 3164
Jak to dobrze ze w informatyce sa ciekawsze rzeczy niz programowanie :P


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 15.03.2010, 13:17 

Dołączył: 17.03.2007
Posty: 2057
No cóż, niestety na mojej uczelni są: algorytmy,algorytmy,algorytmy,matma,matma,matma,matma(mnóstwo bzdur o których nikt nie słyszał): nonsens, ale ciężki...
Pierwszy semestr to z infy jest wstęp do programowania, który służy do wywalania studentów przez specyficznego profesora. Są gramatyki, listy, kolejki, tablice, drzewa itd. brzmi niegroźnie, zresztą każdy z nas to umie, ale zadanka zazwyczaj są na genialny pomysł-żeby napisać je linowo, bo mające gorszą złożoność są oceniane na max 60%-co jest tak naprawdę fikcją. Następnie trzeba wypisać złożoności-prosta sprawa, a potem coś czego nikt, nigdzie nie robi: dowód poprawności programu, niezmienniki, warunki stopu, jakaś indukcja tu czy tam. ble... i jeszcze czasu dadzą Ci czasu tyle żebyś jedno zadanie zrobił.


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 16.03.2010, 15:14 

Dołączył: 17.03.2007
Posty: 2057
HELL YES! Zaliczylem semestr, dzis swietuje normalnie, tyle osob odlecialo.


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 16.03.2010, 18:08 

Dołączył: 20.03.2007
Posty: 285
Czyżbyś cieszył się cudzym nieszczęściem ? ( żartuje tylko :) GRATULACJE )

Nie ma to jak poczuć się tak


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 17.03.2010, 1:19 

Dołączył: 17.03.2007
Posty: 2057
Niestety, kilku moich kumpli(tych normalnych, nerdy jak to nerdy zostają)koleżanek odpadło, uważam to za niesprawiedliwe, gdyż są naprawdę zdolni(innych nie biorą), niektórzy wrócą za rok, jak robi to część(rekordziści 4-krotnie), a reszta pewnie spróbuje tam gdzie studenta się traktuje po ludzku np. na PJWSTK lub gdzie indziej, a może jutro jeszcze uda im się przebłagać profesorów, jak na razie poprawkowy na kilkadziesiąt osób zdało jakieś 6. Mam nadzieję tylko że jakoś dam radę pozaliczać wszystko w drugim semestrze, wiem że będzie ciężko.

Świetna piosenka, w samą porę!


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 17.03.2010, 17:47 

Dołączył: 20.03.2007
Posty: 285
Tak jak produkty z biedronki polecam się :)
A na studiach już tak jest, jedni zdają, inni nie.


Góra
 Zobacz profil  
Cytuj  
Offline
 Tytuł:
PostNapisane: 17.03.2010, 18:54 

Dołączył: 29.09.2008
Posty: 253
Też zacząłem od mimuw , ale wieczorowy tryb po roku zaczął być na tyle uciążliwy, że zrezygnowałem.
a obecnie WIT pozdrawia ! :P


Góra
 Zobacz profil  
Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1 [ DST ]




Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Skocz do:  
Ostatnie posty forum PCP








Przyklejone




English information
Ostatnie posty publicznego forum