Zadanie 58.3 – matura

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//Autor: Marcin Przybył
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ROZMIAR 3

using namespace std;

int main(int argc, char** argv)
{
    ifstream file[ROZMIAR]; //3 pliki
    string nazwy[ROZMIAR] = {"dane_systemy1.txt", "dane_systemy2.txt", "dane_systemy3.txt"};

    for(int i=0; i<ROZMIAR; i++) {
        file[i].open(nazwy[i].c_str());
    }

    ofstream fileOut; //plik wynikowy do zapisu
    fileOut.open("wyjscie.txt"); //otworz plik do wynikow
    char* endptr; // to jest wskaźnik na miejsce, gdzie przy konwersji z systemu czworkowego wystąpi błąd - nieużywana zmienna

    string liczba1[ROZMIAR];//dwie liczby wczytujemy jako "string" bo mogą być dłuższe od long long
    string liczba2[ROZMIAR];
    long long liczba3[ROZMIAR];

    long long rekord[ROZMIAR];

    int rekordy = 0;  //ile dni rekordowych
    bool pierwszy;
    bool znaleziono;

    if(file[0].good() && file[1].good() && file[2].good() ) {  //sprawdzenie czy pliki istnieją
    int linia = 0;
    while(!file[0].eof())
    {
        linia++;
        int system = 1;
        for(int i=0;i<ROZMIAR;i++) {
            file[i]>>liczba1[i] >> liczba2[i];
            liczba3[i] =  strtol(liczba2[i].c_str(), &endptr, system*= 2); //mnoży system razy dwa, na początku 1 => 2, 2=>4, 4=>8
            //cout << liczba3[i] << ", ";
        }
        if(pierwszy){
            for(int i = 0; i < ROZMIAR; i++){
                rekord[i] = liczba3[i];
            }
            rekordy++;
            pierwszy = false;
        }else{
            //mcout << linia << endl;
            znaleziono = false;
            for(int i = 0; i < ROZMIAR; i++){
                if(liczba3[i] > rekord[i]){
                    rekord[i] = liczba3[i];
                    //cout << "REKORD " << rekordy+1 << endl;
                    znaleziono = true;
                }
            }
            if(znaleziono) rekordy++;
        }
        //cout<< endl;
    }
    fileOut<< "58.3: " << rekordy <<endl; //zapisanie najmniejszej liczby z pliku czworkowego do pliku wynikowego
        for(int i=0; i<ROZMIAR; i++) {
            file[i].close();
        }
    }
    fileOut.close();
 return 0;
}