- •Приложение 1. Некоторые полезные примеры и иллюстрации к разделам конспекта
- •Примеры к разделу 5 Вычисление факториала числа
- •Быстрое возведение чисел в целую степень
- •Нахождение наибольшего общего делителя (алгоритм Евклида)
- •Примеры к разделу 7 Библиотека функций случайных чисел
- •Библиотека функций по работе с массивами общего назначения
- •Библиотека функций сортировки массивов
- •Библиотека функций поиска в массивах
- •Приложение 2. Функции стандартного ввода/вывода в стиле c (printf, scanf) Автор: Бардин п.Б. Введение
- •Функция стандартного вывода printf()
- •Int printf(char *управляющая строка, ...);
- •Примеры программ.
- •Функция стандартного ввода scanf()
- •Int scanf(char *управляющая строка);
- •Int scanf(char *управляющая строка);
- •Примеры программ.
- •Приложение 3. Библиотека консольного ввода-вывода
- •Приложение 4. Библиотека управления консолью (MyCrt.H)
- •Приложение 5. Библиотека Menu.H и пример ее использования Библиотека Menu.H
- •Пример использования библиотеки Menu.H
Приложение 4. Библиотека управления консолью (MyCrt.H)
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
#pragma once;
short MaxX();
short MaxY();
void ConWidth(int W);
void ConHeight(int H);
void ConSize(int W, int H);
void ScrollVert(int P);
void ScrollHor(int P);
void ScrSize(int W, int H);
void ScrGoTo(int X, int Y);
void CursorVisible(bool Visible);
void GoToXY(short x, short y);
unsigned short WhereX();
unsigned short WhereY();
void WhereXY(unsigned short &x, unsigned short &y);
unsigned short GetTextColors();
void TextBackground(unsigned short Color);
void TextForeground(unsigned short Color);
void TextColor(unsigned short Colors);
void ChangeTextAttribute(unsigned short Attr, unsigned short x, unsigned short y, unsigned short len);
void ClrScr();
bool ReadKey(wchar_t &c);
HANDLE hMWin = GetStdHandle(STD_OUTPUT_HANDLE);
void ColorMap()
{
for (int i = 0; i < 16; ++ i)
{
int b = i << 4;
for (int f = 0; f < 16; ++ f)
{
SetConsoleTextAttribute(hMWin, b | f);
cout << '*';
}
cout << endl;
}
}
short MaxX()
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
return ConInfo.dwSize.X;
}
short MaxY()
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
return ConInfo.dwSize.Y;
}
void ConWidth(int W)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
COORD c = {W, ConInfo.dwSize.Y};
SetConsoleScreenBufferSize(hMWin, c);
}
void ConHeight(int H)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
if (H < 25)
H = 25;
COORD c = {ConInfo.dwSize.X, H};
SetConsoleScreenBufferSize(hMWin, c);
}
void ConSize(int W, int H)
{
if (H < 25)
H = 25;
COORD c = {W, H};
SetConsoleScreenBufferSize(hMWin, c);
}
void ScrSize(int W, int H)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
SMALL_RECT WRect = ConInfo.srWindow;
COORD c = GetLargestConsoleWindowSize(hMWin);
if (W > c.X)
W = c.X;
if (H > c.Y)
H = c.Y;
if (W > ConInfo.dwSize.X)
W = ConInfo.dwSize.X;
if (H > ConInfo.dwSize.Y)
H = ConInfo.dwSize.Y;
WRect.Right = WRect.Left + W - 1;
WRect.Bottom = WRect.Top + H - 1;
SetConsoleWindowInfo(hMWin, true, &WRect);
}
void ScrGoTo(int X, int Y)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
SMALL_RECT WRect = ConInfo.srWindow;
WRect.Right = X + WRect.Right - WRect.Left;
WRect.Bottom = Y + WRect.Bottom - WRect.Top;
WRect.Left = X;
WRect.Top = Y;
SetConsoleWindowInfo(hMWin, true, &WRect);
GoToXY(X, Y);
}
void ScrollVert(int P)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
SMALL_RECT WRect = ConInfo.srWindow;
WRect.Top += P;
WRect.Bottom += P;
SetConsoleWindowInfo(hMWin, true, &WRect);
GoToXY(WhereX(), WhereY() + P);
}
void ScrollHor(int P)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
SMALL_RECT WRect = ConInfo.srWindow;
WRect.Left += P;
WRect.Right += P;
SetConsoleWindowInfo(hMWin, true, &WRect);
GoToXY(WhereX() + P, WhereY());
}
void CursorVisible(bool Visible)
{
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hMWin, &CursorInfo);
CursorInfo.bVisible = Visible;
SetConsoleCursorInfo(hMWin, &CursorInfo);
}
void GoToXY(short x, short y)
{
COORD c = {x, y};
SetConsoleCursorPosition(hMWin, c);
}
unsigned short WhereX()
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
return ConInfo.dwCursorPosition.X;
}
unsigned short WhereY()
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
return ConInfo.dwCursorPosition.Y;
}
void WhereXY(unsigned short &x, unsigned short &y)
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hMWin, &ConInfo);
x = ConInfo.dwCursorPosition.X;
y = ConInfo.dwCursorPosition.Y;
}
unsigned short GetTextColors()
{
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
if (GetConsoleScreenBufferInfo(hMWin, &ConInfo))
return ConInfo.wAttributes;
else
return 0;
}
void TextBackground(unsigned short Color)
{
if (Color >= 16)
return;
Color = Color << 4;
Color = GetTextColors() & 0xFF0F | Color;
SetConsoleTextAttribute(hMWin, Color);
}
void TextForeground(unsigned short Color)
{
if (Color >= 16)
return;
Color = GetTextColors() & 0xFFF0 | Color;
SetConsoleTextAttribute(hMWin, Color);
}
void TextColor(unsigned short Colors)
{
if (Colors >= 256)
return;
SetConsoleTextAttribute(hMWin, Colors);
}
void ChangeTextAttribute(unsigned short Attr, unsigned short x, unsigned short y, unsigned short len)
{
COORD c = {x, y};
DWORD l;
FillConsoleOutputAttribute( hMWin, Attr, len, c, &l );
}
void ClrScr()
{
COORD c = {0, 0};
DWORD Chr;
CONSOLE_SCREEN_BUFFER_INFO ConInfor;
DWORD ConSize;
if (!GetConsoleScreenBufferInfo(hMWin, &ConInfor))
return;
ConSize = ConInfor.dwSize.X * ConInfor.dwSize.Y;
if (!FillConsoleOutputCharacter(hMWin, (TCHAR) ' ', ConSize, c, &Chr))
return;
if (!FillConsoleOutputAttribute(hMWin, ConInfor.wAttributes, ConSize, c, &Chr))
return;
SetConsoleCursorPosition(hMWin, c);
}
bool ReadKey(wchar_t &c)
{
bool b = 0;
c = _getwch();
if (c == 224 || !c)
c = _getwch();
else
b = 1;
return b;
}