Волинська обласна Інтернет-олімпіада з інформатики 2023 |
|
|
|
Добавил(а) Administrator
|
05.11.23 08:13 |
Волинська учнівська Інтернет-олімпіада
Увага !!! Розпочато реєстрацію у Волинській учнівськiй Інтернет-олімпіаді з інформатики
http://176.102.48.88/vippoolimp/joomla/index.php/registr |
Последнее обновление 05.11.23 08:15 |
Відкрита Всеукраїнська олімпіади з інформатики NetoI-2011 |
|
|
|
Добавил(а) Administrator
|
19.10.11 09:50 |
Розпочато реєстрацію учасників відкритої Всеукраїнської олімпіади з інформатики NetoI-2011. До участі зпрошуються школярі України та взагалі всі бажаючі: учителі, студенти, професійні програмісти. Переможці в номінації ШКОЛЯРІ УКРАЇНИ отримають право участі в 4 етапі Всеукраїнської олімпіади поза квотою своїх регіонів.
Відкрита Всеукраїнська олімпіади з інформатики NetoI-2011
http://www.olymp.vinnica.ua/
Тренувальний тур
Задача DEMO_A
На площині задано координати двох відрізків AB і CD. Знайти спільну частину проекцій цих відрізків на вісь абсцис. Вхідні дані Ви вводите з клавіатури 8 цілих чисел - координати точок A, B, C, D. Кожне число не перевищує за абсолютною величиною 1000. Вихідні дані Ви виводите на екран одне число - спільну частину проекцій. Якщо спільна частина - порожня множина, вивести -1, якщо це одна точка - вивести 0. Приклад вхідних та вихідних даних Вхід: 2 2 7 5 3 4 8 1 Вихід: 4
Задача DEMO_B
Скільки натуральних чисел виду 2a3b5ca,b,c - невід'ємні цілі числа) належать відрізку [M;N]? Вхідні дані Ви вводите з клавіатури 2 цілих числа M та N. Кожне з чисел не перевищує за абсолютною величиною 10000. Вихідні дані Ви виводите на екран одне число - шукану кількість чисел. Приклад вхідних та вихідних даних Вхід: 10 20 Вихід: 6
Задача DEMO_C
Дана послідовність N цілих чисел. Знайти найменший додатній елемент цієї послідовності. Вхідні дані Ви вводите з клавіатури кількість чисел N та N цілих чисел - елементів цієї послідовності. Число N не перевищує 10000, кожний елемент послідовності не перевищує за абсолютною величиною 1000. Вихідні дані Ви виводите на екран одне число - шуканий елемент послідовності. Якщо у послідовності немає додатніх елементів - вивести 0. Приклад вхідних та вихідних даних Вхід: 7 -4 4 -7 3 0 8 2 Вихід: 2
Задача DEMO_D
Задано натуральне число N. Знайти найменше та найбільше число, яке складається з тих самих цифр та у такій самій кількості, що і N. Вхідні дані Ви вводите з клавіатури число N (1£ N £2000000000). Вихідні дані Ви виводите в одному рядку найменше число, а через пропуск - найбільше число.
Приклад вхідних та вихідних даних Вхід: 7051 Вихід: 1057 7510
Задача DEMO_E
Задано текстовий рядок. Вилучити з нього всі символи, що не є цифрами. Вважається, що рядок містить хоча б одну цифру. Вхідні дані Ви вводите з клавіатури заданий рядок, довжина якого не перевищує 255 символів. Вихідні дані Ви виводите на екран шуканий рядок. Приклад вхідних та вихідних даних Вхід: Ф11р88н Вихід: 1188
Задача DEMO_F
Дано K клітин шахової дошки. З'ясувати, чи всі вони одного кольору. Вхідні дані Ви вводите з клавіатури кількість контрольних прикладів, потім число К - кількість клітин шахової дошки,а у наступних К рядках - координати клітин (натуральні числа, не більші 8). Вихідні дані Ви виводите на екран для кожного приклада 1, якщо всі клітини одного кольору і 0, якщо це не так. Приклад вхідних та вихідних даних
Вхід:
|
3
|
|
3
|
|
1
|
2
|
8
|
1
|
8
|
5
|
2
|
|
1
|
1
|
1
|
2
|
2
|
|
1
|
1
|
2
|
2
|
|
Вихід: 101
|
|
Мова програмування С, С++ » |
|
|
|
Добавил(а) Administrator
|
21.09.11 09:55 |
«Мова програмування С, С++ »
методист лабораторії інформатики ВІППО Гісь Ігор Володимирович
Мета спецкурсу:
· розвиток логічного, аналітичного мислення та основних видів розумової діяльності: уміння використовувати індукцію, дедукцію, аналіз, синтез, робити висновки, узагальнення;
· розвиток уміння розв’язувати змістовні задачі різного рівня складності, олімпіадні задачі, користуючись відомими теоретичними положеннями, математичним апаратом, літературою та комп’ютерною технікою;
· навчити учнів правильному розв’язуванні задач для підготовку учнів до участі в олімпіадах.
№
|
Тема
|
План
|
Засоби
|
1.
|
Розділ «Алгоритмізація і програмування»
|
- кількість годин на вивчення за програмою
- «+» і «-» вивчення розділу
- тематика вивчення: 1) базові структури алгоритмів; 2)методика складання алгоритмів та їх аналіз; 3) об’єктно-орієнтоване програмування, візуальне програмування.
- принцип IPO (input procedure output): визначення місцезнаходження і введення даних; задання операцій над даними; виведення результуючих даних
- етапи розв’язування задач з використанням ЕОМ.
|
презентація «Алгоритмізація і програмування»
мозковий штурм
аналіз схеми «людина-задача-алгоритм-програма-комп’ютер»
додаток: Етапи розв’язування задач
|
2.
|
Мови програмування
|
- структуровані мови програмування
- С – Деніс Рітчі (1972)
- C++ - 80-ті роки, Бьяртні страус труп (1979)
- середовище Borland C++ 3.1
|
завантаження і робота в середовищі
|
3.
|
Лексеми мови програмування
|
- алфавіт мови і ключові слова
- директиви препроцесора (#include)
- сталі (const назва=значення)
- змінні і їх типи; (цілі: int спиок змінних; дійсні: float змінна=значення; символьний char с1=’A’, c2=65; логічний bool false, true)
- коментарі // ...
/* ... */
- перша програма (структура програми)
|
приклад структури програми
|
4.
|
Присвоєння, вирази, функції
|
- = аналіз виразів
- функції math.h
|
приклади виразів
|
5.
|
Введення і виведення даних
|
- stdio.h: scanf (“%d”, &a) &змінна – адреса даних puts (“рядок”); %d –int %f – float %c –char %s – рядок символів
- conio.h: cin >> змінна; cout << «текст»<< p
|
приклади рядків введення і виведення
|
6.
|
Базові структури
|
- слідування
- розгалуження (==, !=, ! – не, && - і, || - або, IF (логічний вираз) команда 1; else команда 2)
- вибір (switch (вираз) {case ознака 1: команда 1; break; default: команда}
- цикл: for ( ) {}, while (умова) {}, do команда while (вираз);
- підпрограми
|
додаток з задачами:
приклади розв’язаних задач і задачі для самостійного розв’язування
|
7.
|
Типи даних
|
- масиви
- рядки
- вказівники
- файли
|
Єдиний спосіб вивчати нову мову програмування –
писати на ній програми. Брайен Керніган
Мова формує наш спосіб мислення і визначає те, про що ми можемо думати. Прогрес комп'ютерних технологій визначив процес появи нових різноманітних знакових систем для запису алгоритмів – мов програмування.
C++ - універсальна мова програмування, задумана так, щоб зробити програмування приємнішим для серйозного програміста. C++ є надмножиною мови програмування C.
ЗАДАЧІ
Структура програми
#include <stdio.h>
void main()
{
puts("Okey");
}
#include <iostream.h>
void main()
{
cout <<"Okey";
}
Слідування
1. Два резистори R1 і R2 з'єднані паралельно. Визначити сумарний опір за формулою .
2. Обчислити відстань між двома точками з координатами X1,Y1 і X2,Y2 за формулою L=
#include <stdio.h>
#include <math.h>
void main()
{
float x1,y1,x2,y2;
puts("Zadayte x1,y1,x2,y2\n");
scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
float l=sqrt(pow((x1-x2),2)+pow(y1-y2,2));
printf("L=%f\n",l);
}
3. В рядку S символів, на сторінці R рядків. Скільки символів в книжці, у якої N сторінок?
За скільки хвилин учень прочитає книгу, якщо він одну сторінку читає за T хвилин?
#include <stdio.h>
void main()
{
int s,r,n,t;
puts("Zadayte s,r,n, t\n");
scanf("%d%d%d%d",&s,&r,&n, &t);
int a=s*r*n;
printf("A=%d\n",a);
int b=a/t;
printf("B=%d\n",b);
int g,h;
g=b/60; h=b%60;
printf("%d:%d",g,h);
}
4. Скільки лампочок потрібно, щоб освітити вулицю довжиною D км, як що стовпи з ліхтарями стоять на відстані V м?
5. Одна серія фільму по телевізору триває F хв. Скільки часу в годинах необхідно, щоб переглянути N серій?
|
Розгалуження
6. Знайти максимальне значення серед двох чисел введених з клавіатури.
#include <stdio.h>
void main()
{
int a,b,max;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
if (a>b) max=a; else max=b;
printf("max=%d",max);
}
7. Знайти максимальне значення серед трьох чисел введених з клавіатури.
#include <stdio.h>
void main()
{
int a,b,c,max;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
printf("c=");
scanf("%d",&c);
if (a>=b && a>=c) max=a;
if (b>=a && b>=c) max=b;
if (c>=a && c>=b) max=c;
printf("max=%d",max);
}
8. Введене число перевірити: додатне, від'ємне чи дорівнює нулю.
9. Напишіть програму перевірки знання додавання трьох введених чисел.
10. За трьома сторонами перевірити, чи трикутник прямокутний.
11.Введене число перевірити: менше, більше чи дорівнює воно 100.
12. Перевірити, чи існує трикутник із сторонами A, B, C.
|
Цикл
12.Скласти програму виведення на екран квадратiв всiх натуральних чисел менших за 20.
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
for (int i=1;i<20;i++)printf("%2d*%2d=%4d\n",i,i,i*i);
}
13. Скласти програму знаходження суми всiх чисел кратних трьом з вiдрiзка [n,50].
#include <stdio.h>
void main()
{
int n;
printf("n=");
scanf("%d",&n);
int i=48;
int s=0;
while (i>=n)
{
s+=i;
i-=3;
}
printf("S=%d",s);
}
14. Протабулювати функцію f(x)=cos(2x) на проміжку [a,b] розбитого на n проміжків.
#include <stdio.h>
#include <math.h>
void main()
{
const a=0, b=10, n=10;
float h=(b-a)/n;
float x=a;
float y;
while (x<=b)
{
y=cos(2*x);
printf("x=%f y=%f\n",x,y);
x=x+h;
}
}
15. За заданою формулою члена ряду з номером k скласти програму обрахунку суми всix членiв ряду , не менших заданого числа E.
1
───────
(2k-1)(2k+1)
16. Скласти програму обчислення добутку членів послідовності D=-1*(1/2)*(-1/3)*(1/4)*(-1/5)*...*(-1/2N-1)*(1/2N).
17. Написати таблицю переведення температури з градусів по шкалі Цельсія (С) в градуси шкали Фаренгейта (F) за формулою F=1.8*C+32 для значень від 10 до 20 градусів з кроком 2 градуси.
18. Написати таблицю переведення радіуса в площу круга для значень радіуса від 1 до 18 В кроком 2.
19. Написати таблицю відповідності між вагою в фунтах і вагою в кг для значень від 1 до 30 фунтів з кроком 3 фунт (1 фунт = 0.4 кг.)
|
Підрограми
20. Знайти площу чотирикутника заданого сторонами і діагоналлю.
21. Знайти площу чотирикутника заданого координатами вершин.
#include <stdio.h>
#include <conio.h>
#include <math.h>
float l(int x0, int y0, int x, int y)
{return sqrt(pow((x-x0),2)+pow((y-y0),2));}
float geron(float a, float b, float c)
{ float p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)+(p-c));}
void main()
{
clrscr();
int x1,y1,x2,y2,x3,y3,x4,y4;
scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
float a,b,c,s;
a=l(x1,y1,x2,y2);
b=l(x2,y2,x3,y3);
c=l(x1,y1,x3,y3);
s=geron(a,b,c);
a=l(x3,y3,x4,y4);
b=l(x4,y4,x1,y1);
c=l(x1,y1,x3,y3);
s+=geron(a,b,c);
printf("s=%f\n",s);
}
22. Знайти площу многокутника заданого координатами вершин а) вершини задані по порядку; б) вершини задані в довільному порядку.
Площа трикутника: 1)Формула Герона; 2)S=1/2*|(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)|
23.Використовуючи функцію сумування двох чисел, обчислити суму трьох чисел.
#include <stdio.h>
#include <math.h>
float suma(int x, int y)
{return x+y;}
void main()
{
int a,b,c,s;
scanf("%d%d%d",&a,&b,&c);
s=suma(suma(a,b),c);
printf("%d+%d+%d=%d",a,b,c,s);
}
24.Використовуючи функцію максимального з двох, визначити максимальне з чотирьох чисел.
|
Масив
25. Дано лінійну таблицю із n цілих чисел. Знайти суму S всіх елементів.
#include <stdio.h>
void main()
{
int a[100];
int i,n,s;
printf("n=");
scanf("%d",&n);
for (i=1;i<=n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}
s=0;
for (i=1;i<=n;i++) s=s+a[i];
printf("s=%d",s);
}
26. З масиву стерти K-тий елемент.
#include <stdio.h>
void main()
{
int a[100];
int i,n,k,s;
printf("n=");
scanf("%d",&n);
for (i=1;i<=n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}
printf("k=");
scanf("%d",&k);
for (i=k;i<=n;i++) a[i]=a[i+1];
n--;
for (i=1;i<=n;i++) printf("a[%d]=%d\n",i,a[i]);
}
27. В масив вставити елемент на К-те місце
28. В таблиці а[1..100)]всі елементи рівні 2,3,4 або 5. Написати програму, яка заміняє 2 на 5, 3 на 4, 4 на 3, 5 на 2.
29. Скласти програму підрахунку суми елементів з непарними номерами масиву A[1..25].
30. Задано таблиця A[1..N]. Побудувати таблицю B[1..N], в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.
31. Дано натуральна таблиця A[1..10]. В таблицю М записати тільки ті числа, остача від ділення яких на 3 рівна 1, а на 5 рівна 2.
32. Заданий одномірний числовий масив. Визначити суму добутків всіх пар сусідніх чисел.
33. Дано масив A[1..M]. Скласти програму перестановки місцями елементів з парними та непарними номерами.
34. Скласти програму запису в таблицю квадратів чисел від 1 до 100.
35. Скласти програму підрахунку кількості мінімальних елементів в масиві A[1..N].
36.В одномірному числовому масиві всі від`ємні елементи замініть нуля ми.
37. Перевірити, чи є одномірний числовий масив упорядкованим по зростанню.
Рядки
38. Знайти подвійні пропуски і знищити їх.
39. Знайти найдовше слово, слова заданої довжини N, слова які містять літеру M.
40. В заданому тексті знищити частину тексту поміщену в дужках.
41. Із тексту вибрати а) цифри; б)числа і вивести їх по порядку.
|
Операції над адресами. Вказівники.
Задача 1.
Змінна - 25
Адреса – 0xfff4
#include <iostream.h>
void main()
{
int a=25;
cout <<”Zminna”<<a<<"\n";
cout <<”Adress”<<&a<<"\n";
}
Задача 2.
Порівння типів, стосовно використання пам’яті.
#include <iostream.h>
void main()
{
int *a;
float *b;
char *c;
cout <<"int "<<sizeof(a)<<"\n";
cout <<"float "<<sizeof(b)<<"\n";
cout <<"char "<<sizeof(c)<<"\n";
int a1;
float b1;
char c1;
cout <<"int "<<sizeof(a1)<<"\n";
cout <<"float "<<sizeof(b1)<<"\n";
cout <<"char "<<sizeof(c1)<<"\n";
}
Задача 3.
Введення і виведення змінної заданої вказівником.
#include <stdio.h>
void main()
{
float *a;
*a=3.14;
printf("a=%f\n",*a);
printf("a=%p\n",a);
scanf("%f",a);
printf("a=%f\n",*a);
}
Задача 4.
Виділення і вивільнення пам’яті.
#include <stdio.h>
void main()
{
int *a=new int;
*a=5;
int *b=new int(10);
printf("a=%d b=%d\n",*a,*b);
a=b;
printf("a=%d b=%d\n",*a,*b);
delete(b);
printf("a=%d \n",*a);
}
В С (tdlib.h, alloc.h ) malloc, calloc для надання динамічної пам’яті, free – вивільнення пам’яті.
|
Файли.
Задача 5. Обчислити суму.
#include <fstream.h>
void main()
{
ifstream inp;inp.open("input.dat");
int a,b,c;
inp>>a>>b;
inp.close();
c=a+b;
ofstream out;out.open("output.sol");
out<<c;
out.close();
}
Задача 6.
Рядок вивести в стовпчик і в зворотному порядку.
#include <fstream.h>
#include <string.h>
void main()
{
ifstream inp;inp.open("input.dat");
char a[100];
inp>>a;
inp.close();
strrev(a);
ofstream out;out.open("output.sol");
for (int i=1;i<=strlen(a);i++) out<<a[i]<<\n;
out.close();
}
Задача 7. В таблиці NxM знайти суму кожного рядка і стовпця.
#include <stdio.h>
#include <fstream.h>
void main()
{
int n,m,i,j,s;
int a[100][100];
ifstream inp;inp.open("input.dat");
inp>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
inp>>a[i][j];
inp.close();
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
printf("%d ",a[i][j]);
printf("\n");
}
Задача 4. Зчитати з файлу всі дані і вивести їх на екран.
#include <iostream.h>
void main()
{
ifstream inp;inp.open("input.dat");
while (!inp.eof())
{
char *a=new char[1000];
inp>>a;
cout <<a<<"\n";
delete [] a;
}
inp.close();
}
|
|
Добавил(а) Administrator
|
15.11.11 11:41 |
Тема. КОМБІНАТОРНІ ОБ'ЄКТИ
Тема. Комбінаторні задачі
Комбінаторика - розділ математиків, в якому вивчаються найпростіші «з'єднання» чисел.
1) Формули комбінаторики
Задачі:
1. Скількома способами можна скласти розклад на день з 5 різних предметів, якщо в класі вивчається 10 предметі?
2. Скільки різних чотирицифрових чисел можна скласти з чотирьох різних заданих цифр, не повторюючи їх?
3. Скільки діагоналей має опуклий n-кутник?
1.Перестановки - з'єднання, які можна скласти з n предметів, міняючи всіма можливими способами їх порядок.

2.Розміщення - з'єднання, що містять по n предметів з числа m даних, що розрізняються або порядком предметів, або самими предметами.

3. Комбінації - з'єднання, що містять по n предметів з m, що розрізняються один від одного, принаймні, одним предметом.

Додаткові завдання:
1. Скількома способами можна розподілити n тем наукових робіт серед m учнів (тем більше, ніж учнів). Написати програму.
2. Перевірити справедливість рівності для m<10.
3. Скількома способами можна розмістити n осіб за столом, біля якого поставлено n стільців? Написати програму.
4. Двоє хлопчиків Роман і Діма мають по N друзів (1<=N<=200). Вирішили вони позмагатися хто з них більше організує вечірок. Роман вирішив запрошувати кожен раз до себе в гості по K (1<= K<= N) друзів, а Діма - по М (1<= М<= N) друзів. Хто з хлопчиків більше організує вечірок і на скільки, якщо вони домовились, що кожен раз компанія має бути іншою.
Наприклад.
Якщо є четверо друзів (1, 2, 3, 4) і вони мають приходити в гості по троє, то таких вечірок буде чотири ( (1, 2, 3); (1, 2, 4); (1, 3, 4); (2, 3, 4) ).
5. Скількома способами можна вибрати делегацію в складі n представників з m чоловік. Написати програму.
6. Побудувати трикутник Паскаля з n рядків

Тема. Перебір з поверненням

ПОСТАВ_І_ВПРАВО - ставить туру в клітинку з заданими координатами і переміщає горизонтальний покажчик на одну позицію вправо , а вертикальний установлює на першу позицію (процедура)
ЗНІМИ_І_ВЛІВО - знімає туру з даної клітки і переміщає горизонтальний покажчик на одну позицію вліво , вертикальний покажчик встановлює в позицію тури, на яку тепер указує горизонтальний покажчик ( процедура )
ПРАВИЛЬНА_КЛІТИНКА - логічна функція. Повертає істина, якщо туру можна поставити в дану клітку, і хибно, якщо поставити в клітинку не можна.
ВЛІВО - переміщає горизонтальний покажчик на одну позицію вліво і установлює вертикальний покажчик на туру в цій вертикалі (процедура).
ВИВЕДЕННЯ - виводить на екран результат (процедура)
Тепер наш алгоритм може бути представлений так:
алг Пошук_з_поверненням
поч
П_Г:=1
П_В:=1
ПОСТАВ_І_ВПРАВО П_В:= П_В+1
поки П_Г<>0
пц поки ( не ПРАВИЛЬНА_КЛІТИНКА ) і (П_Г < n+1)
пц
П_В:=П_В+1
кц
якщо П_В < n+1
то ПОСТАВ_І_ВПРАВО
інакше ЗНІМИ_І_ВЛІВО
все
якщо П_Г =n+1
то ВИВЕДЕННЯ
ВЛІВО
все
кц
до П_Г=0
кін
Деталі
Вибiр складається з N деталей. Є N верстатiв, на кожному з яких можна виготовити будь-яку деталь. Для кожних верстату та деталей вiдомий час t[i,k] виготовлення k-ї деталi на i-му верстатi. Напишiть програму, яка визначить, на якому верстатi слiд виготовити кожну де- таль, щоб одночасно почавши виготовляти всi деталi, завершити виго- товлення всмх деталей якнайшвидше.
Технiчнi умови
1) Iмена файлiв програми, вхiдних та вихiдних даних: DETAILS.???, DETAILS.DAT, DETAILS.SOL, де ??? - PAS, BAS, C, CPP (в залежностi вiд мови програмування).
2) Перший рядок вхiдного файлу мiстить кiлькiсть текстiв. Перший рядок кожного тексту мiстить кiлькiсть верстатiв та деталей N(1<=N<=50). Кожен з наступних N рядкiв мiстить тривалостi виготов- лення деталей на вiдповiдному верстатi t[i,1], t[i,2],...,t[i,N], вiдокремленi комами. Кожне з цих чисел натуральне i не перевершує 100.
3) Коректнiсть вхiдних даних гарантується.
4) У вихiдний файл для кожного тесту треба послiдовно вивести в один рядок. Номери деталей, якi треба виготовити вiдповiдно на 1-му, 2-му,..., N-му верстатах, вiдокремивши їх пропусками. В наступний ря- док треба вивести час вiд початку до завершення виготовлення всiх де- талей.
5) Для кожного тесту досить знайти один розв'язок.
Приклад вхiдного та вихiдного файлiв
Вхiдний(DETAILS.DAT):
2
2
3,2
1,2
3
3,3,3
3,3,3
3,3,3
Вихiдний (DETAILS.SOL):
2 1
2
1 2 3
3
Греко-латинський квадрат
Греко-латинським квадратом називається квадрат N x N, в кожному рядку, в кожному стовпці і в кожній діагоналі якого містяться всі цілі числа від 1 до N. Приклад такого квадрата 4 х 4.
Написати програму, яка:
n будує хоча б один квадрат порядку N;
In.txt
4
Out.txt
1 2 3 4
4 3 2 1
2 1 4 3
3 4 1 2 |
|