0 / 0 / 0
Регистрация: 13.10.2017
Сообщений: 4
1

Не выходит преобразование матрицы типа int в char и вывод строк массива

13.10.2017, 06:59. Показов 1097. Ответов 4
Метки нет (Все метки)

Если указываю массив например 5 на 5, то то всё отлично преобразует, но в последнем цикле нужно записать по типу
1 строка -(Такие-то элементы)
2 строка - (Такие-то),
А какой-то ужас получается, в общем не знаю как оформить.
Помогите с ошибками пожалуйста.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <string.h>
#include <cstring>
using namespace std;
 
int main()
{
    int I,J;
    int q = 0;
    char p,o;
    unsigned int n;
    unsigned int m;
    char string[20][20];
    const int min = 33;
    const int max = 126;
    
    cout << "Enter array size: " ;
    cin >> I >> J;
    int arr[I][J];
    char mas[p][o];
    int i, j;
 
    srand(time(NULL)); 
 
    for(i=0;i<I;i++)
    {
        for(j=0;j<J;j++)
        {
            arr[i][j] = rand()%(min-max+1) + min; //Заполняем массив рандомными числами в пределе 33-126
        }
    }
 
    for(i=0;i<I;i++)
    {
        for(j=0;j<J;j++)
        {
            cout << arr[i][j]<<'\t';
        }
        cout << endl;
    }
    cout <<"--------------------------------------------------------------------------------\n";
    for(i=0;i<I;i++)
    {   
        for(j=0;j<J;j++)
        {
            mas[p][o]=static_cast<char>(arr[i][j]);  // Преобразование в тип чар
                cout << mas[p][o]<<'\t';            // Вывели матрицу символов
        }
            cout << endl;
    }
    cout <<"--------------------------------------------------------------------------------\n";
    for(char p=1;p<=I;++p)  // Пытаемся вывести только строки
    {   
        for(char o=1;o<=J;++o)
        {
            cout << mas[p][o];
        }
            
    }
    cin.ignore();
    cin.get();  
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2017, 06:59
Ответы с готовыми решениями:

Как присвоить значение одного из элементов массива типа char переменной типа int?
С++ начал буквально только что так что буду благодарен за терпение и понимание ) Сразу оговорюсь...

Преобразование массива типа char в массив типа float
Хорош ли следующий способ преобразования массива типа char в массив типа float? #include...

