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

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

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

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

16.12.2011, 08:32. Просмотров 396. Ответов 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)?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 08:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пробел в старшем и младшем байте массива. Каким образом?! (C++):

Заполнить 2 двухмерных массива символами. Написать функцию которая ставит символ пробела в старшем и младшем...(Использование директив) - C++
Задание: Заполнить 2 двухмерных массива разной длины символами. Написать функцию которая ставит символ пробела в старшем и младшем байте...

Инвертировать все биты в старшем байте числа. - C++
Инвертировать все биты в старшем байте числа.

Поменять местами содержимое четных и нечетных разрядов в младшем байте - C++
1 Найти количество чисел из диапазона от 100000 до 999999, у которых произведение первых 4 разрядов равно произведению 3 последних. Сколько...

Ввести два числа типо unsighed short,распечатать число,которое содержит в младшем байте большее значение - C++
Ввести два числа типо unsighed short,распечатать число,которое содержит в младшем байте большее значение

Каким образом getchar() меняет содержимое массива? - C++
Здравствуйте! Почему-то наличие getchar(); в коде влияет на содержимое массива. Если данный код не менять - то выводит правильный...

Каким образом vector (STL, C++11/14) удаляет элементы из внутреннего массива? - C++
Судя по отладчику, для объекта не просто вызывается деструктор при вызове pop_back(). Объект также пропадает, если смотреть над доступные...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
16.12.2011, 11:38 #2
Цитата Сообщение от Flamius Посмотреть сообщение
ставит символ пробела в старшем и младшем байте
- что значит старший и младший байт массива - я лично мозг сломал
0
-=ЮрА=-
Заблокирован
Автор 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;
}
0
Миниатюры
Пробел в старшем и младшем байте массива. Каким образом?!  
-=ЮрА=-
Заблокирован
Автор FAQ
16.12.2011, 11:52 #4
PS:Если хотим чтобы циферки поближе одна к одной выводились - уменьшаем до 2-х здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
setw(3)
. Как по мне вопросов по рандомному генерированию быть уже не должно
1
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;
}
0
-=ЮрА=-
Заблокирован
Автор 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 кодов и сами поймёте
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 13:11
Привет! Вот еще темы с ответами:

Массив: каким образом можно изменить размер многомерного массива - C++
Я на 100% уверен что вопрос неоднократно поднимался до меня, поэтому заранее прошу прощения за эту тему.. Я просто ни как не могу найти...

Каким образом лучше осуществить вывод массива с помощью графики? - C++
Добрый день! Имеется массив размера примерно 1000 на 500. Некоторые ячейки закрашенные, некоторые нет. Каким образом лучше осуществить...

Каким образом разархивировать gzip? - C++
Здравствуйте, имеется буфер (ответ сервера на запрос), заархивированный в gzip (в заголовке - Content-Encoding: gzip) Требуется его...

GUI - каким образом лучше - C++
Подскажите как лучше реализовать GUI (в VS 2012 если быть точнее), слышал я что есть MFS как бы он вроде предназначен для создания GUI но...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.12.2011, 13:11
Ответ Создать тему
Опции темы

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