Среда, 08.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

подпрограммы Turbo Pascal
HiperДата: Суббота, 26.12.2009, 10:48 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 2
Репутация: 0
Замечания: 0%
Статус: Offline
уже несколько дней сижу ломаю голову...всегда было тяжко с подпрограммами а тут такое....
дано: координаты трёх вершин треугольников
найти: треугольник с наибольшей высотой
язык: Pascal
p.S.: при решение обязательно использование подпрограммы

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

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

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

 
FirefrominsideДата: Понедельник, 28.12.2009, 00:50 | Сообщение # 2
Уже "свой"
Группа: Модераторы
Сообщений: 85
Репутация: 0
Замечания: 0%
Статус: Offline
Поробуй через структуру...
Code

   TPEYgO/lbHuk=record
      kooPDuHaTbl=array[1..2;1..2] of integer; {первые 2 координы-по Х,вторые-по У}
      CToPoHbl:array[1..3] of real;
      PloWaDb:real;
      BblCoTa:real;

Заполняешь, сравниваешь....
Фишка про сравнение площадей не прокатит... Площадь можно сделать большой за счёт расширение или сужения основания=> увеличения или уменьшения высоты....


Большая просьба выкладывать хоть какой-то код Вашей программы.
Это поможет найти общий язык между Вами и нами! =)
И не забываем благодарить за помощь=)
Нужна помощь с задача С++? тебе сюда bc-for-all.ucoz.ru
 
HiperДата: Вторник, 29.12.2009, 08:38 | Сообщение # 3
Новичок
Группа: Пользователи
Сообщений: 2
Репутация: 0
Замечания: 0%
Статус: Offline
а если проводить высоту не с верхней вершины к основанию а с правого бока допустим к левой стороне... по правилам геометрии сторона продливается и туда проводится высота... да и по формулам верно получается верно... ты не мог бы помочь, ни когда не мог писать подпрограммы...просто суть не понимаю.... а за подсказку спасибо еще помучаюсь. прошу прощения что так долго молчал... семейный праздник был.
 
FirefrominsideДата: Среда, 30.12.2009, 08:35 | Сообщение # 4
Уже "свой"
Группа: Модераторы
Сообщений: 85
Репутация: 0
Замечания: 0%
Статус: Offline
Code
Program es;
uses crt;
  A=record  {Наш треугольник}
   K=array[1..3,1..3] of integer; {матрица координат,  строки-наименование координаты,столбцы- к какой точке относится}   
   Dl=array[1..3] of real; массив длин
   Pl:real; спощадь
   
Var B,C,D:A; наши три треугольника
Begin
  for i:=1 to 3 do begin
------------------------------------------------------------
  Writeln('Введи координаты 1-го треугольника');
   for j:=1 to 2 do  
    for k:=1 to 3 do
     readln(B.K[j,k]); ввели координаты   
    B.Dl[1]:=sqrt(sqr(B.K[1.1]-B.K[1.2])+sqr(B.K[2.1]-B.K[2.2]));  \
    B.Dl[2]:=sqrt(sqr(B.K[1.2]-B.K[1.3])+sqr(B.K[2.2]-B.K[2.3])); -- Расчитали стороны
    B.Dl[3]:=sqrt(sqr(B.K[1.1]-B.K[1.3])+sqr(B.K[2.1]-B.K[2.3]));  /
    P:=(B.Dl[1]+B.Dl[2]+B.Dl[3])/2;  нашли полупериметр
    A.Pl:=sqrt(P*(P-B.Dl[1])*(P-B.Dl[2])*(P-B.Dl[3])); нашли площадь
-------------------------------------------------------------
  Writeln('Введи координаты 2-го треугольника');
   for j:=1 to 2 do  
    for k:=1 to 3 do
     readln(C.K[j,k]);
    C.Dl:=sqrt(sqr(C.K[1.1]-C.K[1.2])+sqr(C.K[2.1]-C.K[2.2]));
    B.Dl[1]:=sqrt(sqr(C.K[1.1]-C.K[1.2])+sqr(C.K[2.1]-C.K[2.2]));
    B.Dl[2]:=sqrt(sqr(C.K[1.2]-C.K[1.3])+sqr(C.K[2.2]-C.K[2.3]));
    B.Dl[3]:=sqrt(sqr(C.K[1.1]-C.K[1.3])+sqr(C.K[2.1]-C.K[2.3]));
    P:=(C.Dl[1]+C.Dl[2]+C.Dl[3])/2;
    B.Pl:=sqrt(P*(P-B.Dl[1])*(P-B.Dl[2])*(P-B.Dl[3]));
----------------------------------------------------------------
  Writeln('Введи координаты 3-го треугольника');
   for j:=1 to 2 do  
    for k:=1 to 3 do
     readln(D.K[j,k]);
   D.Dl:=sqrt(sqr(D.K[1.1]-D.K[1.2])+sqr(D.K[2.1]-D.K[2.2]));
   B.Dl[1]:=sqrt(sqr(D.K[1.1]-B.K[1.2])+sqr(D.K[2.1]-B.K[2.2]));
    B.Dl[2]:=sqrt(sqr(D.K[1.2]-D.K[1.3])+sqr(D.K[2.2]-D.K[2.3]));
    B.Dl[3]:=sqrt(sqr(D.K[1.1]-D.K[1.3])+sqr(D.K[2.1]-D.K[2.3]));
    P:=(D.Dl[1]+D.Dl[2]+D.Dl[3])/2;
    D.Pl:=sqrt(P*(P-D.Dl[1])*(P-D.Dl[2])*(P-D.Dl[3]));
  end;

   

Ну а в конце просто сравниваешь площади и выводишь координаты наибольшего!))
Прога сыровата как я не знаю что, если что-то не поймёшь- пиши)


Большая просьба выкладывать хоть какой-то код Вашей программы.
Это поможет найти общий язык между Вами и нами! =)
И не забываем благодарить за помощь=)
Нужна помощь с задача С++? тебе сюда bc-for-all.ucoz.ru
 
Dishik_5Дата: Пятница, 10.09.2010, 00:34 | Сообщение # 5
Новичок
Группа: Пользователи
Сообщений: 2
Репутация: 0
Замечания: 0%
Статус: Offline
а мне кто то может помочь? нужно решить квадратное уравнение ( с всеми условиями что могут бить)
аx^2+bx+c=0
пожалуста помогите)
за рение балгодарен

С уважением Дмитрий.

Сообщение отредактировал Dishik_5 - Пятница, 10.09.2010, 00:34
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;