Работа с текстовым файлом - PascalABC.NET (24921)

Узнай цену своей работы

Формулировка задачи:

Уважаемые программисты! Условие задачи следующее: Вывести ФИО и оценки по физике, средний балл которых больше 4,5 балла. Сам только написал программу вывода самого текстового файла на экран. Все, что смог сделать..
Файл был создан в блокноте: Группа ФИО Год рождения Пол Оценки по физике Оценки по математике Оценки по информатике Степендия 101 Попов Виктор Алексеевич 1995 М 55545 45344 43544 2000 101 Алексеев Игорь Алексеевич 1994 М 54453 45533 33354 1800 102 Иванов Игорь Олегович 1995 М 44435 44444 53334 1900 104 Петрова Ольга Дмитриевна 1996 Ж 55545 43544 55544 2000 103 Круглова Ирина Ивановна 1994 Ж 55434 43234 55433 1900 104 Сидоров Григорий Ильич 1993 М 55455 35435 23543 1800 101 Иванников Олег Огегович 1995 М 55552 43533 45453 1900 104 Кириллова Дарья Валерьевна 1995 Ж 55554 43433 55555 1900 102 Пантюхина Ксения Владимировна 1994 Ж 33335 45343 54545 1900 105 Зайцев Павел Дмитриевич 1995 М 55555 33333 44444 2000 Пожалуйста помогите!

Решение задачи: «Работа с текстовым файлом»

textual
Листинг программы
const
  fName = 'pro.txt';
  findStr = 'информатика'; // данное слово должно быть с третьей до предпоследней позиции
  findYear = 1990; // год должен быть не менее заданного и идти последним словом
begin
  foreach var S : String in ReadLines(fName) do
    begin
      var IndexStr := 0;
      var IndexYear := 0;
      var Index := 0;
      foreach var W : String in S.ToWords(' ') do
        begin
          Index += 1;
          if W.ToUpper = findStr.ToUpper then
            IndexStr := Index;
          try
            if StrToInt(W) >= findYear then
              IndexYear := Index;
          except
          end;
        end;
      if (IndexStr > 2) and (IndexStr < Index) and (IndexYear = Index) then // вот здесь мы и выявим правильность позиций
        WriteLn(S);
    end;
end.

Объяснение кода листинга программы

  1. Объявлены константы:
    • fName = 'pro.txt' - путь к текстовому файлу
    • findStr = 'информатика' - строка, которую нужно найти в файле
    • findYear = 1990 - год, который должен быть последним найденным словом
  2. Создается цикл, который проходит по каждой строке файла:
    • foreach var S : String in ReadLines(fName) do - читаем строки из файла
  3. Внутри цикла объявлены переменные:
    • var IndexStr = 0 - индекс строки, содержащей искомое слово
    • var IndexYear = 0 - индекс строки, содержащей искомый год
    • var Index = 0 - общий индекс текущей строки
  4. В каждой строке разделяем слова и проверяем их:
    • foreach var W : String in S.ToWords(' ') do - разбиваем строку на слова
  5. Если слово совпадает с искомым словом (не учитывая регистр), то запоминаем его индекс:
    • if W.ToUpper = findStr.ToUpper then - приводим слова к верхнему регистру для сравнения
    •   var IndexStr := Index; - запоминаем индекс
  6. Если слово является числом и больше или равно искомому году, то запоминаем его индекс:
    • try
    •   if StrToInt(W) >= findYear then
    •     var IndexYear := Index; - запоминаем индекс
    • except
    •   end; - обрабатываем ошибку, если слово не является числом
  7. После проверки всех слов в строке, проверяем условия для вывода строки:
    • if (IndexStr > 2) and (IndexStr < Index) and (IndexYear = Index) then - выводим строку, если условия выполняются
  8. Код завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.5 из 5
Похожие ответы