Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нестандартный алгоритм по массиву / 24 сообщений из 24, страница 1 из 1
05.02.2014, 23:57
    #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
06.02.2014, 00:13
    #38551260
F#
F#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный алгоритм по массиву
Alimkulov,

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

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

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

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

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

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

Пусть будет возведение в степень!
...
Рейтинг: 0 / 0
06.02.2014, 01:17
    #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
06.02.2014, 01:23
    #38551293
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный алгоритм по массиву
AlimkulovДумаю, что задача Вам тоже интересно будет.
Такие задачи обычно дают старшеклассникам-младшекурсникам при обучении программированию. Так что именно стало для Вас проблемой?
...
Рейтинг: 0 / 0
06.02.2014, 01:53
    #38551305
Alimkulov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный алгоритм по массиву
softwarer,
Нам такие задание не давали! Не знаю кто виноват и не хочу винит кого то!
Я начал заниматься программированием после ВУЗ.
...
Рейтинг: 0 / 0
06.02.2014, 11:06
    #38551532
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный алгоритм по массиву
Alimkulov,

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

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

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

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

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


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

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

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


Ест угроза, что может быть N > int64.
...
Рейтинг: 0 / 0
07.02.2014, 17:08
    #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
07.02.2014, 19:50
    #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
08.02.2014, 11:30
    #38554326
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нестандартный алгоритм по массиву
Alimkulov Буду рад, если учите меня как осуществлять умножение по столбиком!
В гугле напиши " умножение столбиком " там и алгоритм, и примеры, даже видео есть по этому поводу.

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


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


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

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

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

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


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