matematykaszkolna.pl
Programowanie Benny: Mam pewne zadanko, lecz na początku chce zdefiniować pewną funkcję określoną rekurencyjnie:
 n−1 dla n>100 
M(n)=M(M(n+11)) dla n≤100
#include<stdio.h> #include<conio.h> int funkcja(int n) { if(n>100) printf("M(n)=%d", n−10); else printf("M(n)=%d", funkcja(funkcja(n+11))); } main() { int i; printf("Podaj liczbę naturalną dla której chcesz otrzymać wartość funkcji"); scanf("%d", funkcja(i)); getch(); } Co jest nie tak?
19 lip 14:47
pomoc: if(n>100) printf("M(n)=%d", n−1);
19 lip 14:48
Benny: Błąd mam wyżej i w main mam błąd, lecz nadal coś mi nie działa/
19 lip 14:59
Benny: #include<stdio.h> #include<conio.h> int funkcja(int n) { if(n>100) printf("M(n)=%d", n−10); else printf("M(n)=%d", funkcja(funkcja(n+11))); } main() { int i; printf("Podaj liczbę naturalną dla której chcesz otrzymać wartość funkcji"); scanf("%d", &i); printf("%d", i); getch(); } Mam na razie tak. Wypisuje mi "i", ale jak dopisuje później printf("%d", funkcja(i)); to wypisuje zły wynik.
19 lip 15:00
Benny: #include<stdio.h> #include<conio.h> int funkcja(int n) { int war; if(n>100) war=n−10; else war=funkcja(funkcja(n+11)); return war; } main() { int i; printf("Podaj liczbę naturalną dla której chcesz otrzymać wartość funkcji\n"); scanf("%d", &i); printf("%d", funkcja(i)); getch(); } Teraz działa. Ktoś zobaczy czy nie ma błędów? emotka
19 lip 15:08
jc: Wygląda poprawnie, choć ja bym napisał tak int M(int n){ if(n > 100) return n−10; else return M(M(n+1)): } Można też tak: int M(int n){ return (n > 100) ? (n−10) : M(M(n+1)); } Być może M jes zupełnie prostą funkcją ... Tylko, czy warto nad tym myśleć?
19 lip 16:57
jc: Oczywiście zamiast n+1, powinno być n+11 emotka
19 lip 17:02
Benny: Jest prostą funkcją, bo w poleceniu trzeba było wypisać wartości funkcji dla n∊{1, ..., 101} Dla tych n−ów wyszła funkcja stała. #include<stdio.h> #include<conio.h> int M(int n) { int wartosc; if(n>100) wartosc=n−10; else wartosc=M(M(n+11)); return wartosc; } main() { int i=1; while(i<=101) { printf("%d,", M(i)); i++; } getch(); }
19 lip 17:05
jc: Ogólnie M(n) = 91 dla n < 101 oraz M(n) = n−10 w przeciwnym wypadku.
19 lip 17:11
Benny: Dokładnie tak, nawet 101 się łapie emotka
19 lip 17:11