Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.08.2015, 12:31   #1 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Улучшение решения задачи про кубы

Подскажите, почему задача после кё запуска долго не завершается, хотя и ответ вывела? А ещё, как улучшить можно? Нужно узнать, можно ли данное число представить в виде суммы кубов трех натуральных чисел.
Код:
program z1;
var m2, i,j,k:integer;
m,m1,s:real;
begin
writeln('VVedite chislo:');
readln(m1);
s:=3;
m:=exp(ln(m1)*s);
m2:=round(m);
for i:=1 to  m2 do 
for j:=1 to  m2 do
for k:=1 to  m2 do
if i*i*i+j*j*j+k*k*k=m1 then begin
writeln( i,' ', j,' ', k);
end;
writeln('nelzia');
end.
Asya_inter вне форума   Ответить с цитированием

Старый 13.08.2015, 12:31
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Обратите внимание на схожие темы - это должно вам помочь

Улучшение параметров усилителя ЛОМО
Улучшение К174УН7

Старый 13.08.2015, 15:11   #2 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
s:=3;
m:=exp(ln(m1)*s);
Здесь так должно быть:
Цитата:
s := 1/3;
m := exp(ln(m1/3) * s);
m2 := round(m);
Asya_inter вне форума   Ответить с цитированием
Старый 13.08.2015, 15:39   #3 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вот что получилось, но можно ли лучше?
Цитата:
program z1;{Нужно узнать, можно ли данное число представить в виде суммы кубов трех натуральных чисел.}

var
m2, i, j, k: integer;
m, m1, s: real;
ok: boolean;

begin
writeln('VVedite chislo:');
readln(m1);
ok:=true;
s := 1/3;
m := exp(ln(m1/3) * s);
m2 := round(m);
for i := 1 to m2 do
for j := 1 to m2 do
for k := 1 to m2 do
if i * i * i + j * j * j + k * k * k = m1 then begin
writeln(m1,'=' , i, '^3+', j, '^3+', k,'^3');
ok:=false;
end;
if ok then begin
write('nelzia');
end;
end.
Asya_inter вне форума   Ответить с цитированием
Старый 13.08.2015, 16:03   #4 (permalink)
Евгений
Member
 
Аватар для Евгений
 
Регистрация: 31.03.2010
Адрес: Тульская область
Сообщений: 1,309
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 13090
По умолчанию

У меня так получилось :

uses crt;
var i,j,t,x,y,z,n,m,p:Longint;
m1:Extended;
begin
ClrScr;
p:=0;
Write('Cislo = '); Readln(n);
m1:=exp(ln(n)/3);
m:=Trunc(m1);
for i:=1 to m do
begin
x:=i*i*i;
if p<>0
then Break
else
for j:=1 to m do
begin
y:=j*j*j;
if p<>0
then Break
else
for t:=1 to m do
begin
z:=t*t*t;
if (x+y+z)=n then
begin
Writeln(i,' ',j,' ',t);
Inc(p);
Break;
end;
end;
end;
end;
if p=0 then Writeln('Nelzja');
ReadKey;
end.
Евгений вне форума   Ответить с цитированием
Старый 13.08.2015, 17:44   #5 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Евгений, спасибо - всё отлично работает!
Asya_inter вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.08.2015, 17:50   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Asya_inter Посмотреть сообщение
Вот что получилось, но можно ли лучше?
Уж не знаю, лучше или нет, но мне нравится больше. По крайней мере, удалось обойтись без вещественных форматов.
Код:
Var
 M,a,b,c,d:Integer;
 T:boolean;

Begin
 Write('M = ');
 Readln(M);
 a:=0;
 repeat
  Inc(a);
  b:=0;
  repeat
   Inc(b);
   c:=0;
   repeat
    Inc(c);
    d:=M-a*a*a-b*b*b-c*c*c;
    T:=(d=0);
   until T or (d<0);
  until T or (b*b*b+a*a*a>M-1);
 until T or (a*a*a>M-2);
 if T then
  writeln('Yes: ',M,' = ',a,'^3 + ',b,'^3 + ',c,'^3')
 else
  writeln('No');
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.08.2015, 18:55   #7 (permalink)
Asya_inter
Member
 
Аватар для Asya_inter
 
Регистрация: 12.01.2015
Сообщений: 71
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, большое спасибо! Очень даже понятно!
Asya_inter вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
free pascal, задача, помощь


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:15.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.