Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 3.
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 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 ]
Модераторы: paradise, KMA
  

Korvet



Новичок


Цитата: Vurdis написал 23 дек. 2009 23:00


2) Дано натуральное число п > 1. Определить длину периода де¬сятичной записи дроби 1/п.



Извините, на Delphi мне проще, а переводить нет сил. Все работает, проверял на многих примерах, кроме непериодичных дробей (не могу такую придумать). Цикл работает до 100, так как вероятность найти больший период если есть, то мала и смысла дальше рассматривать нет. (Самый большой период, что я нашел 22 при n  253

procedure TForm1.Button1Click(Sender: TObject);
var
n,k,i,j:byte;
a,b:array [1..100] of Integer;
h:boolean;
s:String;
begin
s:='';
n:=StrToInt(Edit1.Text); //ввод n
h:=false;
i:=1;
a:=10;
while a<n do
 begin
  inc(i);
  a:=a[i-1]*10;
  b[i-1]:=0;
 end;
b:=a div n;

while i<100 do
 begin
  inc(i);
  a:=(a[i-1] mod n)*10;
  if a=0 then
   begin
    Panel1.Caption:='данная дробь конечна';
    Exit;
   end;
  while a<n do
   begin
    inc(i);
    a:=a[i-1]*10;
    b[i-1]:=0;
   end;
  b:=a div n;
  for j:=1 to i-1 do
   if (a[j]=a)and(b[j]=b)then
    begin

     for k:=1 to i-1 do
      s:=s+IntToStr(b[k]);
     Panel1.Caption:=IntToStr(i-j)+'  0.'+Copy(s,1,j-1)+'('+Copy(s,j,i-1)+')';
//Вывод резултата. период равен здесь i-j, остальное выводит
//дробь вида, например, 0,1(6) для n=6, или 0,(142857) при n=7

     h:=true;
    end;

  if h then exit
   else Panel1.Caption:='данная дробь непериодическая';

 end;
end;

P.S. Если что непонятно, спрашивайте завтра, т.е. днем.

Всего сообщений: 40 | Присоединился: ноябрь 2009 | Отправлено: 24 дек. 2009 3:07 | IP
tim45


Новичок


С помощью оператора while вычислить:
P=1/(2*4*6) * 2/(6*8*10) * ... * 10/(38*42*46)

Всего сообщений: 1 | Присоединился: декабрь 2009 | Отправлено: 24 дек. 2009 11:21 | IP
Korvet



Новичок


Цитата: tim45 написал 24 дек. 2009 11:21

С помощью оператора while вычислить:
P=1/(2*4*6) * 2/(6*8*10) * ... * 10/(38*42*46)




Program tim45;
var
i,k:byte;
p:real;
h:Integer;

begin
 p:=1;
 k:=2;
 i:=1;
 While i<=10 do
  begin
   h:=k*(k+2)*(k+4);
   p:=p*i/h;
   k:=k+4;
   inc(i);
  end;
Writeln(p);
Readln;
end.

Всего сообщений: 40 | Присоединился: ноябрь 2009 | Отправлено: 24 дек. 2009 18:33 | IP
Vurdis



Новичок

Korvet
Спасибо ) Ток я делфи еще не изучал ваще не знаю.. Не трудно будет дак все таки ближе к паскалю бы))

Всего сообщений: 10 | Присоединился: декабрь 2009 | Отправлено: 24 дек. 2009 22:47 | IP
Korvet



Новичок

Как в паскале целочисленный тип преобразовать в строковый?

Всего сообщений: 40 | Присоединился: ноябрь 2009 | Отправлено: 24 дек. 2009 23:40 | IP
Korvet



Новичок

Короче, сообразил. Может оформить нужно было по другому и лишнее не писать, но работает точно. И еще сомневаюсь, существуют ли непериодические дроби.

Program Period;
var
n,k,i,j:byte;
a,b:array [1..100] of Integer;
h:boolean;
s,s2:String;
label 13,12,11;
begin
13:s:='';
Writeln('Vvedite n');
Readln(n);
h:=false;
i:=1;
a:=10;
while a<n do
 begin
  inc(i);
  a:=a[i-1]*10;
  b[i-1]:=0;
 end;
b:=a div n;

while i<100 do
 begin
  inc(i);
  a:=(a[i-1] mod n)*10;
  if a=0 then
   begin
    for k:=1 to i-1 do
     begin
      str(b[k],s2);
      s:=s+s2;
     end;
    Writeln('drob kone4naja 0.',s);
    goto 12;
   end;
  s:='';
  while a<n do
   begin
    inc(i);
    a:=a[i-1]*10;
    b[i-1]:=0;
   end;
  b:=a div n;
  for j:=1 to i-1 do
   if (a[j]=a)and(b[j]=b)then
    begin

     for k:=1 to i-1 do
      begin
       str(b[k],s2);
       s:=s+s2;
      end;
     writeln('perijd= ',i-j,'   0.',Copy(s,1,j-1),'(',Copy(s,j,i-1),')');
     h:=true;
     goto 11;
    end;


 end;
11:if not h then Writeln('drob neperiodi4eskaja');
12:Writeln('povtorit  Da 1, net 0');
Readln(i);
if i=1 then goto 13;

end.

Всего сообщений: 40 | Присоединился: ноябрь 2009 | Отправлено: 25 дек. 2009 0:56 | IP
Vurdis



Новичок

Всем спасибо ))

Всего сообщений: 10 | Присоединился: декабрь 2009 | Отправлено: 26 дек. 2009 0:04 | IP
hiperboloyd



Новичок

уже несколько дней сижу ломаю голову...всегда было тяжко с подпрограммами а тут такое....
дано: координаты трёх вершин треугольников
найти: треугольник с наибольшей высотой
язык: Pascal
p.S.: при решение обязательно использование подпрограммы

буду безумно признателен сердечно если кто-то знающий решится помочь..

соображения:
предлагаю взять только две координаты для сокращения вычислений (x,y)
мой алгоритм который показался мне рациональным для реализации ( жаль только реализовать не могу в связи со скудными знаниями процедур и функций)
1.ввод количества треугольников (ограничим 2 -5)
2. ввод всех координат (каким образом вводить не придумал...хотя есть догадки: вводим все координаты для первого треугольника затем ищем периметр...запоминаем, потом для второго и т.д., т.е. сохраняем только периметр в ячейку..)
3. вычисление длинн всех сторон Dlina1:=sqrt(sqr(x1-x2)+sqr(y1-y2)); {из координат конца вектора вычесть координаты начала}
4.вычисление периметра треугольника. (его вычислять не просили, но исходя из математических формул чем больше периметр тем больше площадь, а площадь= (основание*высоту)/2, т.е. высота=2площади/основание=> чем больше площадь тем больше высот)
5.вводим координаты второго треугольника..третьего...и т.д. вычисляя их периметры
6. сравниваем.
7. вывод ответа

Заранее спасибо! просто нет сил уже, и сроки поджимают. до НГ((((((

Всего сообщений: 3 | Присоединился: декабрь 2009 | Отправлено: 26 дек. 2009 4:36 | IP
Korvet



Новичок

Если у треугольника с максимальным периметром действительно наибольшая высота, то, наверное, можно как-то так.

Program Vysota;
var
n,nummax,k,i:byte;
p:array [1..5] of Real;
x,y:array [1..3] of Real;
pmax:Real;

procedure vvod;
begin
for i:=1 to 3 do
begin
 Writeln('Vvedite x',i);
 Readln(x);
 Writeln('Vvedite y',i);
 Readln(y);
end;
end;

function perimetr:Real;
var
m:Real;
begin
m:=0;
for i:=1 to 3 do
 begin
  m:=m+sqrt(sqr(x-x[(i+1)mod 3])+sqr(y-y[(i+1)mod 3]));
 end;
perimetr:=m;
end;

begin
Writeln('vvedite koli4estvo treugolnikov');
Readln(n);
for k:=1 to n do
 begin
  Writeln('treugolnik nomer ',k);
  vvod;
  p[k]:=perimetr;
 end;
pmax:=p[1];
nummax:=1;
for k:=2 to n do
 if p[k]>pmax then
  begin
   pmax:=p[k];
   nummax:=k;
  end;
Writeln('max vysota u treugolnika nomer ',nummax);
Readln;

end.

Всего сообщений: 40 | Присоединился: ноябрь 2009 | Отправлено: 26 дек. 2009 20:00 | IP
eraser


Новичок

Срочно нужна помощь.
Задача: Дана строка. С помощью очереди вывести в порядке следования сначала цифры, потом знаки припенания, и в конце все остальные символы строки.
Помогите плиз. Нужен полностью весь текст проги

Всего сообщений: 2 | Присоединился: декабрь 2009 | Отправлено: 27 дек. 2009 16:37 | IP

Отправка ответа:
Имя пользователя   Вы зарегистрировались?
Пароль   Забыли пароль?
Сообщение

Использование HTML запрещено

Использование IkonCode разрешено

Смайлики разрешены

Опции отправки

Добавить подпись?
Получать ответы по e-mail?
Разрешить смайлики в этом сообщении?
Просмотреть сообщение перед отправкой? Да   Нет
 

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 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 ]

Форум работает на скрипте © Ikonboard.com