Zadanie C++. Menu z wyborem fukcji

0

Witajcie

Mam do napisania program w c++, jako że juz brakuje mi pomysłu jak połoczyć wszystko aby działało Bardzo bym prosił o to was. W program mam wpisywać cztery zmienne, następnie ma mi się otworzyć menu z wyborem:
1.Wskazania największej liczby
2.Najmniejszej liczby
3.Ma policzyc Srednią
4.Policzyć działanie (a+b+c+d)/4
5. Policzyć średnią ważoną
6. Zakończyć program

Program ma działać dopoki nie wcisnę zakoncz

W programie maja być użyte fukcje switch, for, dauble, for, while.

Nie mogą być gotowe funkcje liczące.

Liczę że ktoś mi pomoże ewentualnie wskaże drogę, kazda moja proba sklejania kodów z neta kończy się serią błedów.

`#include <iostream>
#include <conio.h>

using namespace std;
int a;
int b;
int c;
int d;
int wybor;
int ilosc_ocen=4;

int main()
{

 cout<<""<<endl;
cout<<"Podaj a: ";
cin>>a;
cout<<"Podaj b: ";
cin>>b;
cout<<"Podaj c: ";
cin>>c;
cout<<"Podaj d: ";
cin>>d;


cout<<"MENU"<<endl;
cout<<"1.MAX"<<endl;
cout<<"2.MIN"<<endl;
cout<<"3.Srednia"<<endl;
cout<<"4.(a+b)/(c+d)"<<endl;
cout<<"5.Srednia wazona"<<endl;
cout<<"6.Zakoncz program"<<endl;
cout<<"Wybierz opcje: "<<endl;`
1

kończy się serią błedów.

1. Poki co są to, jak widzę, błędy kompilacji. Brakuje jakiegokolwiek zakończenia programu, czyli zakończenia funkcji main().
2. Brakuje też ogólnie instrukcji switch(), która stanowiłaby menu.
3. Nie wiem czym różni się działanie z punktu 4. Policzyć działanie (a+b+c+d)/4 od punktu 3. Ma policzyc Srednią.
4. W poleceniu masz dokładnie podane rzeczy, których masz użyć. Wystarczy otworzyć dowolny kurs omawiający pętle i wykorzystać je zgodnie z tutorialem. Podstawy widzę już masz ;)

1
#include <iostream>

using namespace std;

int max(int oceny[], int ilosc_ocen)
{
	int max = oceny[0];
	for (unsigned int i = 1; i < ilosc_ocen; ++i)
		if (max < oceny[i])
			max = oceny[i];
	return max;
}

int min(int oceny[], int ilosc_ocen)
{
	int min = oceny[0];
	for (unsigned int i = 1; i < ilosc_ocen; ++i)
		if (min > oceny[i])
			min = oceny[i];
	return min;
}

float srednia(int oceny[], int ilosc_ocen)
{
	float srednia = 0;
	for (unsigned int i = 0; i < ilosc_ocen; ++i)
		srednia = srednia + oceny[i];
	return (srednia / ilosc_ocen);
}

float f1(int oceny[])
{
	float gora = (oceny[0] + oceny[1]);
	float dol = (oceny[2] + oceny[3]);
	return gora / dol;
}

int main()
{
	int a;
	int b;
	int c;
	int d;
	int wybor;
	const int ilosc_ocen = 4;
	int oceny[ilosc_ocen];

	cout << "Podaj a: ";
	cin >> a;
	oceny[0] = a; //dodaje ocene
	
	cout << "Podaj b: ";
	cin >> b;
	oceny[1] = b; //dodaje ocene

	cout << "Podaj c: ";
	cin >> c;
	oceny[2] = c; //dodaje ocene

	cout << "Podaj d: ";
	cin >> d;
	oceny[3] = d; //dodaje ocene

	while(true)
	{
		cout << "\nMENU" << endl;
		cout << "1.MAX" << endl;
		cout << "2.MIN" << endl;
		cout << "3.Srednia" << endl;
		cout << "4.(a+b)/(c+d)" << endl;
		cout << "5.Srednia wazona" << endl;
		cout << "6.Zakoncz program" << endl;
		cout << "Wybierz opcje: " << endl;
		cin >> wybor;
		cout << endl;

		switch (wybor)
		{
		case 1:
			cout << "Najwyzsza ocena to: " << max(oceny, ilosc_ocen) << endl;
			break;
		case 2:
			cout << "Najnizsza ocena to: " << min(oceny, ilosc_ocen) << endl;
			break;
		case 3:
			cout << "Srednia ocen to: " << srednia(oceny, ilosc_ocen) << endl;
			break;
		case 4:
			cout << "(a+b)/(c+d): " << f1(oceny) << endl;
			break;
		case 5:
			cout << "Brak." << endl;
			break;
		case 6:
			return 0;
			break;
		default:
			cout << "Nie ma takiej opcji" << endl;
			break;
		}
	}
	return 0;
}
0

@@tomcze15 Dzięki, ja też coś nabazgrałem w miedzy czasie. Jak dodać do tego srednią ważoną ?

``
`#include <iostream>
using namespace std;
int main()

{

int a, b, c,d,sr;
int max, min;
int x;
int wybor;

cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
cout << "Podaj trzecia liczbe: ";
cin >> c;
cout<<"Podaj czwarta liczbe: ";
cin>>d;

cout<<"MENU"<<endl;
cout<<"1.MAX"<<endl;
cout<<"2.MIN"<<endl;
cout<<"3.Srednia"<<endl;
cout<<"4.(a+b)/(c+d)"<<endl;
cout<<"5.Srednia wazona"<<endl;
cout<<"6.Zakoncz program"<<endl;
cout<<"Wybierz opcje: "<<endl;
cin>>wybor;

if (a > b)
x = a; else x = b;
if (x > c)
max = x; else max = c;
if (d>max)
max=d;

if (a < b)
x = a; else x = b;
if (x < c)
min = x; else min = c;
if (d<min)
min=d;

switch(wybor)
{
case 1:
cout << "Najwieksza liczba jest liczba "<< max << endl;
break;

    case 2:
    cout << "Najmniejsza liczba jest liczba "<< min << endl;   
    break;
    
    
    
}    

}```

0

Jest na to mnóstwo sposobów. Twój program jest bardzo prosty, więc zrobiłbym to w najprostszy sposób. Ustalił bym z góry wagi tych ocen. Chodzi mi o to, że jak użytkownik poda ocenę 'a' to wiem, że ona ma wagę np. 3, jak poda ocenę 'b' wiem, że ma wagę 1 itd. I umieścił bym to wszystko w funkcji.

float sredniaWazona(int oceny[]) 
{
	//ocena[0] waga: 3
	//ocena[1] waga: 1
	//ocena[2] waga: 4
	//ocena[3] waga: 2
	float gora = oceny[0] * 3 + oceny[1] * 1 + oceny[2] * 4 + oceny[3] * 2;
	float dol = 10; //Suma wag ocen
	return gora / dol;
}
0

Czy mogłbym was prosić o wklejenie tego kodu programu:
Tylko chciałbym zeby liczby zczytywało mi z int a,b,c,d czyli tych co podałem w swoim kodzie

int main()
{
    int ilosc_ocen=0, oceny=0, suma_ects=0;
    double srednia=0.0, suma=0.0;
 
    cout << "Witaj, powiedz z ilu ocen chcesz liczyc srednia: ";
    cin >> ilosc_ocen;
 
    double ocena[ilosc_ocen], ects [ilosc_ocen];
 
        for(oceny=1; oceny<=ilosc_ocen ; oceny ++)
        {
 
            cout << "Podaj " << oceny << " ocene: ";
            cin >> ocena [oceny] ;
            cout << "Podaj ilosc punktow ECTS za te ocene:  ";
            cin >> ects [oceny];
 
            suma += ocena[oceny]*ects[oceny];
            suma_ects +=ects[oceny];
 
        }
            srednia=suma/suma_ects;

Do kodu mojego:

#include <iostream>
using namespace std;





int main()

{

int a, b, c,d;
int max, min;
int x;
int wybor;
double srednia;

int g, n;
double w = 0.0;




cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "Podaj druga liczbe: ";
cin >> b;
cout << "Podaj trzecia liczbe: ";
cin >> c;
cout<<"Podaj czwarta liczbe: ";
cin>>d;




    cout<<"MENU"<<endl;
    cout<<"1.MAX"<<endl;
    cout<<"2.MIN"<<endl;
    cout<<"3.Srednia"<<endl;
    cout<<"4.(a+b)/(c+d)"<<endl;
    cout<<"5.Srednia wazona"<<endl;
    cout<<"6.Zakoncz program"<<endl;
    cout<<"Wybierz opcje: "<<endl;
    cin>>wybor;



 if  (a > b)
	 x = a; else x = b;
 if (x > c)
	max = x; else max = c;
 if (d>max)
	 max=d;



if  (a < b)
	x = a; else x = b;
if  (x < c)
	min = x; else min = c;
if (d<min)
	 min=d;



//Srednia
std::cin >> n;

for( int i = 0; i < n; i++ )
{

    std::cin >> g;
    w += g;


}

//Srednia wa¿ona






switch(wybor)
    {
        case 1:
        cout << "Najwieksza liczba jest liczba "<< max << endl;
        break;

        case 2:
        cout << "Najmniejsza liczba jest liczba "<< min << endl;
        break;

        case 3:
        cout << "Srednia to: "<< w/n  << endl;
        break;

        case 4:

        break;

        case 5:

        break;



    }
}

Z góry bardzo Dziękuję

0

Nie ma sensu używać Twoich zmiennych w pętli, lepiej to zrobić wykorzystując do tego tablicę.

W Visual Studio 2017 wyskakują mi błędy. Kod, który wysłałeś jest nie poprawny albo kompilator którego używasz pozwala na takie konstrukcje.

Twoje tablice powinny być typu wskaźnikowego żeby działało to poprawnie. Osobiście polecam Ci użycie kontenerów z biblioteki STL np. vector.

double	*ocena	= new double[ilosc_ocen];
double	*ects	= new double[ilosc_ocen];
0

Tomcze15 czy mógłbyś mnie bardziej nakierować?
Ja korzystam z codbloksa

0

Weź sformatuj kod (wcięcia jak trzeba, nowe linie tam gdzie trzeba), https://stackoverflow.com/a/26349153/1387438 (sam sobie musisz zdefiniować skrót klawiszowy), albo używając strony http://format.krzaq.cc/

Do średniej ważonej potrzebujesz informacji o wagach ocen. Skąd masz dostać te wagi?

0

@MarekR22: mogę zdefiniować stałe, albo wpisywać je ręcznie za każdym razem

0

Trzymaj program mniej więcej tak jak potrzebowałeś.

#include <iostream>

using namespace std;

double max(double* oceny, int ilosc_ocen)
{
	double max = oceny[0];
	for (unsigned int i = 1; i < ilosc_ocen; ++i)
		if (max < oceny[i])
			max = oceny[i];
	return max;
}

double min(double* oceny, int ilosc_ocen)
{
	double min = oceny[0];
	for (unsigned int i = 1; i < ilosc_ocen; ++i)
		if (min > oceny[i])
			min = oceny[i];
	return min;
}

double srednia(double* oceny, int ilosc_ocen)
{
	double srednia = 0;
	for (unsigned int i = 0; i < ilosc_ocen; ++i)
		srednia += oceny[i];
	return (srednia / ilosc_ocen);
}

double f1(double* oceny)
{
	double gora = (oceny[0] + oceny[1]);
	double dol = (oceny[2] + oceny[3]);
	return gora / dol;
}

double sredniaWazona(double* oceny, double  *ects, int ilosc_ocen)
{
	double suma = 0, suma_ects = 0;
	for (unsigned int i = 0; i < ilosc_ocen; ++i)
	{
		suma += oceny[i] * ects[i];
		suma_ects += ects[i];
	}

	return suma / suma_ects;
}

int main()
{
	int wybor, ilosc_ocen = 4;
	double  *oceny, *ects;
	double suma = 0, suma_ects = 0, sr = 0;

	cout << "Witaj, powiedz z ilu ocen chcesz liczyc srednia: ";
	cin >> ilosc_ocen;

	oceny	= new double[ilosc_ocen];
	ects	= new double[ilosc_ocen];

	cout << endl;
	for (unsigned int i = 0; i < ilosc_ocen; ++i)
	{
		cout << "Podaj ocene nr " << (i + 1) << ": ";
		cin >> oceny[i];
		cout << "Podaj wage oceny nr " << (i + 1) << ": ";
		cin >> ects[i];
		cout << endl;
	}

	while (true)
	{
		cout << "\nMENU" << endl;
		cout << "1.MAX" << endl;
		cout << "2.MIN" << endl;
		cout << "3.Srednia" << endl;
		cout << "4.(a+b)/(c+d)" << endl;
		cout << "5.Srednia wazona" << endl;
		cout << "6.Zakoncz program" << endl;
		cout << "Wybierz opcje: " << endl;
		cin >> wybor;
		cout << endl;

		switch (wybor)
		{
		case 1:
			cout << "Najwyzsza ocena to: " << max(oceny, ilosc_ocen) << endl;
			break;
		case 2:
			cout << "Najnizsza ocena to: " << min(oceny, ilosc_ocen) << endl;
			break;
		case 3:
			cout << "Srednia ocen to: " << srednia(oceny, ilosc_ocen) << endl;
			break;
		case 4:
			cout << "(a+b)/(c+d): " << f1(oceny) << endl;
			break;
		case 5:
			cout << "Srednia wazona ocen to: " << sredniaWazona(oceny, ects, ilosc_ocen) << endl;
			break;
		case 6:
			return 0;
			break;
		default:
			cout << "Nie ma takiej opcji" << endl;
			break;
		}
	}
	return 0;
}
0

@tomcze15: ilość liczb chcę żeby była taka sama czyli 4 .
Średnia miało by liczyć dopiero po wybraniu z menu
A liczby chciałbym podać na samym początku:
Podaję liczby i ich wagę
I wtedy wybieram z menu co chcę liczyć

Mógłbyś to przerobić ?

0

ilość liczb chcę żeby była taka sama czyli 4 .

Usuń ten kawałek kodu i masz gotowe, ponieważ...

cout << "Witaj, powiedz z ilu ocen chcesz liczyc srednia: ";
cin >> ilosc_ocen;

... ustawiłem, że przy starcie programu domyślnie ilość ocen wynosi 4.

ilosc_ocen = 4;

Średnia miało by liczyć dopiero po wybraniu z menu

Jest liczona po wybraniu opcji z menu.

A liczby chciałbym podać na samym początku:
Podaję liczby i ich wagę
I wtedy wybieram z menu co chcę liczy

Przecież podajesz oceny na samym początku oraz ich wagi. Potem wybierasz opcję z menu, a wartości ocen i ich wagi zostają nie zmienione.

ps. Jak chcesz to usuń te zmienne, bo są niepotrzebne. Zapomniałem je usunąć.

double suma = 0, suma_ects = 0, sr = 0;

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