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


Ответ
 
Опции темы Опции просмотра
Старый 28.02.2014, 00:07   #1 (permalink)
Madara
Member
 
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Интересная задача, Паскаль

Помогите написать программу, совсем не получается(

Разработать алгоритм и внешнюю функцию обработки одномерных массивов, используя единственный цикл.
Разработать головной модуль для отладки составленной внешней функции.
Все параметры индивидуальных задач передавать в функцию через список ее формальных параметров из головного модуля.
При заданных A1,A2,...,An; B1,B2,...,Bn и C1,C2,...,Cn для каждой из n троек вида (Ai,Bi,Ci) проверить, может ли быть построен треугольник со сторонами Ai,Bi,Ci, при этом подсчитать число треугольников и сумму их периметров.

Заранее спасибо)
Madara вне форума   Ответить с цитированием

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

Обратите внимание на этот пост, в нем схожие по содержанию с вашей темы

Паскаль. Задача
Задача Паскаль

Старый 28.02.2014, 11:07   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,838
Сказал(а) спасибо: 316
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Madara Посмотреть сообщение
Интересная задача, Паскаль
А, ничего интересного - так, глупая учебная задачка.
Код:
Const
 n=16;

Var
 A,B,C:Array[1..n] of Real;
 P,Sum_P:Real;
 i,Nt:byte;

Function Per(Q1,Q2,Q3:Real):Real;
var
 b:Boolean;
begin
 b:=(Q1>=0) and (Q2>=0) and (Q3>=0) and
    (Q1<=Q2+Q3) and (Q2<=Q1+Q3) and (Q3<=Q1+Q2);
 if b then Per:=Q1+Q2+Q3 else Per:=-1;
end;

Begin
 Nt:=0;
 Sum_P:=0;
 Randomize;
 For i:=1 to n do
  begin
   A[i]:=Random*10-1.0;
   write(A[i]:8:2);
   B[i]:=Random*10-1.0;
   write(B[i]:8:2);
   C[i]:=Random*10-1.0;
   write(C[i]:8:2);
   P:=Per(A[i],B[i],C[i]);
   if P<0 then
    writeln('    No...')
   else
    begin
     Inc(Nt);
     Sum_P:=Sum_P+P;
     writeln('    Yes!   P= ',P:5:2);
    end;
  end;
 writeln;
 writeln(Nt,' triangulars');
 writeln('Sum of their perimeters is ',Sum_P:0:2);
 Readln
End.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 03.03.2014, 02:48   #3 (permalink)
Madara
Member
 
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Большое спасибо)

Понял как делать)

Переделал без Rindomize и с некоторыми добавлениями.
Может кому пригодится...

PHP код:
Program Perimetr
 
Uses   System;
  Const
          
n=3;

Var
 
A,B,C:Array[1..nof Real;
 
P,Sum_P:Real;
 
i,Nt:byte;
                  
//Функция
Function Per(Q1,Q2,Q3:Real):Real;
  var
    
b:Boolean;
  
begin
    b
:=(Q1>0) and (Q2>0) and (Q3>0) and
    (
Q1<Q2+Q3) and (Q2<Q1+Q3) and (Q3<Q1+Q2);
   if 
b then Per:=Q1+Q2+Q3 else Per:=-1;
end;
           
//Программа
Begin
 Nt
:=0;
 
Sum_P:=0;
 For 
i:=1 to n do
  
begin
   Writeln
('Введите A[i]:');
   
Readln(A[i]);
   
Writeln('Введите B[i]:');
   
Readln(B[i]);
   
Writeln('Введите C[i]:');
   
Readln(C[i]);
   
P:=Per(A[i],B[i],C[i]);
   if 
P<0 then
    writeln
('    Treugolnik postroit nevozmozhno!')
   else
    
begin
     Inc
(Nt);
     
Sum_P:=Sum_P+P;
     
writeln('    Treugolnik postroen. Ego perimetr raven: ',P:5:2);
    
end;
  
end;
 
writeln;
 
writeln('Kolichestvo treugolnikov: 'Nt);
 
writeln('Summa perimetrov: ',Sum_P:0:2);
End
Исправил ошибку
PHP код:
b:=(Q1>0) and (Q2>0) and (Q3>0) and //Сторона треугольника не может быть равна нулю или быть отрицательной
    
(Q1<Q2+Q3) and (Q2<Q1+Q3) and (Q3<Q1+Q2); //Сумма двух сторон должна быть строго больше одной другой стороны 
Ещё раз огромное спасибо)
Madara вне форума   Ответить с цитированием
Старый 03.03.2014, 08:33   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,838
Сказал(а) спасибо: 316
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Madara Посмотреть сообщение
Исправил ошибку
Ну, насчет "ошибки" - я попросил бы... Да, включены также вырожденные треугольники с одной нулевой стороной и двумя другими равными между собой, а также с суммой двух сторон, равной третьей. Площадь таких треугольников нулевая, а вот периметр вполне определенный. Включать или не включать такие треугольники в рассмотрение - дело Ваше, но, повторяю, никакой "ошибки" здесь нет.

Кроме того, ввод данных в Вашей программе не совсем соответствует условию. Ваша программа решает задачу типа "ввести тройку чисел и проверить, могут ли они быть сторонами треугольника, и если да, то...". В задаче же даны массивы, т.е. следовало бы вначале ввести их (все три), а уж потом делать из них выборки по тройкам.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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

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

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

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




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

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