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

Распечатать таблицу ASCII - C++

Восстановить пароль Регистрация
 
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 06:18     Распечатать таблицу ASCII #1
Всем привет!
Задание:
Создать таблицу с ASCII символов размером m*n, после каждой строчки подсчитать общее количество точек и запятых в каждой стрчке и распечатать таблицу! После этого распечатать туже таблицу, но если колонка начинается с маленькой буквы то циклически передвинуть каждый из этих эллементов вверх.

Что я решил...
Распечатал таблицу, подсчитал точки и запятые.

Что не получается...
Циклически передвинуть колонку вверх если начинается с маленькой буквы.

Вот код:
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
short width = 5, height = 5;
 
    char A[height][width], dots = 0, save;
    srand(time(NULL));
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            A[i][j] = rand()%95+33;
            if (A[i][j] == '.' || A[i][j] == ',') dots++;
            printf("%-3c", A[i][j]);
        }
        cout<<(short)dots<<endl;
        dots = 0;
    }
 
    cout<<"\n\n\n";
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            if (!j && A[0][i] > 96 && A[0][i] < 123) {
                save = A[0][i];
                for (int z = 0; z < height; ++z) {
                        A[z][i] = A[z+1][i];
                        A[z+1][i] = save;
                }               
            }
            printf("%-3c", A[i][j]);
        }
        cout<<endl;
    }
Пробую подставлять в уме - всё получается... а программа не хочет правильно работать(
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 06:27     Распечатать таблицу ASCII #2
madonzy, char A
задайте динамически или объявите глобально
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 06:33  [ТС]     Распечатать таблицу ASCII #3
Цитата Сообщение от Enotniy Посмотреть сообщение
madonzy, char A
задайте динамически или объявите глобально
каким образом это сделать?
перед main написать extern char A[5][5] ?
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 06:34     Распечатать таблицу ASCII #4
madonzy, если не предполагается изменение размеров в ходе работы программы, то да. И extern не обязательно писать. Глобально - значит вне какой либо функции.
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 07:01  [ТС]     Распечатать таблицу ASCII #5
Цитата Сообщение от Enotniy Посмотреть сообщение
madonzy, если не предполагается изменение размеров в ходе работы программы, то да. И extern не обязательно писать. Глобально - значит вне какой либо функции.
не работает(
Попробуйте у себя это скомпилировать и увидете(

P.S: при чем здесь глобальные переменные - не понимаю...
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 07:14     Распечатать таблицу ASCII #6
madonzy, что за ошибка?
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 07:16  [ТС]     Распечатать таблицу ASCII #7
Цитата Сообщение от Enotniy Посмотреть сообщение
madonzy, что за ошибка?
ошибки нет, просто переставляет неправильно!
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 07:17     Распечатать таблицу ASCII #8
madonzy, всё отлично работает
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
#include <iostream>
 #include <time.h>
#define height 5
#define width 5
using namespace std;
 
char A[height][width];
 
void main()
{
 
    char dots = 0, save;
    srand(time(NULL));
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            A[i][j] = rand()%95+33;
            if (A[i][j] == '.' || A[i][j] == ',') dots++;
            printf("%-3c", A[i][j]);
        }
        cout<<(short)dots<<endl;
        dots = 0;
    }
 
    cout<<"\n\n\n";
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            if (!j && A[0][i] > 96 && A[0][i] < 123) {
                save = A[0][i];
                for (int z = 0; z < height; ++z) {
                        A[z][i] = A[z+1][i];
                        A[z+1][i] = save;
                }               
            }
            printf("%-3c", A[i][j]);
        }
        cout<<endl;
    }
}
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 07:20  [ТС]     Распечатать таблицу ASCII #9
попробуйте исправить у себя на компьютере и скажите пожалуйста в чем пробемма(

Добавлено через 2 минуты
Цитата Сообщение от Enotniy Посмотреть сообщение
madonzy, всё отлично работает
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
#include <iostream>
 #include <time.h>
#define height 5
#define width 5
using namespace std;
 
char A[height][width];
 
void main()
{
 
    char dots = 0, save;
    srand(time(NULL));
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            A[i][j] = rand()%95+33;
            if (A[i][j] == '.' || A[i][j] == ',') dots++;
            printf("%-3c", A[i][j]);
        }
        cout<<(short)dots<<endl;
        dots = 0;
    }
 
    cout<<"\n\n\n";
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            if (!j && A[0][i] > 96 && A[0][i] < 123) {
                save = A[0][i];
                for (int z = 0; z < height; ++z) {
                        A[z][i] = A[z+1][i];
                        A[z+1][i] = save;
                }               
            }
            printf("%-3c", A[i][j]);
        }
        cout<<endl;
    }
}
ну и? не работает же...
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 07:25     Распечатать таблицу ASCII #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
madonzy, извини не правильно понял, просто у меня твой код вылетал. у тебя был выход за границу массива
вот так вроде работает (рано выводил на экран)
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
#include <iostream>
 #include <time.h>
#define height 5
#define width 5
using namespace std;
 
char A[height][width];
 
void main()
{
 
    char dots = 0, save;
    srand(time(NULL));
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            A[i][j] = rand()%95+33;
            if (A[i][j] == '.' || A[i][j] == ',') dots++;
            printf("%-3c", A[i][j]);
        }
        cout<<(short)dots<<endl;
        dots = 0;
    }
 
    cout<<"\n\n\n";
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            if (!j && A[0][i] > 96 && A[0][i] < 123) {
                save = A[0][i];
                for (int z = 0; z < height-1; ++z) {
                        A[z][i] = A[z+1][i];
                        A[z+1][i] = save;
                }               
            }
           
        }
        
    }
        for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
             printf("%-3c", A[i][j]);
        }
        cout<<endl;}
}
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 07:35  [ТС]     Распечатать таблицу ASCII #11
И правда работает, а когда имеено у меня выход за массив и почему нужно char A объявлять глобально?

Добавлено через 6 минут
уже понял почему и где выходит) понял что char A глобальным делать не обязательно)
но не понял почему нельзя сразу печатать таблицу(
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 07:41     Распечатать таблицу ASCII #12
madonzy, вы выводили таблицу построчно, а заменяли по столбцам - отсюда получалось, что выводились не все изменения
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
03.02.2014, 07:52  [ТС]     Распечатать таблицу ASCII #13
Цитата Сообщение от Enotniy Посмотреть сообщение
madonzy, вы выводили таблицу построчно, а заменяли по столбцам - отсюда получалось, что выводились не все изменения
та нет, я же столбци двигал...

Добавлено через 8 минут
Всё правильно, я двигал столбци, а печатается же построчно) и поэтому, когда печатаються следующие колонки то их значения ещё не изменены!
Немного сократил код и вот что получилось:
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
#include <iostream>
#include <cstdio>
#include <ctime>
#include <algorithm>
 
using namespace std;
 
int main() {
    
    int height = 10, width = 10;
    char A[height][width], dots = 0, save;
    srand(time(NULL));
    for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            A[i][j] = rand()%95+33;
            if (A[i][j] == '.' || A[i][j] == ',') dots++;
            printf("%-3c", A[i][j]);
        }
        cout<<(short)dots<<endl;
        dots = 0;
    }
 
    cout<<"\n\n\n";
    for (int i = 0; i < height; ++i)
        if (A[0][i] > 96 && A[0][i] < 123) {
            save = A[0][i];
            for (int j = 0; j < height-1; ++j)
                    A[j][i] = A[j+1][i],
                    A[j+1][i] = save;
        }
 
    for (int i = 0; i < height; ++i)
        for (int j = 0; j < width; ++j)
             printf("%-3c%s", A[i][j], j == width-1 ? "\n" : "");
 
    getchar();
    return 0;
}
Enotniy, спасибо тебе огромное! Лови +5 в репу)
П.С: тему можно закрывать)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 08:01     Распечатать таблицу ASCII
Еще ссылки по теме:

C++ Вывести таблицу ASCII кодов
C++ Вывести на экран таблицу символов в формате «ASCII-код – символ»

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

Или воспользуйтесь поиском по форуму:
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
03.02.2014, 08:01     Распечатать таблицу ASCII #14
Цитата Сообщение от madonzy Посмотреть сообщение
та нет, я же столбци двигал...
C++
1
2
3
for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
            if (!j && A[0][i] > 96 && A[0][i] < 123) {
то есть, если условие выполнилось при i == 4, то уже 4 строки выведены на экран

Добавлено через 2 минуты
madonzy, ну вот и хорошо. закрыть ты сам можешь, где то кнопка должна быть решение найдено или что то такое
Yandex
Объявления
03.02.2014, 08:01     Распечатать таблицу ASCII
Ответ Создать тему
Опции темы

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