НАЙДИ СВОЙ ТАЛАНТСреда, 18.10.2017, 13:58

Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории раздела
Мои статьи [7]

Наш опрос
Оцените мой сайт
Всего ответов: 33

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Мои статьи

Олимпиады по информатике. Урок 2

Олимпиады по информатике

    

    Продолжаем разбор олимпиадных задач. В прошлом выпуске мы рассмотрели задание, в котором приходилось оперировать с числовыми величинами. Давайте попробуем решить задачу на оперирование с символьными величинами.

     Задача. Дана строка, состоящая из нескольких слов, между словами стоит один пробел, в конце предложения - точка. Подсчитать количество слов и вывести на экран только те из них, которые начинаются с буквы 'П'.


    Формат входного файла(слова.IN): "Язык программирования Паскаль был разработан Н. Виртом в 1968 - 1970 годах и получил широкое распространение благодаря наглядности программ и легкости при изучении".

    Формат выходного файла(слова.OUT): N = 5, программирование, Паскаль, получил, программ, при.

     1 этап. Все ли вам понятно в условии задачи?

    Внимательно вчитаемся в условие задачи. На входе нам предлагается файл, содержащий строковую величину, которая представляет собой предложение, состоящее из отдельных слов. Необходимо заставить компьютер просмотреть последовательно всю строку; выделить в ней отдельные слова; распознать слова, начинающиеся на букву "П". Судя по приведенному формату выходного файла, требуется подсчитать количество именно этих слов, вывести их на экран и записать в выходной файл. Создание файла "слова.OUT" и будет являться итогом выполнения составленной программы.

    2 этап. Составим план действий, которые должен выполнить компьютер:

    - считать из входного файла заданную строку;

    - начиная с первого символа, проверяем его на "равенство" строчной или прописной букве "п";

    - если это данная буква, то считываем последующие символы до пробела в отдельную переменную;

    - после пробела повторяем все действия заново;

    - при выполнении операций ведем подсчет слов, удовлетворяющих поставленному условию;

    - выполняем эти действия до тех пор, пока не дойдем до конца строки;

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

    Решение задачи облегчается тем, что в языке Pascal строковую переменную можно рассматривать как одномерный массив, в котором индексом является порядковый номер буквы в строке.

    3 этап. Составим схематический алгоритм решения данной задачи.

    Название программы

    Описание переменных

         Параметры циклов

         строка

         количество

         индексы

    Начало программы

    Очистка экрана

    считывание содержимого файла

    Количество = 0

    цикл до конца строки

         проверка на соответствие букве "п" или "П"

            цикл до пробела

               считывание символов в отдельную переменную

               количество = количество +1

        выводим найденное слово на экран

    записываем в отдельный файл количество найденных слов и сами эти слова

    Конец программы

    4 этап. Так как нам не требуется отдельно составить алгоритм, оформленный по всем правилам алгоритмического языка, то можно сразу обратиться к языку программирования. Как мы уже говорили - это будет Turbo Pascal.

    Приводим ниже текст готовой программы:

program kolslov;
uses Crt;
var
    stroka,sl: string[255];
    kol,a: integer;
    f: text;
    slova: array[1..25] of string;
begin
    ClrScr;
    Assign(f,'slova.in');
    Reset(f);
    readln(f,stroka);
    Close(f);
    kol:=0;
    sl:='';
    a:=1;
    repeat
    if ((stroka[a]='п') or (stroka[a]='П')) and ((stroka[a-1]=' ') or (a-1=0)) then
    begin
      repeat
        sl:=sl+stroka[a];
        a:=a+1;
      until (stroka[a]=' ') or (a=length(stroka));
      kol:=kol+1;
      slova[kol]:=sl;
      Writeln(sl);
      sl:='';
    end;
    a:=a+1;
until a>=length(stroka);
Writeln('N=',kol);
Assign(f,'slova.out');
Rewrite(f);
Write(f,'N=',kol,', ');
for a:=1 to kol do
    begin
      Write(f,slova[a]);
      if a=kol then Write(f,'.')
        else Write(f,', ');
    end;
Close(f);
{Write(sl);}
readln;
    end.

        В следующих выпусках нашего интернет-приложения мы продолжим разбор олимпиадных задач различных типов и разных уровней сложности.

    Категория: Мои статьи | Добавил: iskatel (12.12.2009)
    Просмотров: 1695 | Комментарии: 2 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Поиск

    Друзья сайта
  1. Официальный блог
  2. Сообщество uCoz
  3. FAQ по системе
  4. Инструкции для uCoz


  5. Copyright MyCorp © 2017
    Бесплатный хостинг uCoz