Clasa a IX-a · Fișiere textRead in English

Numărarea valorilor dintr-un fișier în C++

În engleză: Counting the values in a file

O(n)C++1746 de linii1 exemplufolosește date.in / date.out

Ideea

Fișierul date.in conține pe prima linie un număr natural k, iar pe următoarele linii un șir de numere naturale de lungime necunoscută. Citim până la sfârșitul fișierului și numărăm câte valori sunt în total, câte sunt divizibile cu k și care este cea mai mare dintre ele. Rezultatele se scriu în date.out, pe un rând.

Descrierea în engleză

The file date.in contains a natural number k on the first line, and on the following lines a sequence of natural numbers of unknown length. We read until the end of the file and count how many values there are in total, how many are divisible by k and which one is the largest. The results are written to date.out, on one line.

Complexitate
O(n)
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare (date.in)

3
9 4 12 7
30 5 6

Ieșire așteptată (date.out)

7 4 30

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

numararea-valorilor.cpp
/*
 * Titlu: Numărarea valorilor dintr-un fișier
 * Clasa: 9
 * Capitol: Fișiere text
 * Descriere: Fișierul date.in conține pe prima linie un număr natural k, iar pe
 *            următoarele linii un șir de numere naturale de lungime necunoscută.
 *            Citim până la sfârșitul fișierului și numărăm câte valori sunt în
 *            total, câte sunt divizibile cu k și care este cea mai mare dintre ele.
 *            Rezultatele se scriu în date.out, pe un rând.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 3
 * 9 4 12 7
 * 30 5 6
 * Ieșire: 7 4 30
 */
#include <fstream>
using namespace std;

int main()
{
    ifstream fin("date.in");
    ofstream fout("date.out");
    long long k, x, maxim = -1;
    int total = 0, divizibile = 0;
    fin >> k;
    while (fin >> x)
    {
        total++;
        if (x % k == 0)
        {
            divizibile++;
        }
        if (x > maxim)
        {
            maxim = x;
        }
    }
    fout << total << ' ' << divizibile << ' ' << maxim << '\n';
    fin.close();
    fout.close();
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.