C++ Połączenie dwóch programów w jeden z menu wyboru

0

Witam
Mam dwa algorytmy, jeden przedstawia średnią ważoną drugi zaś arytmetyczną. Potrzebuje je połączyć w jedną całość z możliwością Menu wyboru.
Pierwszy

#include <iostream>

using namespace std;

int t[101],i,n;float a;
int main ()
{
cin>>n;
for (i=1;i<=n;i++)
{
cin>>t[i];
t[i]=t[i]+t[i-1];
}
a=t[n]/n;cout<<a;
system ("pause");
return 0;
}

Drugi

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <math.h>

using namespace std;

int main()
{
int ilosc=0;
float ocena=0;
float srednia;
float waga=0;
double mianownik = 0;
double licznik = 0;
cout << "Podaj ilosc ocen";
cin >> ilosc;

for( int i = 1; i <= ilosc; i++ )
{
           cout << "Podaj ocene nr " << i << ": ";
    cin >> ocena;
    cout << "Podaj wage";
    cin >> waga;
        }
    
    srednia = 0;
    for(int i =1; i <= ilosc; i++)
    {                licznik += waga * ocena;
            mianownik += waga;
            }
    
    srednia = ( licznik / mianownik );       

cout << "Srednia wazona ocen wynosi = " << srednia << endl;

getch();
return(0);    
}
0

Opakuj to w funckje i daj switcha, jako wybór tego co chcesz policzyć.

0

To ja jeszcze zwrócę uwagę na kilka rzeczy

int t[101],i,n;float a; 

Nie rób zmiennych globalnych tam, gdy nie trzeba. Zmienne deklaruj w tym bloku, w którym będą potrzebne. W tym przypadku main.

for (i=1;i<=n;i++)

Nie używaj postinkrementacji (i postdekrementacji) jeżeli faktycznie nie potrzebujesz. Używaj preinkrementacji/predekrementacji (++i zamiast i++).

t[i]=t[i]+t[i-1];

Prościej to zapisać jako

t[i]+=t[i-1]
system ("pause");

Programy konsolowe z reguły nie powinny być zatrzymywane na siłę. Nie używaj tego typu konstrukcji, każde sensowne IDE zatrzyma konsole zamiast ją wyłączyć :)

Formatuj kod, a wrzucając go na forum koloruj składnie (jak piszesz posta, zaznacz kod i wybierz z listy rozwijanej kolorowanie składni c++).

include <math.h>

w C++ nie używa się math.h tylko cmath. Tak samo jak cstdlib zamiast stdlib.h itd.

 cout << "Srednia wazona ocen wynosi = " << srednia << endl;

Do przechodzenia do nowej linii używamy w C++ znaku \n, endl służy do wypychania danych ze strumienia. Poczytaj o tym, bo to popularny błąd.

getch();

To samo co pisałem przy system("PAUSE");

0
kubalone napisał(a):

Mam dwa algorytmy, jeden przedstawia średnią ważoną drugi zaś arytmetyczną.

Raczej odwrotnie.

  1. Zmień nazwy obu funkcji main, np. na srednia_arytmetyczna i srednia_wazona.
  2. Napisz nową funkcję main
int main()
{
    // wyświetl menu wyboru
    int opcja;
    cin >> opcja;
    switch (opcja)
    {
        case 1:
            srednia_arytmetyczna();
            break;
        case 2:
            srednia_wazona();
            break;
    }
    return 0;
}
0

Co do headerów cxxx i xxx.h to odpisze tutaj, bo w komentarzu troche byłoby to nieczytelne pewnie :)

Standard ISO/IEC 14882 dotyczący C++ mówi, że standardowa biblioteka dostarcza następujące nagłówki:

<algorithm> <iomanip> <list> <queue> <streambuf>
<bitset> <ios> <locale> <set> <string>
<complex> <iosfwd> <map> <sstream> <typeinfo>
<deque> <iostream> <memory> <stack> <utility>
<exception> <istream> <new> <stdexcept> <valarray>
<fstream> <iterator> <numeric> <strstream> <vector>
<functional> <limits> <ostream>

A rzeczy ze standardowej bibiloteki C są w następujących nagłówkach:
<cassert> <ciso646> <csetjmp> <cstdio> <ctime>
<cctype> <climits> <csignal> <cstdlib> <cwchar>
<cerrno> <clocale> <cstdarg> <cstring> <cwctype>
<cfloat> <cmath> <cstddef>

Ponadto Standard C++ mówi, że zawartość nagłówków cname i name.h powinny być takie same (określone w standardach C).

Do tego, jeżeli wielokrotnie dołączymy dany nagłówek, to oczywiście docelowo będzie dołączony raz, ale jeżeli my będziemy używać np. math.h, a ktoś użyje cmath w tym samym programie to już będą one dołączone oba, niezależnie od siebie.

0

Szczerze mowiac nie, ja zaczerpnąłem tylko info ze standardu.
Zazwyczaj wygląda w uproszczeniu tak:

// <cmath>
namespace std {
#include <math.h>
}

lub w podobnej wariacji.

W rzeczywistości to jest tam więcej różnych makr i śmiecia — ale ogólną zasadą jest „pójście na łatwiznę”.
Ale trzeba mieć na uwadze, że standard wcale nie mówi że nagłówki mają być w ten sposób inkludowane.

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