Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/56: Рейтинг темы: голосов - 56, средняя оценка - 4.77
2 / 0 / 2
Регистрация: 14.10.2018
Сообщений: 55

Как узнать, сколько байтов памяти занимает массив

13.04.2019, 20:07. Показов 12715. Ответов 36

Студворк — интернет-сервис помощи студентам
Я за Си сижу уже.. полчаса..
встала задача: узнать количество памяти, который занимает массив, память к которому я выделяю динамически через calloc()
пробовал sizeof(), но он выводит только "4"..
на данный момент код выглядит так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include<malloc.h>
int main(void)
{
    int Size;
    scanf_s("%d", &Size);
    int *Array;
    Array = (int*)calloc(Size, sizeof(int));
    //Ввод
    for (int i = 0; i < Size; i++)
    {
        printf_s("Array[%d]=", i);
        scanf_s("%d", &Array[i]);
    }
    
    printf("\n \n \n");
    int SizeByte;
    Array = (int*)malloc(3 * sizeof(int));
    printf("%d", sizeof(Array));
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2019, 20:07
Ответы с готовыми решениями:

Как узнать сколько байтов в памяти занимает объект?
Есть ли в Java аналог sizeOf?

Как узнать сколько программа занимает памяти ?
открываю Connect с Access (ADO) по таймеру идет Execute на UPDATE или INSERT это жутко жрет память, может это нормальное явление ?? ...

Как узнать, в процесе отладки, сколько памяти занимает программа?
Вот чтобы проследить за тем сколько и когда программа занимает и какое количество килобайт под капие переменные.... Чтобы увидеть что...

36
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
14.04.2019, 19:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Verevkin Посмотреть сообщение
Напиши себе класс и не морочай дядям головы.
угу. Класс. На Си. Не на С++.
Еще раз. Я не говорю что это существенная проблема. Это особенность языка, обусловленная историей и эффективностью, которую просто надо учитывать.
Цитата Сообщение от ValeryS Посмотреть сообщение
хорошо, вот тебе реализация malloc от Keila для УСБ
и что мне с этим огрызком кода, вырванным из контекста делать? Сам по себе он ничего не доказывает, не опровергает и не демонстрирует.
Цитата Сообщение от ValeryS Посмотреть сообщение
как видишь объем не зависит от запрашиваемого размера
вижу крайне странную функцию. Вроде бы принимает какой-то размер, но игнорирует его. Вроде бы выделяет uint32_t [], но неявно преобразует в void*.
Тем более что в этом коде вообще нет динамического выделения памяти, о котором мы тут говорим.
Цитата Сообщение от ValeryS Посмотреть сообщение
так что претензии типа
ошибки с точкой с запятой после пятерки, из-за которой этот код вообще не соберется.
отметаю
Да на здоровье, тем более что это была не претензия а указание опечатки. "Претензия" была в том, что компилятор ведет себя именно так, как от него ожидалось, а не так, как вы его пытались обмануть.
0
14.04.2019, 19:16

Не по теме:

Отпишусь-ка я отсюда. Некогда срач разводить.

0
 Аватар для analogov net
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
14.04.2019, 23:13
Цитата Сообщение от DimaJoke Посмотреть сообщение
узнать количество памяти, который занимает массив, память к которому я выделяю динамически
Я не знаю насколько это соответствует стандарту языка, насколько это компиляторо-платформо-и т.д.-зависимо, но у меня в VC++ это работает...
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
size_t f1( int * ar )
{
    return _msize( ar );
}
 
size_t f2( int * ar )
{
    return ar[-3];
}
 
int main()
{
    int Size, *Array;
 
    printf ( "Size = "   );
    scanf_s( "%d", &Size );
 
    Array = ( int* )calloc( Size, sizeof( int ) );
 
    for( int i = 0; i < Size; i++ )
    {
        printf_s( "Array[%d] = ", i );
        scanf_s ( "%d", &Array[i]   );
    }
 
    printf( "\n_msize   : %u"  , f1( Array ) );
    printf( "\nArray[-3]: %u\n", f2( Array ) ); 
 
    free( Array );
    return 0;
}
Code
1
2
3
4
5
6
7
8
9
10
Size = 6
Array[0] = 9
Array[1] = 8
Array[2] = 7
Array[3] = 4
Array[4] = 5
Array[5] = 6
 
_msize   : 24
Array[-3]: 24
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
15.04.2019, 00:11
Цитата Сообщение от analogov net Посмотреть сообщение
printf_s
не соответствует. Это опциональное расширение, почти никем не поддерживаемое. Кстати, нормальные printf у вас в коде есть...
Цитата Сообщение от analogov net Посмотреть сообщение
return ar[-3];
не соответствует. Обращение за пределы массива - UB.
Цитата Сообщение от analogov net Посмотреть сообщение
return _msize( ar );
Что это за функция, где объявлена? В stdio.h и stdlib.h ее нет...
Если исправить эти ошибки, получается следующее:
Code
1
2
3
4
5
6
7
8
9
10
11
12
$ gcc main.c
$ ./a.out 
Size = 6
Array[0] = 1
Array[1] = 2
Array[2] = 3
Array[3] = 4
Array[4] = 5
Array[5] = 6
 
_msize   : 940198528
Array[-3]: 0
то есть оно мало того что нестандартное, так еще и не работает
0
 Аватар для analogov net
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
15.04.2019, 00:55
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
не соответствует. Это опциональное расширение, почти никем не поддерживаемое
Это из кода ТС.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
не соответствует. Обращение за пределы массива
Это не массив...
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что это за функция, где объявлена?
Когда-то была в malloc.h, а сейчас не знаю. Возможно там же и осталась.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
то есть оно мало того что нестандартное, так еще и не работает
В VC работает и очень даже неплохо...
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
15.04.2019, 06:44
Цитата Сообщение от Verevkin Посмотреть сообщение
Указатель - это целое без знака. Его размер зависит только от разрядности компилятора и железобетонно равен ей (разрядности), делённой на 8 (бит в байте).
Да ладно? Указатели на разные типы могут иметь разное внутреннее представление (в том числе и размер). То есть, char * и int * могут иметь разный размер. Кстати, формально, в байте CHAR_BIT бит.
1
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
15.04.2019, 09:45
Цитата Сообщение от analogov net Посмотреть сообщение
Это не массив...
Раз обращаетесь как к массиву, то для функции это массив.
Цитата Сообщение от analogov net Посмотреть сообщение
Когда-то была в malloc.h, а сейчас не знаю. Возможно там же и осталась.
В malloc.h тоже нет. man _msize тоже не может найти. Да и вообще, переменные и функции, начинающиеся с подчеркивания обычно считаются внутрибиблиотечными и не предназначены для конечного пользователя.
Судя по поиску, это очередное майкрософтовское расширение, никак не связанное со стандартом.
Цитата Сообщение от analogov net Посмотреть сообщение
В VC работает и очень даже неплохо...
А толку если оно не работает больше нигде.
Нет уж, нестандартные расширения это нестандартные расширения и полагаться на них нельзя.
Цитата Сообщение от Eanmos Посмотреть сообщение
Указатели на разные типы могут иметь разное внутреннее представление (в том числе и размер). То есть, char * и int * могут иметь разный размер.
Стандарт с вами не согласен.
Цитата Сообщение от 6.3.2.3 Pointers
A pointer to void may be converted to or from a pointer to any object type. A pointer to
any object type may be converted to a pointer to void and back again; the result shall
compare equal to the original pointer.
То есть любой указатель может быть приведен к void*, а void* может быть приведен к любому указателю.
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
15.04.2019, 10:04
COKPOWEHEU, стандарт со мной согласен.

6.2.5 Types

...

28 A pointer to void shall have the same representation and alignment requirements as a
pointer to a character type.48) Similarly, pointers to qualified or unqualified versions of
compatible types shall have the same representation and alignment requirements. All
pointers to structure types shall have the same representation and alignment requirements
as each other. All pointers to union types shall have the same representation and
alignment requirements as each other. Pointers to other types need not have the same
representation or alignment requirements
.
1
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
15.04.2019, 13:02
Цитата Сообщение от Eanmos Посмотреть сообщение
COKPOWEHEU, стандарт со мной согласен.
я уже привел ссылку что нет, вы ее не опровергли.
Ваша же ссылка скорее об адресации по указателю. Скажем, char *pchar; double *pdouble; имеют разный размер указуемого объекта (representation), что немного меняет арифметику. И разные требования по выравниванию. Но сам указатель остается целым числом одного и того же размера, иначе было бы нельзя было привести одно к другому.

Добавлено через 55 секунд
Впрочем, интереса ради, можете привести пример, когда у указателей на разные типы отличается размер. Хотя бы гипотетически
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
15.04.2019, 14:07
COKPOWEHEU, вы не правы.

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

В той же Гарвардской архитектуре данные и инструкции хранятся отдельно, следовательно, если шина инструкций «больше», чем шина данных, вы получите разный размер указателя на данные и указателя на функции.

Также не стоит забывать, что указатели на платформах с сегментной адресацией имеют деление на «ближние» и «дальние».

Вас вводит в заблуждение возможность приведения любого указателя на данные (object type) к void * и наоборот. И не вас одного:

Q: The C standard allows pointers to different types to have different sizes, e.g. sizeof(char*) != sizeof(int*) is permitted. It does, however, require that if a pointer is converted to a void* and then converted back to its original type, it must compare as equal to its original value. Therefore, it follows logically that sizeof(void*) >= sizeof(T*) for all types T, correct?

A: Therefore, it follows logically that sizeof(void*) >= sizeof(T*) for all types T, correct?

That doesn't necessarily follow, since sizeof is about the storage representation, and not all bit-patterns have to be valid values. I think you could write a conformant implementation where sizeof(int*) == 8, sizeof(void*) == 4, but there are no more than 2^32 possible values for an int*. Not sure why you'd want to.
Если вы все еще не убедились, в том что указатели на разные сущности могут иметь разный размер, вот вам цитата из C FAQ:

