Найти в файле строки, содержащие определенные значения

Задача

В текстовый файл построчно записаны фамилия и имя учащихся класса и его оценка за контрольную. Вывести на экран всех учащихся, чья оценка меньше 3 баллов и посчитать средний балл по классу.

Примерное содержание файла:

Иванов О. 4
Петров И. 3
Дмитриев Н. 2
Смирнова О. 4
Керченских В. 5
Котов Д. 2
Бирюкова Н. 1
Данилов П. 3
Аранских В. 5
Лемонов Ю. 2
Олегова К. 4

Пояснение к задаче и алгоритм решения

До того, как будет считываться содержимое файла, надо присвоить двум переменным нули. В одной из них будет накапливаться сумма баллов, а в другой - количество строк (количество человек). Средний балл находится при делении суммы на количество.

После того, как файл будет открыт, его надо считывать построчно. Из каждой строки надо "вырезать" оценку. Это последний или предпоследний символ строки. Если оценка меньше, чем 3, то выводить всю строку на экран.

Полученную оценку из каждой строки, надо преобразовывать к целому числу и добавлять к сумме, а также при считывании каждой строки увеличивать на 1 счетчик человек.

После того, как будет достигнут конец файла, его надо закрыть, посчитать средний балл и вывести его на экран.

Исходный код на языке программирования Pascal

var
    f: text;
    s: string;
    sum,g,n: word;
begin
    assign(f,'class8.txt');
    reset(f);
    sum := 0;
    n := 0;
    while not eof(f) do begin
        readln(f,s);
        val(s[length(s)],g);
        sum := sum + g;
        n := n + 1;
        if g < 3 then
            writeln(s);
    end;
    writeln('Средний балл: ', sum/n:4:2);
end.

Пример(ы) выполнения программы на языке Pascal

Дмитриев Н. 2
Котов Д. 2
Бирюкова Н. 1
Лемонов Ю. 2
Средний балл: 3.18

Исходный код на языке программирования C

#include <stdio.h>
 
main() {
    FILE *f;
    char s1[20], s2[3];
    unsigned g, sum, n;
    f = fopen("class8.txt","r");
    sum = n = 0;
    while (fscanf(f, "%s%s%u", s1, s2, &g) != EOF) {
        if (g < 3) printf("%s %s %d\n",s1,s2,g);
        sum += g;
        n += 1;
    }
    fclose(f);
    printf("Средний балл: %.2f\n", (float)sum/n);
}

Исходный код на языке программирования Python

f = open('class8.txt')
suma = 0
n = 0
for i in f:
    g = int(i[len(i)-2])
    suma += g
    n += 1
    if g < 3:
        print(i[:-1])
print('Средний балл: %.2f' % (suma/n))

Исходный код на языке программирования Basic

open "class8.txt"
sum = 0
n = 0
while not eof  
        s$ = readline
        g = int(right(s$,2))
        if g < 3 then print s$;
        sum = sum + g
        n = n + 1
endwhile
close
print "Средний балл: ";
print sum/n

Тема

Файлы

Уровень сложности

Средний

Дата публикации