Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
 Аватар для Astonjke
29 / 29 / 18
Регистрация: 21.12.2009
Сообщений: 79

Число 0,10100100010000100000....

04.02.2010, 22:43. Показов 2586. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано число 0,10100100010000100000....
Написать приграмму, используя файлы, которая будет выдавать на экран n-ю цыфру этого числа (0 или 1). N вводить нужно с клавиатуры (n<10^50)

Помогите плиз! Вот есть программа, но в ней можно ввести n максимум из 10 цыфр:

Pascal
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
program p1;
uses crt;
var  t:text;
     n:longint;
     i:longint;
begin
clrscr;
write('n=');
readln(n);
 
i:=1;
while i<n do begin
          dec(n,i);
          inc(i);
          end;
 
assign(f,'first.sol');
rewrite(f);
writeln (Otvet v faile "first.sol":');
if n=i
then begin writeln(f,1); writeln (1);
     end
else begin writeln(f,0); writeln (0);
     end;
 
close(f);
readln;
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2010, 22:43
Ответы с готовыми решениями:

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д.
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. ...

Сколько существует программ, которые число a преобразуют в число b,а затем это число преобразуют в число c
Нужно написать общую программу,решающую задачу. У исполнителя две команды, которым присвоены номера: Прибавить 1 Умножить на 2 ...

Дано натуральное число n. Создать новое число, которое получается написав число обратным порядком
Например, если дано 3578, то получится 8753. Есть такой вариант, но нужно короче... ВАЖНО Нужно именно создать новое число, а не...

29
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
04.02.2010, 23:11
эта задача решается только строками
0
 Аватар для Astonjke
29 / 29 / 18
Регистрация: 21.12.2009
Сообщений: 79
04.02.2010, 23:38  [ТС]
а можно поподробнее?
n:string[51] ?
0
 Аватар для Astonjke
29 / 29 / 18
Регистрация: 21.12.2009
Сообщений: 79
05.02.2010, 00:25  [ТС]
Вот именно, что число... 10+50 нулей может быть n
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
05.02.2010, 00:27
нет, тут я вряд ли смогу тебе помочь.
это длинная арифметика, а значит - фриланс, никто не подпишется
0
175 / 172 / 40
Регистрация: 14.11.2009
Сообщений: 507
05.02.2010, 00:47
что тут сложного?заносите каждую цифру числа в массив ,над этим можно чуток подумать,а потом просто выводите ячейку массива с номером n

Добавлено через 14 минут
Pascal
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
type
mas=array[0..50] of byte;
 
procedure rec (n:integer; var a:mas);
var
i,j,k,l:integer;
begin
a[0]:=0;
j:=1;
k:=0;
for i:=1 to n do begin
inc(k);
if k=j then begin
a[i]:=1;
k:=0;
inc(j);
end;
end;
end;
 
var
a:mas;
n:integer;
begin
readln(n);
rec(n,a);
writeln(a[n-1]);
readln
end.
1
175 / 172 / 40
Регистрация: 14.11.2009
Сообщений: 507
05.02.2010, 00:51
как это?

Добавлено через 1 минуту
ааа нужно еще придумать как n вводить
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
05.02.2010, 00:52
readln(n);
посмотри условие для n 10^50
0
175 / 172 / 40
Регистрация: 14.11.2009
Сообщений: 507
05.02.2010, 00:54
или вообще вывести закономерность,она же есть точно здесь.

Добавлено через 1 минуту
Цитата Сообщение от alexevt Посмотреть сообщение
посмотри условие для n 10^50
да уже увидел ,я неверно понял его)
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
05.02.2010, 00:54
а толку что? введут тебе 1234124312341341234113241324134123412341 24124 такое число и куда ты свою закономерность засунешь?
0
175 / 172 / 40
Регистрация: 14.11.2009
Сообщений: 507
05.02.2010, 00:56
значит все таки ошибка в условии ..
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
05.02.2010, 00:57
закономерность тут простая - 1 стоит на месте, которое равно сумме всех чисел, от 1 до количества единиц.
И задача решается, ввод идёт строкой, потом разбивается на цифры, заносятся в массив, а потом начинаем вычитать 1, 2,3,4 пока не получим 0-значит стоит единица, или вычесть очередное число нельзя, значит стоит ноль. Такой вот алгоритм, но реализовывать его - муторное дело.
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.02.2010, 01:07
Вы что-то уж очень заморочились. Вот решение:
Pascal
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
program Project1;
 
var
  N, K, M : Integer;
  StrTmp : String;
begin
  repeat
    Writeln('0,10100100010000100000');
    Writeln('Vvedite N >= 0:');
    Readln(N);
    K := 1;
    M := 2;
    while K < N do begin
      K := K + M;
      M := M + 1;
    end;
    if K = N then begin
      Writeln('Na Pozicii ', N, ' raspolojena cifra 1');
    end else begin
      Writeln('Na Pozicii ', N, ' raspolojena cifra 0');
    end;
    Writeln('Prodoljit - ENTER. Vihod - luboi sumvol + ENTER.');
    Readln(StrTmp);
  until StrTmp <> '';
end.
Алгоритм основан на том факте, что при движении вправо, в промежутках между единицами, количество нулей увеличивается на один:
Pascal
1
2
Позиции: 0 1 2 3 4 5 6 7 8 9 10
Цифры:   0,1 0 1 0 0 1 0 0 0 1 ...
0
175 / 172 / 40
Регистрация: 14.11.2009
Сообщений: 507
05.02.2010, 01:12
Цитата Сообщение от Mawrat Посмотреть сообщение
Вы что-то уж очень заморочились. Вот решение:
Pascal
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
program Project1;
 
var
  N, K, M : Integer;
  StrTmp : String;
begin
  repeat
    Writeln('0,10100100010000100000');
    Writeln('Vvedite N >= 0:');
    Readln(N);
    K := 1;
    M := 2;
    while K < N do begin
      K := K + M;
      M := M + 1;
    end;
    if K = N then begin
      Writeln('Na Pozicii ', N, ' raspolojena cifra 1');
    end else begin
      Writeln('Na Pozicii ', N, ' raspolojena cifra 0');
    end;
    Writeln('Prodoljit - ENTER. Vihod - luboi sumvol + ENTER.');
    Readln(StrTmp);
  until StrTmp <> '';
end.
Алгоритм основан на том факте, что при движении вправо, в промежутках между единицами, количество нулей увеличивается на один:
Pascal
1
2
Позиции: 0 1 2 3 4 5 6 7 8 9 10
Цифры:   0,1 0 1 0 0 1 0 0 0 1 ...
n<=10^50!!
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.02.2010, 01:20
Цитата Сообщение от pikusfikus Посмотреть сообщение
n<=10^50!!
А, ясно...
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
05.02.2010, 01:49
хм, я не вижу тут сложности, занесите ваше число в строку при вводе:
Pascal
1
2
3
4
var
  n:string[51];
begin
  readln(n);
заведите массив (можно динамический), он будет представлять ваше число(n - это для длинной арифметики). Потом узнаёте количество цифр в числе вида "0,01010100010100..." (я думаю здесь пояснять не надо, но скажу что лучше использовать длинную арифметику, т.к. в условии не очень понятно какова размерность числа). А теперь остаётся дело за малым - это написать разность двух длинных чисел (n- "кол-во цифр в заданном числе") до тех пор, пока n не станет меньше того самого количества, ну и узнать позицию нужной нам цифры - это уже совсем не проблема. У нас есть число n, есть само число (в файле), считываем n раз очередную цифру и когда n станет равной 0 выводим очередную цифру и заканчиваем работу программы.
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.02.2010, 14:44
Цитата Сообщение от lexus_ilia Посмотреть сообщение
Потом узнаёте количество цифр в числе вида "0,01010100010100..."
Но ведь, как раз N - это и есть наперёд заданное количество цифр (интересующих нас цифр) в этом числе...
У меня в голове рисуются астрономические картины...
Чем дальше мы движемся вправо по числу "0,01010100010100...", тем плотность единиц становится всё меньше и меньше. При этом в числах обнаружилась "частная" закономерность:
Pascal
1
2
3
4
5
6
7
8
9
10
11
Позиция - т. е. N          кол-во единиц
55                         10
50 50                      100
500 500                    1 000
5 000 5 000                10 000
50 000 50 000              100 000
500 000 500 000            1 000 000
5 000 000 5 000 000        10 000 000
50 000 000 50 000 000      100 000 000
500 000 000 500 000 000    1 000 000 000
...
Конечно с учётом этой закономерности можно находить диапазон, в который вписывается число N и просчёт вести уже не от единицы, а от нижней границы диапазона - т. е. от одного из выше представленных чисел. Так как числа эти всё равно очень большие, то это врядли существенно поможет...
Таким образом, если имперически прикинуть, то для того, чтобы проверить единица на позиции N или ноль, мы должны посчитать сумму всех чисел от 1 до 10^25. Я набросал программу, которая выполняет вычисления блоками по 100 000 000 единиц = 10^8. Каждый такой блок у меня с учётом включенной оптимизации и с нормальным приоритетом процесса, выполняется около 2 сек.
Таким образом для просчёта 10^25 единиц понадобится порядка 10^(17 - 1) = 10^16 секунд - если посчитать - это около полутора миллиардов лет... Ну пускай мы применим идею с диапазонами - тогда порядок снизится примерно на 2 или 3 и будет: 10^13 - 10^14 - это миллионы или десятки миллионов лет.
В общем, здесь нужен какой-то другой путь...
---
Ребята, если решение кто-то найдёт - опубликуйте здесь, пожалуйста.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
05.02.2010, 15:06
N вводить нужно с клавиатуры (n<10^50)
Интересно как ввести с клавиатуры и прочитать целое число 10^49, что бы потом до него выполнять вычисления?
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
06.02.2010, 01:47
Mawrat, N - это не заданное количество цифр, почитайте внимательно условие.
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.02.2010, 03:30
Цитата Сообщение от lexus_ilia Посмотреть сообщение
N - это не заданное количество цифр
А что же это?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2010, 03:30
Помогаю со студенческими работами здесь

Дано двухзначное число. Найти число десятков, число единиц в нем, произведение его цифр
Помогите плиз=)) Дано двухзначное число. Найти число десятков ,число едениц в нем, произвеление его цыфр

Выяснить, какое число встречается в массиве раньше – число Фибоначчи или простое число
Дан натуральный массив A, состоящий из натуральных чисел. Выяснить, какое число встречается раньше – число Фибоначчи или простое число....

Данно вещественное число X. Найти в нем первое число десятка, число десятых долей.
помогите плз решить Данно вещественное число X. Найти в нем первое число десятка, число десятых долей.

Загадано целое число из интервала [A,B]. Написать программу, которая за минимальное число вопросов отгадает это число
Я загадаю целое число из интервала . Напишите программу, которая за минимальное число вопросов отгадает это число. Играть будем так. Я...

Вводится число N необходимо вывести число NN, то есть приписать к N такое же число. Например, мы вводим 984, а выводится
Вводится число N необходимо вывести число NN, то есть приписать к N такое же число. Например, мы вводим 984, а выводится 984984


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru