Begin - ile maksymalnie obliczeń można pod nim wykonać?

0

Witam, ucząc się pascala, zauważyłem, że ilość obliczeń i przypisywania zmiennych pod beginem ma znaczenie na wynik programu.
Nigdzie nie mogę znaleźć informacji na temat tej prostej instrukcji, więc postanowiłem zapytać was. Jakie są ograniczenia co do obliczeń pod beginem? Ile linijek, obliczeń, przypisywać może być pod nim ? Ile pętli itp. ?

1

Ogranicza Cię miejsce na dysku.

  • To dość logiczne, że jeśli wykonujesz więcej operacji, to czas wykonywania aplikacji się wydłuża.
0

ale mi nie chodzi o czas wykonywania programu, tylko o wynik obliczeń programu, czasami jak mam kilka pętli i kilka warunków, wystarczy że zmieniam miejsce begina spod ifa nad ifa lub odwrotnie i wynik jest całkiem inny

3

Żarty sobie robisz to przecież normalne że zmieniając kod programu masz wpływ na wynik. Weź np. w matematyce 2 + 2 * 2 = 6 ale wystarczy trochę zmienić np. dodać nawias i mamy (2 + 2) * 2 = 8. Już nie mówię nawet o zmianie znaku, bo chodzi mi że taka zmiana miejsca begin może tworzyć jak gdyby wspomniany nawias.
Lepiej poczytaj co robi if i begin.

0

nikt sobie nie robi żartów, tekstem "poczytaj sobie" nic nie robisz prócz nabijania postów, jak nie chcesz pomóc to po prostu nie pisz, przeczytaj w jakim dziale jesteś i to co napisałem w 1 poście

4

No ale to pytanie jest tak przerażająco śmieszne, że turlałem się przez kilka minut ze śmiechu... Nie bardzo rozumiem, jak udało ci się napisać program z kilkoma pętlami i instrukcjami warunkowymi bez zrozumienia słowa POCZĄTEK i KONIEC i tego, że jak przesuniesz POCZĄTEK w inne miejsce, to będzie to inaczej działało?

Rozważmy taki przykład:

płeć = wczytaj_płeć();

jeżeli płeć="kobieta" to
początek
    napisz("O jak ja kocham kobiety");
    napisz("może za mnie wyjdziesz?")
koniec

napisz("podano płeć: ", płeć)

Napisałem go w pseudokodzie, bo to żadna różnica czy Pascal i BEGIN czy C/C++ i { czy jeszcze może inny język.
No i teraz dodam komentarze:

płeć = wczytaj_płeć(); // to się wykonuje najpierw:

jeżeli płeć="kobieta" to //sprawsza czy to kobieta
początek  // jeżeli to kobieta, to zaczyna ten blok instrukcji 
    napisz("O jak ja kocham kobiety"); // to się dzieje tylko jeżeli płeć to kobieta
    napisz("może za mnie wyjdziesz?") // i to też
koniec // koniec ifa

napisz("podano płeć: ", płeć) // a to znów zawsze, niezależnie od płci

i teraz Ty sobie optymistycznie przesuwasz POCZĄTEK przed ifa i dostajesz:

płeć = wczytaj_płeć(); // to się wykonuje najpierw:

początek  // tu zaczyna się od czapy blok instrukcji, ale co to przeszkadza, zaczyna się i już
jeżeli płeć="kobieta" to //sprawsza czy to kobieta
    napisz("O jak ja kocham kobiety"); // to się dzieje tylko jeżeli płeć to kobieta
napisz("może za mnie wyjdziesz?") // a to już wykonuje się zawsze, niezależnie od płci, bo nie zostało zblokowane w całość, więc do IFa należy tylko 1 instrukcja. 
koniec // tu kończy się zaczęty od czapy blok instrukcji

napisz("podano płeć: ", płeć) // a to znów zawsze, niezależnie od płci

I teraz propozycja małżeństwa trafia także do facetów.

W skrócie: Generalnie programowanie nie polega na rzucaniu losowo instrukcjami w dowolne miejsca, a pytanie z pierwszego listu jest tak abstrakcyjne, że nie bardzo wiadomo jak je traktować.

5

Na trolling mi to nie wygląda, więc może dorzucę też coś od siebie;

@gregory888john - po pierwsze, wszystkie posty w tym wątku mają wartość merytoryczną, więc o żadnym "nabijaniu postów" nie ma mowy; Po drugie, zadajesz z pozoru dość podstawowe pytanie, jednak jest ono na tyle zabawne, że wzbudza różne emocje;

Przede wszystkim zwróć uwagę, że begin i end to nie są standardowe instrukcje (coś wykonujące); Służą one jedynie do grupowania kodu w bloki, które to w danym kontekście mają jakieś zastosowanie; Typowym zastosowaniem jest zgrupowanie bloku kodu procedury/funkcji, czy zgrupowanie kodu pętli For; Tych bloków można używać bądź ile - np. ten kod:

procedure Foo();
begin
  Write('Foo');
end;

będzie wyglądał (na niższym poziomie) i działał dokładnie tak samo, jak ten:

procedure Foo();
begin
  begin
    begin
      Write('Foo');
    end
  end
end;

Natomiast taki kod wyświetlający pary napisów w pętli For:

procedure Loop();
var
  intToken: Integer;
begin
  for intToken := 0 to 2 do
  begin
    WriteLn('Foo');
    WriteLn('-----');
  end;
end;

nie będzie działał tak samo, jak poniższy:

procedure Loop();
var
  intToken: Integer;
begin
  for intToken := 0 to 2 do
  begin
    WriteLn('Foo');
  end;
  WriteLn('-----');  
end;

a przesunąłem jedynie End o jedną linijkę do góry; Dlaczego? Bo pierwszy kod pokazuje grupowanie dwóch instrukcji w bloku pętli, a drugi tylko jedną; W rezultacie pierwszy kod wyświetli sześć linijek tekstu:

Foo
-----
Foo
-----
Foo
-----

a drugi kod tylko cztery:

Foo
Foo
Foo
-----

Używanie słówek Begin i End do grupowania instrukcji ma kluczowe znaczenie, aby odpowiednie instrukcje wykonać "razem", a inne osobno; Dlatego też zmiana linijki otwierającej lub zamykającej dany blok może albo negatywnie wpłynąć na końcowy wynik, albo nawet uniemożliwić skompilowanie kodu; Grupowania instrukcji powinno się używać jedynie w przypadku, gdy tych instrukcji jest więcej niż jedna - w przeciwnym wypadku jest to zwykła nadmiarowość, wydłużająca niepotrzebnie kod;

Myślę, że w końcu załapałeś, jak ważna jest sprawa grupowania.

0

i wszystko jasne, dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1