Trochę dla wprawki, napisałem to w nowoczesnym C++. Może komuś się przyda:
EDIT: Poprawiony błąd w czyWynikPrzedmiotu50iWiecej.
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <tuple>
int main() {
std::vector<unsigned> sprawdziany;
std::copy_n(std::istream_iterator<unsigned>(std::cin), 4,
std::back_inserter(sprawdziany));
// Bo ostatnim elementem jest egzamin.
auto kolokwiaKoniec = sprawdziany.cend() - 1;
bool czyKolokwiaZdane = std::count_if(sprawdziany.cbegin(), kolokwiaKoniec,
[](const unsigned wynik) {
return wynik >= 40;
}) >= 2;
bool czyEgzaminZdany = *kolokwiaKoniec >= 40;
bool czyWynikPrzedmiotu50iWiecej = ((std::accumulate(sprawdziany.cbegin(),
sprawdziany.cend(), 0) + *kolokwiaKoniec) / 5) >= 50;
auto wyniki = std::make_tuple(
czyKolokwiaZdane, czyEgzaminZdany, czyWynikPrzedmiotu50iWiecej);
// Kryteria decyzji
auto zdany = std::make_tuple(true, true, true);
auto dopytka = std::make_tuple(true, true, false);
if(zdany == wyniki) {
std::cout << "ZDANY";
} else if(dopytka == wyniki) {
std::cout << "DOPYTKA";
} else {
std::cout << "NIEZDANY";
}
}