Ĺadny brzuch
Witam potrzebuje tego zadania na jutro na studia proszę o pomoc z Waszej strony
jestem w tym kiepski, i nie mam czasu, bo mam w sobotę i w niedziele egzaminy i muszę do nich zakuwać
bo będzie nie ciekawie :(
http://gfx.efotek.pl/images/oh9s53q7x3slt4guejpx.jpg
mój kontakt gadu gadu w razie pytań 12092893
z góry dziękuje
Użytkownik anderss edytował ten post 11 czerwiec 2010, 14:10
Prawie miesiąc czekałeś z tym zadaniem? Jak się oblicza silnię właściwie? Wiesz może? Bo tego na pewno uczą na studiach. Przynajmniej mnie uczyli w liceum i na studiach. A implementacja nie jest trudna. Albo leci się rekurencją, albo iteracją.
http://www.google.pl...=utf-8&oe=utf-8
http://www.google.pl...=utf-8&oe=utf-8
mam takie coś
uses crt; var i,x: Integer; w : Longint; begin Writeln('Program oblicza silnie podanej liczby'); Write('Podaj liczbe x: ');Read(x); W:=1; for i:=1 to x do W:=W*i; Writeln('Silnia liczby ',x, ' wynosi ', W); end.
ale po przeliczeniu 33! silnia nie moge już nic obliczyć od 33 wzwyż nie policze silni 1000
Najpierw proponuję spróbować na floatach/ doublach. Wynik po spierwiastkowaniu i tak będzie doublem, a są to liczby mające zakres do nawet 10^200 albo i większy.
Jeżeli nie zadziała, chyba jedyne co możesz zrobić to liczby zadeklarować jako string no i oprogramować ręcznie potrzebne działania sposobem pisemnym np. dodawanie dwóch stringów to będzie ostatnia cyfra + ostatnia, jeśli wychodzi po za 10 to przesunięcie itd. Wynikiem będzie jakiś kolosalny string. Doi silni to niczego nie potrzebujesz poza mnożeniem. Jednakże pierwiastek możliwe że będziesz musiał robić jakimiś metodami numerycznymi, bo funkcje wbudowane nie pójdą na takim gigancie. Skoro miałeś miesiąc to może być coś większego.
Użytkownik kzez1986 edytował ten post 11 czerwiec 2010, 15:43
nie mam pojęcia jak to zrobić :(
zrobiłem takie coś ale jest limit do 170! silnia :(
Program silnia; Uses Crt; Var a,b,c:double; e:char; begin repeat ClrScr; write('podaj liczbe ktora chcesz podniesc do potegi silnia: '); readln(a); IF (a<1) or (a>170) THEN writeln('blad ') else begin b:=0; c:=1; repeat b:=b+1; c:=c*b; until b=a; writeln('wartosc silni z liczby: ',a:0:0,' wynosi: ',c:0:0); end; repeat writeln(' czy chcesz kontynuowac ? (t/n)'); readln(e); if (e='T') or (e='t') or (e='N') or (e='n') then writeln('ok') else begin writeln('N lub n lub t lub T bo inaczej zle!!'); delay(1000); end; until (e='T') or (e='t') or (e='N') or (e='n'); until (e='n') or (e='N'); gotoXY(5,20); writeln('koniec'); delay(2000); end.
jak dojśc do 1000 silnia;/
Użytkownik anderss edytował ten post 11 czerwiec 2010, 16:39
To ja mam inne rozwiązanie - napisałem w PHP, ale przenieść do Pascala, to nie problem:<?php $n = 1; for ($i = 1000; $i > 1; $i--) $n *= pow($i, 1/1000); echo $n;Proste, prawda? ;)
właśnie nie mam pojęcia jak to przerobić to będzie coś takiego?
n=1; for i:=1000 i>1; n:=i *1/1000
dobrze?? :blink:
Użytkownik anderss edytował ten post 11 czerwiec 2010, 18:41
Jeśli potrzebujesz robić obliczenia na dużych liczbach, to polecam bibliotekę FGInt (http://www.submanifo.../GInt/gint.html). W praktyce rozmiar liczb jest wtedy ograniczony przez ilość pamięci. Biblioteka ta działa co prawda tylko na liczbach całkowitych, ale można łatwo ją przerobić na liczby rzeczywiste (np. poprzez zapis w postaci wykładniczej, tak jak w zwykłych floatach). Algorytmy liczenia silni i wyciągania pierwiastka dowolnego stopnia domyślam się, że znasz. Polecałbym tylko robić wszystko iteracyjnie, bo przy obliczeniach rekurencyjnych na tak wielkich liczbach bałbym się o przepełnienie stosu.
kurde niewiem jak to zrobić;/
zrobiłem takie coś ale niewiem jak wrzucic a juz zwłaszcza przerobi to jestem w tym laikiem
moze ktoś mi pomoże wcisnąć to tu
ma obliczone do 170! silnia
Program silnia; Uses Crt; Var a,b,c:double; e:char; begin repeat ClrScr; write('podaj liczbe ktora chcesz podniesc do potegi silnia: '); readln(a); IF (a<1) or (a>171) THEN writeln('blad ') else begin b:=0; c:=1; repeat b:=b+1; c:=c*b; until b=a; writeln('wartosc silni z liczby: ',a:0:0,' wynosi: ',c:0:0); end; repeat writeln(' czy chcesz kontynuowac ? (t/n)'); readln(e); if (e='T') or (e='t') or (e='N') or (e='n') then writeln('ok') else begin writeln('N lub n lub t lub T bo inaczej zle!!'); delay(1000); end; until (e='T') or (e='t') or (e='N') or (e='n'); until (e='n') or (e='N'); gotoXY(5,20); writeln('koniec'); delay(2000); end.
a nie dało by sie jakoś to skrócić trochę albo coś, przecież musi być jakiaś właściwość która by pozwalała zmniejszyć stopień albo liczbę pod pierwiastkiem
Nie rozumiem dlaczego dostałeś takie pytanie skoro niewiele z tego Pascala umiesz. Uczyli w ogóle tego Pascala na tej uczelni czy nie? :rolleyes:
Nie znam za dobrze Pascala, ale pogrzebałem w sieci i mam nadzieję, że to coś pomoże (przyznam, że teraz po części odwalam za Ciebie robotę, ale studentom trzeba pomagać :biggrin: ):
program pomocStudentom; var n : double; i : integer; begin n := 1; for i := 1000 downto 1 do n := n * (i ^ (1 / 1000)); write(n); end.
// Edytowano
Aha, jeszcze tak dla potomnych, żeby było jasne o co chodzi, bo tutaj chodzi o matematykę właśnie. Tak wygląda przekształcenie przykładu podanego przez autora tematu na to, co jest w kodzie, który podałem:
http://img.andrzej.info.pl/img/WUNwViTDJi.png
Użytkownik andrzej_aa edytował ten post 11 czerwiec 2010, 22:15
ciekawe zadanie :) baaardzo dawno pisałem w Pascalu, ale - generalnie, jak potrzebuję szybkiej pomocy to piszę na stackoverflow.com, w godzinach nocnych (jak teraz) najszybciej dostaniesz odpowiedz (głownie jest to portal użytkowany przez amerykanów, więc rozumiesz...;))
Powodzenia :)
heh:D ja chyba mam rozwiązanie, ale przy obliczaniu cały czas wyskakuje Floating Point overflow...
program Project2; {$APPTYPE CONSOLE} uses Math, SysUtils; var x, p: integer; w: double; i: integer; begin repeat Write('Podaj liczbę: '); ReadLn(x); Write('Podaj, z jakiego pierwiastka mam skorzystać: '); ReadLn(p); w := 1; for i := 1 to x do w := w * (Power(i, p)); WriteLn('Wynik działania to: ', FormatFloat('0.00', w)); until x = 0; end.
co prawda, to jest w delphi, ale to można walnąć do pascala...
dziękuje wszystkim za odpowiedzi :biggrin: temat uważam za zamknięty i rozstrzygnięty ;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
jestem w tym kiepski, i nie mam czasu, bo mam w sobotę i w niedziele egzaminy i muszę do nich zakuwać
bo będzie nie ciekawie :(
http://gfx.efotek.pl/images/oh9s53q7x3slt4guejpx.jpg
mój kontakt gadu gadu w razie pytań 12092893
z góry dziękuje
Użytkownik anderss edytował ten post 11 czerwiec 2010, 14:10
Prawie miesiąc czekałeś z tym zadaniem? Jak się oblicza silnię właściwie? Wiesz może? Bo tego na pewno uczą na studiach. Przynajmniej mnie uczyli w liceum i na studiach. A implementacja nie jest trudna. Albo leci się rekurencją, albo iteracją.
http://www.google.pl...=utf-8&oe=utf-8
http://www.google.pl...=utf-8&oe=utf-8
mam takie coś
uses crt; var i,x: Integer; w : Longint; begin Writeln('Program oblicza silnie podanej liczby'); Write('Podaj liczbe x: ');Read(x); W:=1; for i:=1 to x do W:=W*i; Writeln('Silnia liczby ',x, ' wynosi ', W); end.
ale po przeliczeniu 33! silnia nie moge już nic obliczyć od 33 wzwyż nie policze silni 1000
Najpierw proponuję spróbować na floatach/ doublach. Wynik po spierwiastkowaniu i tak będzie doublem, a są to liczby mające zakres do nawet 10^200 albo i większy.
Jeżeli nie zadziała, chyba jedyne co możesz zrobić to liczby zadeklarować jako string no i oprogramować ręcznie potrzebne działania sposobem pisemnym np. dodawanie dwóch stringów to będzie ostatnia cyfra + ostatnia, jeśli wychodzi po za 10 to przesunięcie itd. Wynikiem będzie jakiś kolosalny string. Doi silni to niczego nie potrzebujesz poza mnożeniem. Jednakże pierwiastek możliwe że będziesz musiał robić jakimiś metodami numerycznymi, bo funkcje wbudowane nie pójdą na takim gigancie. Skoro miałeś miesiąc to może być coś większego.
Użytkownik kzez1986 edytował ten post 11 czerwiec 2010, 15:43
nie mam pojęcia jak to zrobić :(
zrobiłem takie coś ale jest limit do 170! silnia :(
Program silnia; Uses Crt; Var a,b,c:double; e:char; begin repeat ClrScr; write('podaj liczbe ktora chcesz podniesc do potegi silnia: '); readln(a); IF (a<1) or (a>170) THEN writeln('blad ') else begin b:=0; c:=1; repeat b:=b+1; c:=c*b; until b=a; writeln('wartosc silni z liczby: ',a:0:0,' wynosi: ',c:0:0); end; repeat writeln(' czy chcesz kontynuowac ? (t/n)'); readln(e); if (e='T') or (e='t') or (e='N') or (e='n') then writeln('ok') else begin writeln('N lub n lub t lub T bo inaczej zle!!'); delay(1000); end; until (e='T') or (e='t') or (e='N') or (e='n'); until (e='n') or (e='N'); gotoXY(5,20); writeln('koniec'); delay(2000); end.
jak dojśc do 1000 silnia;/
Użytkownik anderss edytował ten post 11 czerwiec 2010, 16:39
To ja mam inne rozwiązanie - napisałem w PHP, ale przenieść do Pascala, to nie problem:<?php $n = 1; for ($i = 1000; $i > 1; $i--) $n *= pow($i, 1/1000); echo $n;Proste, prawda? ;)
właśnie nie mam pojęcia jak to przerobić to będzie coś takiego?
n=1; for i:=1000 i>1; n:=i *1/1000
dobrze?? :blink:
Użytkownik anderss edytował ten post 11 czerwiec 2010, 18:41
Jeśli potrzebujesz robić obliczenia na dużych liczbach, to polecam bibliotekę FGInt (http://www.submanifo.../GInt/gint.html). W praktyce rozmiar liczb jest wtedy ograniczony przez ilość pamięci. Biblioteka ta działa co prawda tylko na liczbach całkowitych, ale można łatwo ją przerobić na liczby rzeczywiste (np. poprzez zapis w postaci wykładniczej, tak jak w zwykłych floatach). Algorytmy liczenia silni i wyciągania pierwiastka dowolnego stopnia domyślam się, że znasz. Polecałbym tylko robić wszystko iteracyjnie, bo przy obliczeniach rekurencyjnych na tak wielkich liczbach bałbym się o przepełnienie stosu.
kurde niewiem jak to zrobić;/
zrobiłem takie coś ale niewiem jak wrzucic a juz zwłaszcza przerobi to jestem w tym laikiem
moze ktoś mi pomoże wcisnąć to tu
ma obliczone do 170! silnia
Program silnia; Uses Crt; Var a,b,c:double; e:char; begin repeat ClrScr; write('podaj liczbe ktora chcesz podniesc do potegi silnia: '); readln(a); IF (a<1) or (a>171) THEN writeln('blad ') else begin b:=0; c:=1; repeat b:=b+1; c:=c*b; until b=a; writeln('wartosc silni z liczby: ',a:0:0,' wynosi: ',c:0:0); end; repeat writeln(' czy chcesz kontynuowac ? (t/n)'); readln(e); if (e='T') or (e='t') or (e='N') or (e='n') then writeln('ok') else begin writeln('N lub n lub t lub T bo inaczej zle!!'); delay(1000); end; until (e='T') or (e='t') or (e='N') or (e='n'); until (e='n') or (e='N'); gotoXY(5,20); writeln('koniec'); delay(2000); end.
a nie dało by sie jakoś to skrócić trochę albo coś, przecież musi być jakiaś właściwość która by pozwalała zmniejszyć stopień albo liczbę pod pierwiastkiem
Nie rozumiem dlaczego dostałeś takie pytanie skoro niewiele z tego Pascala umiesz. Uczyli w ogóle tego Pascala na tej uczelni czy nie? :rolleyes:
Nie znam za dobrze Pascala, ale pogrzebałem w sieci i mam nadzieję, że to coś pomoże (przyznam, że teraz po części odwalam za Ciebie robotę, ale studentom trzeba pomagać :biggrin: ):
program pomocStudentom; var n : double; i : integer; begin n := 1; for i := 1000 downto 1 do n := n * (i ^ (1 / 1000)); write(n); end.
// Edytowano
Aha, jeszcze tak dla potomnych, żeby było jasne o co chodzi, bo tutaj chodzi o matematykę właśnie. Tak wygląda przekształcenie przykładu podanego przez autora tematu na to, co jest w kodzie, który podałem:
http://img.andrzej.info.pl/img/WUNwViTDJi.png
Użytkownik andrzej_aa edytował ten post 11 czerwiec 2010, 22:15
ciekawe zadanie :) baaardzo dawno pisałem w Pascalu, ale - generalnie, jak potrzebuję szybkiej pomocy to piszę na stackoverflow.com, w godzinach nocnych (jak teraz) najszybciej dostaniesz odpowiedz (głownie jest to portal użytkowany przez amerykanów, więc rozumiesz...;))
Powodzenia :)
heh:D ja chyba mam rozwiązanie, ale przy obliczaniu cały czas wyskakuje Floating Point overflow...
program Project2; {$APPTYPE CONSOLE} uses Math, SysUtils; var x, p: integer; w: double; i: integer; begin repeat Write('Podaj liczbę: '); ReadLn(x); Write('Podaj, z jakiego pierwiastka mam skorzystać: '); ReadLn(p); w := 1; for i := 1 to x do w := w * (Power(i, p)); WriteLn('Wynik działania to: ', FormatFloat('0.00', w)); until x = 0; end.
co prawda, to jest w delphi, ale to można walnąć do pascala...
dziękuje wszystkim za odpowiedzi :biggrin: temat uważam za zamknięty i rozstrzygnięty ;)