Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 55
1

Вычислить 2^300 (найти ошибки в программе)

27.10.2015, 13:56. Просмотров 1190. Ответов 8
Метки нет (Все метки)

Помогите разобраться, почему не работает программа!!
Задача: 2^300
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var m: array[1..100] of integer;
  i,j,t,n,r, a: integer;
  begin
  m[1]:=1; n:=1; r:=0;
  for i:=1 to 300 do
  begin
  for j:=1 to n do
  begin
     n:=m[j]*2;
     m[j]:= n mod 10+r;
     r:=a div 10;
  end;
    if r>=0 then begin 
                      inc(n);
                      m[n]:=r;
                      r:=0;
                      end;
  end;
  for t:= n downto 1 do
  begin
  writeln(m[t]);
  end;
  end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2015, 13:56
Ответы с готовыми решениями:

Найти ошибки в данной программе (известно что есть только 2 ошибки)
У меня в модуле с програмирования задание: Найти ошибки в данной программе (известно что есть...

Найти ошибки в программе
Решил попробовать перекомпилировать игру на Lazarus, код которой предоставил Kropotkin (код был...

Найти ошибки в программе
ОШИБКИ: 1)нехватает переменных, 2)tran:=u не возвращает функцию. const n=5; k=4; type ...

Найти ошибки в программе
Всем здравствуйте! Нудно найти ошибки в программе и записать её правильно! Program Errors;...

8
9 / 9 / 14
Регистрация: 26.09.2015
Сообщений: 26
27.10.2015, 15:42 2
Pascal
1
power(2,300);
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
27.10.2015, 17:10 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не понял что Вы творите, посмотрите такой вариант
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
const n=100;
var a:array[1..n] of byte;//массив цифр
    i,j,r:integer;
    aa,per:byte;
begin
for i:=1 to n do
a[i]:=0;  //обнулим массив
r:=1;//одна цифра
a[n]:=1;//последняя=1
for i:=1 to 300 do //возводим 2 в степень n-1 раз
 begin
  per:=0; //перенос
  j:=n; //конец масива
  while (j>=n-r+1)do//пока есть цифры
   begin
    aa:=a[j]*2+per;//умножаем на 2 + перенос
    a[j]:=aa mod 10;//пишем последнюю цифру числа
    per:=aa div 10; //первую в перенос
    if (per>0)and(j=n-r+1) then inc(r);//если есть перенос и последняя цифра,
                                          // увеличим массив
    dec(j); //к следующей цифре с конца
   end;
 end;
for i:=n-r+1 to n do//выводим полученное число
write(a[i]);
end.
1
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
27.10.2015, 17:13 4
Цитата Сообщение от ite Посмотреть сообщение
power(2,300);
И получишь такое?
0
Миниатюры
Вычислить 2^300 (найти ошибки в программе)  
9 / 9 / 14
Регистрация: 26.09.2015
Сообщений: 26
27.10.2015, 17:43 5
согласен.зря полез
0
охотник
1010 / 534 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
27.10.2015, 18:39 6
Puporev,
Pascal
9
for i:=1 to n do
Pascal
1
const n=300;
1
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
27.10.2015, 18:52 7
Поправил, пропустил строку
Pascal
1
const n=100;//макс. число разрядов в числе
но
Pascal
1
for i:=1 to 300 do//2^300
0
0 / 0 / 0
Регистрация: 14.11.2014
Сообщений: 55
28.10.2015, 16:12  [ТС] 8
А не подскажите, как эту задачу реализовать не через массив как тут, а через строку???
0
Модератор
60132 / 45288 / 31253
Регистрация: 18.05.2008
Сообщений: 108,766
28.10.2015, 16:35 9
Лучший ответ Сообщение было отмечено yutochka123 как решение

Решение

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
const st=300;  {степень}
var s,tt : string;
    c : char;
    i,j,k,a,b,len:integer;
begin
s:='2'; {начальная строка}
for i:=1 to st-1 do{от 1 до 299}
 begin
  tt:=s;{запоминаем строку}
  len:=length(tt);{длина запомненной строки 1,2,3..}
  s:='';{сбрасываем строку}
  k:=0;
  for j:=1 to len do
   begin
    a:=(ord(tt[j])-48)*2+k; {умножаем столбиком каждый раз новое число}
    b:=a mod 10; {последняя цифра}
    k:=a div 10; {перенос}
    s:=s+chr(b+48);{новая строка без последнего переноса}
   end;
  if k<>0 then s:=s+chr(k+48);{добавляем в конец последний перенос}
 end;
len := length(s); {переворачиваем строку}
for i:=1 to len div 2 do
 begin
  c:=s[len-i+1];
  s[len-i+1]:=s[i];
  s[i]:=c;
 end;
writeln(s);
end.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2015, 16:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти ошибки в программе
Помогите! Правильно ли составлена программа? Даны действительные числа а1..,а64.Получит...

Найти ошибки в программе
Помогите их исправить, пожалуйста. Файл прикреплен.

Найти ошибки в программе
Ребята помогите пожалуйста найти ошибки, программа простая с математическими уравнениями, проблема...

Найти ошибки в программе
Прошу помогите 1 задание program zadanie1; var x: ^boolean; Y: boolean; begin {a} New(x);...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.