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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Задачи с массивами http://www.cyberforum.ru/cpp-beginners/thread648064.html
Объясните, как решить. Пример 1. void *v=static_cast<void*>(&mas)// mas - массив это имелось в виду*? не пойму, что дальше делать, вижу, что надо написать функцию, но передать void* понятно, а число кол-во байт, что к чему? я знаю, что такой байты биты знаю как вывести. Пример 2. Создаю 2 массива. Там не написано, но я так понимаю надо инициализировать два массива и в цикле for перебрать 2...
C++ Оъекты класса Как можно создать некоторое количество объектов, так чтобы их названия были наподобие car1, car2, car3... Т.е мне нужно создать кучу объектов, задавая им некоторые данные, при этом, чтобы названия были такие, как я указал. Если не через цикл, то как можно создать? А также можно ли сделать так, чтобы объект одного класса стал приватным членом другого класса? =) http://www.cyberforum.ru/cpp-beginners/thread648054.html
C++ Поясните детский пример
Подскажите почему не работает. #include <iostream> #include <cstdlib> using namespace std; void printBinary(const unsigned char val) { for(int i =7; i>=0; i--) if(val &(1<<i)) std::cout<<"1"; else std::cout<<"0";
C++ все тежи задачи по информатике
1)Напечатать таблицу истинности для логичес¬кой функции (А <=> В <=> С) V , где v, -,<=> - знаки логических операций ИЛИ, НЕ, Экви-валентность. 2) Элементами массива IM(N) являются числа 0 и 1. Отсортировать этот массив таким образом, чтобы все нули находились в начале, а единицы - в конце массива. Допол¬нительный массив не заводить.
C++ Многопоточность не пашет http://www.cyberforum.ru/cpp-beginners/thread648039.html
Изучал создание многопоточных программ, пытался создать свою: #include <windows.h> #include <process.h> #include <iostream> #include <conio.h> using namespace std; unsigned __stdcall ThreadFunc ()
C++ путь фишки фишка может двигаться по полю длины N только вперед. длина хода фишки не более К. найти число различных путей, по которым фишка может пройти от начала до конца. подробнее

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

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++, с настройками по умолчанию.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru