Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 050

/ вопрос решён /

Здравствуйте! Мне дали задачу:
Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе: - все элементы k столбца нулевые; - элементы k строки матрицы упорядочены по убыванию; - k строка массива симметрична.

Я знаю как создавать матрицу: array [1..2, 1..2] of ineteger;
но я не знаю что такое логический вектор, и вообще ничего не понимаю о чем говориться в этой лабе, помогите мне пожалуйста.

Александр Думов Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Александр Думов (статус: Посетитель)
Вопрос отправлен: 6 апреля 2012, 17:46
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: puporev

Здравствуйте, Александр Думов!
Прилагаю код программы, написанный в Турбо Паскале, но будет работать и в других Паскалях.

Приложение:
  1. uses crt;
  2. const nmax=10;
  3. var a:array[1..nmax,1..nmax] of real;
  4. b,c,d:array[1..nmax] of boolean;
  5. m,n,i,j,k:byte;
  6. begin
  7. clrscr;
  8. repeat
  9.  
  10. readln(n);
  11. until n in [1..nmax];
  12. repeat
  13.  
  14. readln(m);
  15. until m in [1..nmax];
  16.  
  17. for i:=1 to n do
  18. for j:=1 to m do
  19. begin
  20. write('a[',i,',',j,']=');
  21. readln(a[i,j]);
  22. end;
  23. clrscr;
  24.  
  25. for i:=1 to n do
  26. begin
  27. for j:=1 to m do
  28. write(a[i,j]:4:1);
  29. writeln;
  30. end;
  31. writeln;
  32.  
  33. for j:=1 to m do
  34. begin
  35. k:=0;
  36. for i:=1 to n do
  37. if a[i,j]=0 then k:=k+1;
  38.  
  39. end;
  40.  
  41. for i:=1 to m do
  42. write(b[i],' ');
  43. writeln;
  44. writeln;
  45.  
  46. for i:=1 to n do
  47. begin
  48. k:=0;
  49. j:=2;
  50. while(j<=m)and(k=0) do
  51. if a[i,j]>=a[i,j-1] then k:=1
  52. else j:=j+1;
  53.  
  54. end;
  55.  
  56. for i:=1 to m do
  57. write(c[i],' ');
  58. writeln;
  59. writeln;
  60.  
  61. for i:=1 to n do
  62. begin
  63. k:=0;
  64. j:=1;
  65. while(j<=m div 2)and(k=0) do
  66. if a[i,j]<>a[i,m-j+1] then k:=1
  67. else j:=j+1;
  68.  
  69. end;
  70.  
  71. for i:=1 to m do
  72. write(d[i],' ');
  73. readln
  74. end.
  75.  


Ответ отправил: puporev (статус: 2-ой класс)
Время отправки: 6 апреля 2012, 18:11
Оценка за ответ: 5

Комментарий к оценке: спасибо большое, очень помогли! Только что бы разобрать ваш текст пришлось поменять кодировку на UTF-8

Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 8 апреля 2012, 12:54; участников в обсуждении: 3.
puporev

puporev (статус: 2-ой класс), 6 апреля 2012, 18:14 [#1]:

Интересно, у всех каракули вместо русских букв, или только у меня?

6 апреля 2012, 19:17: Статус вопроса изменён на решённый (изменил автор вопроса — Александр Думов)

puporev

puporev (статус: 2-ой класс), 6 апреля 2012, 19:28 [#2]:

Вот код с русскими комментариями
uses crt;
const nmax=10;
var a:array[1..nmax,1..nmax] of real;
    b,c,d:array[1..nmax] of boolean;
    m,n,i,j,k:byte;
begin
clrscr;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Введите элементы матрицы:');
for i:=1 to n do
for j:=1 to m do
 begin
  write('a[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(a[i,j]:4:1);
  writeln;
 end;
writeln;
{построение вектора к первому условию};
for j:=1 to m do
 begin
  k:=0;
  for i:=1 to n do
  if a[i,j]=0 then k:=k+1;
  b[j]:=k=n;{если все ноли=true}
 end;
writeln('Вектор В:');
for i:=1 to m do
write(b[i],' ');
writeln;
writeln;
{построение вектора по второму условию}
for i:=1 to n do
 begin
  k:=0;
  j:=2;
  while(j<=m)and(k=0) do
  if a[i,j]>=a[i,j-1] then k:=1
  else j:=j+1;
  c[i]:=k=0;{если все по убыанию=true}
 end;
writeln('Вектор C:');
for i:=1 to m do
write(c[i],' ');
writeln;
writeln;
{построение вектора по третьему условию}
for i:=1 to n do
 begin
  k:=0;
  j:=1;
  while(j<=m div 2)and(k=0) do
  if a[i,j]<>a[i,m-j+1] then k:=1
  else j:=j+1;
  d[i]:=k=0;{если строка симметрична=true}
 end;
writeln('Вектор D:');
for i:=1 to m do
write(d[i],' ');
readln
end.
Толяныч

Толяныч (статус: 4-ый класс), 7 апреля 2012, 00:57 [#3]:

У всех !
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 8 апреля 2012, 12:54 [#4]:

Кодировка ответа puporev исправлена.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.04 сек.