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

как можно сделать покрасивее? - C++

Восстановить пароль Регистрация
 
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 22:45     как можно сделать покрасивее? #1
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
/Задание. Разделение массива на несколько
Дан массив i[] состоящий из n чисел типа int 
(случайное равномерное заполнение выполняется программой), 
n=10. Произвести сохранение всех элементов массива i[] в
элементах 4-х массивов типа char (массивы a[],b[],c[],d[]).
Например, число int состоит из 32 бит (4 байт). 
Первый байт элемента i[k] следует сохранить в массиве a[] 
с соответствующим индексом элемента k (a[k]). Второй байт — аналогично 
в массиве b (b[k]). Третий и четвёртый байты - в массивах c и d соответственно. 
Вывести массивы a,b,c,d на экран.
Произвести обратную операцию объединения числа, для этого 
выполнить «сбор» массивов  a,b,c,d в массив j[] типа int. 
Вывести массив j[] на экран./
 
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <locale.h>
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");   
    srand(time(0));
    const int n=10;
    int i=0,mas[n];
    printf("ИСХОДНЫЙ:\n\n");
    for (i=0;i<n;i++)
    {
        mas[i]=rand()%1001;
        printf ("%d  ", mas[i]);
    }
 
    printf ("\n\n");
    unsigned char a[n], b[n], c[n], d[n];
    for (i=0;i<n;i++) 
    {
        a[i]=mas[i]>>24;
        printf ("%4u ",a[i]);
        b[i]=(mas[i]>>16);
        printf ("%4u ",b[i]);
        c[i]=(mas[i]>>8);
        printf ("%4u ",c[i]);
        d[i]=mas[i];
        printf ("%4u\n",d[i]);
    }
 
    printf ("\n");
    printf ("СОБРАННЫЙ:\n");
    printf ("\n");
 
    int j[n]={0};
    for (i=0;i<n;i++)   
    {
        j[i]=(j[i]|a[i])<<8;
        j[i]=(j[i]|b[i])<<8;
        j[i]=(j[i]|c[i])<<8;
        j[i]=j[i]|d[i];
        printf ("%d  ",j[i]);
    }
    printf ("\n");
    printf ("\n");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 22:45     как можно сделать покрасивее?
Посмотрите здесь:

C++ Как можно сделать программу быстрей?
Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода C++
Как можно сделать программу более компактнее C++
Как можно сделать что бы в консольном окне можно было вызвать контекстное меню как в win cmd? C++
C++ Как можно по другому сделать передачу матрицы в массив?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.06.2013, 23:43     как можно сделать покрасивее? #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
#include <clocale>
#include <random>
#include <limits>
#include <iomanip>
#include <cstdint>
 
union MyUnion
{
    uint32_t value;
    uint8_t uc[4];
};
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, std::numeric_limits<int>::max());
 
    std::setlocale(LC_ALL, "Rus");   
    const int n=5;
    int mas[n];
    
    std::cout << "ИСХОДНЫЙ:\n\n";
    for (int i=0;i<n;i++)
    {
        mas[i] = dis( gen );
        std::cout << mas[i] << " ";
    }
 
    std::cout << std::endl;
    uint8_t a[n], b[n], c[n], d[n];
    uint8_t* arr[] = { a, b, c, d };
 
    for (int i=0;i<n;i++) 
    {
        MyUnion u;
        u.value = mas[i];
        
        for( int j=0; j<4; ++j )
        {
            arr[j][i] = u.uc[j];
            std::cout << std::setw(4) << static_cast<int>(arr[j][i]) << " ";
        }
 
        std::cout << std::endl;
    }
 
    std::cout << "\nСОБРАННЫЙ:\n";
 
    for (int i=0;i<n;i++)   
    {
        MyUnion u;
        for( int j=0; j<4; ++j )
        {
            u.uc[j] = arr[j][i];
        }
        std::cout << u.value << " ";
    }
 
    std::system( "pause" );
 
    return 0;
}
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
05.06.2013, 03:03  [ТС]     как можно сделать покрасивее? #3
Tulosba, ого. до вашего кода мне еще далеко, не дорос я до такого уровня!

Добавлено через 9 минут
Tulosba, плюс ко всему visual studio ругается на ваш синтаксис и не знает ни одной из предложенных вами библиотек! я даже не могу посмотреть, как она работает( что мне изменить, подскажите!
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
05.06.2013, 03:12     как можно сделать покрасивее? #4
Tulosba, 2 хедера потеряли

Добавлено через 3 минуты
vezde-smirno, выкинуть VS при создании проекта уберите галочку с "предварительно скомпилированный заголовок"
Хотя если у вас не последняя версия, это вам лишь чуть поможет, т.к. тут С++11, а у VS со стандартами плохо.

Добавлено через 3 минуты
Кстати, если без параметров распределение создавать, то будет от 0 до std::numeric_limits<>::max(), но если уж так хочется с 1, то второй параметр по умолчанию все равно будет std::numeric_limits<>::max()
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.06.2013, 12:57     как можно сделать покрасивее? #5
Цитата Сообщение от MrGluck Посмотреть сообщение
2 хедера потеряли
какие?
Цитата Сообщение от MrGluck Посмотреть сообщение
а у VS со стандартами плохо
Проверял как раз в VS2012
Цитата Сообщение от MrGluck Посмотреть сообщение
то второй параметр по умолчанию все равно будет std::numeric_limits<>::max()
Точно. Не посмотрел в конструктор. Правда т.к. контейнер из uint32_t, надо бы было начальное значение к этому типу ещё привести.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
05.06.2013, 16:05     как можно сделать покрасивее? #6
Tulosba, iostream и cstdlib (ф-ция system)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 16:13     как можно сделать покрасивее?
Еще ссылки по теме:

C++ Можно ли сделать так чтобы к классу можно было бы одновременно обращаться как к массиву
C++ Как можно сделать авторитизацию из C++ приложения?
как можно сделать виртуальный поток ввода\вывода C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.06.2013, 16:13     как можно сделать покрасивее? #7
MrGluck, точняк.

Не по теме:

Ну, всё, код теперь только под VS2012 значит

Yandex
Объявления
05.06.2013, 16:13     как можно сделать покрасивее?
Ответ Создать тему
Опции темы

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