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

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

04.02.2010, 22:43. Показов 2584. Ответов 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
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.02.2010, 07:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от lexus_ilia Посмотреть сообщение
N - это не заданное количество цифр,
Действительно, а что тогда, если написано
N вводить нужно с клавиатуры (n<10^50)
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.02.2010, 07:47
Цитата Сообщение от Mawrat Посмотреть сообщение
А что же это?
Цитата Сообщение от Puporev Посмотреть сообщение
Действительно, а что тогда, если написано
N - это и не заданное количество цифр. N - это порядковый номер номер цифры, которую необходимо найти
Цитата Сообщение от Astonjke Посмотреть сообщение
которая будет выдавать на экран n-ю цыфру этого числа
т.е. есть к примеру 15638472. N=3. Ответ: 6. При чем тут количество цифр? (риторический)
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.02.2010, 07:52
Inadequate, Какая нафиг разница, номер или количество? Мне интересно как это число задать с клавиатуры? 10^49 например, чтобы потом с ним сравнивать найденный результат, типа
Pascal
1
while k<=n
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.02.2010, 08:26
Puporev, ну это уже другой вопрос, но Илья правильно написал. Что касается ввода N<10^50 то, я думаю, что тут ТС где-то накосячил с условием, пусть идет и уточняет там, где он его взял. Потому как условие - бред...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.02.2010, 08:47
Может и не бред. Вводить номер цифры как строку, а потом сравнивать по длине строки
Pascal
1
while length(s)<=length(nomer) do
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
06.02.2010, 09:29
не пойму, в чём сложность-то? я же уже писал общий принцип, уточню алгоритм:
1. вводим число n как строку
2. разбиваем на символы, переводим в цифры и формируем массив цифр и массив счётчика
3. по тем же правилам длинной арифметики формируем счётчик, добавляя единицу на каждом шаге к последнему элементу массива счётчика
4. вычитаем из первого числа второе по правилам длинной арифметики
5. продолжаем увеличивать счетчик и вычитать пока не дойдём до нуля или до отрицательного числа
6. если получим 0 - на этом месте стоит 1, если вычесть нельзя - стоит 0.
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.02.2010, 16:32
Цитата Сообщение от Inadequate Посмотреть сообщение
N - это и не заданное количество цифр. N - это порядковый номер номер цифры, которую необходимо найти
Миш, я когда писал свой пост, то уточнил это:
Цитата Сообщение от Mawrat Посмотреть сообщение
Но ведь, как раз N - это и есть наперёд заданное количество цифр (интересующих нас цифр) в этом числе
Lexus_ilia видимо не обратил на это внимание.
Цитата Сообщение от alexevt
не пойму, в чём сложность-то? я же уже писал общий принцип
Всё верно, Alexevt об этом уже писал в начале обсуждения - просто народ видимо не прочитал.
Но опять остаётся вопрос о времени выполнения. Я уже упоминал - такой подсчёт может потребовать около полутора миллиародов лет.
Цитата Сообщение от Inadequate Посмотреть сообщение
Что касается ввода N<10^50 то, я думаю, что тут ТС где-то накосячил с условием
Да, видимо, именно так - неверное условие.
0
 Аватар для Astonjke
29 / 29 / 18
Регистрация: 21.12.2009
Сообщений: 79
06.02.2010, 19:28  [ТС]
Условие правильное, я уточнял. Знаю, что "такой подсчёт может потребовать около полутора миллиародов лет"... Что вы предлагаете мне делать?
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
06.02.2010, 21:37
Предложение такое. Надо реализовать 2 операции с "длинными" числами - сложение и сравнение. Написать программу расчёта. А затем запустить расчёт, скажем, при N = 10^7. При этом показать время выполнения. Далее подсчитать эмпирически время выполнения при N = 10^50.
Таким образом будет реализован алгоритм (т. е. написана программа) плюс редоставлен прогноз о времени выполнения для очень больших чисел. Думаю, препода это устроит. Возможно именно такая "тайная" задумка и была - дать прочувствовать, что такое циклы обработки больших чисел.
И результаты надо продемонстрировать преподу до официальной сдачи - мало-ли что...
1
 Аватар для Astonjke
29 / 29 / 18
Регистрация: 21.12.2009
Сообщений: 79
27.02.2010, 22:38  [ТС]
Вот правильное решение:

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
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
program first_2;
uses crt;
 
const
  max_n_digits=200;
type
  long_number=array[1..max_n_digits] of byte;
 
{readln(a);}
procedure long_input(var a:long_number;var aa:longint);
var
  s:string;
  i:longint;
  err:integer;
begin
  readln(s);
  fillchar(a,sizeof(a),0);
  for i:=1 to length(s) do
    val(s[i],a[length(s)+1-i],err);
  aa:=1;
  for i:=2 to max_n_digits do
    if a[i]>0 then aa:=i;
end;
 
{a:=new_value;}
procedure long_create(var a:long_number;var aa:longint;new_value:string);
var
  i:longint;
  err:integer;
begin
  fillchar(a,sizeof(a),0);
  for i:=1 to length(new_value) do
    val(new_value[i],a[length(new_value)+1-i],err);
  aa:=1;
  for i:=2 to length(new_value) do
    if a[i]>0 then aa:=i;
