Готуємось до олімпіади з інформатики 20016-2017- 2
1. Фрагменти програмних кодів (С++)
№
|
Завдання
|
Програмний код
|
1.
|
Зчитування до кінця рядка
|
while (cin.peek()!='\n')
{ n++;
cin>>a[n];
}
|
2.
|
Зчитування до кінця файлу
|
while (!cin.eof())
{ m++;
cin>>b[m];
}
|
3.
|
Зчитування рядка з пропусками
|
string str;
getline(cin,str,'\n');
|
4.
|
Зчитування рядка з пропусками (тип string)
|
#include "fstream"
#include "string.h"
#include "string"
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
int main()
{string s;
getline(cin,s);
cout<<s;
}
|
5.
|
Зчитування рядка з пропусками (тип char)
|
#include "fstream"
#include "string.h"
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
int main()
{char str[100];
cin.getline(str,sizeof(str));
cout<<str;
}
|
6.
|
Кількість цифр в числі
|
#include "string"
int main()
{string s;
cin>>s;
cout<<s.length();}
#include "iostream"
#include "math.h"
using namespace std;
int main()
{
unsigned long long number;
cin>>number;
cout.precision(0);
cout<<fixed<<log10(double (number))+1;
}
|
2. Функції для роботи з рядками
Більшість функцій для роботи з рядками містяться в бібліотеці cstring .(#include <cstring>)
Функція
|
Дія
|
memset(str, c, n)
|
перші n символів рядка str заповнює значеннями c
|
strnset(str, c, n)
|
перші n символів рядка str заповнює значеннями c
|
strlen(str)
|
визначення довжини рядка
|
strcpy(str1, str2)
|
в рядок str1 копіює рядок str2
|
strncpy(str1, str2, n)
|
в рядок str1 копіює не більше, ніж n символів рядка str2
|
strcat(str1, str2);
|
до рядка str1 дописує рядок str2
|
strncat(str1, str2, n)
|
до рядка str1 дописує не більше, ніж n символів рядка str2
|
strchr(str, c)
|
визначає перше входження літери c в рядок str; повертає вказівник на знайдену літеру (або NULL, якщо її нема)
|
strrchr(str, c)
|
визначає останнє входження літери c в рядок str; повертає вказівник на знайдену літеру (або NULL, якщо її нема)
|
strstr(str1, str2)
|
визначає перше входження підрядка str2 в рядок str1; повертає вказівник на першу літеру знайденого підрядка (або NULL, якщо він не зустрічається)
|
strrev(str)
|
записує рядок str у зворотному порядку
|
strupr(str)
|
перетворює всі літери рядка у великі літери
|
strlwr(str)
|
перетворює всі літери рядка у малі літери
|
strcmp(str1, str2)
|
порівнює рядки str1 та str2; якщо рядки рівні, то повертає 0;
якщо відмінні – то повертає різницю між першими відмінними літерами: с1 – с2
|
stricmp(str1, str2)
|
аналогічна до strcmp(...), тільки ігнорує величину літер
|
strcspn(str1,str2)
|
повертає число – позицію першого входження в рядок str1 символу із набору str2
|
strdup(str1)
|
розподіляє пам’ять і копіює рядок str1 за виділеною адресою; повертає адресу початку виділеної пам’яті
|
Приклади:
strcmp("abcdefgh","abcabc") = 3;
stricmp("Abcd","abcD") = 0;
strlen("alpha") = 5;
cout<<strchr("University", 'v') –> "versity";
cout<<strstr("MicroLab Studio", "Lab") –> "Lab Studio";
cout<<strupr("My first Program") –> "MY FIRST PROGRAM".
Робота з масивами
Операція з масивом
|
Лінійний масив
|
Прямокутна таблиця
|
Опис
|
int a[100];
int i, n;//індекс, кількість елементів
|
int a[100][100];
int i,j, n,m;//індекс, кількість елементів
|
Введення
|
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
|
cin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
|
Виведення
|
for(i=0;i<n;i++)cout<<a[i]<<” “;
|
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout<<a[i][j]<<” “;
|
Сумування
|
s=0;
for(i=0;i<n;i++)s=s+a[i];
|
s=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s=s+a[i][j];
|
Пошук
|
cin>>k;
for(i=0;i<n;i++) if (a[i]==k) cin<<i;
|
cin>>k;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if (a[i][j]==k)
cin<<i<<” “<<j;
|
Пошук максимального
|
max=a[0];nmax=0;
for(i=1;i<n;i++)if (a[i]>max) {max=a[i];nmax=i;}
|
max=a[0][0];imax=1;jmax=1;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if (a[i][j]>max) {max=a[i][j];
imax=i;jmax=j;}
|
Сортування
|
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
if (a[j]>a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}
|
|
Стирання
|
n=n-1;
for(i=k-1;i<n;i++)
a[i]=a[i+1];
|
|
Вставка
|
n=n+1;
for(i=n-1;i>k;i--)
a[i]=a[i-1];
a[k]=x;
|
|
Готуємось до олімпіади з інформатики 20016-2017- 2
1. Фрагменти програмних кодів (С++)
№
|
Завдання
|
Програмний код
|
1.
|
Зчитування до кінця рядка
|
while (cin.peek()!='\n')
{ n++;
cin>>a[n];
}
|
2.
|
Зчитування до кінця файлу
|
while (!cin.eof())
{ m++;
cin>>b[m];
}
|
3.
|
Зчитування рядка з пропусками
|
string str;
getline(cin,str,'\n');
|
4.
|
Зчитування рядка з пропусками (тип string)
|
#include "fstream"
#include "string.h"
#include "string"
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
int main()
{string s;
getline(cin,s);
cout<<s;
}
|
5.
|
Зчитування рядка з пропусками (тип char)
|
#include "fstream"
#include "string.h"
using namespace std;
ifstream cin("input.txt");
ofstream cout("output.txt");
int main()
{char str[100];
cin.getline(str,sizeof(str));
cout<<str;
}
|
6.
|
Кількість цифр в числі
|
#include "string"
int main()
{string s;
cin>>s;
cout<<s.length();}
#include "iostream"
#include "math.h"
using namespace std;
int main()
{
unsigned long long number;
cin>>number;
cout.precision(0);
cout<<fixed<<log10(double (number))+1;
}
|
2. Функції для роботи з рядками
Більшість функцій для роботи з рядками містяться в бібліотеці cstring .(#include <cstring>)
Функція
|
Дія
|
memset(str, c, n)
|
перші n символів рядка str заповнює значеннями c
|
strnset(str, c, n)
|
перші n символів рядка str заповнює значеннями c
|
strlen(str)
|
визначення довжини рядка
|
strcpy(str1, str2)
|
в рядок str1 копіює рядок str2
|
strncpy(str1, str2, n)
|
в рядок str1 копіює не більше, ніж n символів рядка str2
|
strcat(str1, str2);
|
до рядка str1 дописує рядок str2
|
strncat(str1, str2, n)
|
до рядка str1 дописує не більше, ніж n символів рядка str2
|
strchr(str, c)
|
визначає перше входження літери c в рядок str; повертає вказівник на знайдену літеру (або NULL, якщо її нема)
|
strrchr(str, c)
|
визначає останнє входження літери c в рядок str; повертає вказівник на знайдену літеру (або NULL, якщо її нема)
|
strstr(str1, str2)
|
визначає перше входження підрядка str2 в рядок str1; повертає вказівник на першу літеру знайденого підрядка (або NULL, якщо він не зустрічається)
|
strrev(str)
|
записує рядок str у зворотному порядку
|
strupr(str)
|
перетворює всі літери рядка у великі літери
|
strlwr(str)
|
перетворює всі літери рядка у малі літери
|
strcmp(str1, str2)
|
порівнює рядки str1 та str2; якщо рядки рівні, то повертає 0;
якщо відмінні – то повертає різницю між першими відмінними літерами: с1 – с2
|
stricmp(str1, str2)
|
аналогічна до strcmp(...), тільки ігнорує величину літер
|
strcspn(str1,str2)
|
повертає число – позицію першого входження в рядок str1 символу із набору str2
|
strdup(str1)
|
розподіляє пам’ять і копіює рядок str1 за виділеною адресою; повертає адресу початку виділеної пам’яті
|
Приклади:
strcmp("abcdefgh","abcabc") = 3;
stricmp("Abcd","abcD") = 0;
strlen("alpha") = 5;
cout<<strchr("University", 'v') –> "versity";
cout<<strstr("MicroLab Studio", "Lab") –> "Lab Studio";
cout<<strupr("My first Program") –> "MY FIRST PROGRAM".
Робота з масивами
Операція з масивом
|
Лінійний масив
|
Прямокутна таблиця
|
Опис
|
int a[100];
int i, n;//індекс, кількість елементів
|
int a[100][100];
int i,j, n,m;//індекс, кількість елементів
|
Введення
|
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
|
cin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
|
Виведення
|
for(i=0;i<n;i++)cout<<a[i]<<” “;
|
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout<<a[i][j]<<” “;
|
Сумування
|
s=0;
for(i=0;i<n;i++)s=s+a[i];
|
s=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s=s+a[i][j];
|
Пошук
|
cin>>k;
for(i=0;i<n;i++) if (a[i]==k) cin<<i;
|
cin>>k;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if (a[i][j]==k)
cin<<i<<” “<<j;
|
Пошук максимального
|
max=a[0];nmax=0;
for(i=1;i<n;i++)if (a[i]>max) {max=a[i];nmax=i;}
|
max=a[0][0];imax=1;jmax=1;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if (a[i][j]>max) {max=a[i][j];
imax=i;jmax=j;}
|
Сортування
|
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
if (a[j]>a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}
|
|
Стирання
|
n=n-1;
for(i=k-1;i<n;i++)
a[i]=a[i+1];
|
|
Вставка
|
n=n+1;
for(i=n-1;i>k;i--)
a[i]=a[i-1];
a[k]=x;
|
|
|