Лабы / ООП.Builder / Lab1New
.doc
МГИЭТ(ТУ)
Кафедра ВТ
факультет МПиТК
Лабораторная работа №1
«Изучение команд операционной системы (ОС) и основ ввода/вывода
(компиляторы «BC3.1» и «Borland C++ Builder»)»
Составил: ст.пр. Тельминов О.А.
09/2001 г.
Цель работы: ознакомиться с файловыми командами ОС, изучить меню компиляторов и основ ввода/вывода в языке С++
Отчетность: каждый студент должен иметь протокол (рукописный или отпечатанный) выполнения работы, включающий в себя:
-
теоретическую часть (указанные функции)
-
полные листинги программ
-
ответы на вопросы, поставленные в лабораторной работе
Порядок выполнения работы
1. Файловые команды ОС
-
Команды DOS. Изучите работу следующих команд:
-
mkdir
-
copy
-
edit
-
move
-
ren
-
del
Получите и законспектируйте описание каждой из команд с помощью ключа /?. Например:
copy /?
Копирование одного или нескольких файлов в другое место.
COPY [/A | /B] источник [/A | /B] [+ источник [/A | /B] [+ ...]] [результат
[/A | /B]] [/V] [/Y | /-Y]
источник Имя копируемого файла (файлов).
/A Файл является текстовым файлом ASCII.
/B Файл является двоичным.
…
Можно использовать переназначение вывода >>, при этом вместо вывода на экран будет произведена запись в файл (1.txt), например:
copy /? >> 1.txt
Самостоятельно выполните и законспектируйте по 2 примера на каждую команду.
-
Файловые менеджеры Explorer, WinCommander.
-
Изучите следующие операции:
-
создание папки;
-
создание текстового файла;
-
просмотр/редактирование текстового файла
-
переименование файлов и папок;
-
поиск файлов и папок;
-
удаление файлов и папок;
-
восстановление файлов и папок;
-
удаление файлов и папок из корзины;
-
Самостоятельно выполните и законспектируйте по 2 примера на каждую операцию.
-
создайте на рабочем диске свою папку.
-
Компилятор BC3.1
2.1. Изучите состав папки с компилятором (например, D:\BC31).
Перечень основных файлов:
.bgi – графический интерфейс (поддержка графики)
.com, .exe – исполняемые файлы
.h – заголовочный файл
.lib – библиотечный файл
.obj – объектный файл
.с, .cpp – файл с текстом программы С/С++
.сhr – шрифт
Найдите указанные группы файлов и законспектируйте полную структуру папок. Укажите назначение каждой папки в соответствии с ее содержимым.
2.2. Запустите компилятор bc.exe. Изучите структуру меню, параллельно конспектируя
-
закройте все открытые окна (Alt+F3 или мышью)
-
создайте 3 новых окна (File/New)
-
изучите манипуляции с окнами (Window/…)
-
введите текст в любое из окон и освойте работу с буфером обмена (Edit/…) и поиском/заменой (Search/…)
-
изучите File/Save, SaveAs
-
изучите File/Change Dir и сделайте активной свою папку
-
оставьте одно окно, сохраните его в своей папке. Обратите внимание на отсутствие пути в заголовке окна.
-
изучите Options/Directories. Отразите в конспекте это окно, внеся пояснения к 4 полям ввода. Убедитесь в соответствии фактического и указанного в окне расположения папок. Назначьте двум последним полям имя своей папки.
2.3. Hello, World!
-
введите программу:
#include <iostream.h>
void main ( )
{
cout << “Hello, World!” << endl;
}
-
необходимая в любой программе функция с именем main в данном случае не возвращает никакого значения (тип void) и не принимает никаких параметров (пустые скобки после имени)
-
тело функции main обрамлено скобками { } и в данном случае содержит единственную строку
-
директива препроцессора #include вставляет содержимое файла в скобках < > (стандартные файлы С++) или кавычках “ ” (пользовательские файлы из текущей папки), в данном случае служит для работы с cout и endl
-
cout – поток для вывода на консоль, операция помещения в поток << позволяет выводить на экран соответствующее значение
-
найдите файл «iostream.h» с помощью файлового менеджера
-
найдите в этом файле манипулятор endl и выясните его назначение
-
проверьте файлы в своей папке, оставьте только файл с текстом программы
-
скомпилируйте программу: получите объектный файл из файла текста программы и заголовочного файла с помощью команды «Compile/Compile»
-
проверьте файлы в своей папке, поясните действие компилятора
-
выполните команду «Compile/Link» (программа-линкер)
-
проверьте файлы в своей папке, поясните действие линкера
-
нарисуйте схему получения исполняемого файла из .cpp (.c), .h и .obj.
-
запустите программу “Run/Run” (команда включает компилятор, линкер и собственно запуск .exe)
-
обратите внимание на окно «Messages». Что там отображено?
-
проверьте содержимое консоли (Alt+F5)
-
укоротите программу до минимума так, чтобы компиляция проходила без ошибок
-
объясните полученный результат
2.4. Работа в текстовом режиме
2.4.1. Изучение встроенных функций
-
наберите имя функции gotoxy и получите справку по ней (установите курсор под именем функции, Ctrl+F1):
gotoxy <CONIO.H>
Positions cursor in text window
Declaration: void gotoxy(int x, int y);
…
-
извлеките следующие данные о функции:
-
заголовочный файл, содержащий функцию: <CONIO.H>
-
назначение: Positions cursor in text window
-
описание: void gotoxy(int x, int y);
-
пример (прокрутите экран помощи вниз):
-
#include <conio.h>
int main(void)
{
clrscr();
gotoxy(35, 12);
cprintf("Hello world");
getch();
return 0;
}
-
функция gotoxy принимает 2 целых числа в качестве аргументов;
-
обратите внимание, что в данном примере функция main возвращает целое (перед именем указан тип int), в теле функции оператор return 0; возвращает нуль
-
аналогично рассмотренному выше запишите заголовочный файл, назначение и описание для функций cprintf и getch
-
запустите этот пример и поясните результат
2.4.2. Объявление переменных и цикл for
-
для объявления переменной необходимо указать тип и имя:
int a; //целый тип
float re, im; //вещественный тип
-
для инициализации/присвоения используется оператор =
a = 10;
re = 17.5; im= -32.1
-
цикл for
int i;
for (i = 3; i<7; i++)
cout << i << endl;
-
запустите вышеприведенный пример, поясните результат
-
поясните назначение выражений, разделенных точкой с запятой в скобках для for
-
замените i<7 на i<=7, выполните, поясните
-
повторите для
for (i = 7; i>3; i--)
-
повторите для
for (i = 7; i>=3; i--)
-
вместо инкремента(++) / декремента (--) может быть использованы:
i = i + 1;
i += 1;
i = i – 1;
i –= 1;
-
проверьте и объясните цикл:
for ( ; ; )
cout << “+”;
-
выведите 6 чисел, начиная с 10, с шагом 5, разделяя их пробелом
2.4.3. Цветная программа
-
изучите назначение, заголовочный файл и формат вызова функций:
-
textcolor (+ количество цветов)
-
textbackground (+ количество цветов)
-
clrscr
-
delay
-
-
если в качестве цвета (целое) функции задать вещественное, то дробная часть будет отброшена (правило автоматического преобразования)
-
размер экрана 80х25 знакомест
-
программа: переместите слово «С++» с шагом 1 слева направо так, чтобы через каждые 10 знакомест происходила смена его цвета. Через 3 сек верните слово на исходное место.
2.4.4. Получение внешних параметров из ОС
-
тезис 1: ваша скомпилированная отлинкованная программа – файл .exe
-
тезис 2: ваша программа может получать аргументы от ОС аналогично другим программам, например:
copy file1 file2
-
тезис 3: доступ к таким аргументам (параметрам) ОС осуществляется через функцию main:
int main (int argc, char** argv)
-
argc – количество аргументов, переданных в main
-
argv – указатель на массив аргументов (здесь: каждый аргумент – строковая переменная)
-
НУМЕРАЦИЯ ЭЛЕМЕНТОВ массива в С/С++ начинается с НУЛЯ, заканчивается количеством элементов минус один
-
задайте в Run/Arguments несколько аргументов, например file1 file2
-
программа (запускайте из среды программирования):
-
выведите количество переданных аргументов
-
выведите значения всех переданных аргументов (если i – переменная цикла, то доступ к значению аргумента: … cout << argv [i] …)
-
Количество аргументов: 3
d:\my\copy1.exe
file1
file2
-
протестируйте .exe-файл этой программы непосредственно в ОС: «Пуск/Выполнить» (+R) или набейте в командной строке:
d:\my\copy1.exe file1 file2 Hello
-
повторите для:
d:\my\copy1.exe “file1 file2” Hello
-
запустите эту программу из ОС, не указывая ни один аргумент
-
объясните получившийся результат. Укажите роль этого аргумента в программе.
2.4.5 Сравнение строк
-
получите информацию о функции 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.
-
«чужие» ключи игнорировать
2.4.6. Таблица ASCII
-
программа: таблица ASCII, i от 1 до 255, курсор в одной и той же позиции (gotoxy), вывод данных с помощью строки:
cout<<”ASCII-символ №” << i << “ = ” << char (i) << endl;
-
char (i)преобразует число в символ с ASCII-кодом i
-
некоторые символы не отображаются на экране
-
внесите в конспект несколько символов и их ASCII-коды
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() – проверка нажатия на клавишу. Примените в своей программе для параллельного вычисления (или движения по экрану) и анализу нажатых клавиш
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
2.5. Вывод в графическом режиме
-
скопируйте egavga.bgi в свою папку
-
получите справку по circle. Переместитесь в конец окна и перейдите в пример для circle, скопируйте его в окно. Упростите его до следующего состояния:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main(void)
{//вход в графический режим
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
//цвет и окружность
setcolor(14);
circle(100, 100, 30);
//выход
getch();
closegraph();
}
-
программа: перемещение фигуры при нажатии клавиш курсора.
-
Консольное приложение в BorlandC++Builder
-
Создание проекта
-
-
запустите C++Builder
-
File/New/Console Wizard
-
File/Save All
-
Запуск проекта
-
Run/Run
-
Изучите и выполните 2 примера из справки для cin
-
Hello, World для Windows
-
запустите C++Builder (или File/New Application)
-
File/Save All
-
запустите проект
-
исследуйте Windows-приложение (мин/макс, закрыть)
-
вернитесь в среду разработки
-
изучите команды перехода между Object Inspector (F11), Формой (F12) и Редактором (F12).
-
активизируйте форму, выберите компонент Label на панели и разместите его на форме
-
активизируйте Object Inspector и измените свойство Caption на Hello, World!
-
запустите программу.