IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Матрицы, многочлены, последовательности
MSDDV
сообщение 2.06.2005 5:18
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  0  +


Из данных 40 задач остался один десяток "мозги высохли" ,
собсно вот они:
приму любые предложения

1.Даны действительное число x, натуральное число
q (0 ≤ x < 1, q ≥ 2). Получить пять цифр q-ичного представления числа х, т. е. получить последовательность целых неотрицательных a(-1), ..., а(-5) такую, что х = a(-1)q^(-1)+…a(-5)q^(-5)+r, 0 ≤ a(-i) ≤ q^(-1), r < q^(-5)

2.Даны действительные числа х(1),…,х(15), y(1),…,y(15), r(1),… r(15). Выяснить, есть ли на плоскости точка, принадлежащая всем кругам c(1),…,c(15), где c(i) имеет центр c координатами х(i) > y(i); и радиус ri (i=1,…,15).

3.Даны действительные числа s,t многочлен Р(х) степени n. Получить многочлен (sх^2 + t) Р(х) + Р'(х), где Р'(х) — производная многочлена Р(х).

4.Даны квадратная матрица A порядка n, векторы x и y с n элементами. Получить вектор A(x+y).

5.Следующий способ предназначен для шифровки последовательностей нулей и единиц (или же, например, точек и тире). Пусть а(1) ..., а(n) — такая последовательность. То, что предлагается в качестве ее шифра,— это последовательность, образованная по следующему закону:

b(1)=a(1) b(i) = 1, если a(i) = a (i -1)
0 в проитивном случае

Пользуясь изложенным способом:
а) зашифровать данную последовательность;
б) расшифровать данную последовательность.

6.Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг
а) своей середины;
б) своего конца;
в) точки, делящей отрезок в отношении 1:3.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.06.2005 8:10
Сообщение #2


Гость






Цитата(MSDDV @ 2.06.05 5:18)
4.Даны квадратная матрица A порядка n, векторы x и y с n элементами. Получить вектор A(x+y).

Что значит A(x+y)? Произведение матрицы на вектор-строку, которая является суммой векторов x и y?

Вектора суммируются поэлементно, перемножение "сцепленных" матриц - здесь: FAQ: Умножение матриц (умножаешь матрицу 1xN на NxN)...

P.S. Название темы поменяй...

Я поменял, но вообще-то пользуйся кнопкой "Правка" под первым сообщением

Сообщение отредактировано: volvo - 2.06.2005 16:43
 К началу страницы 
+ Ответить 
MSDDV
сообщение 9.06.2005 19:29
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  0  +


Сорри за новую тему я эту почему то не заметил. blink.gif
Прошу кого-нибудь посмотреть задачи 1,2,5
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
virt
сообщение 9.06.2005 20:59
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


Код
program MSDDV_5;
const maxn = 1000;
var a,b : array[1..maxn]of boolean;
   n,i,j : integer;
   c : byte;

begin
{encoding}
  n := maxn + 1;
  while n > maxn do
     begin
        write('input length <=',maxn);
        read(n);{read length}
     end;
  for i := 1 to n do
  begin
     read(c);
     a[i] := boolean(c);
  end;
  b[1] := a[1];
  for i := 2 to n do
     b[i] := a[i-1] = a[i];{ = not(a[i-1] xor a[i])}
  for i := 1 to n do
     write(byte(b[i]),' ');
{/encoding}
  writeln;
{decoding}
  fillchar(a,sizeof(a),0);
  a[1] := b[1];
  for i := 2 to n do
     a[i] := a[i-1] xor (not b[i]);
  for i := 1 to n do
     write(byte(a[i]),' ');
{/decoding}
end.


пятая задача.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MSDDV
сообщение 10.06.2005 6:20
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  0  +


Virt Чего-то она не то делает вроде blink.gif , я ничё понять не могу
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 10.06.2005 6:46
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата(MSDDV)
имеет центр c координатами х(i) > y(i);


а это что значит ? то что центры окружностей на плоскости расположены только в точках, где координата X > координаты Y

т.е. в точке [2,1] будет окружность а в [1,2] нет ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.06.2005 10:46
Сообщение #7


Гость






Цитата(MSDDV @ 10.06.05 6:20)
Чего-то она не то делает вроде

Почему не то? Как раз все то... Может ты данные вводишь неверно? Попробуй подкорректировать. Вместо:

for i := 1 to n do begin
read( c );
a[i] := boolean( c );
end;

сделай так:
for i := 1 to n do begin
c := ord(readkey) - 48; write(c, ' ');
a[i] := boolean( c );
end;
writeln;

и у тебя 0 и 1-цы будут читаться сразу по нажатию соответствуюцих цифр на клавиатуре...
 К началу страницы 
+ Ответить 
MSDDV
сообщение 10.06.2005 11:28
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  0  +


блин там с x и y скорее всего косяк, там должно быть наверное, так круг C(i) с координатами (x(i);y(i)). А то и вправду фигня какая-то

А про шифровку и правда правильно было я уже сам разобрался, но всё равно СПАСИБО :yes:

Сообщение отредактировано: MSDDV - 10.06.2005 11:36
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MSDDV
сообщение 11.06.2005 12:09
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  0  +


klem4
я задание подкорректировал если есть мысли то напиши
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.06.2005 18:01
Сообщение #10


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


вот, набрасал, руководствуясь вот этим :

Цитата
X,Y - координаты точки, a,b - координаты центра окружности (x,y), R - радиус

Если точка лежит в окружности - она будет на расстоянии L<=R от центра
вот и проверяем это условие (L=sqrt((X-а)^2+(Y-B)^2))


но что-то не так, где-то ошибка, голова не варит, может ктонить переделает правильно :

Код

{$n+}
uses crt;
var
 x,y,a,b:integer;
 flag:boolean;

function len(xx,aa,yy,bb:integer):boolean;
var l:extended;
begin
  len:=false;
  l:=sqrt(sqr(xx-aa)+sqr(yy-bb));
  if l<=aa then
   len:=true;
end;

Begin

  clrscr;

  for x:=0 to 15 do
   for y:=0 to 15 do begin
      a:=0;
      flag:=true;
      while(a<=15)and(flag) do begin
         b:=0;
         while(b<=15)and(flag) do
          if not(len(x,a,y,b)) then
           flag:=false
          else
           inc(b);
         inc(a);
      end;
      if flag then writeln('x=',x,'   y=',y);
   end;

  readln;
End.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.06.2005 19:03
Сообщение #11


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


ну так нам и надо найти эту точку, а как если не перебором ?
если точка не принадлежит хоть одному из них,то она не подходит.

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

хмм еще можно попроьовать найти область пересечения всех окружностей, наверное это и будет одна точка.

добавлено :
ой) пока отвечал сообещние исчезло, не подумайте, это я не сам с собой разговариваю smile.gif_))

Сообщение отредактировано: klem4 - 11.06.2005 19:04


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2005 9:51
Сообщение #12


Гость






klem4, внимательно читаем задание:
Цитата
Даны действительные числа х(1),…,х(15), y(1),…,y(15), r(1),… r(15). Выяснить, есть ли на плоскости точка, принадлежащая всем кругам c(1),…,c(15) <...>
Где у тебя в программе координаты 15 точек - центров окружностей ??? Я что-то ничего подобного
Var x, y, R: Array[1 .. 15] Of Integer;
в твоей программе не наблюдаю... Тебе же не говорилось, что окружность №1 имеет центром точку (1, 1) и ее радиус = 1, и т.д. Так где же хранятся данные?
 К началу страницы 
+ Ответить 
klem4
сообщение 12.06.2005 11:34
Сообщение #13


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


можно попробовать вот так :
только я не уверен в правильности проверки вхождения точки

Код
{$n+}
uses crt;

const n=3{15};

type

  TRec = record

      x,y,r : integer;
  end;


var

  i,a,b : integer;

 points : array[1..n] of TRec;

   flag : boolean;


function len(xx,yy,aa,bb:integer):boolean;
var

  l:extended;

begin
  len:=false;
  l:=sqrt(sqr(xx-aa)+sqr(yy-bb));
  if l<=aa then len:=true;
end;

Begin

  clrscr;

  for i:=1 to n do
   with points[i] do begin
       write('x='); readln(x);
       write('y='); readln(y);
       write('r='); readln(r);
       clrscr;
   end;

  for a:=0 to n do
   for b:=0 to n do begin
       flag:=true;
       i:=1;
       while(i<=n)and(flag) do
        if not(len(points[i].x,points[i].y,a,b)) then
         flag:=false
        else
         inc(i);

       if flag then
        writeln('x=',a,'  y=',b);
   end;

  readln;

end.





--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2005 11:54
Сообщение #14


Гость






А я бы сделал так:
{$n+}
Uses Crt;
Const
maxX = 640;
maxY = 480;
n = 15;

