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

Лабы / ООП.Builder / Lab1New

.doc
Скачиваний:
13
Добавлен:
17.04.2013
Размер:
64.51 Кб
Скачать

8

МГИЭТ(ТУ)

Кафедра ВТ

факультет МПиТК

Лабораторная работа №1

«Изучение команд операционной системы (ОС) и основ ввода/вывода

(компиляторы «BC3.1» и «Borland C++ Builder»)»

Составил: ст.пр. Тельминов О.А.

09/2001 г.

Цель работы: ознакомиться с файловыми командами ОС, изучить меню компиляторов и основ ввода/вывода в языке С++

Отчетность: каждый студент должен иметь протокол (рукописный или отпечатанный) выполнения работы, включающий в себя:

  • теоретическую часть (указанные функции)

  • полные листинги программ

  • ответы на вопросы, поставленные в лабораторной работе

Порядок выполнения работы

1. Файловые команды ОС

    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 примера на каждую команду.

    1. Файловые менеджеры Explorer, WinCommander.

  • Изучите следующие операции:

    • создание папки;

    • создание текстового файла;

    • просмотр/редактирование текстового файла

    • переименование файлов и папок;

    • поиск файлов и папок;

    • удаление файлов и папок;

    • восстановление файлов и папок;

    • удаление файлов и папок из корзины;

Самостоятельно выполните и законспектируйте по 2 примера на каждую операцию.

  • создайте на рабочем диске свою папку.

  1. Компилятор 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();

}

  • программа: перемещение фигуры при нажатии клавиш курсора.

  1. Консольное приложение в BorlandC++Builder

    1. Создание проекта

  • запустите C++Builder

  • File/New/Console Wizard

  • File/Save All

    1. Запуск проекта

  • Run/Run

    1. Изучите и выполните 2 примера из справки для cin

  1. Hello, World для Windows

  • запустите C++Builder (или File/New Application)

  • File/Save All

  • запустите проект

  • исследуйте Windows-приложение (мин/макс, закрыть)

  • вернитесь в среду разработки

  • изучите команды перехода между Object Inspector (F11), Формой (F12) и Редактором (F12).

  • активизируйте форму, выберите компонент Label на панели и разместите его на форме

  • активизируйте Object Inspector и измените свойство Caption на Hello, World!

  • запустите программу.

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