Сайт підготовки до олімпіади з інформатики

програмування в С++

Школа олімпійського резерву з інформатики
Організація 2 етапу олімпіади з інформатики PDF Печать E-mail
Добавил(а) Administrator   
05.11.23 08:12

 2 етап олімпаіди з інформатики відбудеться централізовано на сервері eolymp 03 грудня 2023 року

 

Тренувальний тур доступний за посиланням: https://uoi2.eolymp.io/

Опис завдань, які будуть на олімпіаді: посилання

Текстова інструкція з використання системи Eolymp, підготовлена Київським ІППО, доступна за посиланням: http://www.kievoi.ippo.kubg.edu.ua/kievoi/e-olymp/index.html

Відеоінструкція, підготовлена мною, за посиланням: https://youtu.be/KlrrrpAxqx0

Архів попередніх олімпіад: https://archive.oi.in.ua/

 

 

Готуємось до олімпіади з інформатики
 
Синтаксичний розбір виразів PDF Печать E-mail
Добавил(а) Administrator   
22.04.11 14:09

Тема: Синтаксичний розбір виразів

Однієї з головних причин, що лежать в основі появи мов програмування високого рівня, з'явилися обчислювальні задачі, що вимагають великих об'ємів рутинних обчислень. Тому до мов програмування пред'являлися вимоги максимального наближення форми запису обчислень до природної мови математики. В зв'язка з цей одній з перших областей системного програмування сформувалося дослідження способів виразів. Тут отримані численні результати, проте найбільше розповсюдження отримав метод трансляції за допомогою зворотного польського запису, який запропонував польський математик                Я. Лукашевіч.

              Нагадаємо, що існує цілий ряд  методів  синтаксичного  розбору і обчислення виразів. Нехай вирази є рекурсивними  структурними  даними, які визначаються в термінах самих себе.  Якщо ви обмежитеся використанням у виразах тільки операторів +,  -  * / і дужок,  то зможете сказати, що всі вирази можуть бути визначеними в термінах наступних правил:
              выраз=>терм[+терм][-терм]
              терм=>множник[*множник][/множник]
              множник=>змінна, число або (вираз) де будь-яка частина може бути порожньою.  Квадратні дужки  позначають  необов'язковість,  а => - утворення. Фактично правила є правилами утворення виразів. 
              Вираз             10+5*В складається з двох термів: 10 і 5*В. Проте, включає три множники:  10,  5 і В.  Цими множниками є два числа і одна змінна.
              З другого боку вираз          14*(7-С)   має два  терми 10 і (7-С),  один з яких є числом,  а інша дочірнім виразом. Дочірній вираз розпадається на одне число і одну змінну.
              Даний процес формує основу для рекурсивного низхідного  синтаксичного  розбору,  який є набором загальних  рекурсивних процедур,  що носять характер ланцюжка. На кожному відповідному кроці  синтаксичний розбір може виконувати задані операції в алгебра правильній послідовності. Наприклад розглянемо синтаксичний розбір вхідного виразу 9/3-(100 +56) і виконання операцій по кроках.

      Крок 1. Узяти першу лексему: 9/3

      Крок 2. Узяти обидва множники і виконати операцію поділу.

                     В результаті виходить 3.

      Крок 3. Узяти другу лексему: (100+56). В даній точці ви повинні рекурсивно  проаналізувати другий вираз.

      Крок 4. Узяти обидва числа і скласти. В результаті виходить                      156.

      Крок 5. Повернутися з рекурсивного виклику і відняти 156 з 3, що дає відповідь - 153.

         Якщо ви трохи заплуталися,  не турбуйтеся. Це складна концепція.  Потрібно  засвоїти  два моменти про даний рекурсивний погляд на  вирази: по-перше, передування операторів є неявним при заданих правилах породження виразів; по-друге, даний метод синтаксичного розбору і обчислення виразів дуже схожий на  те, як це робиться уручну.

 

 

 

 

Рядкові величини

- операція + (з’єднання)                        ‘місто’+’ ’+’Луцьк’

 

Функції роботи з рядками:

 

Назва функції

Призначення

Приклад

Результат

1.

Length(S)

визначає кількість символів у заданому рядку

Length (‘місто Луцьк’)

11

2.

Сору(S,n,m)

виділяє m символів рядка S, починаючи від символу з номером n

Copy (‘місто Луцьк’, 6, 5)

‘Луцьк’

3.

Pos(S1, S2)

визначає номер символу, з якого починається входження рядка (тексту) S1 у рядок S2

Pos (‘ ‘,‘місто Луцьк’)

6

4.

Concat(S1, S2,...)

з'єднує рядки в один рядок

Concat('20', '01')

‘2001’

 

Процедури роботи з рядками:

 

Назва функції

Призначення

Приклад

Результат

1.

Insert (A:string, var В: string, n:integer)

