| 
        
    
		
			| 
			
        		| 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
 |  |  |