Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП / ООП / lab1_oop (2)

.docx
Скачиваний:
9
Добавлен:
18.02.2017
Размер:
24.49 Кб
Скачать

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();

}

Соседние файлы в папке ООП