Hej :)
Rozwiązuje takie oto zadanie:
Napisz funkcję get_function, która na podstawie typu operacji, przekazanego w parametrze, zwraca wskaźnik do funkcji wykonującej tę operację.
Zadeklaruj w tej funkcji tablicę wskaźników na funkcje (funcs) i przypisz do kolejnych komórek adresy poszczególnych funkcji.
Typ operacji powinien być określony zaproponowanym typem enum o nazwie operations_t, który będzie zawierał następujące pola: op_add, op_sub, op_div oraz op_mul odpowiadające poszczególnym operacjom.
Wartość zwracana:
NULL - w przypadku podania błędnych danych wejściowych
wskaźnik na odpowiednią funkcję w przypadku sukces (poprawnych danych wejściowych).
Deklarację funkcji get_function oraz typ wyliczeniowy operations_t umieść w pliku nagłówkowym int_operations.h wraz z deklaracjami funkcji do sumowania (add_int), odejmowania (sub_int), dzielenia (div_int) i mnożenia (mul_int).
Z kolei definicje owych funkcji umieść w pliku int_operations.c.
Przykładowe wywołanie Twojej funkcji powinno wyglądać następująco:
int res = get_function(op_add)(4, 5);
Napisz program, który przetestuje działanie przygotowanej przez Ciebie funkcji. Program powinien pobrać od użytkownika dwie liczby oraz identyfikator operacji do wykonania:
0 - dodawanie,
1 - odejmowanie,
2 - dzielenie,
3 - mnożenie.
Następnie należy wywołać funkcję get_function z odpowiednim parametrem.
W przypadku podania błędnych danych program powinien wyświetlić komunikat Incorrect input data i zakończyć działanie z kodem błędu 2.
W przypadku wprowadzenia przez użytkownika błędnych znaków program powinien wyświetlić komunikat Incorrect input i niezwłocznie zakończyć działanie z kodem błędu 1.
Uwaga
W programie nie wolno używać operatora [], za wyjątkiem deklaracji tablicy.
Na potrzeby tego zadania przyjmij zero jako wynik dzielenia w przypadku zerowego dzielnika.
Przykładowa interakcja z programem -- dane poprawne:
Enter numbers: 8 3⏎
Choose an operation: 0⏎
Result: 11
Przykładowa interakcja z programem -- błędne dane:
Enter numbers: 7 CXoWATJCDd⏎
Incorrect input
Enter numbers: -6 10⏎
Choose an operation: -1⏎
Incorrect input data
Uwaga
W programie nie wolno używać operatora [] (dotyczy to również komentarzy jak i stringów formatujących)!
Tutaj jeszcze swój kod podrzucam:
a) z pliku int_operations.c:
#include <stdio.h>
#include <stdlib.h>
#include "int_operations.h"
int add_int(int a, int b)
{
return a + b;
}
int sub_int(int a, int b)
{
return a - b;
}
int mul_int(int a, int b)
{
return a * b;
}
int div_int(int a, int b)
{
if( b == 0 )
{
return 0;
}
else
{
return a/b;
}
}
b) z pliku nagłówkowego:
#ifndef INT_OPERATIONS_H_INCLUDED
#define INT_OPERATIONS_H_INCLUDED
enum operations_t {op_add = 0, op_sub = 1, op_div = 2, op_mul = 3};
int add_int(int a, int b);
int sub_int(int a, int b);
int mul_int(int a, int b);
int div_int(int a, int b);
#endif // INT_OPERATIONS_H_INCLUDED
c) pliku źródłowego:
#include <stdio.h>
#include <stdlib.h>
#include "int_operations.h"
int main()
{
printf("Enter numbers: ");
int a,b;
if(scanf("%d %d",&a,&b)!=2)
{
printf("Incorrect input");
return 1;
}
printf("Choose an operation: ");
enum operations_t wybor ;
if(scanf("%d",&wybor)!=1)
{
printf("Incorrect input");
return 1;
}
if(wybor < 0 || wybor > 3)
{
printf("Incorrect input data");
return 2;
}
return 0;
}
De facto... nie rozumiem o co chodzi z tą funkcja getfunction. Co ona ma robić? Jak rozpisać jej prototyp? Poprzednie zadanie było bardzo podobne do tego, tylko tam w parametrach funkcji oprócz a i b przekazywano wskaźnik na funkcję dodawania, odejmowania itd. . Następnie po sprawdzeniu w samym getfunction na jaką funkcję nasz wskaźnik wskazuje robiłem return-a z wynikiem add(a,b), sub(a,b) itd. A tutaj... co mam zrobić?