program
program:
Program w C++
int funkcja (int A)
{if (A==1) return 2;
else return funkcja(A−1)+5.36;
if ((funkcja(A−1)+5.36)>47) return (floor(funkcja(A−1)+5.36)−18;
else return ceil(funkcja(A−1)+5.36);}
Chce, zeby pojawialy sie wlasnie takie wartosci, ale tak nie jest. Czy tu jest jakis blad?
18 sty 14:15
Dziadek Mróz:
Dostajesz po łapach za brak formatowania kodu, ówno widzisz i ówno wiesz co napisałeś
int funkcja (int A) {
if (A == 1)
return 2;
else
return funkcja(A−1) + 5.36;
if ((funkcja(A−1) + 5.36) > 47)
return (floor(funkcja(A−1) + 5.36) − 18;
else
return ceil(funkcja(A−1) + 5.36);
}
Przeczytaj sobie jakikolwiek poradnik pisania kodu, nie algorytmu tylko tego jak kod wygląda
estetycznie i korzystaj na bieżąco. Uwierz mi to dobra rzecz, dostaniesz od kogoś ładnie
sformatowany kod to nawet bez specyfikacji będziesz wiedział o co biega
Jaki masz algorytm, podaj treść zadania bo wg mnie kod działa dobrze
18 sty 15:28
program:
Czym sie rozni kod od algorytmu?
18 sty 18:44
program:
Ale np. dla A=50 chcialbym, zeby byla wartosc 36 (bo (50−1)+5.36=54,36>47 wiec 54−18=36), a
wychodzi mi 247.
18 sty 19:22
program: Dobra juz wiem o co chodzi.
18 sty 19:50
Dziadek Mróz:
Chodziło mi o składnię kodu, tego jak komputer to widzi, algorytm możesz opisać słownie, kod
możesz stworzyć w różnych językach programowania, wiesz o co chodzi
Masz przedstawioną funkcję rekurencyjną, to znaczy taką, która sama się wywołuje i to wywołanie
wpływa na wynik końcowy.
Wyjaśnię na prostszym przykładzie:
silnia(n):
if n<0:
return 0
else if n==0:
return 1
else:
return n*silnia(n−1)
Przejdźmy ten algorytm dla jakichś wartości testowych:, n=−1, n=0 oraz n=3
silnia(n=−1):
if −1<0 T
return 0 // to jest wynik silnia(−1)
silnia(n=0):
if 0<0 N
else if 0==0 T
return 1 // to jest wynik silnia(0)
silnia(n=3):
if 3<0 N
else if 3==0 N
else return 3*
silnia(3−1=2)
silnia(n=2):
if 2<0 N
else if 2==0 N
else return 2*
silnia(2−1=1)
silnia(n=1):
if 1<0 N
else if 1==0 N
else return 1*
silnia(1−1=0)
silnia(n=0):
if 0<0 N
else if 0==0 T
return 1
return 1*1=1
return 2*1=2
return 3*2=6 // to jest wynik silnia(3)
Jakby obejść Twój kod to wyjdzie nam, że zasięg mamy do pierwszego if...else, drugi się nigdy
nie wykona.
A=3
fun(A=3):
if 3==1 N
else return fun(3−1=2)+5.36
fun(A=2):
if 2==1 N
else return fun(2−1=1)+5.36
fun(A=1):
if 1==1 T
return 2
return 2+5.36=7.36
return 7.36+3.36=10.72 // to jest wynik dla funkcja(3)
18 sty 20:14
program:
Ok. Dziekuje.
A jakby wygladal algorytm obliczania silni, ale niezapisany slowami tylko symbolicznie?
18 sty 22:25
program:
Czyli:
Podaj dane:
tu jakies kroki
jakby to wygladalo?
18 sty 22:26
Danko: int s;
long long silnia = 1;
cout << "podaj liczbe" << endl;
cin >> s;
for (int i = 1; i<=s;i++)
silnia *= i;
cout << silnia << endl;
system("PAUSE");
return(0);
tutaj nalezy sie posluzyc inkrementacja,nie trzeba rekurencyjnie
18 sty 22:29
Dziadek Mróz:
Można też tak:
int s;
cin >> s;
if (s >= 0) {
uint64_t silnia = 1; // unsigned long long int, typedef unsigned long long int uint64_t;
for (int i=1; i<=s; i++) {
silnia *= i;
}
cout << silnia << endl;
}
else {
cout << "Silnia tylko z wiekszych rownych 0 [>=0]" << endl;
}
18 sty 23:00
program:
I to jest ten algorytm?
19 sty 00:07
FullStackDev: @Dziadek Mróz
Twoje formatowanie też pozsostawia wiele do życzenia. Zanim pouczysz innych lepiej sam zajrzyj
jak się poprawnie formatuje kod.
19 sty 00:36
Dziadek Mróz: Jest wiele metod formatowania kodu, korzystam z takiej jaką kiedyś zaproponował mi plugin
formatujący do Notepad++
19 sty 07:07
program:
Jakby wygladal ten algorytm?
19 sty 07:51
program: ?
19 sty 16:25
Dziadek Mróz:
1. Podaj liczbę pod silnią n cin >> n;
2. Jeżeli n >= 0 if (n>=0) {
2.1. silnia = 1 uint64_t silnia = 1;
2.2. i = 1 for (int i=1;
2.3. Jeżeli i <= n i<=n;
2.3.1 silnia = silnia*i silnia *= i;
2.3.2 i = i + 1 i++) {
2.3.3 Idź do 2.2 } // koniec for(...
2.4. Inaczej wypisz silnia cout << silnia << endl; } // koniec if (n>=0)
3. Inaczej wypisz "Silnia tylko z n >= 0" else { cout << "Silnia tylko ... }
4. Koniec return 0;
19 sty 16:52
Mariusz:
Przeczytaj sobie jakikolwiek poradnik pisania kodu,
nie algorytmu tylko tego jak kod wygląda estetycznie i korzystaj na bieżąco.
Uwierz mi to dobra rzecz, dostaniesz od kogoś ładnie sformatowany kod to
nawet bez specyfikacji będziesz wiedział o co biega
Jeśli chodzi o czytelność kodu to sensownie dobrane komentarze więcej dają niż wcięcia
Dla mnie na ogół wystarczy jedna instrukcja jedna linia
Jeśli pisałeś w Pythonie to wiesz że wcięcia potrafią być uciążliwe
20 sty 11:20