Otóż, mam taki oto kod, który oblicza symbol newtona:
#include <stdio.h>
#include <stdlib.h>
int Min(int a, int b)
{
// funkcja minimum
}
int SymNew(int n, int k)
{
int i, j;
int B[k];
for(j = 0; j <= n; j++) B[j] = 1;
for(i = 1; i <= n; i++){
for(j = Min(i - 1, k); j >= 1; j--){
B[j] = B[j - 1] + B[j];
}
}
return B[k];
}
int main ()
{
int N, K;
printf("Podaj N: ");
scanf("%d", &N);
printf("Podaj K: ");
scanf("%d", &K);
if(N < K) printf("Blad! N musi byc wieksze, lub rowne K.\n");
else
{
int WYNIK;
WYNIK = SymNew(N, K);
printf("%d <-- WYNIK\n", WYNIK);
}
getchar();
getchar();
return 0;
}
(Kompiluje za pomocą Dev-C++ Portable 4.9.9.2 na WinXP)
Sprawa wygląda tak:
Jeżeli zamiast " B[k] " napiszę " B[n] " (linijka 12) oraz zamiast " Min(i - 1, k) " napiszę samo " i - 1 " (linijka 16) - program działa bez zarzutu.
Niestety oprócz tego sposobu działania programu, muszę zrobić jeszcze jeden - w takiej postaci, w jakiej wkleiłem kod.
Pytanie moje brzmi: Co ma robić funkcja Min ? Bo raczej nie ma wybierać elementu mniejszego z podanych dwóch (ponieważ kiedy tak zrobiłem, na niektórych przykładach program się wykrzaczał, vide 9 po 1).
Funkcja ta miała taką postać:
int Min(int a, int b)
{
if(a <= b) return a;
if(a > b ) return b;
}
Z góry dzięki za odpowiedź.