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


Ответ
 
Опции темы Опции просмотра
Старый 18.04.2015, 19:05   #1 (permalink)
Рома123
Ученик
 
Аватар для Рома123
 
Регистрация: 27.06.2011
Сообщений: 435
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 631
По умолчанию Паскаль. Помогите с кодом пожалуйста для четырёх маленьких программ

Парни, девушки помогите пожалуйста с кодом на паскале. АПытаюсь учить Паскаль , но пока плохо разбираясь очень...а программы нужно сделать уже ко вторнику.
Вот задания для программ, и если можно то хоть с маленькими комментариями... Спасиба за ранее ребят.
1 задание) найти площадь круга с использованием процедуры и функции.
2) найти наиб.общий делитель и наим.общее кратное (для любого числа).
3) найти 1!+2!+...+n!
4) упорядочить значения трёх переменных a,b и c в порядке их убывания.

Спасибо большое кто откликается и помогает!
Рома123 вне форума   Ответить с цитированием

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

Подскажу вам, что решение проблемы может крыться в аналогичных обсуждениях

Паскаль. Решение четырёх взаимосвязанных задач
Помогите, пожалуйста, решить. Паскаль
Помогите, пожалуйста, решить. Паскаль

Старый 18.04.2015, 20:47   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Да ладно, сделаем, не переживай. Вот только...
Цитата:
Сообщение от Рома123 Посмотреть сообщение
Парни, девушки помогите пожалуйста с кодом на паскале.
О каком Паскале речь? Turbo/Free? ABC? Это очень важно, по крайней мере для третьей задачи.
Цитата:
Сообщение от Рома123 Посмотреть сообщение
1 задание) найти площадь круга с использованием процедуры и функции.
Просто по формуле S=πR²?
Цитата:
Сообщение от Рома123 Посмотреть сообщение
2) найти наиб.общий делитель и наим.общее кратное (для любого числа).
Не понял... Что значит "для любого числа"? Вероятно, "для любой пары чисел"? Потому что и для НОК, и для НОД чисел нужно как минимум два.
Vladimir_S вне форума   Ответить с цитированием
Старый 18.04.2015, 22:08   #3 (permalink)
Рома123
Ученик
 
Аватар для Рома123
 
Регистрация: 27.06.2011
Сообщений: 435
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 631
По умолчанию

Турбо Паскаль
Рома123 вне форума   Ответить с цитированием
Старый 18.04.2015, 22:10   #4 (permalink)
Рома123
Ученик
 
Аватар для Рома123
 
Регистрация: 27.06.2011
Сообщений: 435
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 631
По умолчанию

Да.да.. Просто по формуле s=πр^2
Рома123 вне форума   Ответить с цитированием
Старый 18.04.2015, 22:11   #5 (permalink)
Рома123
Ученик
 
Аватар для Рома123
 
Регистрация: 27.06.2011
Сообщений: 435
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 631
По умолчанию

И да для пары чисел пожалуйста . спасиба
Рома123 вне форума   Ответить с цитированием
Ads

Яндекс

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

Сегодня уже не буду, завтра с утра нарисую.
Vladimir_S вне форума   Ответить с цитированием
Старый 19.04.2015, 09:31   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Рома123 Посмотреть сообщение
1 задание) найти площадь круга с использованием процедуры и функции.
Комментировать тут, по-моему, нечего.
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 19.04.2015, 10:17   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Рома123 Посмотреть сообщение
2) найти наиб.общий делитель и наим.общее кратное (для любого числа).
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 19.04.2015, 10:46   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Рома123 Посмотреть сообщение
3) найти 1!+2!+...+n!
Тут есть такая закавыка.
Дело в том, что факториал - очень быстро возрастающая функция. Отсюда сразу вытекает ограничение на параметр 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 19.04.2015, 11:07   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Рома123 Посмотреть сообщение
4) упорядочить значения трёх переменных a,b и c в порядке их убывания.
Тут есть куча способов. Например, так. Поясняю:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

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

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




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

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