Перевод массива типа int в тип char
Будет ли правильно сделать преобразование таким способом int f; char f1; for(int...

Преобразования массива с типа int к типу char
Помогите решить задачу. Требуется создать шаблон класса для преобразования массива с типа int к...

4
36 / 34 / 13
Регистрация: 22.03.2013
Сообщений: 285
13.10.2017, 08:00 2
Проблему не понял ибо вы ее не описали
Цитата Сообщение от Chisaki Посмотреть сообщение
то всё отлично преобразует
Цитата Сообщение от Chisaki Посмотреть сообщение
А какой-то ужас получается, в общем не знаю как оформить.
Какой ужас? Что получается? Что не нравиться?
Попробую догадаться вы генерируете число 33-126 и преобразуете его в символ, код у вас делает так как и требуется.
Возможно вас не устраивает вывод? Ну, в таком случае, число после вашего преобразования по кодам аски подставляет символ
101 62
45 105
На выходе получится
e >
- i

Ссылка на таблицу аски кодов:
ftp://ftp.vt.tpu.ru/study/Malc... /ascii.pdf

Добавлено через 22 минуты
Да у вас тут еще есть проблема вы в цикле присваиваете
Цитата Сообщение от Chisaki Посмотреть сообщение
mas[p][o]=static_cast<char>(arr[i][j]);
Где mas[p][o], хз какой элемент. Ибо p и o у вас не заданны и не меняются.
И, когда, вы пытаетесь в следующем цикле вывести mas[p][o]
Цитата Сообщение от Chisaki Посмотреть сообщение
for(char p=1;p<=I;++p) // Пытаемся вывести только строки
{
for(char o=1;o<=J;++o)
{
cout << mas[p][o];
}
То он просто не может найти таких элементов ибо эти элементы массива не заполнены.
0
0 / 0 / 0
Регистрация: 13.10.2017
Сообщений: 4
13.10.2017, 08:37  [ТС] 3
Да да, вы указали именно на то что я хотел услышать. Только вот я понятия не имею как это исправить. По моей логике я просто обьявил массив и присвоил ему значения другого масива. Но так оно не работает. Как вы сказалиэлементы не заполнены, почему так происходит? Как задать [p][o]?
0
Модератор
Эксперт С++
11348 / 9312 / 5594
Регистрация: 18.12.2011
Сообщений: 24,851
13.10.2017, 09:51 4
Размеры у Вас одинаковые, поэтому p=I,o=J
C++
1
2
3
4
    const int I=10,J=5;
    const int p=10,o=5;
    int arr[I][J];
    char mas[p][o];
0
36 / 34 / 13
Регистрация: 22.03.2013
Сообщений: 285
13.10.2017, 09:53 5
Лучший ответ Сообщение было отмечено Chisaki как решение

Решение

Смотрите вы в цикле проходитесь по элементам arr[i][j], постоянно изменяя индексы, т.е. arr[0][0], arr[0][1],arr[1][0], arr[1][1]. И для каждый элемент вы преобразуете в символ и присваиваете чему? p и o вы не задали, т.е. i и j вы увеличиваете, а p и о - нет. Самый простой вариант вообще избавиться от этих переменных и будет так
C++
1
2
3
4
5
6
7
8
9
for(i=0;i<I;i++)
{   
for(j=0;j<J;j++)
{
mas[i][j]=static_cast<char>(arr[i][j]);
cout << mas[i][j]<<'\t';
}
cout << endl;
}
И теперь каждому элементу из arr соответствует элемент mas т.е. (char)arr[0][0] = mas[0][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
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <string.h>
#include <cstring>
using namespace std;
 
int main()
{
int I,J;
int q = 0;
unsigned int n;
unsigned int m;
char string[20][20];
const int min = 33;
const int max = 126;
 
cout << "Enter array size: " ;
cin >> I >> J;
int arr[I][J];
char mas[I][J]; // теперь мы знаем какого размера массив будет
int i, j;
 
srand(time(NULL)); 
 
for(i=0;i<I;i++)
{
for(j=0;j<J;j++)
{
arr[i][j] = rand()%(min-max+1) + min; //Заполняем массив рандомными числами в пределе 33-126
}
}
 
for(i=0;i<I;i++)
{
for(j=0;j<J;j++)
{
cout << arr[i][j]<<'\t';
}
cout << endl;
}
cout <<"--------------------------------------------------------------------------------\n";
for(i=0;i<I;i++)
{   
for(j=0;j<J;j++)
{
mas[i][j]=static_cast<char>(arr[i][j]); // Понятно становиться какому элементу присваиваем
cout << mas[i][j]<<'\t';
}
cout << endl;
}
cout <<"--------------------------------------------------------------------------------\n";
for(i=0;i<I;i++)    // Пытаемся вывести только строки
{   
for(j=0;j<J;j++)
{
cout << mas[i][j];
}
}
cin.ignore();
cin.get();  
}
Могут быть описки, не пробовал компилировать.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2017, 09:53

Перевод массива unsigned char в число типа int
Добрый день всем! Есть массив, который заполняется трехзначным числом, введенным с клавиатуры...

Преобразование Массива типа String[] в тип Int[]
Есть код: string str; str = Console.ReadLine(); string str1 = str.Split(' '); Требуется...

Как достать из массива char переменные типа double, int, bool
Имеется массив char temp. в этот массив записана переменная double (начинается ,например, с temp),...

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char -...


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

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

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