void *'s are only guaranteed to hold object (i.e. data) pointers; it is not portable to convert a function pointer to type void *. (On some machines, function addresses can be very large, bigger than any data pointers.)
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
15.04.2019, 15:03
Цитата Сообщение от Eanmos Посмотреть сообщение
it is not portable to convert a function pointer to type void *
Это противоречит процитированному мной пункту стандарта. И это противоречит использованию функций в динамических библиотеках, где они передаются как раз через void*.
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
15.04.2019, 15:44
COKPOWEHEU, боже мой, вы шутите?

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Сообщение от 6.3.2.3 Pointers
A pointer to void may be converted to or from a pointer to any object type. A pointer to
any object type may be converted to a pointer to void and back again; the result shall
compare equal to the original pointer.
То есть любой указатель может быть приведен к void*, а void* может быть приведен к любому указателю.
В стандарте четко сказано:
A pointer to void may be converted to or from a pointer to any object type.
Ключевой момент: object type. Указатель на функцию не является указателем на object type, так функция — это не object, а собственно function.

6.2.5 Types

1 The meaning of a value stored in an object or returned by a function is determined by the type of the
expression used to access it. (An identifier declared to be an object is the simplest such expression;
the type is specified in the declaration of the identifier.) Types are partitioned into object types (types
that describe objects) and function types (types that describe functions)
. At various points within a
translation unit an object type may be incomplete (lacking sufficient information to determine the
size of objects of that type) or complete (having sufficient information).
(Полужирное начертание моё.)
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
15.04.2019, 17:05
Поискал примеры реальных архитектур, где это могло бы встречаться. Не нашел, но упоминания, совпадающие с вашим мнением, проскакивали.
Можете привести пример реальной архитектуры, где размер указателя для разных типов данных отличается?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
15.04.2019, 17:25
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Судя по поиску, это очередное майкрософтовское расширение, никак не связанное со стандартом.
Ага, оно!
В linux есть malloc_usable_size возвращающее количество памяти, реально выделенное malloc & co. Может быть таким же, как запрошенное, или больше.

Цитата Сообщение от Eanmos Посмотреть сообщение
Указатели на разные типы могут иметь разное внутреннее представление (в том числе и размер).
В перый раз слышу. Спорить, конечно, не буду потому, что
There are more things in heaven and earth, Horatio,
Than are dreamt of in your philosophy.
Но как-то на практике не встречалось.
Цитата Сообщение от Eanmos Посмотреть сообщение
Также не стоит забывать, что указатели на платформах с сегментной адресацией имеют деление на «ближние» и «дальние».
Ну разве-что... А оно ещё где-то (кроме DOS и прочих 8- 16-битных анахронизмов) используется?

Цитата Сообщение от Eanmos Посмотреть сообщение
On some machines, function addresses can be very large, bigger than any data pointers.
Ну на некоторых машинах и в байте 10 бит. Однако
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
typedef int (*func)(int, int);
 
int main(void) {
    printf("%zu %zu\n", sizeof(void*), sizeof(func));
    return 0;
}
Code
1
2
$ ./a.out 
8 8
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
15.04.2019, 18:40
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Можете привести пример реальной архитектуры, где размер указателя для разных типов данных отличается?
Are there any platforms where pointers to different types have different sizes?.

Также привожу цитату из другого ответа на enSO:

For example, on Freescale's HCS12 processor which has banked flash, data pointers are all 16 bits.

However, function pointers are 16 bits for near pointers (for code in the same page as the calling function, or in unbanked flash), or 24 bits for far pointers (for code in a different page), incorporating the page number in the address.

— Steve Melnikoff
Цитата Сообщение от easybudda Посмотреть сообщение
Ну на некоторых машинах и в байте 10 бит. Однако
Ну, мы же говорим о гипотетической возможности указателей иметь разный размер. А так да, ситуация несколько экзотическая.
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
15.04.2019, 18:59
В таком случае согласен, был не прав.

Не по теме:

Но все равно это экзотика, с которой вряд ли столкнемся!

1
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
29.05.2020, 01:44
Для того чтобы найти размер массива в байтах нужно записать формулу. (У меня 12ая студия стандарт языка с++ 10ый или 11ый шаблоны с неограниченным количеством аргументов у меня не работают).
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
//for(int q=0;--q>-17;)
//например
char*qq; 
short*qw;
int*qe;
Dt*qr;//(это long long)
 
int **ww=new int*[10];
ww[0]=new int[20];
qr=(Dt*)ww;
cout<<"Результат размера ww через long long 1 "<<*((int*)qr-4)<<endl;
 
for(int q=0;--q>-17;)
cout<<"qr "<<q<<" "<<*((int*)qr+q)<<endl;
 
qq=(char*)ww[0];
cout<<"Результат размера ww[0] через char "<<*((int*)qq-4)<<endl;
qw=(short*)ww[0];
cout<<"Результат размера ww[0] через short "<<*((int*)qw-4)<<endl;
qe=(int*)ww[0];
cout<<"Результат размера ww[0] через int "<<*((int*)qe-4)<<endl;
qr=(Dt*)ww[0];
cout<<"Результат размера ww[0] через Dt "<<*((int*)qr-4)<<endl;
delete[]ww[0];
delete[]ww;
 
cout<<"С простым "<<endl;
int*ee=new int[50];
qq=(char*)ee;
cout<<"Результат размера ee через char "<<*((int*)qq-4)<<endl;
qw=(short*)ee;
cout<<"Результат размера ee через short "<<*((int*)qw-4)<<endl;
qe=(int*)ee;
cout<<"Результат размера ee через int "<<*((int*)qe-4)<<endl;
qr=(Dt*)ee;
cout<<"Результат размера ee через Dt "<<*((int*)qr-4)<<endl;
delete[]ee;
 
char*rr=new char[5000];
qq=(char*)rr;
cout<<"Результат размера rr через char "<<*((unsigned long*)qq-4)<</*" "<<&(qq[-4])<<*/endl;
qw=(short*)rr;
cout<<"Результат размера rr через short "<<*((unsigned long*)qw-4)<</*" "<<&(qw[-4])<<*/endl;
qe=(int*)rr;
cout<<"Результат размера rr через int "<<*((unsigned long*)qe-4)<</*" "<<&(qe[-4])<<*/endl;
qr=(Dt*)rr;
cout<<"Результат размера rr через Dt "<<*((unsigned long*)qr-4)<</*" "<<&(qr[-4])<<*/endl;
delete[]rr;
 
