
2.4.3. Цветная программа
-
изучите назначение, заголовочный файл и формат вызова функций:
-
textcolor (+ количество цветов)
-
textbackground (+ количество цветов)
-
clrscr
-
delay
-
-
если в качестве цвета (целое) функции задать вещественное, то дробная часть будет отброшена (правило автоматического преобразования)
-
размер экрана 80х25 знакомест
-
программа: переместите слово «С++» с шагом 1 слева направо так, чтобы через каждые 10 знакомест происходила смена его цвета. Через 3 сек верните слово на исходное место.
#include <conio.h>
#include <dos.h>
#include <Windows.h>
#include <time.h>
int main(void)
{
int i, j,x;
time_t t;
t=time(NULL);
for (j=0; j<25; j++)
{
for (i=0; i<80; i++)
{
clrscr();
textcolor(i/10+3);
gotoxy(i,5);
cprintf("C++");
Sleep(50);
if (time(NULL)>=t+3) {
break;
}
if (time(NULL)>=t+3) {
break;
}
}
}
clrscr();
gotoxy(0,5);
cprintf("C++");
getch();
return 0;
}
Сравнение строк РАБОТАЕТ, НО НЕ ПРАВИЛЬНО!! Запускать через командную строку
-
получите информацию о функции strcmp
-
исследуйте следующий пример:
if (strcmp(“ab”,”a”)>0) cout << “ab > a”;
if (strcmp(“ab”,”a”)==0) cout << “ab = a”;
if (strcmp(“ab”,”a”)<0) cout << “ab < a”;
-
передайте в качестве первого аргумента другую константу (вместо «ab»). Проверьте результат
-
программа (например, status.exe):
-
запуск без аргументов:
-
status.exe – программа анализа аргументов ОС и вывода данных
Формат вызова:
status.exe [-n] [-e] [-cp]
Ключи:
-n – вывод name
-e – вывод e-mail
-cp – вывод cell phone
-
если указан хотя бы один из аргументов (в любой последовательности), то вывести соответствующую информацию
-
если вместо ключа «–n» указана любая строка, начинающаяся с «–n» (например, «–nam»), считать ее за верный ключ «–n». Для этого используйте свойство strcmp.
-
«чужие» ключи игнорировать
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
int main(int argc, char* argv[])
{ int i;
for (i = 1; i<argc; i++) {
if (strcmp("-n",argv[i])>=0)
cout << "Name";
else if (strcmp("-e",argv[i])>=0)
cout << "Name@gmail.com"<<"\n";
else if (strcmp("-cp",argv[i])>=0)
cout << "555-333"<<"\n";
else
cout<<"Error code"<<"\n";
}
getch ();
}
2.4.6. Таблица ASCII
-
программа: таблица ASCII, i от 1 до 255, курсор в одной и той же позиции (gotoxy), вывод данных с помощью строки:
cout<<”ASCII-символ №” << i << “ = ” << char (i) << endl;
-
char (i)преобразует число в символ с ASCII-кодом i
-
некоторые символы не отображаются на экране
-
внесите в конспект несколько символов и их ASCII-коды
#include <iostream>
#include <conio.h>
#include <dos.h>
#include <Windows.h>
#include <time.h>
using namespace std;
int main()
{
int i=0;
for (i = 0; i <255; i++)
{
cout<<"ASCII-simvol #"<<i<< " = " << char (i) << endl;
Sleep(200);
clrscr();
gotoxy(0,0);
}
getch ();
return 0;
}
2.4.7. Scan-коды клавиатуры
-
каждая клавиша/их сочетание имеет код или расширенный код
-
расширенный код начинается нулем
-
код воспринимается функцией getch(), которая читает код из входного потока:
int scan;
scan=getch();
-
если Scan-код равен нулю, то код расширенный, поэтому перечитайте Scan-код заново:
if (scan==0)
scan=getch();
-
замкните вышеприведенные фрагменты в бесконечный цикл for, обеспечив вывод Scan-кода на экран в одну и ту же позицию
-
программа: анализатор Scan-кода. Выход (break) из цикла – при нажатии Esc:
if (scan==27) break;
-
программа*: функция kbhit() – проверка нажатия на клавишу. Примените в своей программе для параллельного вычисления (или движения по экрану) и анализу нажатых клавиш
#include <iostream>
#include <conio.h>
#include <string.h>
#include <dos.h>
#include <Windows.h>
#include <time.h>
using namespace std;
int main()
{ int scan;
for (; ; ) {
scan=getch();
cout<<scan;
Sleep(200);
clrscr();
if (scan==27)
break;
}
getch ();
return 0;
}
2.4.8. Функции cout, cin и scanf,
-
пример1 (С++):
int a;
cout << “Введите свой возраст” << endl;
cin >> a;
cout << “Вы родились: ” << 2001 – a << endl;
-
обратите внимание на простоту операций ввода/вывода при использовании потоков
-
пример2 (С/С++):
float x, y, z;
printf(“Введите 2 вещественных слагаемых, разделяя их пробелом:\n”);
scanf(“%f %f”, &x, &y);
z = x + y;
printf(“%5.2f+%5.2f=%5.2f”, x, y, z);
-
отметьте, что функция scanf изменяет значения своих аргументов, поэтому ей передаются адреса переменных (&x). Функция printf лишь выводит значения, поэтому ей передается только имя переменной (x).
-
в кавычках указывается формат, в котором будет выведено/введено значение переменной. %f означает, что данные вещественного типа, %i – целого типа, %s – строкового типа.
-
при выводе может быть указана ширина поля вывода. %5.2f означает, что на все символы числа (включая десятичную точку) будет отведено 5 знакомест, из них на дробную часть – 2.
-
программа: вычисление факториала. Ввод/вывод – с помощью scanf/printf
#include <stdio.h>
#include <conio.h>
int a;
int myfun(int a)
{ if (a==0)
a=1;
else
a=a*myfun(a-1);
return(a);
}
int main()
{
printf("Vvedite chislo\n" );
scanf("%d%c", &a,&b);
if ((a<0)||(b!= "\n")) (Здесь точно не помню может быть ‘\n’ )
printf("Nevozmozhno naiti factorial");
else
printf("factorial %d= %d", a, myfun(a));
getch();
}