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

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

Мова програмування С, С++ » PDF Печать E-mail
Добавил(а) 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();

}

 

 

Статистика

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

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

Нет