Tu masz już zasadniczą część wykonaną. Co oznacza że jeszcze wiele można zrobić. Zgodnie jednak z zasadą refaktoryzacji (i wzorcami refaktoryzacji), nie została złamana konwencja działania jakakolwiek by była dobra czy zła.
Już nie ma sprzężeń przez zmienne globalne. Dalej przemyślał bym działanie poszczególnych funkcji. A już szczególnie nazwy zmiennych w liczenieSredniej(). Ja zachowałem oryginały ale w mojej ocenie nazwy są mylące.
Wyeliminował bym (bo można) także makra detekcji systemu operacyjnego. Przynajmniej co do opóźnień (teraz można to zrobić przez std::this_thread::sleep_for(...) )
Jak widzisz "wyszło dłuższe ale czytelniejsze" :-)
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#ifdef _WIN32
#include <conio.h>
#include <windows.h>
#elif __unix__
#include <unistd.h>
#endif
using namespace std;
void pokazInstrukcje();
int pobierzWybor();
void liczenieSredniej();
int pobierzLosowaLiczbe();
void zgadywanieLiczby();
int main() {
int wybor;
for(;;) {
pokazInstrukcje();
wybor = pobierzWybor();
switch(wybor) {
case 1:
cout << "Wybrano program pierwszy\n\n";
liczenieSredniej();
break;
case 2:
cout << "Wybrano program drugi\n\n";
zgadywanieLiczby();
break;
case 3:
return EXIT_SUCCESS;
break;
default:
break;
}
}
return EXIT_SUCCESS;
}
void pokazInstrukcje() {
cout << "Instrukcja:\n"
"1. Kalkulator sredniej z ocen\n"
"2. Gra w zgadnij jaka to liczba\n"
"3. Wylacz program" << endl;
}
int pobierzWybor() {
string napisWyboru;
for(;;) {
cout << "Podaj numer programu:" << endl;
cin >> napisWyboru;
if(napisWyboru == "1" || napisWyboru == "1.") {
return 1;
} else if(napisWyboru == "2" || napisWyboru == "2.") {
return 2;
} else if(napisWyboru == "3" || napisWyboru == "3.") {
return 3;
}
cout << "Nieprawidlowy numer programu, sprobuj jeszcze raz za 3 sekundy"
<< endl;
#ifdef _WIN32
Sleep(3000);
system("cls");
#elif __unix__
usleep(3000);
system("clear");
#endif
}
}
void liczenieSredniej() {
int przedmioty;
int liczba;
float oceny;
int wynik = 1;
int kalkulator = 0; //koniec resetu
cout << "Kalkulator sredniej z ocen\n"
"Podaj liczbe ocen do sredniej:";
cin >> przedmioty;
if((przedmioty > 0)) {
while(kalkulator < przedmioty) {
cout << "Wpisz ocene:";
cin >> liczba;
if(liczba >= 1 && liczba <= 6) {
if(wynik == przedmioty) {
oceny = liczba + oceny;
cout << "Ilosc przedmiotow:\n" << przedmioty
<< "\nSuma twoich ocen:\n" << oceny
<< "\nTwoja srednia:\n" << oceny / przedmioty
<< "\nPowodzenia w szkole :)" << endl;
++kalkulator;
getchar();
getchar();
#ifdef _WIN32
system("cls");
#elif __unix__
system("clear");
#endif
} else {
oceny += liczba;
++wynik;
++kalkulator;
}
} else {
cout << "Wykryto nieprawidlowa liczbe, sprobuj jeszcze raz"
<< endl;
--kalkulator;
}
}
} else {
cout << "Liczba przedmiotow musi byc wieksza od 0!";
}
}
int pobierzLosowaLiczbe() {
cout << "Witaj! Pomyslalem sobie liczbe od 1 do 100" << endl;
srand(time(NULL));
return rand() % 100 + 1;
}
void zgadywanieLiczby() {
int ile_prob = 0; //reset
int liczba_losowa = pobierzLosowaLiczbe();
int strzal;
for(;;) {
++ile_prob;
cout << "Sprobuj jaka to liczba:";
cin >> strzal;
if(strzal < liczba_losowa) {
cout << "To za malo!\n";
} else if(strzal > liczba_losowa) {
cout << "To za duzo!\n";
} else if(strzal == liczba_losowa) {
cout << "Brawo, udalo Ci sie odgadnac! Wygrywasz w: "
<< ile_prob << " probie!" << endl;
getchar();
getchar();
#ifdef _WIN32
system("cls");
#elif __unix__
system("clear");
#endif
break;
}
cout << "(to była twoja " << ile_prob << " proba)" << endl;
}
}