powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нестандартный алгоритм по массиву
24 сообщений из 24, страница 1 из 1
Нестандартный алгоритм по массиву
    #38551253
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Если Вам задача не понятно, сильно не ругайте мне!

Вот такая задача:

Пользователь вводит значение N, например 55.294.967.295.
Так как, компьютер могут принимать значения, например в Си unsigned long int, до 4.294.967.295, программа должна хранить значению в массиве, т.е так:

Код: plaintext
1.
 Т[0]=5;    Т[1]=5;   Т[2]=2;   Т[3]=9;    Т[4]=4;    Т[5]=9;   Т[6]=6;   Т[7]=7;  Т[8]=2;   Т[9]=9;   Т[10]=5; 



И программа могла выполнять любую операцию 55.294.967.295 раз. Например печатать на экран слово "Hello world" 55.294.967.295 раз. Какая операция будет это не важна, важно только определение значения элементов массива как единый число.

Можно на С/С++, Delphi, Pascal, PHP, Visual Basic, C#, JavaScript, Java.

Это я не в коммерческих целях, просто хотел! Думаю, что задача Вам тоже интересно будет. Если не интересно прошу не писать всяких слов!

Заранее всем спасибо!
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551260
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
Alimkulov,

Это называется Binary Coded Decimals

Более эффективно преобразовать в двоичное представление.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551277
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

задача в декременте/инкременте больших чисел? тогда это не сложно при двоичном кодировании цифр
т.е. по принципу счетчиков в цифровой схемотехнике

умножение/деление - это да задача )
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551280
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ILLHEADAlimkulov,

задача в декременте/инкременте больших чисел? тогда это не сложно при двоичном кодировании цифр
т.е. по принципу счетчиков в цифровой схемотехнике

умножение/деление - это да задача )

Пусть будет возведение в степень!
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551289
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F#Alimkulov,

Это называется Binary Coded Decimals

Более эффективно преобразовать в двоичное представление.

Можете написать пример?
Мне кажется не получится!
Например:

N[0]=2;
N[0]=5;

это получается как 25. Соответствующие двоичных кодов:

2(10)=0010(2);
5(10)=0101;

В этом случае нет общая формула, дающая результата: 25(10)=11001(2)
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551293
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovДумаю, что задача Вам тоже интересно будет.
Такие задачи обычно дают старшеклассникам-младшекурсникам при обучении программированию. Так что именно стало для Вас проблемой?
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551305
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
Нам такие задание не давали! Не знаю кто виноват и не хочу винит кого то!
Я начал заниматься программированием после ВУЗ.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551532
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

в C# можно использовать decimal, а также BigIntiger.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551762
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьмите два числа типа unsigned long int. Когда первое дойдет до предела (4.294.967.295), увеличьте второе на 1, а первое обнулите. Когда первое опять дойдет до предела, опять второе увеличьте на 1, а второе обнулите, и т. д. Таким образом, двумя переменными вы сможете сделать счетчик от 0 до 18446744073709551616, с помощью N переменных счетчик сможет принимать значения от 0 до 4.294.967.296^N.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38551832
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovНам такие задание не давали!
Попробуйте хорошо разобраться, что такое позиционные системы счисления, как в них строится арифметика, немного попрактикуйтесь в счёте в различных системах счисления. После этого у Вас вряд ли останутся существенные вопросы.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38552215
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov, в языках низкого уровня типа Ассемблер можно любое число представить
как суперпозицию объединений WORDS, или DWORDS как групп двоичных знаков.
Складывать и вычитать их можно почленно. Старший битик переноса который возникает
при сложении - никогда не теряется. Он всегда фиксируется в флагах процессора.
И его можно учесть при сложении следующей группы. Таким образом мы получаем
векторную машину которая складывает числа бесконечной (заданной нами разрядности).
Если перейти на уровень команд MMX/XMM регистров то можно увеличить разрядность
группы до 64-128 бит. Хотя смысл от этого не меняется. Мы так-же складываем
группы битиков и учитываем переносы между группами.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38552389
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulovsoftwarer,
Нам такие задание не давали! Не знаю кто виноват и не хочу винит кого то!
Я начал заниматься программированием после ВУЗ.
Никто тут виноватых не ищет. Просто же спросили "Так что именно стало для Вас проблемой?" что конкретно не получается? что непонятно?
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38552395
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovНапример:

N[0]=2;
N[0]=5;

это получается как 25.
почему не 52?
На самом деле получается 5
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38552552
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovВсем привет!
Если Вам задача не понятно, сильно не ругайте мне!

Вот такая задача:

Пользователь вводит значение N, например 55.294.967.295.
Так как, компьютер могут принимать значения, например в Си unsigned long int, до 4.294.967.295, программа должна хранить значению в массиве, т.е так:


Может использовать 64битные значения? типа int64?
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38552635
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAlimkulovНапример:

N[0]=2;
N[0]=5;

это получается как 25.
почему не 52?
На самом деле получается 5
Потому что N[0]=2, N[1]=5. Это и 25.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38552639
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064Может использовать 64битные значения? типа int64?


Ест угроза, что может быть N > int64.
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38553845
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovDima Tпропущено...

почему не 52?
На самом деле получается 5
Потому что N[0]=2, N[1]=5. Это и 25.
Обычно принято давать меньший индекс младшему разряду, т.е. это 52, но пусть будет по твоему 25.

По поводу твоей задачи: тебя в школе столбиком считать учили? Cчитай по этому алгоритму. Вот пример на Си для двухзначных чисел
Код: sql
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.
	int N[2], M[2], X[2];
	N[0]=2;
	N[1]=5;

	M[0]=1;
	M[1]=7;

	// Сложение
	X[0] = N[0] + M[0];
	X[1] = N[1] + M[1];
	if(X[1] > 9) 
	{
		X[1] = X[1] - 10;
		X[0] = X[0] + 1;
	}
	printf("%d%d + %d%d = %d%d\n", N[0], N[1], M[0], M[1], X[0], X[1]);

	// Вычитание
	X[0] = N[0] - M[0];
	X[1] = N[1] - M[1];
	if(X[1] < 0) 
	{
		X[1] = X[1] + 10;
		X[0] = X[0] - 1;
	}
	printf("%d%d - %d%d = %d%d\n", N[0], N[1], M[0], M[1], X[0], X[1]);


Можешь if-ов понаписать, а можешь универсально написать под любую ширину массива, только советую нумерацию элементов пересмотреть, тогда при N[0]=2, N[1]=5 можно так написать


если добавишь N[2]=7 то станет
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38554063
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПо поводу твоей задачи: тебя в школе столбиком считать учили? Cчитай по этому алгоритму.


Нет, не учили. Я не знал что существует такой алгоритм. Можете подробнее написать арифметических операциях.
Не зная как умножит двух чисел, написал на Си вот такой пример (Но я не знаю столбиком считать):

Код: plaintext
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.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
// определяет точку входа для консольного приложения.

#include <stdio.h>
#include <stdlib.h> 

int *Arithmetic(                                            // выполняет арифметических операций
                int *sourse_operant,                        // операнд-источник, множимое 
				int digit,                                  // количество разрядов N
                int destination_operand,                    // операнд назначения для арифметической операция, множитель
				int& digit_result);                         // количество разрядов результата, произведение

int *getNumForArray(int& ref);                              // получает у пользователя значении N

int *creatArray(int *array, int size_n);                    // создает массив 

int *moveArray(int *array, int array_size);                 // сдвигает массив к краю младшего разряда



//---------------***********----------------// 
int main(int argc, char *argv[])
{
    int *N;                                                 // массив для хранения N
	int multiplier=0;                                       // множитель
	int *NumResult = NULL;                                  // массив результата, произведение
	int digitN = 0;                                         // количество разрядов N
      	int digitResult = 0;                                    // количество разрядов произведения
	int i = 0;                                              // шаг любого цикла
    

	printf("Enter number (n >=1) N:");
   	N = getNumForArray(digitN);                             // получаем у пользователя множителю
	                                                        // функция получает параметра по ссылке  (ref)  
      	
    printf("\nEnter number (m >=1) X:");                    
  	scanf("%d", &multiplier);                                     // получаем у пользователя множителю
                                                            // функция получает параметра по ссылке (ref) 
	digitResult = digitN;                                   // изначально, размер массив результата тоже равно будет разряду N
		                                   
	NumResult = Arithmetic(N,  digitN, multiplier, digitResult); 
	     
	//******* Вывод результат 
	printf("\n\nResult=");
	 for (int i=0; i<digitResult; i++)
	    printf("%d", NumResult[i]);
	    
  return 0;   
}   
//-------- Конец функции main ---------//


/*-------------------------------------*/
// функция выполняет арифметических операций и возвращает результат в массиве
int *Arithmetic(                                            
                int *sourse_operant,                        // операнд-источник 
				int digit,                                  // количество разрядов N
                int destination_operand,                    // операнд назначения для арифметической операция
				int& digit_result)                          // количество разрядов результата
{
	int *result=NULL;                                       // массив результат 
        int temp=0;
	int i, j; 
	int wit;                                                // для запоминания цифр  
           
    result = creatArray(result, digit_result);              // создадим массив для результата 
    
	wit=0;                                                  // пока в уме ни какой цифра нет 
        
	for (i=digit-1; i>=0; i--)                              // начинаем идти с младших разрядов
    {
        temp = sourse_operant[i] * destination_operand;     // умножаем цифры, стоящие на данных позициях 
        
		temp += wit;                                        // прибавляем то, что было в уме
		    
		wit=0;                                              // забудем то, что было в уме 
			
		if (temp >= 10)                                     // если результат двухзначное число, отделяем результат на 2 разряд
        {
            wit = temp/10;                                  // запоминаем 1-разряд цифры
                
            temp = temp - (wit*10);                         // получаем 2-разряд цифры
        }
            
	    result[i]=temp;                                     // запишем результат в массив 
    }
    
    if (wit > 0)                                            // если в уме имеется цифра
    {
   	    result = creatArray(result, digit_result+1);        // добавляем в массив еще один место
   	    
        result = moveArray(result,digit_result);            // сдвигаем к краю младшего разряда	
     	 
		result[0] = wit;                                    // добавляем в массив то, что было в уме 
		   
        ++digit_result;                                     // увеличиваем количество разряда 
	}
	
   return result;                                           // возвращаем результат
}
//-------- Конец функции Arithmetic ---------//


/**/
int *getNumForArray(int& ref)
{
	int* num=NULL; 
	int n;                                                  // n получает цифры с клавиатуры
	char qs;                                          
	
	for (ref=0; (n=getchar())!='\n'; ref++) 
	
      if (n >= '0' && n <= '9')                              
      {
         num = creatArray(num, ref+1);                      // создаем массив
		 
		 num[ref] = n-'0';                                  // добавим к массиву только что введённое число
      }
           
     return num; 
}



/**/
int *creatArray(int *array, int size_n)                     // динамический память
{
	int *temp=NULL;                                         // временный указатель на массив 
	
	temp =(int*) realloc(array, sizeof(int)*size_n);        // при добавлении нового числа, увеличиваем массив на 1, 
	                                                        // временно сохраним указателя на этот массив  
	
	if (temp != NULL)                                       // если функция realloc возвращало указатель на массиву 
     
	   array = temp;                                        // увеличиваем массив на 1 
    
	else                                                    // если функция realloc возвращало NULL
	   exit(1);                                             // завершить работу программы
   
   return array;
}	



/**/
int *moveArray(int *array, int array_size)
{
	int i;

	for (i = array_size;  i>0; i--)
	    {
	 	   array[i]=array[i-1];
		}
		
		array[0]=0;

   return array;
}



quot Dima T спасибо за комментарии! Буду рад, если учите меня как осуществлять умножение по столбиком!
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38554326
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov Буду рад, если учите меня как осуществлять умножение по столбиком!
В гугле напиши " умножение столбиком " там и алгоритм, и примеры, даже видео есть по этому поводу.

Вот например http://math-prosto.ru/?page=pages/action-in-column/multi-in-column.php
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38555423
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Офигеть, в школах уже не учат умножению столбиком. Чему же там вообще учат? Программы пишут люди, которые умножать не умеют. Скоро программисты до десяти считать разучатся :)
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38555492
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddxСкоро программисты до десяти считать разучатся :)
Программисту достаточно уметь считать до двух :)
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38556598
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
AddxОфигеть, в школах уже не учат умножению столбиком. Умножение столбиком - это советская школа.
Возможно в Узбекистане перешли на другую систему (точки/черточки, линии, еще какую).
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38594391
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, наверное, Вы меня не поняли! Между прочим, я хорошо разбираюс с математики!
Я просто пошутил на это:
Dima TПо поводу твоей задачи: тебя в школе столбиком считать учили? Cчитай по этому алгоритму. Вот пример на Си для двухзначных чисел


Так:
AlimkulovНет, не учили. Я не знал что существует такой алгоритм. Можете подробнее написать арифметических операциях.
Не зная как умножит двух чисел, написал на Си вот такой пример (Но я не знаю столбиком считать):


Неужели человек знает программированием, и не знает столбиком считать!
Dima T, пречде чем, задавать такой вопрос, хорошо подумайте. Вы должны научиться аважать людей!

Конеяно знаю столбиком считать! Dima T, я с Вами могу спорит по матиматике!
Dima T, если Вы участникам форма всегда задаете дурной вапрос, тогда это форм не дла Вас!
...
Рейтинг: 0 / 0
Нестандартный алгоритм по массиву
    #38594432
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovНеужели человек знает программированием, и не знает столбиком считать!
Dima T, пречде чем, задавать такой вопрос, хорошо подумайте. Вы должны научиться аважать людей!
Я смотрю тебе эта проблема полтора месяца спать не дает.

Вопрос мой был риторический ( почитай если слово не понятно ), т.к. всех этому учат, а вот ответ твой всех повеселил.

А то что это алгоритм и его можно использовать для решения твоей задачи - это я тебе серьезно написал.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нестандартный алгоритм по массиву
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]