вставляє рядок А у рядок В, починаючи від позиції з номером n

S1:=’місто’;

S2:=’Луцьк’;

Insert(S1,S2,1);

’містоЛуцьк’;

 

2.

Delete (var S:string, n:integer, m:integer)

вилучає m символів з рядка S, починаючи від позиції n

S:=’містоЛуцьк’;

delete(S,1,5);

’Луцьк’;

 

3.

Str (A:integer, var S:string)

переводить числове дане A у дане типу рядок

A:=2001;

Str(A,S);

‘2001’

4.

Val (S: string, var A, KOD: integer)

засилає у числову змінну A числовий образ рядка S, повертаючи код помилки KOD

S:=’2001’;

Val(S,A,Kod);

2001

 

 
Аналіз задач. П'ятий тур 2011 PDF Печать E-mail
Добавил(а) Administrator   
28.11.11 15:58

П'ятий тур

Розв'язки задач відправляти з  21.11  по  04.12.2011р.

Задача

Ідея розв'язку

1. Задача MATCHES (20 балів)

Ім'я вхідного файлу:   MATCHES.DAT

Ім'я вихідного файлу: MATCHES.SOL

Максимальний час роботи на одному тесті: 2с

 

Відомо, що за перемогу у матчах чемпіонату з футболу команді нараховується три очки, за нічию - одне очко, за поразку очки не нараховуються.

Необхідно написати програму для знаходження числа всіх можливих варіантів здобуття  за N матчів деякою футбольною командою M очок.

 

Формат вхідних даних.

Єдиний рядок вхідного файлу MATCHES.DAT містить два натуральні числа N та M  (1<=N<=20,0<=M<=60). Числа між собою розділені пробілами.

 

Формат вихідних даних.

Єдиний рядок вихідного файлу MATCHES.SOL повинен містити одне натуральне число - кількість всіх можливих варіантів.

 

Задача подібно до задачі «Паліндром» (3 тур)

Берем максимум виграних матчів

K3= m/3;

K1=m ост 3;

K0=n-K3-K1;

 

Рахуємо кількість способів за формулою

 s=n!/(K0!*K1!*K3!)

На наступних кроках

K3=K3-1

K1=K1+3;

 

 

 

Последнее обновление 14.12.11 11:59
 
Лексичний перебір PDF Печать E-mail
Добавил(а) Administrator   
02.11.11 09:24

Лексичний перебір

1.Повернемось до перебору:

а). Ми мали:   1,2,3

1,3,2

2,1,3

2,3,1

3,2,1

3,1,2

 

б). А якщо ми маємо

3,8,7

Як утворити всі можливі перестановки?

1. Утворити перестановки 1,2,3 і використати їх як індексний масив.

 

в) Маємо                                            1,1,2

1,2,1

2,1,1

2. Побудуємо лексичний перебір для довільних  елементів масиву

X=3 2 4 2 4 3 1

а) Рухаємось справа наліво. Крок вперед можна зробити, якщо  наступне число більше за попереднє. Ми зупинилися перед числом 2. Це число потрібно помітити.

X=3  2  4  2 4   3 1

 

б) Рухаємось справа наліво. Крок вперед можна зробити, якщо   число менше за знайдене число(2). Ми зупинилися перед числом 3. Це число потрібно помітити.

X= 3  2  4  23 1

 

в) Переставляємо знайдені числа.

 

X= 3  2  4  32 1

г) Запишемо числа, розміщені після першого знайденого в зворотному порядку.

X=3  2  4  3 1  2  4

функція наступна : логічна

поч.

і:=n

пошук:=хибно

1)

 

4)

і:=k+1; j:=n;

поки І>j пц

t:=x[j]; x[j]:=x[і]; x[і]:=t; іnc(і);

і:=і+1;

кц.

все

наступна:=пошук;

кін.

поч

x[1..n]; ввести х ; поки наступна                 пц вивести х кц кін.

 
Заочна школа обдарованих дітей з інформатики 2012-2013 PDF Печать E-mail
Добавил(а) Administrator   
03.10.12 08:26

З метою виявлення творчо обдарованих учнів, пропагування алгоритмізації та покращення роботи з підготовки учнів до олімпіади з інформатики на базі ВІППО продовжить роботу заочна школа обдарованих дітей з інформатики.

Тематика занятть, заддачі та їх аналіз будуть розміщуватись потижнево на  на сайті http://schoololymp.byethost32.com.

Додаткову інформацію про роботу школи можна отримати на сайті http://schoololymp.byethost32.com і в методиста лабораторії інформатики Гіся Ігоря Володимировича (контактний телефон (0332) 242225, моб.0509163106, кабінет №26 ВІППО).

 


Страница 13 из 43

Статистика

Пользователей : 269
Статей : 225
Просмотрено статей : 127903

Вход/Регистрация

Нет