Type
TRec = Record
X, Y, R: Extended;
End;
Var
Points: Array[1 .. n] Of TRec;

function Dist(A, B: TRec): Extended;
Begin
Dist := Sqrt(Sqr(A.X - B.X)+Sqr(A.Y - B.Y))
End;

Var
T: TRec;
i, a, b: Integer;
Flag: Boolean;

Begin
ClrScr;
For i := 1 To n Do
With Points[i] Do Begin
Write('X='); ReadLn(X);
Write('Y='); ReadLn(Y);
Write('R='); ReadLn( R );
End;

For a:=0 To n Do
For b:=0 To n Do Begin
T.X := a; T.Y := b;
Flag := True;
i := 1;
While (i<=n) and Flag Do Begin
Flag := (Dist(Points[i], T) <= Points[i].R); Inc(i)
End;

If Flag Then Begin
Writeln( 'Да, точка существует...');
Writeln('Специально для преподавателей, дающих некорректные задания:');
Writeln( 'X = ', a, ' Y = ', B ); ReadLn; Halt(100);
End;
End;
WriteLn('Точки не существует... Извините, ВСЁ... Вывести больше нечего !!!');
ReadLn
End.

А то у тебя TRec.R нигде не используется rolleyes.gif
 К началу страницы 
+ Ответить 
klem4
сообщение 12.06.2005 11:56
Сообщение #15


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Да, естественно, это ошибка, в ф-и len, в проверке L<=aa - не правильно, надо сравнивать с радиусом.

на всякий случай :

Len теперь так :

function len(xx,yy,aa,bb,rr:integer):boolean;
var

l:extended;

begin
len:=false;
l:=sqrt(sqr(xx-aa)+sqr(yy-bb));
if l<=rr then len:=true;
end;


в main'e :

if not(len(points[i].x,points[i].y,a,b,points[i].r)) then
flag:=false


Сообщение отредактировано: klem4 - 12.06.2005 12:00


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 12.06.2005 11:57
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Хм... Вы всё немного не так поняли. Там написано:
Цитата
Даны действительные числа х(1),…,х(15), y(1),…,y(15), r(1),… r(15).

С целыми всё было бы проще прстого и задача решалась бы простым перебором.
Я сам сначало с целыми сделал :p1:, потом перечитал и задумался... :ypr:


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 12.06.2005 12:01
Сообщение #17


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Если брать числа вещественными, то это бред, так как еще появится зависимость от точности, ведь можно просматривать точки с шагом 0.1 , а можно с 0.00001 sad.gif

непонятки. blink.gif

Сообщение отредактировано: klem4 - 12.06.2005 12:03


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 12.06.2005 12:04
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Значит подход неверный, хотя, я не могу представить себе что ещё можно сделать...


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.06.2005 12:05
Сообщение #19


Гость






Цитата(Archon @ 12.06.05 11:57)
С целыми всё было бы проще прстого и задача решалась бы простым перебором.


Кстати, если уж на то пошло... Про то, что координаты точки, которая должна принадлежать всем окружностям должны быть вещественными, я в задании ничего не нашел, следовательно решение не является неверным... Вопросы?
 К началу страницы 
+ Ответить 
Archon
сообщение 12.06.2005 12:11
Сообщение #20


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Насколько я знаю, в паскале при возведении в квадрат числа типа integer получается число типа integer. Может возникнуть ошибка переполнения.
Предлагаю использовать числа longint и ограничить максимальный размер числа (их лучше задавать random'ом).

Код

Program MSDDV_2;

Uses
 crt;

const
 MaxX = 319;
 MaxY = 199;
 MinR = 100;
 MaxR = 200;

var
 x, y, r : array [1..15] of longint;
 i, j, k : integer;
 S : boolean;

begin
 TextMode(259);
 Randomize;
 For k := 1 to 15 do
 begin
   x[k] := Random(MaxX+1);
   y[k] := Random(MaxY+1);
   r[k] := Random(MaxR-MinR+1)+MinR;
   Writeln('x[',k:2,']=',x[k]:3,'  y[',k:2,']=',y[k]:3,
           '  r[',k:2,']=',r[k]:3);
 end;
 For i := 0 to MaxX do
   For j := 0 to MaxY do
   begin
     S := true;
     For k := 1 to 15 do
       If sqr(i-x[k])+sqr(j-y[k]) > sqr(r[k]) then
         S := false;
     If S then Write('(',i:3,',',j:3,') ');
   end;
 ReadKey;
end.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 10:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"