Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
qwerty87
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 6
#1

Не могу найти ошибку в программе рисующей линию из символов - C++

07.09.2012, 13:35. Просмотров 763. Ответов 3
Метки нет (Все метки)

Попытался написать консольную программу, рисующую линию из символов. Число символов вводится пользователем. Вот код программы:
Кликните здесь для просмотра всего текста

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
/**
* @brief программа, которая выводит на экран горизонтальную, вертикальную или
*        диагональную линию из символов. Число символов, их вид и 
*        тип линии - указывает пользователь. 
*/
 
#include <iostream>
#include <conio.h>
using namespace std;
 
/**
* Функция, рисующая горизонтальную линию
* @param char sign
* @return void
*/
 
void draw_hor_line(char sign)
{
    int i = 0; // итератор
    int l; // длина линии
    
    while(i <= l){
        cout << sign;
        i++;
    }
}
 
/**
* Функция, рисующая вертикальную линию
* @param char sign
* @return void
*/
 
void draw_vert_line(char sign){
    
    int i = 0; // итератор
    int l; // длина линии
 
    while(i <= l){
        cout << " " << sign << endl;
        i++;
    }
}
 
/**
* Функция, рисующая диагональную линию
* @param char sign
* @return void
*/
 
void draw_diag_line(char sign){
    
    int i = 0; // итератор
    int k = 0; // итератор вложенного цикла
    int l; // длина линии
        
    for(i = 0; i <= l; i++){ // рисуем диагональ
        for(k = 0; k <= i; k++){
           cout << " ";   
        }
        cout << sign << endl;   
    } 
}
 
int main()
{
    setlocale(0, "");
    
    int l; // длина линии
    int line; // тип линии
    char sign; // вид точек
    
    cout << "Линейные конструктор." << endl;
    
    cout << "Выберите параметры линии:" << endl;
    cout << "\tДлина:" << endl;
    cout << "\t\tЧисло от 1 до 100" << endl;
    cout << "\tВид точек:" << endl;
    cout << "\t\t1Введите любой ASCII символ, кроме "; // перевод строки
    cout << "пробела и перевода строки" << endl;
    cout << "\tТип линии:" << endl;
    cout << "\t\t1 - горизонтальная" << endl;
    cout << "\t\t2 - вертикальная" << endl;
    cout << "\t\t3 - диагональная" << endl;
    cout << "Пример: > 10 1 @" << endl;
    cout << "@@@@@@@@@@" << endl;
    cout << "> ";
    
    cin >> l >> line  >> sign;
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна "; // перевод строки
        cout << "иметь значение от 1 до 100." << endl;
    } else {       
        switch(line){
            
            case 1:
                draw_hor_line(sign);
                break;
                
            case 2:
                draw_vert_line(sign);
                break;
                
            case 3:
                draw_diag_line(sign);
                break;
                
            default:
                cout << "Ошибка! Неверный ключ. Введите 1, 2 или 3" << endl;
                break;
        }
    }
    
    getch();
    return 0;
}


Но вместо того чтобы нарисовать линию из l символов она рисует линию из 3-х символов в случае с горизонталью и вертикалью, а диагональ вообще не может нормально нарисовать.
Пробывал сделать из каждой функции отдельную программу, программы работали как и задуманно. Вот листинги:

Для горизонтальной линии
Кликните здесь для просмотра всего текста


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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    int i = 0; // итератор
    int l; // длина линии
    char sign; // символ из которого состоят точки линии                      
    
    cout << "Рисует горизонтальную линию" << endl;
    
    cout << "Задайте длину линии и выберите символ для её отрисовки" << endl; //
    cout << "Пример: 10 *" << endl;                                           
    cin  >> l >> sign;                                                        
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна ";
        cout << "иметь значение от 1 до 100." << endl;
    } else {
        cout << " "; // отступ от края окна
        
        while(i <= l){ // рисование линии
            cout << i;
            cout << sign;
            i++;
        }
    }
    
    getch();
    return 0;
}


Для вертикальной линии
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    int i = 0; // итератор
    int l; // длина линии
    char sign; // символ из которого состоят точки линии                      
    
    cout << "Рисует вертикальную линию" << endl;
    
    cout << "Задайте длину линии и выберите символ для её отрисовки" << endl;
    cout << "Пример: 10 *" << endl;                                           
    cin  >> l >> sign;                                                       
    cout << endl;
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна ";
        cout << "иметь значение от 1 до 100." << endl;
    } else {
        while(i <= l){
            cout << " " << sign << endl;
            i++;
        }
    }
    
    getch();
    return 0;
}


Для диагональной линии
Кликните здесь для просмотра всего текста


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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    int i = 0; // итератор
    int k = 0;
    int l; // длина линии
    char sign; // символ из которого состоят точки линии                      
    
    cout << "Рисует диагональную линию" << endl;
    
    cout << "Задайте длину линии и выберите символ для её отрисовки" << endl; 
    cout << "Пример: 10 *" << endl;                                           
    cin  >> l >> sign;                                                      
    cout << endl;
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна ";
        cout << "иметь значение от 1 до 100." << endl;
    } else {
    
        for(i = 0; i <= l; i++){ // рисуем диагональ
            for(k = 0; k <= i; k++){
               cout << " ";   
            }
            cout << sign << endl;   
        } 
    }
    
    getch();
    return 0;
}


Помогите найти ошибку в коде, я с программированием связался не так давно не знаю как ещё её можно найти и исправить.
При написании программы пользовался wxDev-C++, с настройками по умолчанию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу найти ошибку в программе рисующей линию из символов (C++):

не могу найти ошибку в программе - C++
задача Дана символьная строка. Подсчитать количество букв k в последнем ее слове считает только буквы К в первом слове и выдаёт...

Не могу найти ошибку в программе - C++
Здравствуйте! Не могу понять, как полностью отладить программу. Определенное понимание о характере ошибке есть( ниже прложил ее название),...

Не могу найти ошибку в программе - C++
Не могу найти ошибку в программе #include &quot;stdafx.h&quot; #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;fstream.h&gt; #include...

Не могу найти ошибку в программе - C++
Разложение числа на сумму двух квадратов &quot;for(a=o;a&lt;=floor(sqrt(W));x++); for(b=0;b&lt;=floor(sqrt(w));y++); if(a*a+b*b==W) ...

Не могу найти ошибку в программе - C++
Добрый вечер, уважаемые программисты. Прошу у вас помощи с программой. Нужно её сдавать, а она не работает. Буду очень благодарен за любую...

не могу ошибку найти в программе - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; double average(int ** matrix, int...

3
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
07.09.2012, 13:51 #2
Для начала
C++
1
2
3
4
5
6
7
8
9
10
void draw_hor_line(char sign)
{
    int i = 0; // итератор
    int l; // длина линии
    
    while(i <= l){
        cout << sign;
        i++;
    }
}
в функцию передается только один параметр sign. переменная l - хранит мусор.
Тоже самое для вертикальной линии

Добавлено через 6 минут
для горизонтальной линии можно использовать следующий алгоритм
C++
1
2
3
4
5
6
7
8
9
10
    for(int i = 0; i<l; i++)
        for(int j = 0; j<l; j++) {
            if(i==j)
            {
                cout << " *";
                cout << endl;
                break;
            }
            else cout << " ";
        }
0
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
07.09.2012, 13:56 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void draw_diag_line(char sign){
    
    int i = 0; // итератор
    int k = 0; // итератор вложенного цикла
    int l; // длина линии
        
    for(i = 0; i <= l; i++){ // рисуем диагональ
        for(k = 0; k <= i; k++){
           cout << " ";   
        }
        cout << sign << endl;   
    } 
}
Здесь тоже, переменная l - хранит мусор.
C++
1
2
3
void draw_diag_line(char sign, int l);
void draw_hor_line(char sign, int l);
void draw_ver_line(char sign, int l);
из реализации только
C++
1
int l
убери
1
qwerty87
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 6
07.09.2012, 14:19  [ТС] #4
Цитата Сообщение от novi4ok Посмотреть сообщение
слово из трех букв, что ли? какое?
Откомпилируй узнаешь

Добавлено через 1 минуту
denys_l, спасибо за оперативный ответ. Пойду переделывать
0
07.09.2012, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2012, 14:19
Привет! Вот еще темы с ответами:

Не могу найти ошибку в программе - C++
Прога рабочая, но если вводишь х = 0 и у= 0 то она зацикливается на &quot;Ошибка! Начните заново.&quot; и не работает правильно. Хотя должна....

Не могу найти ошибку в программе - C++
# include &lt;iostream&gt; #include &lt;string&gt; #include &lt;math.h&gt; void main() { string str; char hex={'0', '1', '2', '3', '4',...

Не могу найти ошибку в программе - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cctype&gt; #define is_delim(c) (std::isspace((c)) || std::ispunct((c))) using...

Не могу найти ошибку в программе - C++
Даны действительные числа х1, у1, х2, у2, …,х10, у10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (х1,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.