197 / 9 / 3
Регистрация: 30.04.2016
Сообщений: 733
1

В массиве К(5, 5) заменить элементы, стоящие ниже главной диагонали нулями

17.03.2017, 20:54. Показов 978. Ответов 7
Метки нет (Все метки)

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CLS
DIM X(5, 5)
  FOR i = 1 TO 5
     FOR j = 1 TO 5
   X(I, j) = INT(RND(i) * 20)
   LOCATE X(i * 2, j * 4)
    PRINT X(i, j);
NEXT j, i
     PRINT
FOR i = 1 TO 2
   FOR j = 1 TO 1
     X(i, 1) = 0
    PRINT “     “ ;  X(i, j);
NEXT j, i
    PRINT
FOR i = 1 TO 3
   FOR j = 1 TO 1
     X(Ii, 2) = 0
    PRINT  “     “ ;  X(i, 1);
NEXT j, i
14 10 11 5 6
15 0 15 16 14
0 8 17 15 4
19 17 1 18 7
10 15 1 11 4
0 0
0 0 0

Похоже, задачка мудрёная. Попробовал нулей пробных нарисовать. Но ведь это не то. Должен нижний треугольник массива по диагонали превратиться в нули. У вас – то должно
получиться.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2017, 20:54
Ответы с готовыми решениями:

Заменить нулями все элементы матрицы, расположенные ниже главной диагонали
Ввести квадратную матрицу В(k,k). Заменить нулями все элементы матрицы, расположенные ниже главной...

В матрице все отрицательные элементы, стоящие на главной диагонали и ниже ее, заменить нулями
в матрице А(8,8) все отрицательные элементы, стоящие на глав¬ной диагонали и ниже ее, заменить...

Замените элементы стоящие ниже главной диагонали нулями
В массиве R(5x5) замените элементы стоящие ниже главной диагонали нулями. Заранее спс)

Дана матрица А(п*п). Заменить элементы главной диагонали нулями, а элемен-ты, стоящие над главной диагональю - единицами
Дана матрица А(п*п). Заменить элементы главной диагонали нулями, а элемен-ты, стоящие над главной...

7
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
18.03.2017, 09:12 2
Petro29
В программе есть ошибка
1. Строка 6 должна выглядеть так
QBasic/QuickBASIC
1
LOCATE i * 2, j * 4
Предлагаю свое решение. А вы сравните со своим. Так будет лучше.

Вариант 1 (стандартное решение)

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CLS
DIM x(5, 5)
 
FOR i = 1 TO 5
FOR j = 1 TO 5
   x(i, j) = INT(20 * RND(i))
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT: PRINT
 
FOR i = 1 TO 5
FOR j = 1 TO 5
   IF i > j THEN x(i, j) = 0
NEXT j, i
 
FOR i = 1 TO 5
FOR j = 1 TO 5
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT
END
Вариант 2 (нестандартное решение)
Дело в том, что матрица, после ее объявления, по умолчанию
заполнена нулями. Так зачем заполнять нулями элементы,
расположенные ниже диагонали, когда надо просто заполнить
случайными числами элементы, лежащие на диагонали и выше?
Вот код. Решайте сами. Хорош он или нет?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
CLS
DIM x(5, 5)
 
FOR i = 1 TO 5
FOR j = 1 TO 5
   IF i <= j THEN
      x(i, j) = INT(20 * RND(i))
   END IF
   PRINT USING "####"; x(i, j);
NEXT: PRINT
NEXT
END
0
Платежеспособный зверь
8798 / 4225 / 1617
Регистрация: 28.10.2009
Сообщений: 11,364
20.03.2017, 18:19 3
Цитата Сообщение от echs Посмотреть сообщение
матрица, после ее объявления, по умолчанию
заполнена нулями.
Это, увы, не так. Матрица после её объявления по умолчанию заполнена мусором, который вполне может быть нулями, а может быть и нет...
в учебнике об этом говорится следующее:
Если переменной величине не присвоено никакого значения (или не введено), то она является неопределенной. Иначе говоря, ничего нельзя сказать, какое значение имеет эта переменная.
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
20.03.2017, 19:34 4
кот Бегемот
А если после объявления матрицы применить оператор
CLEAR? Этого будет достаточно? Ведь он обнуляет все
переменные (и матрицы в том числе)...
0
Платежеспособный зверь
8798 / 4225 / 1617
Регистрация: 28.10.2009
Сообщений: 11,364
20.03.2017, 19:49 5
Цитата Сообщение от echs Посмотреть сообщение
А если после объявления матрицы применить оператор
CLEAR? Этого будет достаточно? Ведь он обнуляет все
переменные (и матрицы в том числе)...
Да, этого будет достаточно, но всё равно назвать это решением нельзя потому, что не выполнено требование заменить элементы
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
20.03.2017, 20:00 6
кот Бегемот
Я восхищен вашей логикой!!! Действительно, если
нужна ЗАМЕНА, то это должно быть сделано явно.
Но есть одно НО. Если элементы равны, то заменить
один элемент на равный ему другой уже не требует
явных действий... (!!) Или я что-то плохо понимаю в
в элементарной логике?
0
197 / 9 / 3
Регистрация: 30.04.2016
Сообщений: 733
31.03.2017, 20:44  [ТС] 7
К заданию 278 о замене элементов массива ниже главной диагонали нулями.
Ответ получен. Всё получилось.
А вот для общего развития возникли вопросы:
1) Что за две строки «NEXT: PRINT» в 1-м цикле и одна строка в 3-м цикле. Что они означают
и откуда они взялись? (В книге у Тимофеевской про них ничего не обнаружено).
2) С «USINGом» понятно (вы давали про него ответ).
3) А вот с условием «IF i > j THEN X(i, j) = 0 “ пока не понятен смысл этого условия. Как то
пояснить можно это условие.
Ну и последнее: прилагаю отредактированную программу с заменой непонятных двойных
NEXT: PRINT на операторы LOCATE. Получилось (хотя и не сразу).
И удалил END – зачем он, ведь без него программа работает. И удалил 2-й цикл в Вар. 1
(нестандартное решение).
Отредактированная программа:

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CLS
  RANDOIZE TIMER 
DIM X(5, 5)
FOR i = 1 TO 5
  FOR j = 1 TO 5
    LOCATE i * 1, j * 4
      X(i, j) = INT(20 * RND(i))
      PRINT USING “####”; X(i, j)
      IF i > j THEN X(i, j) = 0
   NEXT j, i
FOR i = 1 TO 5
FOR j = 1 TO 5
    LOCATE 6 + 1 * i, 4 * j
    PRINT USING “####”; X(i, j);
NEXT j, i
На выходе:
12 2 15 14 3
13 12 3 18 3
3 8 10 18 15
8 8 14 18 9
7 14 7 16 2

12 2 15 14 3
0 12 3 18 3
0 0 10 18 15
0 0 0 18 9
0 0 0 0 2

Ну как, нормально. C «LOCATEом» стало понятно.
(А поменяв знак > на < , получим нули выше диагонали).
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
01.04.2017, 09:55 8
Ответ на первый вопрос (NEXT: PRINT)
1. В QBasic можно записать в одной строке несколько
операторов. Их надо только разделять двоеточием.
Пример. x = 3: y = 4: z = 5. Число операторов не ограничено
и они могут быть любыми
2. NEXT: PRINT - Эти два оператора записаны в одну строку
можно записать их в две строки
NEXT
PRINT
3. Оператор PRINT в нашем случае ничего не вычисляет и
не печатает. Он переводит запись на следующую строку.
...
Ответ на следующий вопрос (IF i > j THEN X(i, j) = 0 )
1. элементы главной диагонали имеют вид x(i, j)
при i = j
2. для элементов выше главной диагонали должно
выполняться неравенство i < j
3. И наконец для элементов ниже главной диагонали.
(это наш случай) i > j
4. условный оператор как раз и означает, что если i > j
(элемент ниже главной диагонали), то ему присваивается число 0.
...
О вашей программе
1. пишите правильно RANDOMIZE TIMER
2. LOCATE i * 1, j * 4 => LOCATE i, j * 4 (зачем умножать на 1?)
3. применяя LOCATE оператор USING можно не использовать
LOCATE ведь тоже выравнивает запись...
Посмотрите сами!!! и сравните!
...
примечание
Вы начали уже сами разбираться в программах и в QBasic'e
похвально...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2017, 09:55
Помогаю со студенческими работами здесь

Заменить элементы главной диагонали матрицы нулями и найти максимальный элемент ниже побочной диагонали
Есть пример для решения другой задачи(она находит суму всех элементов каждой строки и выводит...

Заменить нулями элементы матрицы лежащие ниже главной диагонали
задана квадратичная матрица порядка N. Требуется заменить нулями элементы матрицы лежащие ниже...

В матрице В все элементы, стоящие ниже главной диагонали заменить на нуль
В матрице В все элементы, стоящие ниже главной диагонали заменить на нуль. Полученную матрицу...

В исходной матрице заменить нулями все элементы, стоящие на главной диагонали и выше нее
В исходной матрице заменить нулями все элементы, стоящие на главной диагонали и выше нее. Массив...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru