Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 06.05.2009
Сообщений: 3

Преобразование множества прямых линий

06.05.2009, 09:32. Показов 2577. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить задачи!!!!!!!!!!!!!!!
ЗАДАЧА 1. Преобразование квадратной матрицы
Выполнить над квадратной матрицей А порядка n последовательность действий, указанную в задании.
Задание 1.10.
а) Вычесть из А единичную матрицу;
б) сформировать диагональную матрицу С из элементов, которые определяются как суммы элементов столбцов полученной матрицы;
в) найти след матрицы С.

ЗАДАЧА 2. Преобразование прямоугольной матрицы
Выполнить над прямоугольной матрицей В размером m х n последовательность действий, указанную в задании.
Задание 2.15.
а) Заменить заданным вектором строки В, которые содержат хотя бы один отрицательный элемент;
б) в полученной матрице вычислить суммы элементов строк, номера которых не являются элементами заданного целочисленного вектора.

ЗАДАЧА 3. Преобразование множества прямых линий
Множество прямых М задано коэффициентами их уравнений вида Ах + Вy + C = 0. Выполнить над М последовательность действий, указанную в задании.
Задание 3.4.
а) Выбрать из M все пары параллельных прямых;
б) вычислить расстояния между параллельными прямыми;
в) сформировать множество P  M, включающее в себя только прямые, расстояния между которыми меньше заданной величины.

ЗАДАЧА 4. Обработка текстов
Задан текст, состоящий из строк произвольной длины. Строки разделяются одним или несколькими символами, называемыми разделителями. Разделители одинаковы для всего текста. Текст заканчивается комбинацией двух специальных символов, отличных от разделителя.
Задание 4.5.
а) Определить, считая от начала текста, координаты (номер строки и номер символа в строке) символов, которые задаются в исходных данных;
б) сформировать новый текст, состоящий из строк заданного текста, в каждой из которых любой из заданных символов встречается не более одного раза.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2009, 09:32
Ответы с готовыми решениями:

Преобразование множества прямых линий
а) Сформировать множество P Í M, включающее в себя только прямые, параллельные оси Y; б) вычислить расстояния от этих прямых до оси Y; ...

Преобразование множества прямых линий
Народ горю, очень нужна помощь программистов, очень нужно решить эту задачу, знаю что у вас и так очень мало свободного времени, если...

Могут ли на экране высвечиваться одновременно отрезки прямых линий разных цветов?
Могут ли на экране высвечиваться одновременно отрезки прямых линий разных цветов?

14
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.05.2009, 17:14
№1.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
uses crt;
var a,c:array[1..20,1..20] of integer;
    n,i,j,s:integer;
begin
clrscr;
randomize;
write('Размерность матрицы n=');
readln(n);
writeln('Исходная матрица А:');{создаем матрицу}
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(10)+5;
    write(a[i,j]:4);
   end;
  writeln;
 end;
writeln('Матрица А=А-Е:');{вычитаем единичную}
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    if i=j then a[i,j]:=a[i,j]-1;
    write(a[i,j]:4);
   end;
  writeln;
 end;
writeln('Матрица C:');{создаем С}
for j:=1 to n do
 begin
  s:=0;
  for i:=1 to n do
  s:=s+a[i,j]; {считаем сумму в столбце}
  c[j,j]:=s;{записываем на диагональ}
 end;
s:=0; {считаем след}
for i:=1 to n do
s:=s+c[i,i];
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    if i<>j then c[i,j]:=0;{если не на диагонали, то 0}
    write(c[i,j]:4);
   end;
  writeln;
 end;
write('След матрицы С=',s);
readln
end.
Добавлено через 8 минут 18 секунд
Если успели списать, то сделайте это снова, я забыл про след матрицы, сейчас поправил.

Добавлено через 39 минут 2 секунды
№2.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
uses crt;
var b:array[1..20,1..20] of integer;
    v:array[1..20] of integer;
    m,n,i,j,s,k,l:integer;
begin
clrscr;
randomize;
write('Количество строк m=');
readln(m);
write('Количество столбцов n=');
readln(n);
writeln('Исходная матрица B:');{создаем матрицу}
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    b[i,j]:=random(11)-1;
    write(b[i,j]:4);
   end;
  writeln;
 end;
writeln('Вектор V:');
for i:=1 to n do{создаем вектор}
 begin
  v[i]:=random(10);
  write(v[i]:4);
 end;
writeln;
writeln('Измененная матрица В:');
for i:=1 to m do
 begin
  s:=0;
  for j:=1 to n do
  if b[i,j]<0 then s:=s+1;{если в строке есть отрицательные, считаем}
  if s>0 then{если есть}
  for k:=1 to n do
  b[i,k]:=v[k];{заменяем строку вектором}
 end;
for i:=1 to m do
 begin
  for j:=1 to n do
  write(b[i,j]:4);{выводим измененную матрицу}
  writeln;
 end;
for i:=1 to m do
 begin
  k:=0;
  for j:=1 to n do
  if i=v[j] then k:=k+1;{если номер строки есть в векторе, считаем}
  if k=0 then{если не оказалось}
   begin
    s:=0;
    for l:=1 to n do
    s:=s+b[i,j];{считаем сумму в этой строке}
    writeln('Сумма в строке ',i,'=',s);
   end;
 end;
readln
end.
Добавлено через 4 часа 20 минут 6 секунд
№3.
Программа работает вроде нормально, но надо потестировать на сравнительно большом количестве прямых. Если будут проблемы, приведите результаты неудачных тестов, а именно вводимые данные и результат.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
uses crt;
type
Line=record{тип запись линия, поля-коэффициенты}
     a,b,c:integer;
     end;
function Rasst(l1,l2:Line):real;{вычисление расстояний между параллельными прямыми}
var a,x:real;
begin
if (l1.a=0)and(l2.a=0)then Rasst:=abs(-l1.c/l1.b+l2.c/l2.b){параллельно оси Х}
else if (l1.b=0)and(l2.b=0)then Rasst:=abs(-l1.c/l1.a+l2.c/l2.a){параллельно оси У}
else{все остальные}
 begin
  a:=arctan(-l1.a/l1.b);
  x:=abs(l1.c-l2.c)*sin(a);
  Rasst:=sqrt(sqr(abs(l1.c-l2.c))-sqr(x));
 end;
end;
var
m,p:array[1..50] of Line;
n,i,k,j,r:integer;
begin
clrscr;
write('Количество прямых n=');
readln(n);
writeln('Введите коэффициенты прямых:');
for i:=1 to n do
 begin
  write('a[',i,']=');readln(m[i].a);
  write('b[',i,']=');readln(m[i].b);
  write('c[',i,']=');readln(m[i].c);
 end;
clrscr;
writeln('Коэффициенты уравнений:');
write('№');
for i:=1 to n do
write(i:4);
writeln;
writeln;
write('A');
for i:=1 to n do
write(m[i].a:4);
writeln;
write('B');
for i:=1 to n do
write(m[i].b:4);
writeln;
write('C');
for i:=1 to n do
write(m[i].c:4);
writeln;
writeln('Пары параллельных прямых:');
k:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if m[i].a*m[j].b=m[j].a*m[i].b then{признак параллельности}
 begin
  k:=1;
  write('№',i,' a=',m[i].a,' b=',m[i].b,' c=',m[i].c);
  writeln('  №',j,' a=',m[j].a,' b=',m[j].b,' c=',m[j].c);
  writeln('Расстояние=',Rasst(m[i],m[j]):0:2);
 end;
write('Введите максимальное расстояние:');
readln(r);
k:=0;
for i:=1 to n do
for j:=1 to n do
if (i<>j)and(m[i].a*m[j].b=m[j].a*m[i].b)and(Rasst(m[i],m[j])<r) then
 begin
  k:=k+1;
  p[k]:=m[i];
 end;
writeln('Множество Р:');
for i:=1 to k do
writeln('№',i,' a=',p[i].a,' b=',p[i].b,' c=',p[i].c);
readln
end.
1
0 / 0 / 0
Регистрация: 06.05.2009
Сообщений: 3
07.05.2009, 06:56  [ТС]
Большое спасибо!!!! Вы умница!!!!!!! Вот бы еще 4 задачу и я спасена
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
07.05.2009, 06:59
Четвертую я что-то не догоняю, их, таких, здесь три или 4 штуки похожих . Что-то нет добровольцев решать. Условие какое-то не конкретное.
1
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
22.05.2009, 15:05
Рарешите задам пару вопросов по второй задаче:как подправить код, чтобы прога действовала так:появлялась бы надпись матрица не изменена в случае если нету отрицательных элементов(и чтобы после этой надписи ничего не было), и отображалась сумма элементов только изменённой строки .
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
22.05.2009, 15:28
в случае если нету отрицательных элементов(и чтобы после этой надписи ничего не было), и отображалась сумма элементов только изменённой строки .
Если отрицательных в матрице не будет, то откуда возьмется измененная строка? А вообще как-то так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
writeln('Измененная матрица В:');
p:=0;
for i:=1 to m do
 begin
  s:=0;
  for j:=1 to n do
  if b[i,j]<0 then s:=s+1;{если в строке есть отрицательные, считаем}
  if s>0 then{если есть}
     begin
       p:=1;
      for k:=1 to n do
      b[i,k]:=v[k];{заменяем строку вектором}
    end;
 end;
if p=0 then writeln('В матрице нет отрицательных!');
1
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
22.05.2009, 15:47
Puporev, так как в случае если нету отрицательных элементов надпись ('Измененная матрица В:') не появлялась, вместо неё было бы ('В матрице нет отрицательных!') и на этом всё заканчивалось.
Чтобы прога действовала наподобие этого:
Pascal
1
2
3
4
5
6
7
B:
    1    1
    1    1
    2    2
V:
    1    1
В матрице нет отрицательных!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
22.05.2009, 17:10
в случае если нету отрицательных элементов
Тогда рандомный ввод надо заменить на ввод с клавиатуры, иначе очень мало шансов получить матрицу без отрицательных чисел, разве что брать размер 2х2, тогда вероятность выше.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
uses crt;
var b:array[1..20,1..20] of integer;
    v:array[1..20] of integer;
    m,n,i,j,s,k,l,p:integer;
begin
clrscr;
randomize;
write('Количество строк m=');
readln(m);
write('Количество столбцов n=');
readln(n);
writeln('Исходная матрица B:');{создаем матрицу}
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    b[i,j]:=random(11)-1;
    write(b[i,j]:4);
   end;
  writeln;
 end;
writeln('Вектор V:');
for i:=1 to n do{создаем вектор}
 begin
  v[i]:=random(10);
  write(v[i]:4);
 end;
writeln;
p:=0;
for i:=1 to m do
 begin
  s:=0;
  for j:=1 to n do
  if b[i,j]<0 then s:=s+1;{если в строке есть отрицательные, считаем}
  if s>0 then{если есть}
   begin
    p:=1;
    for k:=1 to n do
    b[i,k]:=v[k];{заменяем строку вектором}
   end;
 end;
if p=0 then
  begin
   write('В матрице нет отрицательных элементов!');
   readln;
   exit;
  end;
writeln('Измененная матрица В:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(b[i,j]:4);{выводим измененную матрицу}
  writeln;
 end;
for i:=1 to m do
 begin
  k:=0;
  for j:=1 to n do
  if i=v[j] then k:=k+1;{если номер строки есть в векторе, считаем}
  if k=0 then{если не оказалось}
   begin
    s:=0;
    for l:=1 to n do
    s:=s+b[i,j];{считаем сумму в этой строке}
    writeln('Сумма в строке ',i,'=',s);
   end;
 end;
readln
end.
1
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
23.05.2009, 12:49
Puporev, цикл подсчета суммы элементов строки некорректно работает:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Количество строк m=3
Количество столбцов n=3
Исходная матрица B:
           6  4   2
           8  2   3
           9 -1 -1 
Вектор V:
           0  6   6
Измененная матрица В:
           6  4   2
           8  2   3
           0  6   6
Сумма в строке 1=6
Сумма в строке 2=9 
Сумма в строке 3=18
А должно быть:
Pascal
1
2
3
 
Сумма в строке 1=12
Сумма в строке 2=13
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2009, 13:41
Puporev, цикл подсчета суммы элементов строки некорректно работает:
А я тут при чем? У меня все работало, у того, для кого я писал программу, тоже.
А что Вы там наделали своими кривыми ручонками, откуда я знаю. Это теперь Ваши проблемы. Меня эта прога больше не интересует, и пожалуйста без претензий, решайте сами.
0
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
23.05.2009, 18:43
Puporev, я твою программу скопировал символ в символ, за исключением надписей(их я переделал в латинский транслит) и комментариев. Вот разжился циклом подсчёта суммы, убрав переменную l, но добавив переменную flag: boolean;
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for i:=1 to m do
begin
  flag:=false;
 
  for j:=n downto 1 do
  begin
    if V[j] = i then
    begin
      flag:=true;
      break
    end;
  end;
 
  if not flag then
  begin
    s:=0;
 
    for k:=n downto 1 do
    begin
      s:=s+B[i][k];
    end;
 
    writeln('stroka #', i, ' summa: ', s)
  end;
end;
Правда цикл подсчитывает суммы элементов во всех строках.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2009, 18:58
Прошу прощения, в строке
s:=s+b[i,j];{считаем сумму в этой строке}вместо j надо l
1
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
31.05.2009, 21:50
Что надо добавить, что если m и n меньше или равно 0, то выводилась строка вроде "неверные входные данные" и действие проги оканчивалось как в случае, если все элементы матрицы положительные.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
31.05.2009, 22:09
А зачем тебе это? Что, после каждого неверного ввода размера матрицы снова прогу запускать?
Лучше уж так.
Объявить максимальный размер матрицы
const nmax=20;
...............................
Потом вводить размеры
Pascal
1
2
3
4
5
6
7
8
9
10
repeat
write('Количество строк m=');
readln(m);
if not m in [1..nmax] then writeln('Недопустимое значение! Повторите ввод.');
until m in [1..nmax];
repeat
write('Количество столбцов n=');
readln(n);
if not m in [1..nmax] then writeln('Недопустимое значение! Повторите ввод.');
until m in [1..nmax];
1
Moloh1349
11.05.2010, 20:52
Puporev, пожалуйста, не могли бы вы рассмотреть 4 задачу?) Если слишком много, подкиньте хотя бы идею - у меня просто таковых ноль.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2010, 20:52
Помогаю со студенческими работами здесь

Ветвление. Даны уравнения прямых. Выяснить, какие из этих прямых параллельны
Написать программу: Даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых параллельны и указать, если...

Преобразование множества прямых линий
Народ помогите с кодом я не очень понял. Вот задание : Множество прямых М задано коэффициентами их уравнений вида Ах + Вy + C = 0. ...

Преобразование множества прямых линий
Множество прямых М задано коэффициентами их уравнений вида Ах + Вy + C = 0. Выполнить над М последовательность действий, указанную в...

Преобразование множества прямых линий
Преобразование множества прямых линий. Множество прямых М задано коэффициентами их уравнений вида Ах + Вy + C = 0. Выполнить над М...

Графики прямых линий
Используя графический режим работы монитора запрограммировать решение следующих задач: 1. Известны координаты двух точек экрана....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru