Форум программистов, компьютерный форум CyberForum.ru

Структурировать программу, разбив её на отдельные процедуры - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать программу, которая копирует файлы из другого файла и считает количество строк http://www.cyberforum.ru/cpp-beginners/thread1641751.html
Программа, которая копирует файлы из другого файла и считает количество строк
C++ Подскажите кросспратформенный пример для вывода списка файлов Есть ли какой нибудь кроссплатформенный пример для вывода списка файлов в директории C++. http://www.cyberforum.ru/cpp-beginners/thread1641744.html
Вывести на экран все двузначные числа, делящиеся на каждую из своих цифр и подсчитать количество таких чисел C++
Составить программы для решения следующих задач (выполните задание двумя способами: с использованием одного цикла и с использованием вложенных циклов): Вывести на экран все двузначные числа, делящиеся на каждую из своих цифр. Подсчитать количество таких чисел.
Составить программу для вывода на экран таблицы чисел в треугольном виде C++
Составить программы для вывода на экран таблицы чисел в виде: 7 7 7 7 6 6 6 5 5 4
C++ Действия с приближенными числами http://www.cyberforum.ru/cpp-beginners/thread1641718.html
определить абсолютную и относительную погрешности вычисления значений функции u, считая все знаки операндов a, b, c и d верными.Выполнить расчеты , используя формулу |∆u|=∑_(i=1)^n▒〖|∂u/(∂x_i )|∙|〖∆x〗_i | 〗. Перепишите формулу с помощью редактора формул внизу страницы! Результаты вычислений представить в виде A=a±∆_a A=a∙(1±δ_a ) A=f∙〖10〗^m,...
C++ Найти номер строки содержащей равное количество положительных и отрицательных элементов Дана целочисленная матрица размера M × N. Найти номер первой из ее строк, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких строк нет, то вывести 0. подробнее

Показать сообщение отдельно
Настасья_12
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 4
18.01.2016, 17:13     Структурировать программу, разбив её на отдельные процедуры
сделана программа, которая закрашивает внутреннюю область треугольника с помощью алгоритма построчной заливки.
помогите с структурированием этой программы, разбив ее на отдельные процедуры
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
//Точка внутри контура - Затравочная точка
//подключаем стандартные библиотеки для работы
#include "stdafx.h"
#include <fstream>
#include <string.h>
#include <iostream>
#include "conio.h"
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
using namespace std;
 
void Create(int R, int G, int B)
{
    int x = -1, y = -1, x0, y0;
 
    HDC hDC = GetDC(GetConsoleWindow()); 
    HPEN Pen = CreatePen(PS_SOLID, 1, RGB(R, G, B));//ручка;  r, g, b - красная, зеленая и синяя составляющие цвета
    SelectObject(hDC, Pen); //Выбиpает логический объект для DC. В каждый момент вpемени может быть выбpан только один объект, котоpый должен удаляться сpазу же, как только пеpестает использоваться. DC: Идентификатоp контекста устpойства. hObject: Каpта бит, кисть, шpифт, пеpо или область.
 
    MoveToEx(hDC, 98, 0, NULL); //Функция MoveToEx обновляет текущую позицию в заданной точке и, возможно, возвращает предыдущую позицию
    LineTo(hDC, 98, 400); //Рисует линию, используя выбpанное пеpо, с текущей позиции до указанной конечной точки
    // HDC - дескриптор контекста устройства
 
    cout << "x0:";  cin >> x0; //ввод x0
    cout << "y0:";  cin >> y0; //ввод y0
 
    MoveToEx(hDC, x0 + 100, y0, NULL); // с заданными значениями x0 и y0
 
    int i;
    for (i = 1; (x != x0) || (y != y0); i++)
    {
        cout << 'x' << i << ": ";  cin >> x;
        cout << 'y' << i << ": ";  cin >> y;
        cout << endl;
        LineTo(hDC, x + 100, y);
    }
}
 
void Rectangle(int R, int G, int B) //треугольник
{
    HDC hDC = GetDC(GetConsoleWindow());
    HPEN Pen = CreatePen(PS_SOLID, 3, RGB(R, G, B));
    SelectObject(hDC, Pen);
    int qq, ww, ee, aa;
    cout << "qq:";  cin >> qq;// границы треугольника
    cout << "ww:";  cin >> ww;
    cout << "ee:";  cin >> ee;
    cout << "aa:";  cin >> aa;
    MoveToEx(hDC, ee, aa, NULL);
 
    LineTo(hDC, qq, qq);
    LineTo(hDC, ww, qq);
    LineTo(hDC, ee, aa);
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    int c;
    HDC hDC = GetDC(GetConsoleWindow());
 
    int R, G, B;
    cout << "Border color:" << endl; //Цвет границы
    cout << "R:";  cin >> R;
    cout << "G:";  cin >> G;
    cout << "B:";  cin >> B;
    Rectangle(R, G, B);
    int RGB = ((B * 256 * 256 + G * 256 + R));
 
    cout << endl << "Fill color:" << endl; // Цвет заливки
    cout << "R:";  cin >> R;
    cout << "G:";  cin >> G;
    cout << "B:";  cin >> B;
 
 
    int STEKX[3000]; //координаты затравочных точек
    int STEKY[3000];
    int STEKP[3000]; //координата х правого конца строки затравочной точки
 
    int x0, y0, x, y;
    int b1, b2, bb1, bb2;
    cout << endl;
    cout << "X0:";  cin >> x0;
    cout << "Y0:";  cin >> y0;
 
    STEKX[0] = x0 + 100; int beg = 0; int end = 1;
    STEKY[0] = y0;
    STEKP[0] = x0;
    int lw = 0, pw = 0, pixv, pixn;
 
    while (beg != end)
    {
 
        x = STEKX[beg];
        y = STEKY[beg];
        pw = STEKP[beg];
 
        while (RGB != GetPixel(hDC, x, y))  x--; //идем влево, пока не встретим границу
 
        if (RGB == GetPixel(hDC, x, y)) x++; //если это граница, то делаем шаг вправо
        lw = x; //запомнили левую границу, клетка, которую нужно закрасить
 
        b1 = b2 = bb1 = bb2 = 1;
        while (x <= pw) //пока х меньше правой границы из пред шага
        {
            pixv = GetPixel(hDC, x, y - 1); //пиксель на строчку выше
            pixn = GetPixel(hDC, x, y + 1); //на строчку ниже
            if (pixv == RGB) b1 = 1; //если в пикселе на строчку выше мы нашли границу
            if (pixn == RGB) b2 = 1;
 
            if (bb1 == 1 && bb2 == 1 && (RGB != GetPixel(hDC, x, y)))
            {
                SetPixel(hDC, x, y, RGB(R, G, B));
                if (b1 && (0 == pixv)) //закрасить пиксель на верхней строчке, если б1=1
                {
                    //если встретили точку, которою нужно закрасить выйдя из границы, добавляем в список затравочных
                    STEKX[end] = x;  STEKY[end] = y - 1; end++; b1 = 0;
                }
                if (b2 && (0 == pixn)) //закрасить пиксель на верхней строчке, если б=1
                {
                    STEKX[end] = x;  STEKY[end] = y + 1; end++; b2 = 0;
                }
            }
 
            x++;
        }
 
        if (x == pw + 1) x--;
 
        if (RGB == GetPixel(hDC, x, y)) //если на границе, то шаг влево до первой точки, которую нужно закрасить
        {
            while (RGB == GetPixel(hDC, x, y)) x--;
            pw = x; //обозначаем ее ка правую точку в след шаге
        }
 
        while (RGB != GetPixel(hDC, x, y)) //идем от крайней правой точки предыдущего шага до правого края
        {
            pixv = GetPixel(hDC, x, y - 1);
            pixn = GetPixel(hDC, x, y + 1);
            if (pixv == RGB) b1 = 1;
            if (pixn == RGB) b2 = 1;
 
            SetPixel(hDC, x, y, RGB(R, G, B)); x++; //Рисует элемент изображения в указанной точке
            if (b1 && (0 == pixv))
            {
                STEKX[end] = x;  STEKY[end] = y - 1; end++; b1 = 0;
            }
            if (b2 && (0 == pixn))
            {
                STEKX[end] = x;  STEKY[end] = y + 1; end++; b2 = 0;
            }
        }
        pw = x - 1; //запоминаем правую крайнюю точку
 
        if ((b1 + b2) == 0) { STEKP[end - 1] = pw; STEKP[end - 2] = pw; } //нашли 2 затравочных точки
        if ((b2 + b1) == 1)  STEKP[end - 1] = pw; //нашли только либо сверху, либо снизу
 
 
        beg++; //  прошли одну строку и начало стека сместилось
    }
 
    cin >> c;
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru