IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Извлечения корня квадратного, Задача на целые числа
barlog
сообщение 4.11.2006 18:20
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: г

Репутация: -  0  +


Нужно было составить программу демонстрирующая извлечения корня квадратного.
Дошёл до такого вот момента
Uses Crt;
Var x,b,z,l,c,r,d,i,u,um:Longint;
    k:byte; s:string;
Begin
 ClrScr;
{------------------------------------------------------}
 TextColor(white);
 GotoXY(15,1); WriteLn('Izvlechenia korna kvadratnogo');
 WriteLn('Vvedite chislo');
 WriteLn('      ЪДДДДДДДД');
 Write('     \і'); ReadLn(x);
 GotoXY(15,4);Write('=');
{------------------------------------------------------}
 for k:=2 to 5 do
  begin
   GotoXY(6,3*k);Write('ДДДДДДДДДДД');
  end;
{------------------------------------------------------}
 str(x,s);
 l:=round(length(s)/2)-1;
 b:=x; z:=1; r:=0;
{------------------------------------------------------}
 while b>=100 do
  begin
   b:=b div 100;
   z:=z*100
  end;
{------------------------------------------------------}
 c:=9;
 while c*c>b do c:=c-1;
 r:=r*10+c;
 d:=c*c;
 x:=x-d*z;   {x=3654321}
 ReadKey; GotoXY(8,5); Write(d);
 ReadKey; GotoXY(16,4); Write(c);
{------------------------------------------------------}
 l:=l-1;         {l=2}
 z:=z div 100;   {z=10000}
 b:=x;            {b=3654321}
 for i:=1 to l do b:=b div 100;    {b=365}
 ReadKey; GotoXY(8,7); Write(b);
 c:=9;
 while (20*r+c)*c>b do c:=c-1;      {c=7}
 r:=r*10+c;                        {r=27}
 u:=r*2-c;                          {u=47}
 um:=u*c;                          {um=47*7=329}
 ReadKey; GotoXY(3,7); Write(u);
 ReadKey; GotoXY(4,8); Write(c);
 ReadKey; GotoXY(8,8); Write(um);
 ReadKey; GotoXY(17,4); Write(c);
{------------------------------------------------------}
 l:=l-1;                          {l=1}
 b:=x;                           {b=3654321}
 b:=b-um*z;                      {b=364321}
 z:=z div 100;                   {z=100}
 for i:=1 to l do b:=b div 100;
 ReadKey; GotoXY(9,10); Write(b); {b=3643}
 c:=9;
 while (20*r+c)*c>b do c:=c-1;
 r:=r*10+c;
 u:=r*2-c;
 um:=u*c;
 ReadKey; GotoXY(3,10); Write(u);
 ReadKey; GotoXY(5,11); Write(c);
 ReadKey; GotoXY(9,11); Write(um);  {3276}
 ReadKey; GotoXY(18,4); Write(c);
{------------------------------------------------------}
 l:=l-1;            {l=0}
 b:=b*z+x mod 100;
 b:=b-um*z;
 z:= z div 100;
 for i:=1 to l do b:=b div 100;
 ReadKey; GotoXY(10,13); Write(b);
 c:=9;
 while (20*r+c)*c>b do c:=c-1;
 r:=r*10+c;
 u:=r*2-c;
 um:=u*c;
 ReadKey; GotoXY(3,13); Write(u);
 ReadKey; GotoXY(6,14); Write(c);
 ReadKey; GotoXY(10,14); Write(um);
 ReadKey; GotoXY(19,4); Write(c);
{------------------------------------------------------}
 b:=b-um;
 ReadKey; GotoXY(11,16); Write(b);
 ReadLn;
End.

Немогу загнать всё это в цикл. Ввожу семизначное число 7654321 и над ним эксперементирую.
Другие семи и восьми значные тоже считает, до запятой.
Надо чтобы и по короче числа брал, вместо того чтобы нули писал в конце.
Может где-то перемудрил. Помогите довести до ума пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
barlog
сообщение 7.11.2006 22:22
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: г

Репутация: -  0  +


Спасибо тебе volvo! Наконец то кто то понял что мне надо. Твоя программа работает при всех возможных числах. Просто задание у нас это было по целым числам, а не по строкам. Вот я тут доделал свою.
В принцепе всё нормально работает, если сможете посмотрите, помоему можно сдавать?!
Код

Uses Crt;
Var x,b,z,l,c,r,d,i,u,um:Longint;
    k:byte; s:string;
Begin
ClrScr;
{------------------------------------------------------}
TextColor(white);
GotoXY(15,1); WriteLn('Izvlechenia korna kvadratnogo');
WriteLn('Vvedite chislo');
WriteLn('        ЪДДДДДДДДД');
Write('       \і'); ReadLn(x);
GotoXY(19,4);Write('=');
{------------------------------------------------------}
str(x,s);
l:=round(length(s)/2)-1;
b:=x; z:=1; r:=0;
{------------------------------------------------------}
for k:=2 to l+2 do
  begin
   GotoXY(8,3*k);Write('ДДДДДДДДДДД');
  end;
{------------------------------------------------------}
while b>=100 do
  begin
   b:=b div 100;
   z:=z*100
  end;
{------------------------------------------------------}
c:=9;
while c*c>b do c:=c-1;
r:=r*10+c;
d:=c*c;
x:=x-d*z;
ReadKey; GotoXY(10,5); Write(d);
ReadKey; GotoXY(20,4); Write(c);
{------------------------------------------------------}
for k:=0 to l-1 do
begin
  l:=l-1;
  z:=z div 100;
  b:=x;
  for i:=1 to l do b:=b div 100;
  ReadKey; GotoXY(10+k,7+3*k); Write(b);
  c:=9;
  while (20*r+c)*c>b do c:=c-1;
  d:=(20*r+c)*c;
  x:=x-d*z;
  r:=r*10+c;
  u:=r*2-c;
  um:=u*c;
  ReadKey; GotoXY(5,7+3*k); Write(u);
  ReadKey; GotoXY(6+k,8+3*k); Write(c);
  ReadKey; GotoXY(10+k,8+3*k); Write(um);
  ReadKey; GotoXY(21+k,4); Write(c);
end;
b:=b-um;
ReadKey; GotoXY(11+k,10+3*k); Write(b);
ReadLn;
End.

Если ничего исправлять не нужно по вашему усмотрению, то тему можно закрыть. Спасибо volvo ещё раз огромное за всё! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 19.09.2025 5:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"