18.04.2015, 19:05 | #1 (permalink) |
Ученик
Регистрация: 27.06.2011
Сообщений: 435
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 631
|
Паскаль. Помогите с кодом пожалуйста для четырёх маленьких программ
Вот задания для программ, и если можно то хоть с маленькими комментариями... Спасиба за ранее ребят. 1 задание) найти площадь круга с использованием процедуры и функции. 2) найти наиб.общий делитель и наим.общее кратное (для любого числа). 3) найти 1!+2!+...+n! 4) упорядочить значения трёх переменных a,b и c в порядке их убывания. Спасибо большое кто откликается и помогает! |
18.04.2015, 19:05 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Подскажу вам, что решение проблемы может крыться в аналогичных обсуждениях Паскаль. Решение четырёх взаимосвязанных задач Помогите, пожалуйста, решить. Паскаль Помогите, пожалуйста, решить. Паскаль |
18.04.2015, 20:47 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да ладно, сделаем, не переживай. Вот только...О каком Паскале речь? Turbo/Free? ABC? Это очень важно, по крайней мере для третьей задачи.Просто по формуле S=πR²?Не понял... Что значит "для любого числа"? Вероятно, "для любой пары чисел"? Потому что и для НОК, и для НОД чисел нужно как минимум два.
|
18.04.2015, 22:11 | #5 (permalink) |
Ученик
Регистрация: 27.06.2011
Сообщений: 435
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 631
|
И да для пары чисел пожалуйста . спасиба
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
19.04.2015, 09:31 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Комментировать тут, по-моему, нечего.
Код:
Var R,S:Real; Function Sq_C(Ro:Real):Real; begin Sq_C:=Ro*Ro*Pi; end; Procedure Sq_Crc(Ro:Real; var S_C:Real); begin S_C:=Ro*Ro*Pi; end; Begin Write('R = '); Readln(R); Sq_Crc(R,S); Writeln('Procedure: S = ',S:0:3); Writeln(' Function: S = ',Sq_C(R):0:3); Readln End. |
19.04.2015, 10:17 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Код:
Var m,n,p,GCD:LongInt; {формат Longint выбран потому, что в программе будет использоваться произведение чисел m и n} Function Min(p,q:LongInt):LongInt; {вспомогательная функция поиска минимального из двух чисел} begin if p>q then Min:=q else Min:=p; end; Function Find_GCD(p,q:LongInt):LongInt; {Ищем Наибольший Общий Делитель (Greatest Common Divisor) двух чисел. Алгоритм таков: проверяем делимость бОльшего числа на меньшее, и в случае отрицательного результата в цикле отнимаем от меньшего по единичке до тех пор, пока не окажется, что оба исходных числа делятся на полученное. Делимость проверяется по равенству нулю остатка от деления.} var i:LongInt; begin i:=Min(p,q)+1; repeat i:=i-1; until ((p mod i)=0) and ((q mod i)=0); Find_GCD:=i; end; Begin Repeat {Цикл организован для проверки выполнения условия строгой положительности вводимых чисел} Write('m = '); Readln(m); Write('n = '); Readln(n); if (m<=0) or (n<=0) then writeln('Both numbers must be positive!!!'); Until (m>0) and (n>0); GCD:=Find_GCD(m,n); Writeln('Greatest Common Divisor = ',GCD); {Для поиска Наибольшего Общего Кратного используется теорема о том, что произведение НОД и НОК равно произведению самих чисел.} Writeln(' Least Common Multiple = ',(m*n div GCD)); Readln End. |
19.04.2015, 10:46 | #9 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Тут есть такая закавыка.
Дело в том, что факториал - очень быстро возрастающая функция. Отсюда сразу вытекает ограничение на параметр n. Так вот, если Ваш Паскаль поддерживает восьмибайтовый формат QWord (максимальное число - 18446744073709551615), то наибольшее n составляет 20. Если же не поддерживает - придется ограничиться четырехбайтовым LongInt (2147483647), и тогда наибольшее n есть 12. На всякий случай выкладываю оба варианта: Код:
Var n,i:Byte; a,Sum:QWord; Begin Repeat Write('n = '); Readln(n); if n>20 then writeln('Too big!!! Must be <=20'); Until n<21; a:=1; Sum:=0; for i:=1 to n do begin a:=a*i; Sum:=Sum+a; end; Writeln('Sum = ',Sum); Readln End. Код:
Var n,i:Byte; a,Sum:LongInt; Begin Repeat Write('n = '); Readln(n); if n>12 then writeln('Too big!!! Must be <=12'); Until n<13; a:=1; Sum:=0; for i:=1 to n do begin a:=a*i; Sum:=Sum+a; end; Writeln('Sum = ',Sum); Readln End. |
19.04.2015, 11:07 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Тут есть куча способов. Например, так. Поясняю:
1. Введены вспомогательные функции поиска максимума двух (Max2) и (Max3) чисел. 2. Из трех введенных ищется максимальное. 3. Если это не первое из них (а), то путем обмена переменной а присваивается максимальное значение, а бывшей максимальной (b или c) - старое значение переменной а. 4. Делается аналогичная манипуляция по двум оставшимся переменным (b и c). Код:
Var a,b,c,d,m:Real; Function Max2(q1,q2:real):real; begin if q1>q2 then Max2:=q1 else Max2:=q2; end; Function Max3(q1,q2,q3:real):real; var p:real; begin p:=max2(q1,q2); if p>q3 then Max3:=p else Max3:=q3; end; Begin Write('a = '); Readln(a); Write('b = '); Readln(b); Write('c = '); Readln(c); m:=Max3(a,b,c); if m=b then begin d:=a; a:=b; b:=d; end; if m=c then begin d:=a; a:=c; c:=d; end; m:=Max2(b,c); if m=c then begin d:=b; b:=c; c:=d; end; Writeln(a:0:3,' ',b:0:3,' ',c:0:3); Readln End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|