double*tt=new double[30000];
qq=(char*)&tt[0];
cout<<"Результат размера tt через char "<<*((unsigned long*)qq-4)<</*" "<<&(qq[-4])<<*/endl;
qw=(short*)&tt[0];
cout<<"Результат размера tt через short "<<*((unsigned long*)qw-4)<</*" "<<&(qw[-4])<<*/endl;
qe=(int*)&tt[0];
cout<<"Результат размера tt через int "<<*((unsigned long*)qe-4)<</*" "<<&(qe[-4])<<*/endl;
qr=(Dt*)&tt[0];
cout<<"Результат размера tt через Dt "<<*((unsigned long*)qr-4)<</*" "<<&(qr[-4])<<*/endl;
double *yy=(double*)&tt[0];
cout<<"Результат размера yy через Dt "<<*((unsigned long*)yy-4)<</*" "<<&(yy[-4])<<*/endl;
delete[]tt;
Результат(у меня все размеры находятся на индексе -4)
Результат размера ww через long long 1 40
qr -1 -33686019
qr -2 410
qr -3 1
qr -4 40 размер 2умерного массива в байтах
qr -5 0
qr -6 0
qr -7 3334992
qr -8 3334824
qr -9 469818092
qr -10 1903529889
qr -11 0
qr -12 0
qr -13 -22303829
qr -14 -1414812757
qr -15 -1409417731
qr -16 1

Я не знаю почему можно любым указателем на любой позиции его находить но реализация может быть разной на разных
языках программирования и стандартах с

Результат размера ww[0] через char 80 внутри двумерного массива
Результат размера ww[0] через short 80
Результат размера ww[0] через int 80
Результат размера ww[0] через Dt 80
С простым
Результат размера ee через char 200
Результат размера ee через short 200
Результат размера ee через int 200
Результат размера ee через Dt 200
Результат размера rr через char 5000
Результат размера rr через short 5000
Результат размера rr через int 5000
Результат размера rr через Dt 5000
Результат размера tt через char 240000
Результат размера tt через short 240000
Результат размера tt через int 240000
Результат размера tt через Dt 240000
Результат размера yy через Dt 240000

Отсюда следует вывод можно привести указатель к типу Чар и искать ближайшую позицию.

Если объявить в mql4 массив типа
C++
1
double mas[30];
и передать в Сишную библиотеку то результат такой
w[0] 582
w[-1] 0
w[-2] 0
w[-3] 147
w[-4] 0
w[-5] 0
w[-6] 200275480
w[-7] 0
w[-8] 0
w[-9] 0
w[-10] 0
w[-11] 30(количество элементов)
w[-12] 8(тип double )
w[-13] 88
w[-14] 66
w[-15] 183666640
w[-16] 173180496
Единственное что понятно это то что длина поиска не превышала -16. Возможные контрольные значения -32 -64, мне кажется не будет так далеко разве что 128 битных системах но я не знаю бывают ли такие.

Добавлено через 1 час 8 минут
Массив статических массивов не хранится нигде, нужно заранее знать размер указателя, статические массивы намного дешевле обходятся чем динамические.

Добавлено через 1 час 20 минут
В общем понятно. Если создать указатели отдельно и приводить один указатель к другому то будет позиция -4 если потому что размер динамического указателя 4 байта, если использовать собственный указатель то результат такой.
C++
1
2
3
4
char *rt=new char[100];
for(int q=1;--q>-17;)
cout<<q<<" Результат размера rt[0] "<<(int)*(/*(int*)*/(&rt[0])+q)<<endl;
delete[]rt;
В этом случае позиция -16 char, -8 short, -4 int, -2 long long соответственно, если ваш процессор поддерживает 16 байтные переменные то как раз это поле в 16 байт даст -1 что говорит о том что указатель находится в самом начале массива. Ещё тут играет роль приведение типов что я выше закоментировал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2020, 01:44

Как узнать сколько памяти занимает таблица и каждый столбец в таблице
Как узнать сколько памяти занимает таблица и каждый столбец в таблице Access?

Как узнать, сколько памяти занимает тот или иной элемент программы?
Товарищи, подскажите, пожалуйста, ответы на следующие вопросы: 1) Есть какие-либо средства определения, сколько памяти жрёт программа в...

Узнать сколько занимает памяти объект.
Здравствуйте. Кто нибудь в курсе, как можно узнать сколько &quot;весит&quot; экземпляр написанного мной класса? То есть мне нужно создать экземпляр...

Определить, сколько места занимает в динамической памяти массив
Заполнить массив целых чисел случайным образом. Размерность массива не ограничена (в рамках динамической памяти), задается с клавиатуры....

Определить, сколько места занимает в динамической памяти данный массив
Даны квадратная матрица A. Элементы вектора и матрицы задаются случайным образом. Размерность матрицы не ограничена (в рамках динамической...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru