Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2009, 16:25   #1
Nastёna
 
Аватар для Nastёna
 
Регистрация: 09.03.2009
Сообщений: 6
Смущение Задача. Комбинированные типы. Pascal

недавно задали задачку:
Код:
Заданы уравнения трех кривых на плоскости,одно из которых содержит
переменный коэффициент k. Кривые пересекаясь,
ограничивают замкнутую область D, размеры которой зависят от значения коэффициента k.
y=1.4*cos(x+0.25) уравнение 1-ой кривой
y^2=0.5*x            уравнение 2-ой кривой
y=0.2*x-k             уравнение 3-ей кривой, где k от 0.1 до 0.5  и шаг 0.1
Найти все точки попадающие в заданную область.
Задачка простенькая, но загвоздка в том, что координаты точек, которые мы задаем надо представить в виде записи (tochka=record x:real; y:real; ), сами точки в виде массива (vector=array [1..n] of tochka; ), а области, которые у нас должны получится при изменении k в виде множества.
по частям я задачку понимаю, но в целую картину сложить не получается...

Последний раз редактировалось Nastёna; 09.03.2009 в 17:50.
Nastёna вне форума Ответить с цитированием
Старый 10.03.2009, 09:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну приблизительно так:
Есть запись:
Код:
tochka=record x:real; y:real;
Есть ее массив
Код:
vector:array [1..n] of tochka;
И ты проверяеш, ну допустим пока одну формулу:
Код:
for i:=1 to n do begin
 if vector[i].y>=1.4*cos(vector[i].x+0.25) then Точка лежит за этой кривой
end;
Тут только нужно понять как проверять >= или <=, ну и конечно же
(формула)and(формула2)and(формула3) то попадает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.03.2009, 18:13   #3
Nastёna
 
Аватар для Nastёna
 
Регистрация: 09.03.2009
Сообщений: 6
По умолчанию

смотри, вот у меня начало программы выглядит так:

Код:
program 123;
uses crt;
const n=20;                       {максимальное количество точек}
type to4ka=record 
                    x: real;
                    y: real
                end;                 {координаты точек}
       vector= array [1..n] of to4ka; {все точки}
       natural=1..n;                         
       mn=set of natural;                {множесто областей, их по идеи 5}
var A:  vector;
     D:  mn;
     i: integer;
     k,n1: real;
     p1,p2,p3: boolen;
begin 
    writeln ('введите количество точек');
    readln (n1);
       for i:=1 to n do
                        begin
                          writeln ('введите значение абсциссы точки A', i);
                          readln (A[i].x);
                          writeln ('введите значение ординаты точки A', i);
                          readln (A[i].y);
                        end;
p1:=1,4*cos(A[i].x+0,25); p2:=0,2*A[i].x-k; p3:=2*A[i].y^2;
a вот дальше я сомневаюсь в правильности....

Код:
       begin
         k:=0,1;
         for i:=1 to 5 do    {будет 5 разных к от 0,1 до 0,5}
             if A[i].y>=p1 and A[i].y>=p2 and A[i].x<=p3
               then
и вот тут я совсем не знаю что писать....надо чтобы на экране выводилось, что при k=0.1 множеству D принадлежат точки, например A1, A6 и А9, при к=0.2 ..... и так далее. Вот

как выводить множества на печать?

Последний раз редактировалось Stilet; 16.03.2009 в 15:21.
Nastёna вне форума Ответить с цитированием
Старый 16.03.2009, 15:07   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Nastёna
как выводить множества на печать?
На примере:
Код:
uses crt;
var
mn : set of char;
c : char;
begin
clrscr;
mn := ['a','b','f','h','z'];
for c:='a' to 'z' do  
 if c in mn then writeln(c);
readln;
end.
Другого способа я что-то не встречал.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.03.2009, 15:23   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Настя, а причем тут множества?
Это работа с массивами.
Код:
 for i:=1 to 5 do    {будет 5 разных к от 0,1 до 0,5}
             if A[i].y>=p1 and A[i].y>=p2 and A[i].x<=p3
then Writeln(a[i].x,':',a[i].y);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.03.2009, 17:51   #6
Nastёna
 
Аватар для Nastёna
 
Регистрация: 09.03.2009
Сообщений: 6
По умолчанию

спасибо ))) просто у нас препод усложняет нам задачи, чтобы мы научлись работить с разными типами, вот поэтому ответ надо выводить через множества...
Nastёna вне форума Ответить с цитированием
Старый 19.03.2009, 18:16   #7
Sozialist
 
Регистрация: 19.03.2009
Сообщений: 6
По умолчанию

Э.я не понял. Найти все точки с действительными координатами? В области их бесконечное множество, другое дело, если x,y:integer;
Sozialist вне форума Ответить с цитированием
Старый 20.03.2009, 18:20   #8
Nastёna
 
Аватар для Nastёna
 
Регистрация: 09.03.2009
Сообщений: 6
По умолчанию

мы эти точки самостоятельно вводим, и их уже проверяем, попадают или нет
Nastёna вне форума Ответить с цитированием
Старый 21.03.2009, 02:13   #9
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Вопрос по заданию. Отрисовал графики:


И в более мелком масштабе:


Здесь есть три замкнутые области, ограниченные 3мя кривыми. Какую из них считать? Я выбрал ту, что содержит начало координат (в моём решении второй гребень косинуса тоже проходит, хотя не должен, наверное):
Код:
program CombTypes;
uses crt;
const
  n = 20;                            { максимальное количество точек }

type to4ka = record
    x : Real;
    y : Real;
  end;                               { координаты точек }

  vector = array[1 .. n] of to4ka;   { все точки }

  natural = 1 .. n;

  mn = set of natural;               { множество областей, их по идее 5 }

var
  A : vector;
  D : mn;
  i, n1 : Integer;
  k : Real;
  k10 : Integer;
  p1, p2, p3 : Real;
  First : Boolean;

begin
  Write('Введите количество точек: ');
  ReadLn(n1);
  for i := 1 to n1 do
  begin
    Write('Введите значение абсциссы точки A', i, ': ');
    ReadLn(A[i].x);
    Write('Введите значение ординаты точки A', i, ': ');
    ReadLn(A[i].y);
  end;
  for k10 := 1 to 5 do
  begin
    k := k10 / 10;
    D := [];
    for i := 1 to n1 do
    begin
      p1 := 1.4 * cos(A[i].x + 0.25);
      p2 := 2 * Sqr(A[i].y);
      p3 := 0.2 * A[i].x - k;
      if (A[i].y <= p1) and (A[i].x >= p2) and (A[i].y >= p3) then
        Include(D, i);
    end;
    Write('При k = 0.', k10, ', D содержит [');
    First := True;
    for i := 1 to n1 do
    begin
      if i in D then
      begin
        if not First then Write(', ');
        Write('A', i);
        First := False;
      end;
    end;
    WriteLn(']');
  end;
  ReadLn;
end.
Результат:
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 21.03.2009, 22:16   #10
Nastёna
 
Аватар для Nastёna
 
Регистрация: 09.03.2009
Сообщений: 6
По умолчанию

здорово"!!!! ))) а что значит First ??? Это на что мы проверяем?
Nastёna вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] комбинированные типы(задача) Рамик Помощь студентам 7 15.03.2009 17:33
[Pascal] Комбинированные типы Рамик Помощь студентам 4 09.03.2009 18:00
Pascal комбинированные типы Rus 47 Помощь студентам 7 22.02.2009 17:48
Комбинированные типы melikyan Помощь студентам 5 10.02.2009 21:41
Комбинированные типы данных и массивы mar4elo Общие вопросы Delphi 11 01.12.2008 10:41