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

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

Восстановить пароль Регистрация
 
qwerty87
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 6
07.09.2012, 13:35     Не могу найти ошибку в программе рисующей линию из символов #1
Попытался написать консольную программу, рисующую линию из символов. Число символов вводится пользователем. Вот код программы:
Кликните здесь для просмотра всего текста

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++, с настройками по умолчанию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 13:35     Не могу найти ошибку в программе рисующей линию из символов
Посмотрите здесь:

C++ не могу найти ошибку в программе
C++ Не могу найти ошибку в простейшей программе
C++ Не могу найти ошибку в программе
C++ не могу ошибку найти в программе
C++ Не могу найти ошибку в программе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denys_l
51 / 51 / 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 << " ";
        }
denys_l
51 / 51 / 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
убери
qwerty87
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 6
07.09.2012, 14:19  [ТС]     Не могу найти ошибку в программе рисующей линию из символов #4
Цитата Сообщение от novi4ok Посмотреть сообщение
слово из трех букв, что ли? какое?
Откомпилируй узнаешь

Добавлено через 1 минуту
denys_l, спасибо за оперативный ответ. Пойду переделывать
Yandex
Объявления
07.09.2012, 14:19     Не могу найти ошибку в программе рисующей линию из символов
Ответ Создать тему
Опции темы

Текущее время: 04:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru