Zablokowanie operacji modulo dla liczb rzeczywistych

0

Mam pewien dylemat. Otóż zacząłem niedawno pisać w C. I przerabiam sobie zadania z tej strony https://www.is.umk.pl/~grochu/wiki/doku.php?id=zajecia:jpr_2009_2:zajecia2. I mam problem z pewnym podpunktem. Chodzi o ten podpunkt:
Zmień program tak aby działał dla liczb rzeczywistych (bez operacji modulo (%), która może być wykonana tylko dla liczb całkowitych.
Mój dotychczasowy kod wygląda tak:

int numberOne, numberTwo;
	printf("Podaj liczbe pierwszą\n");
	scanf("%d", &numberOne);
	printf("Podaj liczbe drugą\n");
	scanf("%d", &numberTwo);
	printf("Suma tych licz to:%df\n", numberOne+numberTwo);
	printf("Różnica tych licz to:%df\n", numberOne-numberTwo);
	printf("Iloczyn tych licz to:%df\n", numberOne*numberTwo);
	printf("Iloraz tych licz to:%df\n", numberOne/numberTwo);
	printf("Reszta z dzielenia tych licz to:%d\n",numberOne%numberTwo);

Zastanawiałem się po prostu czy nie zrobić tutaj aby przypadkiem jakiejś instrukcji warunkowej, która by mi sprawdzała jakie liczby podał mi użytnik i na tej podstawie wykonać odpowiednie operacje matematyczne.

int numberOne, numberTwo;
	printf("Podaj liczbe pierwszą\n");
	scanf("%d", &numberOne);
	printf("Podaj liczbe drugą\n");
	scanf("%d", &numberTwo);
if(numberOne==int&&numberTwo==int){
//wykonają się wszystkie operacje matematyczne kiedy użytnik poda mi liczby całkowite
	printf("Suma tych licz to:%df\n", numberOne+numberTwo);
	printf("Różnica tych licz to:%df\n", numberOne-numberTwo);
	printf("Iloczyn tych licz to:%df\n", numberOne*numberTwo);
	printf("Iloraz tych licz to:%df\n", numberOne/numberTwo);
	printf("Reszta z dzielenia tych licz to:%d\n",numberOne%numberTwo);
}else{
//a tu wykonają się wszystkie operacje matematyczne oprócz dzielenia z resztą kiedy użytnik poda liczby rzeczywiste
	printf("Suma tych licz to:%df\n", numberOne+numberTwo);
	printf("Różnica tych licz to:%df\n", numberOne-numberTwo);
	printf("Iloczyn tych licz to:%df\n", numberOne*numberTwo);
	printf("Iloraz tych licz to:%df\n", numberOne/numberTwo);
}

Proszę o pomoc gdyż jestem początkujący w języku C. Dziękuje
Chyba że jest jeszcze taka możliwość aby wszystko na flloat pozamieniać bez tej instrukcji warunkowej.
Mój obecny kod

float numberOne, numberTwo;
	printf("Podaj liczbe pierwszą\n");
	scanf("%f", &numberOne);
	printf("Podaj liczbe drugą\n");
	scanf("%f", &numberTwo);
	printf("Suma tych licz to:%.2f\n", numberOne+numberTwo);
	printf("Różnica tych licz to:%.2f\n", numberOne-numberTwo);
	printf("Iloczyn tych licz to:%.2f\n", numberOne*numberTwo);
	printf("Iloraz tych licz to:%.2f\n", numberOne/numberTwo);
	printf("Reszta z dzielenia tych licz to:%.2f\n",numberOne%numberTwo);

Tylko wtedy trzeba by wyrzucić ostatnią linijke:


	printf("Reszta z dzielenia tych licz to:%.2f\n",numberOne%numberTwo);

bo gdy tego nie zrobie to kompilator nie wie co to jest '%'

1

Czym inny jest typ zmiennej, a czym innym jest fakt, że zmienna zmiennoprzecinkowa przechowuje liczbę całkowitą.

Z tego, co rozumiem, chodzi o to, że użytkownik podaje liczby zmiennoprzecinkowe, a w zależności, czy one są całkowite, wyświetla lub nie wyświetla resztę z dzielenia.

Moim zdaniem, to dołączasz nagłówek math.h i robisz warunek:

if ((((round(numberOne) * 100) == round(numberOne * 100))) && (((round(numberTwo) * 100) == round(numberTwo * 100))))
{
    int numberOneI = numberOne;
    int numberTwoI = numberTwo;
    printf("Reszta z dzielenia tych licz to:%.2f\n",numberOneI%numberTwoI);
}

Mnożenie przez 100 jest po to, żeby uzyskać zaokrąglenie do 2 miejsc po przecinku. Ba to na celu wyeliminowanie problemu wynikającego z właściwości liczb zmiennoprzecinkowych takich, że w niektórych przypadkach, liczba 123 może być tak naprawdę liczbą 122.99999999 lub 123.00000001. Zaokrąglenie do drugiego miejsca obetnie końcówkę na ostatnim miejscu po przecinku.

Liczba całkowita najpierw pomnożona przez X, potem zaokrąglona jest zawsze równa liczbie najpierw zaokrąglonej, potem pomnożonej przez X, gdzie X jest dowolną liczbą, która determinuje dokładność zaokrąglenia liczby ułamkowej.

5

Za dużo myślisz, w tym podpunkcie chodzi po prostu byś zmodyfikował swój program (zamienił %d na %f lub %lf, typ na zmiennoprzecinkowy i wywalił linię z dzieleniem modulo). Nigdzie nie jest napisane, że program musi obsługiwać oba rodzaje liczb naraz (całkowite z dzieleniem modulo i rzeczywiste bez niego).

0

Dla liczb zmiennoprzecinkowych też dostępna jest operacja modulo: - fmod()

1 użytkowników online, w tym zalogowanych: 0, gości: 1