Program liczący iloczyn 5 największych wartości z 6. Język C

0

Witam. Bardzo proszę o pomoc, w napisaniu programu w języku C, jest to banalny program, aczkolwiek ja tego języka w ogole się nie uczyłem, dopiero zaczynam, mimo to mam trudności z napisaniem następującego programu:
Napisz funkcję w języku C 6 - parametrową ( a b c d e f) która wyliczy wartość mnożenia 5 największych parametrów - parametr najmniejszy odrzuci.

Z góry dziękuję!

0

Pokaż co już zrobiłeś lub napisz z czym konkretnie masz problem.

0
#include <stdio.h>
#include <stdlib.h>

il(float a, float b ,float c ,float d, float e, float f, float min)
{
	return a*b*c*d*e*f/min;
	
}

int main()
{
	float a,b,c,d,e,f,min,wynik;
	
	scanf("%f",&a);
	scanf("%f",&b);
	scanf("%f",&c);
	scanf("%f",&d);
	scanf("%f",&e);
	scanf("%f",&f);
	
	
	if(a<b&&a<c&&a<d&&a<e&&a<f) {min=a;wynik=il(a,b,c,d,e,f,min);}
	else if(b<a&&b<c&&b<d&&b<e&&b<f)min=b;wynik=il(a,b,c,d,e,f,min);}
	else if(c<a&&c<b&&c<d&&c<e&&c<f)min=c;wynik=il(a,b,c,d,e,f,min);}
	else if(d<a&&d<b&&d<c&&d<e&&d<f){min=d;wynik=il(a,b,c,d,e,f,min);}
	else if(e<a&&e<b&&e<c&&e<d&&e<f){min=e;wynik=il(a,b,c,d,e,f,min);}
	else {	min=f;wynik=il(a,b,c,d,e,f,min);}
	
	
	
	system("pause");	
	return 0;

I problem polega na tym wlaśnie , czemu nie chce wczytac mi funkcji "il"??
Co trzeba jeszcze zrobić aby ten program zadziałał?

0

Podpowiedź: jaki typ zwraca funkcja ?

...

Po pierwsze nie napisałeś w deklaracji/definicji funkcji, jaki typ danych zwraca. Po drugie nie ma nawiasu klamrowego zamykającego main(), nie ma też nawiasów klamrowych otwierających w dwóch instrukcjach if(){}. No i jeszcze brak "#" w dyrektywach preprocesora.

0

Ja tam się nie znam, ale jak dla mnie to ten kod jest niezgodny z treścią zadania.

0

Funkcja powinna ustalać najmniejszą liczbę, a nie przyjmować na parametrze. Popraw kod (między innymi uzupełnij o brakujące nawiasy) i wklejając na forum użyj kolorowania składni

0
#define MUL_NEXT(z) if (z<minimum) { result *=minimum; minimum=z; } else result *=z;

double someF(doube a, doube b, doube c, doube d, doube e, doube f) {
    double result = 1.0;
    double minimum = a;

    MUL_NEXT(b);
    MUL_NEXT(c);
    MUL_NEXT(d);
    MUL_NEXT(e);
    MUL_NEXT(f);
    return result;
}
0

Tak, tylko że ja nie mam pomysłu jak to poprawić... no cóż jakos sie moze bez tego zadania obejdzie :) dziękuję za zainteresowanie i wskazówki!

0

Liczby wpisz do tablicy. Posortuj rosnąco lub malejąco dowolną metodą i wymnóż 5 elementów tablicy.

0

Nie możesz dzielić przez min, co jeśli będzie zerem?
Musisz "odfiltrować" wartość minimalną i nie dopuścić do przemnożenia przez nią.

Można zrobić coś prostego:

if(a<b&&a<c&&a<d&&a<e&&a<f) return b*c*d*e*f;
if(b<a&&b<c&&b<d&&b<e&&b<f) return a*c*d*e*f;
if(c<a&&c<b&&c<d&&c<e&&c<f) return a*b*d*e*f;
if(d<a&&d<b&&d<c&&d<e&&d<f) return a*b*c*e*f;
if(e<a&&e<b&&e<c&&e<d&&e<f) return a*b*c*d*f;
return a*b*c*d*e;

ale raczej mało eleganckiego.

Kod poniżej na wstępie przyjmuje za wartość minimalną wartość zmiennej a. Następnie przechodzi po kolei po pozostałych elementach (od b do f ) wyszukując minimum. Jeśli takie znajdzie to wstawia w miejsce zmiennej poprzednią wartość minimum.
Dzięki takiemu postępowaniu minimum zostanie wyłączone ze zmiennych b - f, zostaną wyłącznie wartości do przemnożenia.

float min = a;
if (min < b) swapf(&min, &b);
if (min < c) swapf(&min, &c);
if (min < d) swapf(&min, &d);
if (min < e) swapf(&min, &e);
if (min < f) swapf(&min, &f);

return b * c * d * e;

Funkcję swapf trzeba sobie napisać, ma ona zamienić miejscami dwie zmienne typu float:

void swapf(float *x, float *y)

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