end;
 
{a:=a+1;}
procedure long_add1(var a:long_number; var aa:longint);
var
  i:longint;
  perenos:byte;
begin
  perenos:=1;
  i:=1;
  while perenos=1 do begin
    if a[i]<9
      then begin inc(a[i]); perenos:=0; end
      else begin a[i]:=0; end;
    inc(i);
  end;
  while (a[aa+1]>0)and(aa<max_n_digits) do
    inc(aa);
end;
 
{c:=a+b;}
procedure long_add(a,b:long_number; var c:long_number; aa,bb:longint; var cc:longint);
var
  i,max:longint;
  perenos:byte;
begin
  fillchar(c,sizeof(c),0);
  perenos:=0;
  if aa>bb
    then max:=aa
    else max:=bb;
  i:=1;
  while (i<=max)or(perenos>0) do begin
    c[i]:=a[i]+b[i]+perenos;
    perenos:=c[i] div 10;
    c[i]:=c[i] mod 10;
    inc(i);
  end;
  cc:=i;
end;
 
{c:=a-b; (a>b)}
procedure long_sub(a,b:long_number; var c:long_number; aa,bb:longint; var cc:longint);
var
  i:longint;
  zapozich:byte;
  digitnew:integer;
begin
  fillchar(c,sizeof(c),0);
  zapozich:=0;
  i:=1;
  while i<=aa do begin
    digitnew:=a[i]-b[i]-zapozich;
    zapozich:=0;
    while digitnew<0 do begin
      inc(digitnew,10);
      inc(zapozich);
    end;
    c[i]:=digitnew mod 10;
    inc(i);
  end;
  while c[i]=0 do
    dec(i);
  cc:=i;
end;
 
{a:=a*b;}
procedure long_mul(var a,b:long_number;var aa,bb:longint);
var
  i_a,i_b,k:longint;
  rez:long_number;
  perenos:longint;
begin
  fillchar(rez,sizeof(rez),0);
  for i_a:=1 to aa do begin
    perenos:=0;
    for i_b:=1 to bb do begin
      k:=(i_a+i_b-1) mod max_n_digits;
      inc(rez[k],a[i_a]*b[i_b]+perenos);
      perenos:=rez[k] div 10;
      rez[k]:=rez[k] mod 10;
    end;
    while perenos<>0 do begin
      k:=(k+1) mod max_n_digits;
      rez[k]:=perenos mod 10;
      perenos:=perenos div 10;
    end;
  end;
 
  k:=aa+bb;
  a:=rez;
  while (a[k]=0)and(k>1) do dec(k);
  aa:=k;
end;
 
{a:=a*2;}
procedure long_mul2(var a:long_number; var aa:longint);
var
  i:longint;
  perenos:byte;
begin
  perenos:=0;
  i:=1;
  while (i<=aa)or(perenos>0) do begin
    a[i]:=a[i]*2+perenos;
    perenos:=a[i] div 10;
    a[i]:=a[i] mod 10;
    inc(i);
  end;
  aa:=i;
end;
 
{a:=a div 2;}
procedure long_div2(var a:long_number; var aa:longint);
var
  ostacha:longint;
  i:longint;
begin
  ostacha:=0;
  for i:=aa downto 1 do begin
    ostacha:=a[i]+ostacha*10;
    a[i]:=ostacha div 2;
    ostacha:=ostacha mod 2;
  end;
  while (a[aa]=0)and(aa>1) do
    dec(aa);
end;
 
{a>=<b}
function long_cmp(a,b:long_number; aa,bb:longint):integer;
var
  i,max:longint;
begin
  if aa>bb
    then max:=aa
    else max:=bb;
  long_cmp:=0;
  i:=max;
  while (a[i]=b[i])and(i>1) do
    dec(i);
  if a[i]<b[i] then long_cmp:=-1;
  if a[i]>b[i] then long_cmp:=1;
end;
 
var
  f:text;
  s:long_number;ss:longint;
  a,b,c,d:long_number;aa,bb,cc,dd:longint;
  odinichka:long_number;odinichka_dlina:longint;
begin
  clrscr;
  write('n=');
  long_input(s,ss);
 
  long_mul2(s,ss);
  long_create(a,aa,'1');
  long_create(b,bb,'20000000000000000000000000');
  long_create(odinichka,odinichka_dlina,'1');
  repeat
    long_add(a,b,c,aa,bb,cc);
    long_div2(c,cc);
    d:=c;dd:=cc;
    long_add1(d,dd);
    long_mul(d,c,dd,cc);
    if long_cmp(d,s,dd,ss)>0 {d>s}
      then begin b:=c; bb:=cc; end
      else begin a:=c; aa:=cc; end;
    long_sub(b,a,d,bb,aa,dd);
  until long_cmp(d,odinichka,dd,odinichka_dlina)<=0; {d<='1'}
  d:=a;dd:=aa;
  long_add1(d,dd);
  long_mul(d,a,dd,aa);
  writeln('Solution is in file "first.sol"');
  assign(f,'first.sol');
  rewrite(f);
  if long_cmp(d,s,dd,ss)=0 {d=s}
    then writeln(f,1)
    else writeln(f,0);
  close(f);
  readkey;
end.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2010, 22:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере 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. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru