Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2017, 22:06   #1
v13
Новичок
Джуниор
 
Регистрация: 21.03.2017
Сообщений: 4
По умолчанию Помогите, пожалуйста, поправить код на паскаль.

Вот код. Ошибка: нельзя преобразовать тип real в integer (в строке x:=x/a[i]). Помогите, пожалуйста, исправить.

Код:
var c,i,j,x:longint;
    a,b:array[1..1000000] of longint;

begin

read(x);
c:=1;
for i:=2 to (x div 2) do
begin
  if (x mod i = 0) then
  begin
    for j:=2 to i div 2 do
    begin
      if (not i mod j = 0) then
      begin
        a[c]:=i;
        c:=c+1;
      end;
    end;
  end;
end;

while(not x=1) do
begin
  for i:=1 to c do
  begin
    if(x mod a[i]=0) then
    begin
      x:= (x / a[i]);
      b[i]:=b[i]+1;
    end;
  end;
end;

for i:=1 to c do
begin
  if((not b[a[i]]=1) and (not b[a[i]]=0))then 
  begin
    write(a[i],'^',b[a[i]],'*');
  end;
  if(b[a[i]]=1)then 
  begin
    write(a[i],'*');
  end;
end;
end.

Последний раз редактировалось Аватар; 22.03.2017 в 13:57.
v13 вне форума Ответить с цитированием
Старый 21.03.2017, 22:23   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

К целым нельзя / , надо x:=x div a[i]
type_Oleg вне форума Ответить с цитированием
Старый 22.03.2017, 09:15   #3
v13
Новичок
Джуниор
 
Регистрация: 21.03.2017
Сообщений: 4
По умолчанию

Спасибо большое
v13 вне форума Ответить с цитированием
Старый 22.03.2017, 10:34   #4
v13
Новичок
Джуниор
 
Регистрация: 21.03.2017
Сообщений: 4
По умолчанию

Появилась ещё одна ошибка: Index выходит за границы массива (вот строка if(b[q]>1)then ) подскажите, пожалуйста из-за чего ошибка и как её исправить?

Код:
var
  c, i, j, x, q: longint;
  a, b: array[1..100000000] of longint;

begin
  
  read(x);
  c := 1;
  for i := 2 to (x div 2) do
  begin
    if (x mod i = 0) then
    begin
      for j := 2 to i div 2 do
      begin
        if (not i mod j = 0) then
        begin
          a[c] := i;
          c := c + 1;
        end;
      end;
    end;
  end;
  
  while(not x = 1) do
  begin
    for i := 1 to c do
    begin
      if(x mod a[i] = 0) then
      begin
        x := (x div a[i]);
        b[i] := b[i] + 1;
      end;
    end;
  end;
  
  for i := 1 to c do
  begin
    q := a[i];
    if(b[q] > 1) then 
    begin
      write(a[i], '^', b[q], '*');
    end;
    if(b[q] = 1) then 
    begin
      write(a[i], '*');
    end;
  end;
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 22.03.2017 в 10:57.
v13 вне форума Ответить с цитированием
Старый 22.03.2017, 11:00   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

значение элемента a[i] которое получает переменная q превышает значение правой границы массива b (100000000)
UPD
точно...что такого елемента с таким индексом в массиве b
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 22.03.2017 в 12:02. Причина: прочитал ответ Serge
Aleksandr H. вне форума Ответить с цитированием
Старый 22.03.2017, 11:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

v13, Вы какую задачу решаете с помощью этого своего кода?


Цитата:
Сообщение от v13 Посмотреть сообщение
Index выходит за границы массива (вот строка if(b[q]>1)then )
Цитата:
Сообщение от v13 Посмотреть сообщение
Код:
q := a[i];
а есть уверенность, что в массиве a находятся только числа, которые находятся в диапазоне от 1 до 100000000 ?
что там не ноль, например?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2017, 13:44   #7
v13
Новичок
Джуниор
 
Регистрация: 21.03.2017
Сообщений: 4
По умолчанию

Вообщем всё исправил всё работает, но долго. как можно сократить или упростить чтобы уложиться в секунду?

Код:
var c,i,j,x,q,k,n:longint;
a,b:array[0..100000000] of longint;

begin

read(x);
c:=1;
n:=0;
for i:=2 to (x div 2) do
begin
  k:=0;
  if (x mod i = 0) then
  begin
  n:=n+1;

    if(i div 2 >=2)then
    begin
      for j:=2 to i div 2 do
      begin
        if(i mod j=0)then
        begin
          k:=k+1;
        end;
      end;
      if (k=0) then
      begin
        a[c]:=i;
        c:=c+1;
      end;
    end;
    if(i div 2 < 2)then
    begin
      a[c]:=i;
      c:=c+1;  
    end;
  
  end;
end;

if(n>0)then
begin
while(x>1) do
begin
  for i:=1 to c-1 do
  begin
    q:=a[i];
    if(x mod q = 0) then
    begin
      x:= (x div q);
      b[q]:=b[q]+1;
    end;
  end;
end;

for i:=1 to c do
begin
  q:=a[i];
  if(b[q]=1)then 
  begin
    write(q);
  end;
  if(b[q]>1)then 
  begin
    write(a[i],'^',b[q]);
  end;
  if(i<(c-1))then write('*');
end;
end else write(x);

end.
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Аватар; 22.03.2017 в 13:59.
v13 вне форума Ответить с цитированием
Старый 22.03.2017, 13:45   #8
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
v13, Вы какую задачу решаете с помощью этого своего кода?
Видимо это задача разложения числа на простые множители и приведение его к каноническому виду.
378 = 2*3^3*7
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите поправить код Demetros Microsoft Office Excel 3 30.08.2015 12:06
Ребят пожалуйста помогите переделать код из си в паскаль Makson Паскаль, Turbo Pascal, PascalABC.NET 2 26.11.2014 21:37
Помогите поправить программу пожалуйста GrafVir Фриланс 4 05.06.2014 13:49
поправить код паскаля, пожалуйста mishammm Помощь студентам 6 29.09.2013 13:43
Помогите поправить код SANTA_KLAUD Общие вопросы Delphi 5 30.05.2008 09:01