• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Silnia pascal wyjaśnienie kodu

Object Storage Arubacloud
+1 głos
1,055 wizyt
pytanie zadane 29 grudnia 2015 w Inne języki przez niewiem17 Początkujący (480 p.)

Może to banalne pytanie ale uczę się sam i mam pewien problem
odnośnie kodu silni w pascalu

wiem że silnia to np 3silnia = 1*2*3=6

kod mam taki

function SilniaIteracyjna(n:integer): longint;
var
  i: integer;
  wynik: longint;
begin
    wynik :=1;
    for i:=2 to n do wynik := wynik*i;
    SilniaIteracyjna :=wynik;

 

no i tak jest pętla tak

jak podaje n=3 to

wynik = 1*2

wynik=2*2

wynik=4*2 = 8 nie 6

Rozumiałem to wróciłem do tego tematu i się zawiesiłem pewnie mój błąd jest śmieszny może mnie ktoś naprowadzić ?

4 odpowiedzi

+1 głos
odpowiedź 29 grudnia 2015 przez Szahid Pasjonat (20,930 p.)
wybrane 29 grudnia 2015 przez niewiem17
 
Najlepsza
Widze błąd w Twoim rozumowaniu a mianowicie tutaj

jak podaje n=3 to

wynik = 1*2

wynik=2*2

wynik=4*2 = 8 nie 6

przecież zmienna i zwiększa się o 1 co iteracje, więc powinno byc

jak podaje n=3 to

wynik = 1*2 ( zmienna i ma wartość 2 )

wynik=2*3 (zmienna i ma wartość 3)
komentarz 29 grudnia 2015 przez Szahid Pasjonat (20,930 p.)
Kod wygląda na poprawny. Może w pozostałej części programy jest jakiś błąd.
komentarz 29 grudnia 2015 przez niewiem17 Początkujący (480 p.)
Nie nie Kod jest dobry tylko nie rozumiałem tego teraz wiem w czym tkwił problem w mojej głowie dzięki ! :)
komentarz 29 grudnia 2015 przez Szahid Pasjonat (20,930 p.)
Każdemu się zdarza. Powodzenia w dalszej  nauce.
+1 głos
odpowiedź 29 grudnia 2015 przez sonquer Gaduła (4,280 p.)

Masz moją propozycję, rekurencyjną.

program dzialanieSilnia;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function Silnia( m : UInt64 ) : UInt64;
begin
  if m = 0 then Result := 1
  else Result := m * Silnia( m - 1 );
end;

begin
  { Obsługa wyjątków }
  try
    Writeln( Silnia( 5 ) );
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 

0 głosów
odpowiedź 29 grudnia 2015 przez arek01996 Stary wyjadacz (12,100 p.)

Według mojej symulacji powinno to działać.

(dla n = 3 wykonają się dwa obroty) zatem:

Wynik = 1

// Po pierwszym obrocie:

Wynik = 2*1 =2

// Po drugim obrocie i wzrasta o 1:

Wynik = 3*2 = 6

// Wynik to 6 koniec programu.

 

Spróbuj coś takiego może: Zamiast Twojej pętli.

for i:=2 to n do 
  begin
     wynik := wynik*i;
   end;

 

0 głosów
odpowiedź 29 grudnia 2015 przez mrcnsct Nałogowiec (36,390 p.)

U mnie taki kod działa dobrze: 

program dzialania;
uses
crt;
var
i,n,wynik:integer;
begin
clrscr;
n:=3;
wynik:=1;
for i:=1 to n do wynik:=wynik*i;
writeln('wynik to ',wynik);
readln;
end.

Daje to wynik 6. Jaki jest Twój problem? Wylicza Ci 8 zamiast 6? U mnie pętla jest prawie taka jak u Ciebie (zacząłem od 1, żeby dało się policzyć silnię 1 i 0) i działa. Pierwszy obrót 1*1, drugi 1*2, trzeci 2*3, czyli 6.

Podobne pytania

0 głosów
1 odpowiedź 391 wizyt
pytanie zadane 12 października 2016 w Inne języki przez Josi Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 542 wizyt
pytanie zadane 27 grudnia 2015 w Inne języki przez niewiem17 Początkujący (480 p.)
0 głosów
0 odpowiedzi 1,029 wizyt
pytanie zadane 2 grudnia 2017 w Inne języki przez DragonCoder Nałogowiec (36,500 p.)

92,566 zapytań

141,420 odpowiedzi

319,609 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...