Article View: pl.comp.os.linux.programowanie
Article #60126Re: Jak zrobić program obliczający dużą silnię?
From: Marcin 'Qrczak' Kowalczyk
Date: Thu, 27 Oct 2005 10:44
Date: Thu, 27 Oct 2005 10:44
44 lines
3530 bytes
3530 bytes
Maciej Sobczak <no.spam@no.spam.com> writes:
>> Dla mnie to jest naturalny sposób przerwania dowolnej
>> kombinacji zagnieżdżonych pętli, bo jest niezależny od sposobu
>> implementacji pętli
>
> Do bani.
> Problem w tym, że wyjątek rzucony wewnątrz pętli nie ma żadnego
> związku z tym, co przerywa.
Ależ może mieć. Wyobraź sobie, że obiekt wyjątku jest tworzony na
zewnątrz pętli dla potrzeb przerwania tych pętli. 'try' na zewnątrz
pętli czeka na ten konkretny obiekt, a nie na dowolny wyjątek jakiegoś
typu.
Nie teoretyzuję, tylko tak właśnie robię.
> A nawet gorzej, bo przeniesienie kodu z goto w inne miejsce programu
> spowoduje błąd kompilacji, jeśli nie przeniesz tego razem z właściwą
> etykietą docelową, natomiast pętla z rzuceniem wyjątku takiego
> "ograniczenia" nie ma:
Ponieważ funkcję przerywającą pętlę dostajesz lokalnie, kiedy do pętli
wchodzisz, to przetransportowanie jej na zewnątrz wymaga złej woli.
Jeśli jednak się uprzesz, zachowasz ją sobie na później i wykonasz
wtedy, kiedy pętla już się skończyła, to dostaniesz błąd w czasie
wykonania (inny wyjątek).
> Najlepsze rozwiązanie jakie do tej pory widziałem to etykiety pętli.
Nadaje się tylko do wbudowanych w składnię języka rodzajów pętli
i tylko kiedy pętla i miejsce przerwania znajdują się w tej samej
funkcji. Nie nadaje się, kiedy pętle są realizowane lokalnymi
funkcjami.
> Od wyjątków różni się dodatkowo tym, że nie można tego schować
> w funkcji wywołanej w pętli, ale akurat nie uważam tego za wadę.
A ja uważam.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID:
<87y84fz1bn.fsf@qrnik.zagroda>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<djfrn5$i55$1@nemesis.news.tpi.pl> <dji80k$2a5$2@atlantis.news.tpi.pl> <20051024135514.GA237@siebert> <djij31$st1$1@sunnews.cern.ch> <20051024162624.GA1132@siebert> <djleog$fok$1@nemesis.news.tpi.pl> <1t4bv9mozvw38.12szxw58iqmbp.dlg@40tude.net> <djn9lh$ktl$1@nemesis.news.tpi.pl> <e2pcznjzv2gh$.1drgaxj9rqzhj.dlg@40tude.net> <djnjtf$suk$2@nemesis.news.tpi.pl> <1i7bbr8l84m9o$.8ttxld9ccdq4.dlg@40tude.net> <djnq5h$8ae$1@atlantis.news.tpi.pl> <gmqro8ttahov.aorv2e8thz25.dlg@40tude.net> <87wtk0iiqw.fsf@qrnik.zagroda> <djq3rj$4fm$1@sunnews.cern.ch>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Re: Jak zrobić program
obliczający dużą silnię?
Date: Thu, 27 Oct 2005 12:44:28 +0200
Organization: Klub Nieszkodliwych Manjaków
Lines: 44
Message-ID: <87y84fz1bn.fsf@qrnik.zagroda>
References: <djfrn5$i55$1@nemesis.news.tpi.pl> <dji80k$2a5$2@atlantis.news.tpi.pl> <20051024135514.GA237@siebert> <djij31$st1$1@sunnews.cern.ch> <20051024162624.GA1132@siebert> <djleog$fok$1@nemesis.news.tpi.pl> <1t4bv9mozvw38.12szxw58iqmbp.dlg@40tude.net> <djn9lh$ktl$1@nemesis.news.tpi.pl> <e2pcznjzv2gh$.1drgaxj9rqzhj.dlg@40tude.net> <djnjtf$suk$2@nemesis.news.tpi.pl> <1i7bbr8l84m9o$.8ttxld9ccdq4.dlg@40tude.net> <djnq5h$8ae$1@atlantis.news.tpi.pl> <gmqro8ttahov.aorv2e8thz25.dlg@40tude.net> <87wtk0iiqw.fsf@qrnik.zagroda> <djq3rj$4fm$1@sunnews.cern.ch>
NNTP-Posting-Host: paf87.warszawa.sdi.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.tpi.pl 1130409911 3093 217.96.225.87 (27 Oct 2005 10:45:11 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Thu, 27 Oct 2005 10:45:11 +0000 (UTC)
X-Face: .B/ouEO}=VFkSJWE}s0@!:diHI.Z,<Ilt`:~@*]7rnn^K_y"XV8AXf^E)x*|3yVg:$FCq0Y )iGn@Z[SOA<+p}TkAv'Lzu$w{z2?F);0Xt>`m}AqK#Vjuscq(Vf1B}H[)v\9tBN}>AdP,QSRbhO]=v 3?;I+cN/Z0HKPm_Eg99/pFrU!WfpjgQ!z":>A~qt0^4):0-UuPB(6^>j!mN$)RIb)rRhXeK:+MLPW[ RVb7Kepvby-ww6_zci7Yy_@IrWW
User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)
Cancel-Lock: sha1:Z00VDODLQinA07mG2GMBpHN1fgU=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit