Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Законченная программа

Тип Реферат
Предмет Информатика и программирование
Просмотров
1151
Размер файла
18 б
Поделиться

Ознакомительный фрагмент работы:

Законченная программа

Разберем процесс написания программы для рисования на экране геометрических фигур. Она естественным образом разделяется на три части:

Администратор экрана: подпрограммы низкого уровня и структуры данных, определяющие экран; он ведает только точками и прямыми линиями;

Библиотека фигур: набор определений основных фигур вроде прямоугольника и круга и стандартные программы для работы с ними; и

Прикладная программа: множество определений, специализированных для данного приложения, и код, в котором они используются.

Эти три части скорее всего будут писать разные люди (в разных организациях и в разное время). При этом части будут скорее всего писать именно в указанном порядке с тем осложняющим обстоятельством, что у разработчиков нижнего уровня не будет точного представления, для чего их код в конечном счете будет использоваться. Это отражено в приводимом примере. Чтобы пример был короче, графическая библиотека предоставляет только весьма ограниченный сервис, а сама прикладная программа очень проста. Чтобы читатель смог испытать программу, даже если у него нет совсем никаких графических средств, используется чрезвычайно простая концепция экрана. Не должно составить труда заменить эту экранную часть программы чем-нибудь подходящим, не изменяя код библиотеки фигур и прикладной программы.

Администратор Экрана

Вначале было намерение написать администратор экрана на C (а не на C++), чтобы подчеркнуть разделение уровней реализации. Это оказалось слишком утомительным, поэтому пришлось пойти на компромисс: используется стиль C (нет функций членов, виртуальных функций, определяемых пользователем операций и т.п.), однако применяются конструкторы, надлежащим образом описываются и проверяются параметры функций и т.д. Оглядываясь назад, можно сказать, что администратор экрана очень похож на C программу, которую потом модифицировали, чтобы воспользоваться средствами C++ не переписывая все полностью.

Экран представляется как двумерный массив символов, работу с которым осуществляют функции put_point() и put_line(), использующие при ссылке на экран структуру point:

// файл screen.h

const XMAX=40, YMAX=24;

struct point {

int x,y;

point() {}

point(int a, int b) { x=a; y=b; }

};

overload put_point;

extern void put_point(int a, int b);

inline void put_point(point p) { put_point(p.x,p.y); }

overload put_line;

extern void put_line(int, int, int, int);

inline void put_line(point a, point b)

{ put_line(a.x,a.y,b.x,b.y); }

extern void screen_init();

extern void screen_refresh();

extern void screen_clear();

#include

Перед первым использованием функции put экран надо инициализировать с помощью screen_init(), а изменения в структуре данных экрана отображаются на экране только после вызова screen_refresh(). Как увидит пользователь, это "обновление" ("refresh") осуществляется просто посредством печати новой копии экрана под его предыдущим вариантом. Вот функции и определения данных для экрана:

#include "screen.h"

#include

enum color { black="*", white=" " };

char screen[XMAX][YNAX];

void screen_init()

{

for (int y=0; y=a || a<=b) y0 += dy, eps -= two_a;

}

}

Предоставляются функции для очистки экрана и его обновления:

void screen_clear() { screen_init(); } // очистка

void screen_refresh() // обновление

{

for (int y=YMAX-1; 0<=y; y--) { // сверхувниз

for (int x=0; x

Библиотека Фигур

Нам нужно определить общее понятие фигуры (shape). Это надо сделать таким образом, чтобы оно использовалось (как базовый класс) всеми конкретными фигурами (например, кругами и квадратами), и так, чтобы любой фигурой можно было манипулировать исключительно через интерфейс, предоставляемый классом shape:

struct shape {

shape() { shape_list.append(this); }

virtual point north() { return point(0,0); } // север

virtual point south() { return point(0,0); } // юг

virtual point east() { return point(0,0); } // восток

virtual point neast() { return point(0,0); } // северо-восток

virtual point seast() { return point(0,0); } // юго-восток

virtual void draw() {}; // нарисовать

virtual void move(int, int) {}; // переместить

};

Идея состоит в том, что расположение фигуры задается с помощью move(), и фигура помещается на экран с помощью draw(). Фигуры можно располагать относительно друг друга, используя понятие точки соприкосновения, и эти точки перечисляются после точек на компасе (сторон света). Каждая конкретная фигура определяет свой смысл этих точек, и каждая определяет способ, которым она рисуется. Для экономии места здесь на самом деле определяются только необходимые в этом примере стороны света. Конструктор shape::shape() добавляет фигуру в список фигур shape_list. Этот список является gslist, то есть, одним из вариантов обобщенного односвязанного списка, определенного в #7.3.5. Он и соответствующий итератор были сделаны так:

typedef shape* sp;

declare(gslist,sp);

typedef gslist(sp) shape_lst;

typedef gslist_iterator(sp) sp_iterator;

поэтому shape_list можно описать так:

shape_lst shape_list;

Линию можно построить либо по двум точкам, либо по точке и целому. В последнем случае создается горизонтальная линия, длину которой определяет целое. Знак целого указывает, каким концом является точка: левым или правым. Вот определение:

class line : public shape {

/*

линия из "w" в "e"

north() определяется как ``выше центра

и на север как до самой северной точки""

*/

point w,e;

public:

point north()

{ return point((w.x+e.x)/2,e.ydraw();

screen_refresh();

}

И вот, наконец, настоящая сервисная функция (утилита). Она кладет одну фигуру на верх другой, задавая, что south() одной должен быть сразу над north() другой:

void stack(shape* q, shape* p) // ставит p наверх q

{

point n = p->north();

point s = q->south();

q->move(n.x-s.x,n.y-s.y+1);

}

Теперь представим себе, что эта библиотека считается собственностью некоей компании, которая продает программное обеспечение, и что они продают вам только заголовочный файл, содержащий определения фигур, и откомпилированный вариант определений функций. И у вас все равно остается возможность определять новые фигуры и использовать для ваших собственных фигур сервисные функции.

Прикладная Программа

Прикладная программа чрезвычайно проста. Определяется новая фигура my_shape (на печати она немного похожа на рожицу), а потом пишется главная программа, которая надевает на нее шляпу. Вначалеописание my_shape:

#include "shape.h"

class myshape : public rectangle {

line* l_eye; // левыйглаз

line* r_eye; // правыйглаз

line* mouth; // рот

public:

myshape(point, point);

void draw();

void move(int, int);

};

Глаза и рот - отдельные и независимые объекты, которые создает конструктор my_shape:

myshape::myshape(point a, point b) : (a,b)

{

int ll = neast().x-swest().x+1;

int hh = neast().y-swest().y+1;

l_eye = new line(

point(swest().x+2,swest().y+hh*3/4),2);

r_eye = new line(

point(swest().x+ll-4,swest().y+hh*3/4),2);

mouth = new line(

point(swest().x+2,swest().y+hh/4),ll-4);

}

Объекты глаза и рот порознь рисуются заново функцией shape_refresh(), и в принципе могут обрабатываться независимо из объекта my_shape, которому они принадлежат. Это один способ определять средства для иерархически построенных объектов вроде my_shape. Другой способ демонстрируется на примере носа. Никакой нос не определяется, его просто добавляет к картинке функция draw():

void myshape::draw()

{

rectangle::draw();

put_point(point(

(swest().x+neast().x)/2,(swest().y+neast().y)/2));

}

my_shape передвигается посредством перемещения базового прямоугольника rectangle и вторичных объектов l_eye, r_eye и mouth (левого глаза, правого глаза и рта):

void myshape::move()

{

rectangle::move();

l_eye->move(a,b);

r_eye->move(a,b);

mouth->move(a,b);

}

Мы можем, наконец, построить несколько фигур и немного их подвигать:

main()

{

shape* p1 = new rectangle(point(0,0),point(10,10));

shape* p2 = new line(point(0,15),17);

shape* p3 = new myshape(point(15,10),point(27,18));

shape_refresh();

p3->move(-10,-10);

stack(p2,p3);

stack(p1,p2);

shape_refresh();

return 0;

}

Еще раз обратите внимание, как функции вроде shape_refresh() и stack() манипулируют объектами типов, определяемых гораздо позже, чем были написаны (и, может быть, откомпилированы) сами эти функции.

Результатом работы программы будет:

***********

* *

* *

* *

* *

* *

* *

* *

* *

* *

***********

*****************

*************

* *

* ** ** *

* *

* * *

* *

* ********* *

* *

*************


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
157018
рейтинг
icon
6076
работ сдано
icon
2739
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
66 337 оценок star star star star star
среднее 4.9 из 5
АГЗ МЧС России
Работу выполнила очень быстро и полностью раскрыла все вопросов по теме.Благодарю 😘
star star star star star
Колледж управления и права
Все выполнила качественно, сделала реферат раньше срока, все замечания были учтены и испра...
star star star star star
ММА
Спасибо Алексей! Все быстро с соблюдением методички. Тема раскрыта полностью.
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

На выбор из приложения

Курсовая, Технические средства автоматизации и управления

Срок сдачи к 12 июня

только что

Сохранить в 22 версии компас

Чертеж, Чертежи в компас

Срок сдачи к 14 мая

только что

По таблице квалитетов нужно как то решить задачи, начертить чертеж и тд

Решение задач, Метрология, стандартизация и сертификация

Срок сдачи к 17 мая

3 минуты назад

сделать презентацию и речь

Презентация, современные технологии изготовления оптических линз и оправ

Срок сдачи к 17 мая

4 минуты назад

Совершенствование маркетинговой деятельности на предприятии

Курсовая, Экономика организации (предприятия)

Срок сдачи к 20 мая

4 минуты назад

вариант 3 титульный сделаю сам

Контрольная, семейное право

Срок сдачи к 20 мая

5 минут назад

Решить контрольную

Контрольная, Правовое и документальное обеспечение в туризме и гостеприимстве

Срок сдачи к 17 мая

6 минут назад

Рецензия на религиозную статью

Рецензия, Религия

Срок сдачи к 20 мая

6 минут назад

технология программирования

Лабораторная, Программирование

Срок сдачи к 19 мая

8 минут назад
8 минут назад

Решения задач

Решение задач, Высшая математика

Срок сдачи к 14 мая

9 минут назад

Ванеев Анатолий Николаевич

Презентация, Библиотековедение

Срок сдачи к 16 мая

9 минут назад

Возмещение вреда, причиненного гражданину органами государственной...

Реферат, Административное право

Срок сдачи к 13 мая

10 минут назад

Выполнить контрольную работу

Контрольная, Основы роботизированной сварки

Срок сдачи к 26 мая

10 минут назад

Выполнить курсовую работу по методичке по предмету "Первичная переработка нефти и попутного нефтяного газа"

Курсовая, "Первичная переработка нефти и попутного нефтяного газа"

Срок сдачи к 23 мая

10 минут назад

Решить задачи по семейному праву

Решение задач, Семейное право

Срок сдачи к 15 мая

11 минут назад

Разработка технического задания программного продукта и предпроектное обследование организации

Лабораторная, Техническое документирование информационных систем

Срок сдачи к 30 мая

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно