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

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

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

Пробел в старшем и младшем байте массива. Каким образом?! - C++

16.12.2011, 08:32. Просмотров 369. Ответов 5
Метки нет (Все метки)

Здравствуйте форумчане!
Решил сделать задачку по с++, но столкнулся с проблемой: Нужно заполнить двумерный массив символами и написать функцию, которая ставит символ пробела в старшем и младшем байте каждого значения массива. Застопорился на проблеме.
Ввод массива желательно осуществить через рандомайз...Буду благодарен за отзыв. Код мой прилагается.
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
#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include<conio.h>
char mas[100][100];
int i,j,x,y,k;
fun (int z,int c)
{char v;
for ( i=1;i<=z;i++)
{for ( j=c+1;j>=1;j--)
{mas[i][j]=mas[i][j-1];
if (j==1) mas[i][j]=' ';}}
return 0;}
void main()
{na:
clrscr();
cout<<"Razmernost 1 massiva:"<<endl<<"kol-vo strok=";cin>>x;
cout<<"kol-vo stolbcov=";cin>>y;
for ( i=1;i<=x;i++)
{for ( j=1;j<=y;j++)
{cout<<"Vvedite ["<<i<<"]["<<j<<"] simvol v  massive ";cin>>mas[i][j];}}
clrscr();
cout<< "\nMasiv: \n";
for ( i=1;i<=x;i++)
{for ( j=1;j<=y;j++)
{cout<<mas[i][j];
if(j==y) cout<<endl;}}
fun(x,y);
cout<< "\nMasiv  peredel\n";
for ( i=1;i<=x;i++){
for ( j=1;j<=y+1;j++){
cout<<mas[i][j];
if(j==y+1) cout<<endl;}}
k++;
getch();
if(k<2)goto na;
}
Добавлено через 19 часов 59 минут
Подскажите каким образом в данной программе сделать вывод матрицы рандомно, после введения (x,y) и дальнейшию функцию программы, в которую входит постановка пробела в старшем байте массива(сдвиг столбцов на 1)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 08:32     Пробел в старшем и младшем байте массива. Каким образом?!
Посмотрите здесь:

C++ Ввести два числа типо unsighed short,распечатать число,которое содержит в младшем байте большее значение
Заполнить 2 двухмерных массива символами. Написать функцию которая ставит символ пробела в старшем и младшем...(Использование директив) C++
Инвертировать все биты в старшем байте числа. C++
C++ Поменять местами содержимое четных и нечетных разрядов в младшем байте
C++ Массив: каким образом можно изменить размер многомерного массива
C++ Каким образом getchar() меняет содержимое массива?
C++ Каким образом зашифровать Hex строки
Каким образом лучше осуществить вывод массива с помощью графики? C++
Каким образом реализуется квалификатор const? C++
Каким образом разархивировать gzip? C++
C++ Каким образом параметры передаются в функцию?
Каким образом легче выучить c++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
16.12.2011, 11:38     Пробел в старшем и младшем байте массива. Каким образом?! #2
Цитата Сообщение от Flamius Посмотреть сообщение
ставит символ пробела в старшем и младшем байте
- что значит старший и младший байт массива - я лично мозг сломал
-=ЮрА=-
Заблокирован
Автор FAQ
16.12.2011, 11:51     Пробел в старшем и младшем байте массива. Каким образом?! #3
Цитата Сообщение от Flamius Посмотреть сообщение
Подскажите каким образом в данной программе сделать вывод матрицы рандомно,
- а что его делать, вот на плюсах
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
#include <iostream>
#include <iomanip>
#include <cstdlib>  //srand rand Гў ïðèГ*öèïå ìîæГ*Г® ГЎГҐГ§ Г*ГҐГЈГ® ГІ.ГЄ.
//ÑòóäèéГ*Г» namespace std ñîæåðæèò ГЁ ГҐГЈГ®. Áîëüøå Г*Г* CodeBlocks îðèåГ*òèðîâГ*ëñÿ
#include <conio.h>
#include <ctime>
using namespace std;
 
int main()
{
    int ** arr;//Г*Г*Гё Г¬Г*Г±Г±ГЁГў
    int i,j,m,n;
    long t, mrnd;
    bool bMenu = true;
    while(bMenu)
    {
        srand(time(&t));//Г’Г*ГЄ Г*Г*äî ÷òîá³ îò ГЁГІГҐГ°Г*öèè ГЄ ГЁГІГҐГ°Г*öè ïîñëåäîâГ*òåëüГ*îñòè Г*ГҐ ïîâòîðÿëèñü
        cout<<"Enter num of Rows : ";cin>>m;
        cout<<"Enter num of Cols : ";cin>>n;
        cout<<"Enter max rand val: ";cin>>mrnd;
        cout<<"Rand generation\n";
        arr = new int * [m];//ГЇГ*ìÿòü ïîä ГіГЄГ*Г§Г*òåëè Г*Г* ñòðîêè
        for(i = 0; i < m; i++)
        {
            arr[i] = new int[n];//ГЇГ*ìÿòü ïîä ºëåìåГ*ГІВі ñòðîêè
            for(j = 0; j < n; j++)
                //rand() % mrnd - ГЈГҐГ*åðèðóåì ÷èñëî Гў äèГ*ГЇГ*çîГ*ГҐ 0 - mrnd
                //ГўГўВёГ« - mrnd/2 ÷òîá³ ГЁ îòðèöГ*òåëüГ*ûå áûëè;)
                cout<<setw(3)<<(arr[i][j] = rand() % mrnd - mrnd/2)<<" ";
            cout<<endl;
        }
        cout<<"Press 1 for new input\n";
        if(getch() != '1')
            bMenu = false;
        //Г—ГЁГ±ГІГЁГ¬ ГЇГ*ìÿòü ïîñëå öèêëГ* delete [] arr ГЌГ… ÍÀÄÎ!!!
        for(i = m - 1; 0 <= i; i--)
            delete [] arr[i];
    }
    return 0;
}
Миниатюры
Пробел в старшем и младшем байте массива. Каким образом?!  
-=ЮрА=-
Заблокирован
Автор FAQ
16.12.2011, 11:52     Пробел в старшем и младшем байте массива. Каким образом?! #4
PS:Если хотим чтобы циферки поближе одна к одной выводились - уменьшаем до 2-х здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
setw(3)
. Как по мне вопросов по рандомному генерированию быть уже не должно
Flamius
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 85
16.12.2011, 12:16  [ТС]     Пробел в старшем и младшем байте массива. Каким образом?! #5
Благодарю за информацию! Не подскажите ли почему в моей программе (в 1ом посте) при выводе рандома, 2ая матрица, которая должна смещаться на 1 стобец( там пробелы должны быть) появляются значения "32" в столбик и нули всегда выходят рандомом на посл. строке и строчке?
В чем загвостка?
Вот сам код:
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
#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include<conio.h>
#include <clocale.h>
int mas[100][100];
int i,j,x,y,k;
 
fun ( z,c)
{char v;
for ( i=1;i<=z;i++)
{for ( j=c+1;j>=1;j--)
{mas[i][j]=mas[i][j-1];
if (j==1) mas[i][j]=' ';}}
return 0;}
void main()
 
{na:
clrscr();
cout<<"Razmernost 1 massiva:"<<endl<<"kol-vo strok=";cin>>x;
cout<<"kol-vo stolbcov=";cin>>y;
for ( i=1;i<x;i++)
for ( j=1;j<y;j++)
mas[i][j]=random(10);
 
cout<< "\nMasiv: \n";
for ( i=1;i<=x;i++)
{for ( j=1;j<=y;j++)
{cout<<mas[i][j]<<" ";
if(j==y) cout<<endl;}}
fun(x,y);
cout<< "\nMasiv  peredel\n";
for ( i=1;i<=x;i++)
{ cout << "  " ;
 for( j=1;j<=y;j++)
{cout<<mas[i][j]<<" ";
if(j==y) cout<<endl;}}
getch();
if(k<2)goto na;
}
-=ЮрА=-
Заблокирован
Автор FAQ
16.12.2011, 13:11     Пробел в старшем и младшем байте массива. Каким образом?! #6
Цитата Сообщение от Flamius
А тот код рандома чисел сильно изменитcя, если я работаю в среде c++ Builder?
- да немножко надо убрать using namespace std, а также хедеры записать
C
1
2
3
4
5
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>  
#include <conio.h>
#include <time.h>
Если Билдер уж совсем старый, то нужно переписывать на Си :
заменить cout на printf a cin на scanf, а также убрать iomanip и setw

Добавлено через 2 минуты
Цитата Сообщение от Flamius Посмотреть сообщение
появляются значения "32"
- всё я понял
Ну вы же выводите int запишите в выводе на экран (char)mass[i][j] - вы же не коды ASCII должны выводить а соответсвующие им чары. Кстати по памяти пробел как раз 32-й код имеет

Добавлено через 31 минуту
Цитата Сообщение от Flamius Посмотреть сообщение
Извиняюсь за возможною тавтологию, но не могли бы ещё помочь кое с чем:
В коде я привёл в пример свою исходную программу, но как организовать правлеьно тут рандом чисел, после ввода x,y. Проблема состоит в том, что если я вводу значения, как цифры с клавиатуры на каждый элемент - всё работает, как только ставлю "рандом", и тип массива int - столбцы сдвигаютсявлево( так и надо) - но перед ними пробелы заполняться значением "32".
А если ставлю тип массива char -выводитс следующие: Как быть? Буду благодарен
http://s017.***********/i408/1112/60/ba8adb9dc5c0.jpg

Ну ясное дело коды печатаемых символов в ASCII начинаются где то с '0' - это код 48 а у вас ранд по моему до 10-ти был
Цитата Сообщение от Flamius Посмотреть сообщение
random(10);
(от 0 до 48 есть ещё пара печатаемых символов пробел скажем, но не все же) вот и выходит билиберда)
Нагуглите таблица ASCII кодов и сами поймёте
Yandex
Объявления
16.12.2011, 13:11     Пробел в старшем и младшем байте массива. Каким образом?!
Ответ Создать тему
Опции темы

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