Skocz do zawartości




Zdjęcie

program silnia


  • Zaloguj się, aby dodać odpowiedź
19 odpowiedzi w tym temacie

Katalogi.pl

Katalogi.pl
  • Bywalec

#1 szczerbol1

szczerbol1

    1

  • Members
  • Pip
  • 3 postów

Napisano 03 czerwiec 2008 - 21:19

Witam. mam wielka prosbe, potrzebuje jak najszybciej dosc prostego programu liczacego silnie do 100! obojetnie w jakim jezyku, (python pascal) liczy sie to aby byl mało skomplikowany. z góryu dziekuje
pzdr

#2 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 03 czerwiec 2008 - 21:41

Widzisz jakiś problem? Siadaj i pisz.

#3 kortyg

kortyg

    1

  • Members
  • PipPipPip
  • 688 postów

Napisano 04 czerwiec 2008 - 05:55

Ja widzę problem. 100! to liczba na moje oko przekraczająca zakres liczb całkowitych na 32 bitowym kompie. A to już wymaga liczenia na stringach.

#4 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 07:49

9.33262154 × 10^157

Ale widzisz kortyg - ma napisać to niech pisze. Tylko nie wiem po co dzieli się ze światem, tym, że mu ktoś, coś kazał napisać.

Silnia z dużych liczb jest do obliczenia, ale jakoś nie widze, żeby napisał cokolwiek o jakimkolwiek problemie. Po prostu - jelenia szuka.

#5 mariusztb

mariusztb

    1

  • Members
  • PipPip
  • 18 postów

Napisano 04 czerwiec 2008 - 08:11

nie wiem do ilu liczy silnie, ale z 5 wylicza;)
(wiecej nie sprawdzalem)



unsigned long silnia(short n)
{
if(n==0)
return(1);
else
return(n* silnia(n-1));
}


powodzenia

#6 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 09:40

Zapomnij ze Ci obliczy chocby połowe ze 100

#7 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 11:38

Przepraszam, że piszę nowego posta, ale chce aby było widać, że coś jeszcze napisałem

W zasadzie to postanowiłem nad tym popracować. Już mi dodaje liczby w stringach. Ale zatam pytanie autorowi topiku. Kto Ci zadał to zadanie? Sam teraz rozkminiam mnożenie z przenoszeniem reszty %-D.

PS: Nie mam pojęcia ile to mi zajmie. Jakby ktoś chciał się pobawić, zachęcam - super jazda bez trzymanki . Oczywiście mówie o pisaniu całego programu, nie samego mnożenia

W tej chwili, prowizorycznie wynik obliczeń silni z dowolnej liczby dodatniej wynosi - uwaga... uwaga... uwaga - jeden :]

Pozdrawiam.

Zmieniony przez - yonami w dniu 2008-06-04 12:40:45

#8 szatanski

szatanski

    1

  • Members
  • PipPipPip
  • 967 postów

Napisano 04 czerwiec 2008 - 11:49

Jeśli masz dodawanie stringów to masz cały program.
Musisz tylko je (dodawanie) wykonać odpowiednią ilość razy, a to raptem 2 pętle...

#9 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 12:24

Silnia to nie dodawanie, a mnozenie.

Dodawaie potrzebne, bo operujesz nie na liczbach a na stringach. Wiec dodajesz 1+1; 2+1; 3+1; 4+1; aby uzyskac parametr do mnozenia.

1*2
2*3;
6*4;

Itd... Wiec nie wiem gdzie masz tu dwie petle

#10 kortyg

kortyg

    1

  • Members
  • PipPipPip
  • 688 postów

Napisano 04 czerwiec 2008 - 12:29

yonami: to podaj co napisałeś. Liczenie na stringach jest ciekawe i wg mnie można przeprowadzić na wiele sposobów. Któryś z nich będzie optymalny.

#11 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 13:41

Dobra, teraz ciekawe kto sprawdzi ten wynik :]
Jakby ktoś sie pytał to 8,877 cyfr.
http://pastebin.4programmers.net/4074
Jeszcze mi sie komputer tnie

Powiem, że wynik jest zły LOL
Zrobiłem malutki błąd w mnożeniu:
KOD (deczka na pałe): http://pastebin.4programmers.net/4075

Zmieniony przez - yonami w dniu 2008-06-04 15:32:11

#12 kortyg

kortyg

    1

  • Members
  • PipPipPip
  • 688 postów

Napisano 04 czerwiec 2008 - 14:40

Liczy do 6!. Chyba, że coś źle wpisuję, ale raczej niemożliwe. Wg programu 7!=4400. Wywołuję: nazwa_programu.exe "7"
Kod jest ciekawy,pomyślę jak uprościć. Na razie spróbuję dodawanie, bo jest częścią składową mnożenia.

#13 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 14:46

Jak wspomniałem malutki błąd w mnożeniu
Chodzi o to, że podczas mnożenia, na bierząco sumuje wyniki
z każdego wiersza, tak aby nie tworzyć N tablic wyników.
Podczas dodawania lub mnożenia, źle przesówa w pewnym momencie resztę z dodawania "w słupku". Efekt - albo to sprawia że
ostateczne dane są nieprawidłowe i dodawanie daje zły wynik, albo dane są błędne już podczas mnożenia.

Co nie zmienia faktu, że 8,877 cyfr robi wrażenie Choć nie wyobrażam sobie laboratoryjnych kilku (milionów?). Jakieś 4 minuty mi liczyło

Dodawanie w fadd działa, mógłbyś popracować nad fmulti

Pozdrawiam

#14 szczerbol1

szczerbol1

    1

  • Members
  • Pip
  • 3 postów

Napisano 04 czerwiec 2008 - 17:54

siadaj i pisz, lątwo powiedziec, mam to na jutro napisac z uzyciem stringów w pascalu - jezyku z któyum, nigdy nie miałem doczynienia. robiłem cos w c++ ale w pascalu nic, dlatego prosze o pomoc. gdyby nie było mi to potrzebne na teraz tro bym nie zakładał tematu i sie sam nauczył, ale teraz raczej nie zdaze. prosze o pomoc to jest raptem ok 10 linijek kodu

#15 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 04 czerwiec 2008 - 20:06

"To jest raptem ok 10 linijek kodu"
No to sory mistrzu - my to jednak ciency jesteśmy. Przynajmniej mój kod ma 136 linijek, a nie jest w dodatku skończony
Musisz poszukać expertów, albo przestać pisać takie bzdury

W 10 linijkach to sobie możesz "Hello World" napisać

Jakoś mi sie wydaje, że masz napisać po prostu program obliszający silnię. A że sie na zajęcia nie chodziło lub się wogóle nie uczyło, to nawet nie wiesz że właśnie to masz zrobić.

Zmieniony przez - yonami w dniu 2008-06-04 21:07:31

#16 szczerbol1

szczerbol1

    1

  • Members
  • Pip
  • 3 postów

Napisano 04 czerwiec 2008 - 20:44

mówil mi profesor ze mozn to zmiescic w 10 linijkach w pascalu, ale nie powiedzał jak;/

#17 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 05 czerwiec 2008 - 10:53

Pewnie chodziło mu o to (jak zresztą mówiłem):

writeln( 'Podaj liczbe' );
readln( liczba );
wynik := 1;
for i := 1 to liczba do
wynik := wynik * i;
Writeln( liczba, '! = ', wynik );

Powinno dzialac. Wpisuj male liczby - 1, 2, 3, 4, 5, 6

#18 kortyg

kortyg

    1

  • Members
  • PipPipPip
  • 688 postów

Napisano 09 czerwiec 2008 - 10:18

yonami: zamiast funkcji mnożenia, przy liczeniu silni, dodaj kod który będzie tylko korzystał z dodawania poszczególnych składników. Sądzę, że program będzie działał szybciej. Możesz to dla ciekawości sprawdzić. W końcu mnożenie to nic innego jak wielokrotne dodawanie. Ale Twój program jest godny uwagi.

#19 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 09 czerwiec 2008 - 14:04

Wiesz, procesor nie liczy w słupku na kartce. Pewnie jakiś sprytny inżynier, opracował jakiś algorytm mnożenia poprzez przesuwanie czy kij wi jak. W każdyb mądź razie czytałem gdzieś o mnożeniu binarnym, inną metodą niż każdy bit xor każdy bit.

#20 yonami

yonami

    1

  • Members
  • PipPipPip
  • 475 postów

Napisano 11 czerwiec 2008 - 04:48

Usiadłem wieczorem nad tym programem
Udało mi się go napisać Fakt, na pałe, ale działa prawidłowo.
Chętni moga sprawdzić wyniki

Przy okazji zrobiłem:
silnie, mnozenie, dodawanie

silnia: http://pastebin.4programmers.net/4102
mnozenie: http://pastebin.4programmers.net/4103
a dodawanie sobie każdy przerobi z mnozenia


I oczywiscie wynik do sprawdzenia:
100! 0m0.293s
200! 0m3.015s
300! 0m10.482s
400! 0m24.926s
500! 0m35.020s: http://pastebin.4programmers.net/4105
600! 1m26.048s
700! 1m54.520s

Pozdrawiam




Similar Topics Collapse

  Temat Forum Autor Podsumowanie Ostatni post


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych


Inne serwisy: IFD