Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172

динамический массив чисел

29.09.2011, 17:58. Показов 3161. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Целое число, представленное в виде динамического массива байтов. .Каждый байт хранит 2 цифры числа (часть числа в диапазоне 0..99). Знак числа представлен отдельно.
Как хранить две цифры в одном байте?
в виде двумерного массива?
типо n[0][1]={4,9}?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.09.2011, 17:58
Ответы с готовыми решениями:

Ввести некоторую последовательность чисел и создать динамический массив из чисел, которые завершаются цифрой 1
Ввести некоторую последовательность чисел и создать динамический массив из чисел, которые завершаются цифрой 1

Ввести некоторую последовательность чисел и создать динамический массив из чисел, которые завершаются цифрой5
Ввести некоторую последовательность чисел и создать динамический массив из чисел, которые завершаются цифрой 5.

Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента)
Создать динамический массив из 8 случайных целых чисел из отрезка и вывести его на экран . Если в массиве чётных чисел оказалось...

14
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.09.2011, 18:48
Попробую объяснить)
ну вам надо хранить 2 цифры в 1 байте.
1 байт = 8 бит.
Цифры бывают от 0 до 9, представим цифру числом. Самое большое число-чифра - 9, представляется как 1001 в двоичном коде, в этом не трудно убедиться:
9 / 2 = 4 + 1
4 / 2 = 2 + 0
2 / 2 = 1 + 0
1 / 2 = 0 + 1
Таким образом чтобы хранить цифру, нам необходимо 4 бита, т.к. самое большое число-цифра это 9
Для второй цифры понадобиться еще 4 бита. Таким образом мы можем записать 2 цифры в 8 бит(1 байт). Познакомьтесь с понятиями "маска", "побитовые операции", "сдвиг", "побитовое или/и". Я думаю вам станет все понятно)
PS: Достаточно одномерного массива типа char, чтобы хранить числа от 0 до 99
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
29.09.2011, 19:23  [ТС]
если первая цифра ноль?
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.09.2011, 19:29
Цитата Сообщение от rudeeeboy Посмотреть сообщение
если первая цифра ноль?
А в чем сложность?
например вы хотите представить такие сделущие числа:
97, 5, 10, 0
1001 0111, 0000 0101, 0001 0000, 0000 0000
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
29.09.2011, 20:18  [ТС]
а если 2002?
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.09.2011, 20:31
Цитата Сообщение от rudeeeboy Посмотреть сообщение
а если 2002?
Да я, блин, не понимаю вашего вопроса!

2002 - это цифра или это число, явно не цифра, может быть это в троичной системе счисления или ваш год рождения? О_о

Задавайте вопрос яснее
0
29.09.2011, 20:35

Не по теме:

У меня есть подозрение что rudeeeboy, сам не понимает задание до конца.

1
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
29.09.2011, 20:39  [ТС]
дано число, к примеру 2002 в десятичной, мне надо записать ег ов динамический массив, и вывести, по две цифры в байт
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.09.2011, 20:45
Цитата Сообщение от Gepar Посмотреть сообщение
У меня есть подозрение что rudeeeboy, сам не понимает задание до конца.

Не по теме:

А у меня есть подозрение, что я угадал год рождения ТС....................2002 ;)



Цитата Сообщение от rudeeeboy Посмотреть сообщение
дано число, к примеру 2002 в десятичной, мне надо записать ег ов динамический массив, и вывести, по две цифры в байт
так и выводите по две цифры в байт!!! 2 байта надо тогда
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
29.09.2011, 20:54  [ТС]
так и вопрос был в этом как это прописать?
а про год рождения если бы мне было 10 лет и я занимался программированием что в том плохого?
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.09.2011, 21:18
Цитата Сообщение от rudeeeboy Посмотреть сообщение
Как хранить две цифры в одном байте?
Хранить цифры можно но только до 1111 ~ 0x0F ~ (15) , и так следует что один байт представлен двумя тетрадами значить в байте можно хранить два значения если они только 0 <= N <= 15, вот примерчик набросал.
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
#include <stdio.h>
 
char t_pack(char a, char b) {
   return (a << 4) | b; 
}
 
char t_unpack(char ch,  int i) {
   return (ch >> (i*4)) & 0x0F;
}
 
int main () {
   char arr[16];
   for(int f = 0; f < 16; f++)
       arr[f] = t_pack(f, 0x0F - f);
 
   for(int i = 0; i < 16; i++) {
        for(int j = 1; j >= 0; j--)
             printf("%d\t", t_unpack(arr[i], j));
        putchar('\n');
   }
   char ch = t_pack(15, 15); // это максимум полная 4-ка тетрады
   char a, b;
   a = t_unpack(ch, 0);
   b = t_unpack(ch, 1);
   printf("\n%d = %d\n%02X = %02X\n", a, b, a, b);
 
   getchar();
   return 0;
}
1
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
29.09.2011, 21:28
Цитата Сообщение от rudeeeboy Посмотреть сообщение
так и вопрос был в этом как это прописать?

Не по теме:

Общаюсь с вами только потому, что искренне верю, что вы всетаки 2002 года рождения, и что я непонятно объясняю, а еще потому что настроение хорошее



rudeeeboy, ну я же все написал. Вы хотите чтобы я за вас все сделал?


Цитата Сообщение от xAtom Посмотреть сообщение
Хранить цифры можно но только до 1111 ~ 0x0F ~ (15) , и так следует что один байт представлен двумя тетрадами значить в байте можно хранить два значения если они только 0 <= N <= 15, вот примерчик набросал.

Не по теме:

xAtom, какой вы злой человека после этого!)) я такое удовольствие получал от беседы :jokingly:
Теперь ТС уже не вернуть :cry: он забрал код и ушел с форума) где мне его искать?)

1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
29.09.2011, 23:52
задача не тривиальная, я понимаю замешательство ТС
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>
#include <string.h>
 
#define not(a) ((abs(a) == 1 || a == 0) ? 0 : 1)
 
typedef char __byte;
const int dec = 10;
 
int znak_ (int tmp){
    int retu_rn = (tmp >> (sizeof(int) * 8 - 1));
    return retu_rn;
}
 
int number_mass(int number){
    int tmp = number, retu_rn = 0;
 
    while(tmp > 0){
        tmp /= dec; ++retu_rn;
    }
    return retu_rn;
}
 
void numeric_out(int number, int ves, __byte* arr){
    int tmp = number, i = ves - 1;
 
    for(i; i >= 0; --i){
        arr[i] = (tmp % dec);
        tmp /= dec;
    }
}
 
int double_group(__byte* arr, int iter){
    int i = 1, j, tmp = iter;
    for (i; i < tmp; ++i){
 
        arr[i] += (dec * arr[i - 1]);
 
        for (j = i - 1; j < tmp - 1; ++j){
            arr[j] = arr[j + 1];
        }
 
        --tmp;
        arr = realloc(arr, iter * sizeof(__byte));
    }
    return tmp;
}
 
int main(){
 
    __byte *array;
    int number, count = 0, i, tmp, znak;
    scanf("%d", &number);
 
    znak = ~znak_(number) + 1;
    if(znak) number = ~(number - 1) | (~number + 1);
 
    if (not(number)){
 
        count = tmp = number_mass(number);
        array = (__byte*) malloc (tmp * sizeof(__byte));
        numeric_out(number, tmp, array);
        
        for(i = 0; i < count; ++i)
            printf(" %d", (int)array[i]);
 
        printf("\n\n");
        count = tmp = double_group(array, tmp);
 
        printf("бит знака: %d\n", znak);
        for(i = 0; i < count; ++i)
            printf("байт %d: %d\n", (count - i), array[i]);
            
        free(array);
    }
    else if (znak)
        printf("знаковый бит: %d\nчисло: %d\n", znak, ~number + 1);
    else if (!number)
        printf("нуль йопт");
    else
        printf("знаковый бит: %d\nчисло: %d\n", znak, number);
 
    return 0;
}
вывод
123456789
1 2 3 4 5 6 7 8 9

бит знака: 0
байт 5: 12
байт 4: 34
байт 3: 56
байт 2: 78
байт 1: 9
1
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
16.10.2011, 12:12  [ТС]
спасибо
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
27.10.2011, 20:42  [ТС]
не могу исправить ошибку в ф-ях Double_group и Numeric_out
ошибка 63 `num' undeclared (first use this function)
num это число с клавиатуры
листинги

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
#include "stdlib.h"
#include "malloc.h"
#include "stdio.h"
#include <iostream.h>
#include <iomanip>
#include "chislo.h"
#include <math.h>
#include <errno.h>
#include <string.h>
 
Chislo::Chislo()
{
     ch=new int(n);
}
void Chislo::Dlina(){
    int j;
    j=num;
    n=0;
    while(j!=0)
    {
        j/=10;
        n++;
    }
} 
void Chislo::Znak(){
    if(num<0)
    {
        sign='-';
        num=num*(-1);
    }
    else sign='+';
} 
 
int Chislo::Not ()
{
    int a;
    a=num;
    return (abs(a) == 1 || a == 0) ? 0 : 1;
}
void Numeric_out(int ves){
    int tmp, i=ves-1;
    tmp=num;
    for(i; i >= 0; --i){
        ch[i] = (tmp % dec);
        tmp /= dec;
    }
}
int Double_group(int iter){
    int i = 1, j, tmp = iter;
    for (i; i < tmp; ++i){
 
        ch[i]+=(dec*ch[i-1]);
 
        for (j=i-1;j<tmp-1;++j){
            ch[j]=ch[j+1];
        }
        --tmp;
    }
    return tmp;
}
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
#ifndef _Chislo
#define _Chislo
const int dec = 10;
class Chislo
{            
 
      //const int dec = 10;
      public:
      char sign;
      int *ch;
      int n;
      int num;
      Chislo();
      void Predst(int n1, int chp[]);
      void Dlina();
      void Znak();
      int Preobr();
      //void Show();
      int Not();
      void Numeric_out(int);
      int Double_group(int);
      //int Number_mass();
      ~Chislo(){delete []ch;}
      
};
#endif
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 "stdlib.h"
#include "malloc.h"
#include "stdio.h"
#include <iostream.h>
#include <iomanip>
#include "chislo.h"
#include <math.h>
#include <errno.h>
#include <string.h>            
int main(){
    int i,tmp;
    Chislo p;
    cout << " Vvedite chislo \n";
    cin >>(p.num);
    p.Znak();
    p.Dlina();
    Chislo();
    tmp=p.n;
    if (p.Not()){
        p.Numeric_out(tmp);
        
        for(i=0;i<p.n;++i)
            printf(" %d", p.ch[i]);
 
        printf("\n\n");
        p.n=tmp=p.Double_group(tmp); 
        printf("byte znaka: %d\n", p.sign);
        for(i = 0; i < p.n; ++i)
        printf("byte %d: %d\n",(p.n-i),p.ch[i]);
    }
    else if (p.sign)
        printf("znakovi byte: %d\n chislo: %d\n", p.sign, ~p.num + 1);
    else if (!p.num)
        printf("nool");
    else
        printf("znakovi byte: %d\n chislo: %d\n", p.sign, p.num);
    //p.Preobr();
    //p.Show();
    system("PAUSE");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2011, 20:42
Помогаю со студенческими работами здесь

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив, причем использовал класс-наследник от...

Динамический массив из вещественных чисел
Добрый день! Как заполнить динамический массив вещственными числами, учитывая что пользователь должен вводить их сам или по выбору...

Динамический массив целых чисел
Здравствуйте! Помогите создать динамический массив целых чисел. Заполнить с клавиатуры. Количество элементов задается случайно. Найти...

Динамический массив из целых чисел
Плохо разбираюсь с массивами, поэтому нужна помощь написать кусок кода, где создается динамический массив и формирующий в нем множества...

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты класса динамический массив, если...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru