Hej, jestem początkującą w programowaniu. Mam do wykonania następujące zadanie:
Napisz program, który dla n z zakresu <0, 20> podanego przez użytkownika wyznaczy i wyświetli wartość silnii n!.
- W przypadku podania niewłaściwej wartości n przez użytkownika, program powinien wyświetlić komunikat Incorrect input data i zwrócić kod błędu 2.
- W przypadku wprowadzenia błędnych danych powinien wyświetlić komunikat Incorrect input i zakończyć działanie z kodem błędu 1.
W tym celu napisz funkcję do obliczania wartość wyrażenia n! metodą rekurencyjną. Funkcja powinna mieć następujący prototyp:
unsigned long factorial_rec(int n);
Przykład interakcji z programem:
Podaj n: 5⏎
Wynik: 120⏎
Uwagi
- W programie nie wolno używać zmiennych globalnych.
- W programie nie wolno używać słowa kluczowego static.
- W programie nie wolno używać pętli.
Program napisany przeze mnie wygląda następująco:
#include <stdio.h>
unsigned long factorial_rec(int n)
{
if (n==0) { return 1; }
else { return (unsigned long) n * factorial_rec(n - 1); }
}
int main(void) {
int n;
printf("Podaj n: ");
int t=scanf("%d", &n);
if (t!=1)
{
printf("incorrect input");
return 1;
}
else if(n<0||n>20)
{
printf("Incorrect input data");
return 2;
}
printf("%lu", factorial_rec(n));
return 0;
}
Wydaje się, że program działa prawidłowo natomiast podczas testów przez dante wyskakuje taki komunikat: ,,Test został przerwany; Program PRZERWANY; miał zwrócić wartość 0 a zakończył się sygnałem SIGSEGV". Nie wiem co mogłabym tu zmienić, aby dante przyjął mój program. Będę wdzięczna za pomoc :).