![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
MSDDV |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Из данных 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. |
volvo |
![]()
Сообщение
#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 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сорри за новую тему я эту почему то не заметил.
![]() Прошу кого-нибудь посмотреть задачи 1,2,5 |
virt |
![]()
Сообщение
#4
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код 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. пятая задача. -------------------- |
MSDDV |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Virt Чего-то она не то делает вроде
![]() |
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата(MSDDV) имеет центр c координатами х(i) > y(i); а это что значит ? то что центры окружностей на плоскости расположены только в точках, где координата X > координаты Y т.е. в точке [2,1] будет окружность а в [1,2] нет ? -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата(MSDDV @ 10.06.05 6:20) Чего-то она не то делает вроде Почему не то? Как раз все то... Может ты данные вводишь неверно? Попробуй подкорректировать. Вместо: for i := 1 to n do begin сделай так: for i := 1 to n do begin и у тебя 0 и 1-цы будут читаться сразу по нажатию соответствуюцих цифр на клавиатуре... |
MSDDV |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
блин там с x и y скорее всего косяк, там должно быть наверное, так круг C(i) с координатами (x(i);y(i)). А то и вправду фигня какая-то
А про шифровку и правда правильно было я уже сам разобрался, но всё равно СПАСИБО :yes: Сообщение отредактировано: MSDDV - 10.06.2005 11:36 |
MSDDV |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
klem4
я задание подкорректировал если есть мысли то напиши |
klem4 |
![]()
Сообщение
#10
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
вот, набрасал, руководствуясь вот этим :
Цитата 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";'
|
klem4 |
![]()
Сообщение
#11
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
ну так нам и надо найти эту точку, а как если не перебором ?
если точка не принадлежит хоть одному из них,то она не подходит. берем точку, и начинаем просматривать круги, если хотябы в один не вошла, берем след. точку, а если во все вошла выводим на экран, хмм еще можно попроьовать найти область пересечения всех окружностей, наверное это и будет одна точка. добавлено : ой) пока отвечал сообещние исчезло, не подумайте, это я не сам с собой разговариваю ![]() Сообщение отредактировано: klem4 - 11.06.2005 19:04 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#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 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
можно попробовать вот так :
только я не уверен в правильности проверки вхождения точки Код {$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";'
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
А я бы сделал так:
{$n+} А то у тебя TRec.R нигде не используется ![]() |
klem4 |
![]()
Сообщение
#15
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Да, естественно, это ошибка, в ф-и len, в проверке L<=aa - не правильно, надо сравнивать с радиусом.
на всякий случай : Len теперь так : function len(xx,yy,aa,bb,rr:integer):boolean; в main'e : if not(len(points[i].x,points[i].y,a,b,points[i].r)) then Сообщение отредактировано: klem4 - 12.06.2005 12:00 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Archon |
![]()
Сообщение
#16
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хм... Вы всё немного не так поняли. Там написано:
Цитата Даны действительные числа х(1),…,х(15), y(1),…,y(15), r(1),… r(15). С целыми всё было бы проще прстого и задача решалась бы простым перебором. Я сам сначало с целыми сделал :p1:, потом перечитал и задумался... :ypr: -------------------- Close the World...txeN eht nepO
|
klem4 |
![]()
Сообщение
#17
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Если брать числа вещественными, то это бред, так как еще появится зависимость от точности, ведь можно просматривать точки с шагом 0.1 , а можно с 0.00001
![]() непонятки. ![]() Сообщение отредактировано: klem4 - 12.06.2005 12:03 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Archon |
![]()
Сообщение
#18
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Значит подход неверный, хотя, я не могу представить себе что ещё можно сделать...
-------------------- Close the World...txeN eht nepO
|
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Цитата(Archon @ 12.06.05 11:57) С целыми всё было бы проще прстого и задача решалась бы простым перебором. Кстати, если уж на то пошло... Про то, что координаты точки, которая должна принадлежать всем окружностям должны быть вещественными, я в задании ничего не нашел, следовательно решение не является неверным... Вопросы? |
Archon |
![]()
Сообщение
#20
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Насколько я знаю, в паскале при возведении в квадрат числа типа 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
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:40 |